react-native-webrtc-kaleidoscope 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1185) hide show
  1. package/NOTICE.md +8 -8
  2. package/README.md +185 -56
  3. package/android/build.gradle +13 -0
  4. package/android/src/main/java/com/simiancraft/kaleidoscope/CompositeLayers.kt +127 -0
  5. package/android/src/main/java/com/simiancraft/kaleidoscope/EffectTuning.kt +69 -69
  6. package/android/src/main/java/com/simiancraft/kaleidoscope/KaleidoscopeModule.kt +86 -33
  7. package/android/src/main/java/com/simiancraft/kaleidoscope/Registration.kt +23 -64
  8. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/CompositeFactory.kt +691 -0
  9. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/LayerShaders.kt +30 -0
  10. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/TransformFactory.kt +248 -200
  11. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Egl.kt +82 -70
  12. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Fbo.kt +50 -47
  13. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/FramePipeline.kt +106 -105
  14. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlDebug.kt +23 -23
  15. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlProgram.kt +76 -57
  16. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Ingest.kt +92 -71
  17. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Orientation.kt +25 -25
  18. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Shaders.kt +57 -76
  19. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/ShadersGenerated.kt +1162 -25
  20. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/Mask.kt +254 -242
  21. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/MaskTuning.kt +28 -25
  22. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/SegmentationEngine.kt +104 -98
  23. package/android/src/test/java/com/simiancraft/kaleidoscope/CompositeLayersTest.kt +165 -0
  24. package/app.plugin.js +9 -255
  25. package/catalog/composites/clouds/clouds.controls.tsx +19 -0
  26. package/catalog/composites/clouds/clouds.ts +32 -0
  27. package/catalog/composites/corporate-blobs/corporate-blobs.controls.tsx +24 -0
  28. package/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
  29. package/catalog/composites/corporate-blobs/corporate-blobs.ts +51 -0
  30. package/catalog/composites/corporate-blobs/corporate-blobs.web.ts +42 -0
  31. package/catalog/composites/fairy-cave/fairy-cave.controls.tsx +33 -0
  32. package/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
  33. package/catalog/composites/fairy-cave/fairy-cave.ts +53 -0
  34. package/catalog/composites/fairy-cave/fairy-cave.web.ts +47 -0
  35. package/catalog/composites/fairy-grotto/fairy-grotto.controls.tsx +34 -0
  36. package/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
  37. package/catalog/composites/fairy-grotto/fairy-grotto.ts +54 -0
  38. package/catalog/composites/fairy-grotto/fairy-grotto.web.ts +47 -0
  39. package/catalog/composites/fairy-hollow/fairy-hollow.controls.tsx +34 -0
  40. package/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
  41. package/catalog/composites/fairy-hollow/fairy-hollow.ts +55 -0
  42. package/catalog/composites/fairy-hollow/fairy-hollow.web.ts +47 -0
  43. package/catalog/composites/nebula/nebula.controls.tsx +19 -0
  44. package/catalog/composites/nebula/nebula.thumb.webp +0 -0
  45. package/catalog/composites/nebula/nebula.ts +37 -0
  46. package/catalog/composites/nebula/nebula.web.ts +30 -0
  47. package/catalog/composites/observation-deck/observation-deck.controls.tsx +28 -0
  48. package/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
  49. package/catalog/composites/observation-deck/observation-deck.ts +59 -0
  50. package/catalog/composites/observation-deck/observation-deck.web.ts +50 -0
  51. package/catalog/composites/simianlights/simianlights.controls.tsx +19 -0
  52. package/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
  53. package/catalog/composites/simianlights/simianlights.ts +34 -0
  54. package/catalog/composites/simianlights/simianlights.web.ts +29 -0
  55. package/catalog/composites/underwater/underwater.controls.tsx +19 -0
  56. package/catalog/composites/underwater/underwater.thumb.webp +0 -0
  57. package/catalog/composites/underwater/underwater.ts +42 -0
  58. package/catalog/composites/underwater/underwater.web.ts +36 -0
  59. package/catalog/composites/wizard-tower/wizard-tower.controls.tsx +23 -0
  60. package/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
  61. package/catalog/composites/wizard-tower/wizard-tower.ts +44 -0
  62. package/catalog/composites/wizard-tower/wizard-tower.web.ts +35 -0
  63. package/catalog/composites/wizard-tower-night/wizard-tower-night.controls.tsx +22 -0
  64. package/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
  65. package/catalog/composites/wizard-tower-night/wizard-tower-night.ts +43 -0
  66. package/catalog/composites/wizard-tower-night/wizard-tower-night.web.ts +35 -0
  67. package/catalog/images/README.md +188 -0
  68. package/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
  69. package/catalog/images/corporate/corporate-logo.ts +6 -0
  70. package/catalog/images/corporate/corporate-logo.web.ts +7 -0
  71. package/catalog/images/corporate/corporate-logo.webp +0 -0
  72. package/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
  73. package/catalog/images/debug/debug-resolutions.ts +6 -0
  74. package/catalog/images/debug/debug-resolutions.web.ts +7 -0
  75. package/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
  76. package/catalog/images/fairy-caves/grotto.ts +6 -0
  77. package/catalog/images/fairy-caves/grotto.web.ts +7 -0
  78. package/catalog/images/fairy-caves/grotto.webp +0 -0
  79. package/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
  80. package/catalog/images/fairy-caves/hollow.ts +6 -0
  81. package/catalog/images/fairy-caves/hollow.web.ts +7 -0
  82. package/catalog/images/fairy-caves/hollow.webp +0 -0
  83. package/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
  84. package/catalog/images/fairy-caves/treehouse-2.ts +6 -0
  85. package/catalog/images/fairy-caves/treehouse-2.web.ts +7 -0
  86. package/catalog/images/fairy-caves/treehouse-2.webp +0 -0
  87. package/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
  88. package/catalog/images/fairy-caves/treehouse-3.ts +6 -0
  89. package/catalog/images/fairy-caves/treehouse-3.web.ts +7 -0
  90. package/catalog/images/fairy-caves/treehouse-3.webp +0 -0
  91. package/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
  92. package/catalog/images/fairy-caves/treehouse.ts +6 -0
  93. package/catalog/images/fairy-caves/treehouse.web.ts +7 -0
  94. package/catalog/images/fairy-caves/treehouse.webp +0 -0
  95. package/catalog/images/home/home-dark.thumb.webp +0 -0
  96. package/catalog/images/home/home-dark.ts +6 -0
  97. package/catalog/images/home/home-dark.web.ts +7 -0
  98. package/catalog/images/home/home-light.thumb.webp +0 -0
  99. package/catalog/images/home/home-light.ts +6 -0
  100. package/catalog/images/home/home-light.web.ts +7 -0
  101. package/catalog/images/image-ids.ts +42 -0
  102. package/catalog/images/image.types.ts +5 -0
  103. package/catalog/images/index.ts +7 -0
  104. package/catalog/images/nature/landscape-dark.thumb.webp +0 -0
  105. package/catalog/images/nature/landscape-dark.ts +6 -0
  106. package/catalog/images/nature/landscape-dark.web.ts +7 -0
  107. package/catalog/images/nature/landscape-light.thumb.webp +0 -0
  108. package/catalog/images/nature/landscape-light.ts +6 -0
  109. package/catalog/images/nature/landscape-light.web.ts +7 -0
  110. package/catalog/images/office/office-dark.thumb.webp +0 -0
  111. package/catalog/images/office/office-dark.ts +6 -0
  112. package/catalog/images/office/office-dark.web.ts +7 -0
  113. package/catalog/images/office/office-light.thumb.webp +0 -0
  114. package/catalog/images/office/office-light.ts +6 -0
  115. package/catalog/images/office/office-light.web.ts +7 -0
  116. package/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
  117. package/catalog/images/sci-fi/sci-fi-light.ts +6 -0
  118. package/catalog/images/sci-fi/sci-fi-light.web.ts +7 -0
  119. package/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
  120. package/catalog/images/simiancraft/simiancraft-dark-transparency.ts +6 -0
  121. package/catalog/images/simiancraft/simiancraft-dark-transparency.web.ts +9 -0
  122. package/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
  123. package/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
  124. package/catalog/images/simiancraft/simiancraft-dark.ts +6 -0
  125. package/catalog/images/simiancraft/simiancraft-dark.web.ts +7 -0
  126. package/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
  127. package/catalog/images/simiancraft/simiancraft-light-transparency.ts +6 -0
  128. package/catalog/images/simiancraft/simiancraft-light-transparency.web.ts +9 -0
  129. package/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
  130. package/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
  131. package/catalog/images/simiancraft/simiancraft-light.ts +6 -0
  132. package/catalog/images/simiancraft/simiancraft-light.web.ts +7 -0
  133. package/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
  134. package/catalog/images/spaceship/observation-deck.ts +6 -0
  135. package/catalog/images/spaceship/observation-deck.web.ts +7 -0
  136. package/catalog/images/spaceship/observation-deck.webp +0 -0
  137. package/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
  138. package/catalog/images/underwater/oceanscape-dark.ts +6 -0
  139. package/catalog/images/underwater/oceanscape-dark.web.ts +7 -0
  140. package/catalog/images/underwater/oceanscape-dark.webp +0 -0
  141. package/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
  142. package/catalog/images/wizard-tower/wizard-tower-1.ts +6 -0
  143. package/catalog/images/wizard-tower/wizard-tower-1.web.ts +7 -0
  144. package/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
  145. package/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
  146. package/catalog/images/wizard-tower/wizard-tower-2.ts +6 -0
  147. package/catalog/images/wizard-tower/wizard-tower-2.web.ts +7 -0
  148. package/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
  149. package/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
  150. package/catalog/images/wizard-tower/wizard-tower-night.ts +6 -0
  151. package/catalog/images/wizard-tower/wizard-tower-night.web.ts +7 -0
  152. package/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
  153. package/catalog/shaders/README.md +114 -0
  154. package/catalog/shaders/_shared/composite-blit.frag +26 -0
  155. package/catalog/shaders/_shared/composite-camera.frag +17 -0
  156. package/catalog/shaders/_shared/composite-image.frag +23 -0
  157. package/catalog/shaders/_shared/composite-masked.frag +26 -0
  158. package/catalog/shaders/_shared/composite-subject.frag +27 -0
  159. package/catalog/shaders/_shared/passthrough.vert +27 -0
  160. package/catalog/shaders/_shared/transform.frag +27 -0
  161. package/catalog/shaders/_shared/types.ts +63 -0
  162. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.tsx +37 -0
  163. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.frag +123 -0
  164. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts +106 -0
  165. package/catalog/shaders/blur/blur.form.tsx +29 -0
  166. package/catalog/shaders/blur/blur.ts +32 -0
  167. package/catalog/shaders/blur/composite-blur.frag +42 -0
  168. package/catalog/shaders/clouds/clouds.form.tsx +39 -0
  169. package/catalog/shaders/clouds/clouds.frag +128 -0
  170. package/catalog/shaders/clouds/clouds.presets.md +37 -0
  171. package/catalog/shaders/clouds/clouds.ts +124 -0
  172. package/catalog/shaders/corporate-blobs/corporate-blobs.form.tsx +44 -0
  173. package/catalog/shaders/corporate-blobs/corporate-blobs.frag +224 -0
  174. package/catalog/shaders/corporate-blobs/corporate-blobs.ts +136 -0
  175. package/catalog/shaders/fireflies/fireflies.form.tsx +33 -0
  176. package/catalog/shaders/fireflies/fireflies.frag +68 -0
  177. package/catalog/shaders/fireflies/fireflies.ts +61 -0
  178. package/catalog/shaders/godrays/godrays.form.tsx +37 -0
  179. package/catalog/shaders/godrays/godrays.frag +85 -0
  180. package/catalog/shaders/godrays/godrays.ts +105 -0
  181. package/catalog/shaders/index.ts +78 -0
  182. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.tsx +55 -0
  183. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.frag +262 -0
  184. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts +137 -0
  185. package/catalog/shaders/nebula/nebula.form.tsx +34 -0
  186. package/catalog/shaders/nebula/nebula.frag +151 -0
  187. package/catalog/shaders/nebula/nebula.ts +74 -0
  188. package/catalog/shaders/plasma/plasma.form.tsx +32 -0
  189. package/catalog/shaders/plasma/plasma.frag +55 -0
  190. package/catalog/shaders/plasma/plasma.ts +44 -0
  191. package/catalog/shaders/simianlights/simianlights.form.tsx +34 -0
  192. package/catalog/shaders/simianlights/simianlights.frag +151 -0
  193. package/catalog/shaders/simianlights/simianlights.ts +73 -0
  194. package/dist/catalog/composites/clouds/clouds.controls.d.ts +3 -0
  195. package/dist/catalog/composites/clouds/clouds.controls.d.ts.map +1 -0
  196. package/dist/catalog/composites/clouds/clouds.controls.js +11 -0
  197. package/dist/catalog/composites/clouds/clouds.controls.js.map +1 -0
  198. package/dist/catalog/composites/clouds/clouds.d.ts +26 -0
  199. package/dist/catalog/composites/clouds/clouds.d.ts.map +1 -0
  200. package/dist/catalog/composites/clouds/clouds.js +33 -0
  201. package/dist/catalog/composites/clouds/clouds.js.map +1 -0
  202. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts +3 -0
  203. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts.map +1 -0
  204. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js +13 -0
  205. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js.map +1 -0
  206. package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts +37 -0
  207. package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts.map +1 -0
  208. package/dist/catalog/composites/corporate-blobs/corporate-blobs.js +52 -0
  209. package/dist/catalog/composites/corporate-blobs/corporate-blobs.js.map +1 -0
  210. package/dist/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
  211. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts +37 -0
  212. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts.map +1 -0
  213. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js +46 -0
  214. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js.map +1 -0
  215. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts +3 -0
  216. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts.map +1 -0
  217. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js +13 -0
  218. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js.map +1 -0
  219. package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts +42 -0
  220. package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts.map +1 -0
  221. package/dist/catalog/composites/fairy-cave/fairy-cave.js +54 -0
  222. package/dist/catalog/composites/fairy-cave/fairy-cave.js.map +1 -0
  223. package/dist/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
  224. package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts +42 -0
  225. package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts.map +1 -0
  226. package/dist/catalog/composites/fairy-cave/fairy-cave.web.js +51 -0
  227. package/dist/catalog/composites/fairy-cave/fairy-cave.web.js.map +1 -0
  228. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts +3 -0
  229. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts.map +1 -0
  230. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js +14 -0
  231. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js.map +1 -0
  232. package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts +42 -0
  233. package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts.map +1 -0
  234. package/dist/catalog/composites/fairy-grotto/fairy-grotto.js +55 -0
  235. package/dist/catalog/composites/fairy-grotto/fairy-grotto.js.map +1 -0
  236. package/dist/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
  237. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts +42 -0
  238. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts.map +1 -0
  239. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js +51 -0
  240. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js.map +1 -0
  241. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts +3 -0
  242. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts.map +1 -0
  243. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js +14 -0
  244. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js.map +1 -0
  245. package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts +42 -0
  246. package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts.map +1 -0
  247. package/dist/catalog/composites/fairy-hollow/fairy-hollow.js +56 -0
  248. package/dist/catalog/composites/fairy-hollow/fairy-hollow.js.map +1 -0
  249. package/dist/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
  250. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts +42 -0
  251. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts.map +1 -0
  252. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js +51 -0
  253. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js.map +1 -0
  254. package/dist/catalog/composites/nebula/nebula.controls.d.ts +3 -0
  255. package/dist/catalog/composites/nebula/nebula.controls.d.ts.map +1 -0
  256. package/dist/catalog/composites/nebula/nebula.controls.js +11 -0
  257. package/dist/catalog/composites/nebula/nebula.controls.js.map +1 -0
  258. package/dist/catalog/composites/nebula/nebula.d.ts +22 -0
  259. package/dist/catalog/composites/nebula/nebula.d.ts.map +1 -0
  260. package/dist/catalog/composites/nebula/nebula.js +38 -0
  261. package/dist/catalog/composites/nebula/nebula.js.map +1 -0
  262. package/dist/catalog/composites/nebula/nebula.thumb.webp +0 -0
  263. package/dist/catalog/composites/nebula/nebula.web.d.ts +22 -0
  264. package/dist/catalog/composites/nebula/nebula.web.d.ts.map +1 -0
  265. package/dist/catalog/composites/nebula/nebula.web.js +34 -0
  266. package/dist/catalog/composites/nebula/nebula.web.js.map +1 -0
  267. package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts +3 -0
  268. package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts.map +1 -0
  269. package/dist/catalog/composites/observation-deck/observation-deck.controls.js +13 -0
  270. package/dist/catalog/composites/observation-deck/observation-deck.controls.js.map +1 -0
  271. package/dist/catalog/composites/observation-deck/observation-deck.d.ts +41 -0
  272. package/dist/catalog/composites/observation-deck/observation-deck.d.ts.map +1 -0
  273. package/dist/catalog/composites/observation-deck/observation-deck.js +60 -0
  274. package/dist/catalog/composites/observation-deck/observation-deck.js.map +1 -0
  275. package/dist/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
  276. package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts +41 -0
  277. package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts.map +1 -0
  278. package/dist/catalog/composites/observation-deck/observation-deck.web.js +54 -0
  279. package/dist/catalog/composites/observation-deck/observation-deck.web.js.map +1 -0
  280. package/dist/catalog/composites/simianlights/simianlights.controls.d.ts +3 -0
  281. package/dist/catalog/composites/simianlights/simianlights.controls.d.ts.map +1 -0
  282. package/dist/catalog/composites/simianlights/simianlights.controls.js +11 -0
  283. package/dist/catalog/composites/simianlights/simianlights.controls.js.map +1 -0
  284. package/dist/catalog/composites/simianlights/simianlights.d.ts +22 -0
  285. package/dist/catalog/composites/simianlights/simianlights.d.ts.map +1 -0
  286. package/dist/catalog/composites/simianlights/simianlights.js +30 -0
  287. package/dist/catalog/composites/simianlights/simianlights.js.map +1 -0
  288. package/dist/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
  289. package/dist/catalog/composites/simianlights/simianlights.web.d.ts +22 -0
  290. package/dist/catalog/composites/simianlights/simianlights.web.d.ts.map +1 -0
  291. package/dist/catalog/composites/simianlights/simianlights.web.js +33 -0
  292. package/dist/catalog/composites/simianlights/simianlights.web.js.map +1 -0
  293. package/dist/catalog/composites/underwater/underwater.controls.d.ts +3 -0
  294. package/dist/catalog/composites/underwater/underwater.controls.d.ts.map +1 -0
  295. package/dist/catalog/composites/underwater/underwater.controls.js +11 -0
  296. package/dist/catalog/composites/underwater/underwater.controls.js.map +1 -0
  297. package/dist/catalog/composites/underwater/underwater.d.ts +30 -0
  298. package/dist/catalog/composites/underwater/underwater.d.ts.map +1 -0
  299. package/dist/catalog/composites/underwater/underwater.js +43 -0
  300. package/dist/catalog/composites/underwater/underwater.js.map +1 -0
  301. package/dist/catalog/composites/underwater/underwater.thumb.webp +0 -0
  302. package/dist/catalog/composites/underwater/underwater.web.d.ts +30 -0
  303. package/dist/catalog/composites/underwater/underwater.web.d.ts.map +1 -0
  304. package/dist/catalog/composites/underwater/underwater.web.js +40 -0
  305. package/dist/catalog/composites/underwater/underwater.web.js.map +1 -0
  306. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts +3 -0
  307. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts.map +1 -0
  308. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js +15 -0
  309. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js.map +1 -0
  310. package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts +31 -0
  311. package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts.map +1 -0
  312. package/dist/catalog/composites/wizard-tower/wizard-tower.js +45 -0
  313. package/dist/catalog/composites/wizard-tower/wizard-tower.js.map +1 -0
  314. package/dist/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
  315. package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts +31 -0
  316. package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts.map +1 -0
  317. package/dist/catalog/composites/wizard-tower/wizard-tower.web.js +39 -0
  318. package/dist/catalog/composites/wizard-tower/wizard-tower.web.js.map +1 -0
  319. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts +3 -0
  320. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts.map +1 -0
  321. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js +14 -0
  322. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js.map +1 -0
  323. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts +31 -0
  324. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts.map +1 -0
  325. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js +44 -0
  326. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js.map +1 -0
  327. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
  328. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts +31 -0
  329. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts.map +1 -0
  330. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js +39 -0
  331. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js.map +1 -0
  332. package/dist/catalog/images/corporate/corporate-logo.d.ts +3 -0
  333. package/dist/catalog/images/corporate/corporate-logo.d.ts.map +1 -0
  334. package/dist/catalog/images/corporate/corporate-logo.js +8 -0
  335. package/dist/catalog/images/corporate/corporate-logo.js.map +1 -0
  336. package/dist/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
  337. package/dist/catalog/images/corporate/corporate-logo.web.d.ts +3 -0
  338. package/dist/catalog/images/corporate/corporate-logo.web.d.ts.map +1 -0
  339. package/dist/catalog/images/corporate/corporate-logo.web.js +12 -0
  340. package/dist/catalog/images/corporate/corporate-logo.web.js.map +1 -0
  341. package/dist/catalog/images/corporate/corporate-logo.webp +0 -0
  342. package/dist/catalog/images/debug/debug-resolutions.d.ts +3 -0
  343. package/dist/catalog/images/debug/debug-resolutions.d.ts.map +1 -0
  344. package/dist/catalog/images/debug/debug-resolutions.js +8 -0
  345. package/dist/catalog/images/debug/debug-resolutions.js.map +1 -0
  346. package/dist/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
  347. package/dist/catalog/images/debug/debug-resolutions.web.d.ts +3 -0
  348. package/dist/catalog/images/debug/debug-resolutions.web.d.ts.map +1 -0
  349. package/dist/catalog/images/debug/debug-resolutions.web.js +12 -0
  350. package/dist/catalog/images/debug/debug-resolutions.web.js.map +1 -0
  351. package/dist/catalog/images/fairy-caves/grotto.d.ts +3 -0
  352. package/dist/catalog/images/fairy-caves/grotto.d.ts.map +1 -0
  353. package/dist/catalog/images/fairy-caves/grotto.js +8 -0
  354. package/dist/catalog/images/fairy-caves/grotto.js.map +1 -0
  355. package/dist/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
  356. package/dist/catalog/images/fairy-caves/grotto.web.d.ts +3 -0
  357. package/dist/catalog/images/fairy-caves/grotto.web.d.ts.map +1 -0
  358. package/dist/catalog/images/fairy-caves/grotto.web.js +12 -0
  359. package/dist/catalog/images/fairy-caves/grotto.web.js.map +1 -0
  360. package/dist/catalog/images/fairy-caves/grotto.webp +0 -0
  361. package/dist/catalog/images/fairy-caves/hollow.d.ts +3 -0
  362. package/dist/catalog/images/fairy-caves/hollow.d.ts.map +1 -0
  363. package/dist/catalog/images/fairy-caves/hollow.js +8 -0
  364. package/dist/catalog/images/fairy-caves/hollow.js.map +1 -0
  365. package/dist/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
  366. package/dist/catalog/images/fairy-caves/hollow.web.d.ts +3 -0
  367. package/dist/catalog/images/fairy-caves/hollow.web.d.ts.map +1 -0
  368. package/dist/catalog/images/fairy-caves/hollow.web.js +12 -0
  369. package/dist/catalog/images/fairy-caves/hollow.web.js.map +1 -0
  370. package/dist/catalog/images/fairy-caves/hollow.webp +0 -0
  371. package/dist/catalog/images/fairy-caves/treehouse-2.d.ts +3 -0
  372. package/dist/catalog/images/fairy-caves/treehouse-2.d.ts.map +1 -0
  373. package/dist/catalog/images/fairy-caves/treehouse-2.js +8 -0
  374. package/dist/catalog/images/fairy-caves/treehouse-2.js.map +1 -0
  375. package/dist/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
  376. package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts +3 -0
  377. package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts.map +1 -0
  378. package/dist/catalog/images/fairy-caves/treehouse-2.web.js +12 -0
  379. package/dist/catalog/images/fairy-caves/treehouse-2.web.js.map +1 -0
  380. package/dist/catalog/images/fairy-caves/treehouse-2.webp +0 -0
  381. package/dist/catalog/images/fairy-caves/treehouse-3.d.ts +3 -0
  382. package/dist/catalog/images/fairy-caves/treehouse-3.d.ts.map +1 -0
  383. package/dist/catalog/images/fairy-caves/treehouse-3.js +8 -0
  384. package/dist/catalog/images/fairy-caves/treehouse-3.js.map +1 -0
  385. package/dist/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
  386. package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts +3 -0
  387. package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts.map +1 -0
  388. package/dist/catalog/images/fairy-caves/treehouse-3.web.js +12 -0
  389. package/dist/catalog/images/fairy-caves/treehouse-3.web.js.map +1 -0
  390. package/dist/catalog/images/fairy-caves/treehouse-3.webp +0 -0
  391. package/dist/catalog/images/fairy-caves/treehouse.d.ts +3 -0
  392. package/dist/catalog/images/fairy-caves/treehouse.d.ts.map +1 -0
  393. package/dist/catalog/images/fairy-caves/treehouse.js +8 -0
  394. package/dist/catalog/images/fairy-caves/treehouse.js.map +1 -0
  395. package/dist/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
  396. package/dist/catalog/images/fairy-caves/treehouse.web.d.ts +3 -0
  397. package/dist/catalog/images/fairy-caves/treehouse.web.d.ts.map +1 -0
  398. package/dist/catalog/images/fairy-caves/treehouse.web.js +12 -0
  399. package/dist/catalog/images/fairy-caves/treehouse.web.js.map +1 -0
  400. package/dist/catalog/images/fairy-caves/treehouse.webp +0 -0
  401. package/dist/catalog/images/home/home-dark.d.ts +3 -0
  402. package/dist/catalog/images/home/home-dark.d.ts.map +1 -0
  403. package/dist/catalog/images/home/home-dark.js +8 -0
  404. package/dist/catalog/images/home/home-dark.js.map +1 -0
  405. package/dist/catalog/images/home/home-dark.thumb.webp +0 -0
  406. package/dist/catalog/images/home/home-dark.web.d.ts +3 -0
  407. package/dist/catalog/images/home/home-dark.web.d.ts.map +1 -0
  408. package/dist/catalog/images/home/home-dark.web.js +12 -0
  409. package/dist/catalog/images/home/home-dark.web.js.map +1 -0
  410. package/dist/catalog/images/home/home-light.d.ts +3 -0
  411. package/dist/catalog/images/home/home-light.d.ts.map +1 -0
  412. package/dist/catalog/images/home/home-light.js +8 -0
  413. package/dist/catalog/images/home/home-light.js.map +1 -0
  414. package/dist/catalog/images/home/home-light.thumb.webp +0 -0
  415. package/dist/catalog/images/home/home-light.web.d.ts +3 -0
  416. package/dist/catalog/images/home/home-light.web.d.ts.map +1 -0
  417. package/dist/catalog/images/home/home-light.web.js +12 -0
  418. package/dist/catalog/images/home/home-light.web.js.map +1 -0
  419. package/dist/catalog/images/image-ids.d.ts +3 -0
  420. package/dist/catalog/images/image-ids.d.ts.map +1 -0
  421. package/dist/catalog/images/image-ids.js +43 -0
  422. package/dist/catalog/images/image-ids.js.map +1 -0
  423. package/dist/catalog/images/image.types.d.ts +2 -0
  424. package/dist/catalog/images/image.types.d.ts.map +1 -0
  425. package/dist/catalog/images/image.types.js +3 -0
  426. package/dist/catalog/images/image.types.js.map +1 -0
  427. package/dist/catalog/images/index.d.ts +3 -0
  428. package/dist/catalog/images/index.d.ts.map +1 -0
  429. package/dist/catalog/images/index.js +10 -0
  430. package/dist/catalog/images/index.js.map +1 -0
  431. package/dist/catalog/images/nature/landscape-dark.d.ts +3 -0
  432. package/dist/catalog/images/nature/landscape-dark.d.ts.map +1 -0
  433. package/dist/catalog/images/nature/landscape-dark.js +8 -0
  434. package/dist/catalog/images/nature/landscape-dark.js.map +1 -0
  435. package/dist/catalog/images/nature/landscape-dark.thumb.webp +0 -0
  436. package/dist/catalog/images/nature/landscape-dark.web.d.ts +3 -0
  437. package/dist/catalog/images/nature/landscape-dark.web.d.ts.map +1 -0
  438. package/dist/catalog/images/nature/landscape-dark.web.js +12 -0
  439. package/dist/catalog/images/nature/landscape-dark.web.js.map +1 -0
  440. package/dist/catalog/images/nature/landscape-light.d.ts +3 -0
  441. package/dist/catalog/images/nature/landscape-light.d.ts.map +1 -0
  442. package/dist/catalog/images/nature/landscape-light.js +8 -0
  443. package/dist/catalog/images/nature/landscape-light.js.map +1 -0
  444. package/dist/catalog/images/nature/landscape-light.thumb.webp +0 -0
  445. package/dist/catalog/images/nature/landscape-light.web.d.ts +3 -0
  446. package/dist/catalog/images/nature/landscape-light.web.d.ts.map +1 -0
  447. package/dist/catalog/images/nature/landscape-light.web.js +12 -0
  448. package/dist/catalog/images/nature/landscape-light.web.js.map +1 -0
  449. package/dist/catalog/images/office/office-dark.d.ts +3 -0
  450. package/dist/catalog/images/office/office-dark.d.ts.map +1 -0
  451. package/dist/catalog/images/office/office-dark.js +8 -0
  452. package/dist/catalog/images/office/office-dark.js.map +1 -0
  453. package/dist/catalog/images/office/office-dark.thumb.webp +0 -0
  454. package/dist/catalog/images/office/office-dark.web.d.ts +3 -0
  455. package/dist/catalog/images/office/office-dark.web.d.ts.map +1 -0
  456. package/dist/catalog/images/office/office-dark.web.js +12 -0
  457. package/dist/catalog/images/office/office-dark.web.js.map +1 -0
  458. package/dist/catalog/images/office/office-light.d.ts +3 -0
  459. package/dist/catalog/images/office/office-light.d.ts.map +1 -0
  460. package/dist/catalog/images/office/office-light.js +8 -0
  461. package/dist/catalog/images/office/office-light.js.map +1 -0
  462. package/dist/catalog/images/office/office-light.thumb.webp +0 -0
  463. package/dist/catalog/images/office/office-light.web.d.ts +3 -0
  464. package/dist/catalog/images/office/office-light.web.d.ts.map +1 -0
  465. package/dist/catalog/images/office/office-light.web.js +12 -0
  466. package/dist/catalog/images/office/office-light.web.js.map +1 -0
  467. package/dist/catalog/images/sci-fi/sci-fi-light.d.ts +3 -0
  468. package/dist/catalog/images/sci-fi/sci-fi-light.d.ts.map +1 -0
  469. package/dist/catalog/images/sci-fi/sci-fi-light.js +8 -0
  470. package/dist/catalog/images/sci-fi/sci-fi-light.js.map +1 -0
  471. package/dist/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
  472. package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts +3 -0
  473. package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts.map +1 -0
  474. package/dist/catalog/images/sci-fi/sci-fi-light.web.js +12 -0
  475. package/dist/catalog/images/sci-fi/sci-fi-light.web.js.map +1 -0
  476. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts +3 -0
  477. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts.map +1 -0
  478. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js +8 -0
  479. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js.map +1 -0
  480. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
  481. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts +3 -0
  482. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts.map +1 -0
  483. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js +12 -0
  484. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js.map +1 -0
  485. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
  486. package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts +3 -0
  487. package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts.map +1 -0
  488. package/dist/catalog/images/simiancraft/simiancraft-dark.js +8 -0
  489. package/dist/catalog/images/simiancraft/simiancraft-dark.js.map +1 -0
  490. package/dist/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
  491. package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts +3 -0
  492. package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts.map +1 -0
  493. package/dist/catalog/images/simiancraft/simiancraft-dark.web.js +12 -0
  494. package/dist/catalog/images/simiancraft/simiancraft-dark.web.js.map +1 -0
  495. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts +3 -0
  496. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts.map +1 -0
  497. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js +8 -0
  498. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js.map +1 -0
  499. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
  500. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts +3 -0
  501. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts.map +1 -0
  502. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js +12 -0
  503. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js.map +1 -0
  504. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
  505. package/dist/catalog/images/simiancraft/simiancraft-light.d.ts +3 -0
  506. package/dist/catalog/images/simiancraft/simiancraft-light.d.ts.map +1 -0
  507. package/dist/catalog/images/simiancraft/simiancraft-light.js +8 -0
  508. package/dist/catalog/images/simiancraft/simiancraft-light.js.map +1 -0
  509. package/dist/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
  510. package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts +3 -0
  511. package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts.map +1 -0
  512. package/dist/catalog/images/simiancraft/simiancraft-light.web.js +12 -0
  513. package/dist/catalog/images/simiancraft/simiancraft-light.web.js.map +1 -0
  514. package/dist/catalog/images/spaceship/observation-deck.d.ts +3 -0
  515. package/dist/catalog/images/spaceship/observation-deck.d.ts.map +1 -0
  516. package/dist/catalog/images/spaceship/observation-deck.js +8 -0
  517. package/dist/catalog/images/spaceship/observation-deck.js.map +1 -0
  518. package/dist/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
  519. package/dist/catalog/images/spaceship/observation-deck.web.d.ts +3 -0
  520. package/dist/catalog/images/spaceship/observation-deck.web.d.ts.map +1 -0
  521. package/dist/catalog/images/spaceship/observation-deck.web.js +12 -0
  522. package/dist/catalog/images/spaceship/observation-deck.web.js.map +1 -0
  523. package/dist/catalog/images/spaceship/observation-deck.webp +0 -0
  524. package/dist/catalog/images/underwater/oceanscape-dark.d.ts +3 -0
  525. package/dist/catalog/images/underwater/oceanscape-dark.d.ts.map +1 -0
  526. package/dist/catalog/images/underwater/oceanscape-dark.js +8 -0
  527. package/dist/catalog/images/underwater/oceanscape-dark.js.map +1 -0
  528. package/dist/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
  529. package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts +3 -0
  530. package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts.map +1 -0
  531. package/dist/catalog/images/underwater/oceanscape-dark.web.js +12 -0
  532. package/dist/catalog/images/underwater/oceanscape-dark.web.js.map +1 -0
  533. package/dist/catalog/images/underwater/oceanscape-dark.webp +0 -0
  534. package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts +3 -0
  535. package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts.map +1 -0
  536. package/dist/catalog/images/wizard-tower/wizard-tower-1.js +8 -0
  537. package/dist/catalog/images/wizard-tower/wizard-tower-1.js.map +1 -0
  538. package/dist/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
  539. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts +3 -0
  540. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts.map +1 -0
  541. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js +12 -0
  542. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js.map +1 -0
  543. package/dist/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
  544. package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts +3 -0
  545. package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts.map +1 -0
  546. package/dist/catalog/images/wizard-tower/wizard-tower-2.js +8 -0
  547. package/dist/catalog/images/wizard-tower/wizard-tower-2.js.map +1 -0
  548. package/dist/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
  549. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts +3 -0
  550. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts.map +1 -0
  551. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js +12 -0
  552. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js.map +1 -0
  553. package/dist/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
  554. package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts +3 -0
  555. package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts.map +1 -0
  556. package/dist/catalog/images/wizard-tower/wizard-tower-night.js +8 -0
  557. package/dist/catalog/images/wizard-tower/wizard-tower-night.js.map +1 -0
  558. package/dist/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
  559. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts +3 -0
  560. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts.map +1 -0
  561. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js +12 -0
  562. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js.map +1 -0
  563. package/dist/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
  564. package/dist/catalog/shaders/_shared/types.d.ts +38 -0
  565. package/dist/catalog/shaders/_shared/types.d.ts.map +1 -0
  566. package/dist/catalog/shaders/_shared/types.js +15 -0
  567. package/dist/catalog/shaders/_shared/types.js.map +1 -0
  568. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts +26 -0
  569. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts.map +1 -0
  570. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts +3 -0
  571. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts.map +1 -0
  572. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js +15 -0
  573. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js.map +1 -0
  574. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js +84 -0
  575. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js.map +1 -0
  576. package/dist/catalog/shaders/blur/blur.d.ts +15 -0
  577. package/dist/catalog/shaders/blur/blur.d.ts.map +1 -0
  578. package/dist/catalog/shaders/blur/blur.form.d.ts +3 -0
  579. package/dist/catalog/shaders/blur/blur.form.d.ts.map +1 -0
  580. package/dist/catalog/shaders/blur/blur.form.js +15 -0
  581. package/dist/catalog/shaders/blur/blur.form.js.map +1 -0
  582. package/dist/catalog/shaders/blur/blur.js +27 -0
  583. package/dist/catalog/shaders/blur/blur.js.map +1 -0
  584. package/dist/catalog/shaders/clouds/clouds.d.ts +34 -0
  585. package/dist/catalog/shaders/clouds/clouds.d.ts.map +1 -0
  586. package/dist/catalog/shaders/clouds/clouds.form.d.ts +3 -0
  587. package/dist/catalog/shaders/clouds/clouds.form.d.ts.map +1 -0
  588. package/dist/catalog/shaders/clouds/clouds.form.js +15 -0
  589. package/dist/catalog/shaders/clouds/clouds.form.js.map +1 -0
  590. package/dist/catalog/shaders/clouds/clouds.js +98 -0
  591. package/dist/catalog/shaders/clouds/clouds.js.map +1 -0
  592. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts +40 -0
  593. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts.map +1 -0
  594. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts +3 -0
  595. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts.map +1 -0
  596. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js +15 -0
  597. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js.map +1 -0
  598. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js +100 -0
  599. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js.map +1 -0
  600. package/dist/catalog/shaders/fireflies/fireflies.d.ts +18 -0
  601. package/dist/catalog/shaders/fireflies/fireflies.d.ts.map +1 -0
  602. package/dist/catalog/shaders/fireflies/fireflies.form.d.ts +3 -0
  603. package/dist/catalog/shaders/fireflies/fireflies.form.d.ts.map +1 -0
  604. package/dist/catalog/shaders/fireflies/fireflies.form.js +15 -0
  605. package/dist/catalog/shaders/fireflies/fireflies.form.js.map +1 -0
  606. package/dist/catalog/shaders/fireflies/fireflies.js +47 -0
  607. package/dist/catalog/shaders/fireflies/fireflies.js.map +1 -0
  608. package/dist/catalog/shaders/godrays/godrays.d.ts +26 -0
  609. package/dist/catalog/shaders/godrays/godrays.d.ts.map +1 -0
  610. package/dist/catalog/shaders/godrays/godrays.form.d.ts +3 -0
  611. package/dist/catalog/shaders/godrays/godrays.form.d.ts.map +1 -0
  612. package/dist/catalog/shaders/godrays/godrays.form.js +15 -0
  613. package/dist/catalog/shaders/godrays/godrays.form.js.map +1 -0
  614. package/dist/catalog/shaders/godrays/godrays.js +83 -0
  615. package/dist/catalog/shaders/godrays/godrays.js.map +1 -0
  616. package/dist/catalog/shaders/index.d.ts +73 -0
  617. package/dist/catalog/shaders/index.d.ts.map +1 -0
  618. package/dist/catalog/shaders/index.js +30 -0
  619. package/dist/catalog/shaders/index.js.map +1 -0
  620. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts +44 -0
  621. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts.map +1 -0
  622. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts +3 -0
  623. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts.map +1 -0
  624. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js +16 -0
  625. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js.map +1 -0
  626. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js +91 -0
  627. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js.map +1 -0
  628. package/dist/catalog/shaders/nebula/nebula.d.ts +20 -0
  629. package/dist/catalog/shaders/nebula/nebula.d.ts.map +1 -0
  630. package/dist/catalog/shaders/nebula/nebula.form.d.ts +3 -0
  631. package/dist/catalog/shaders/nebula/nebula.form.d.ts.map +1 -0
  632. package/dist/catalog/shaders/nebula/nebula.form.js +15 -0
  633. package/dist/catalog/shaders/nebula/nebula.form.js.map +1 -0
  634. package/dist/catalog/shaders/nebula/nebula.js +58 -0
  635. package/dist/catalog/shaders/nebula/nebula.js.map +1 -0
  636. package/dist/catalog/shaders/plasma/plasma.d.ts +16 -0
  637. package/dist/catalog/shaders/plasma/plasma.d.ts.map +1 -0
  638. package/dist/catalog/shaders/plasma/plasma.form.d.ts +3 -0
  639. package/dist/catalog/shaders/plasma/plasma.form.d.ts.map +1 -0
  640. package/dist/catalog/shaders/plasma/plasma.form.js +15 -0
  641. package/dist/catalog/shaders/plasma/plasma.form.js.map +1 -0
  642. package/dist/catalog/shaders/plasma/plasma.js +32 -0
  643. package/dist/catalog/shaders/plasma/plasma.js.map +1 -0
  644. package/dist/catalog/shaders/simianlights/simianlights.d.ts +20 -0
  645. package/dist/catalog/shaders/simianlights/simianlights.d.ts.map +1 -0
  646. package/dist/catalog/shaders/simianlights/simianlights.form.d.ts +3 -0
  647. package/dist/catalog/shaders/simianlights/simianlights.form.d.ts.map +1 -0
  648. package/dist/catalog/shaders/simianlights/simianlights.form.js +15 -0
  649. package/dist/catalog/shaders/simianlights/simianlights.form.js.map +1 -0
  650. package/dist/catalog/shaders/simianlights/simianlights.js +57 -0
  651. package/dist/catalog/shaders/simianlights/simianlights.js.map +1 -0
  652. package/dist/src/components/form/control-form.d.ts +37 -0
  653. package/dist/src/components/form/control-form.d.ts.map +1 -0
  654. package/dist/src/components/form/control-form.js +55 -0
  655. package/dist/src/components/form/control-form.js.map +1 -0
  656. package/dist/src/components/form/make-controls.d.ts +22 -0
  657. package/dist/src/components/form/make-controls.d.ts.map +1 -0
  658. package/dist/src/components/form/make-controls.js +19 -0
  659. package/dist/src/components/form/make-controls.js.map +1 -0
  660. package/dist/src/components/form/scope.d.ts +2 -0
  661. package/dist/src/components/form/scope.d.ts.map +1 -0
  662. package/dist/src/components/form/scope.js +11 -0
  663. package/dist/src/components/form/scope.js.map +1 -0
  664. package/dist/src/components/form/use-field.d.ts +10 -0
  665. package/dist/src/components/form/use-field.d.ts.map +1 -0
  666. package/dist/src/components/form/use-field.js +27 -0
  667. package/dist/src/components/form/use-field.js.map +1 -0
  668. package/dist/src/components/preset-book-menu/index.d.ts +52 -0
  669. package/dist/src/components/preset-book-menu/index.d.ts.map +1 -0
  670. package/dist/src/components/preset-book-menu/index.js +152 -0
  671. package/dist/src/components/preset-book-menu/index.js.map +1 -0
  672. package/dist/src/components/preset-book-menu/layout.d.ts +25 -0
  673. package/dist/src/components/preset-book-menu/layout.d.ts.map +1 -0
  674. package/dist/src/components/preset-book-menu/layout.js +19 -0
  675. package/dist/src/components/preset-book-menu/layout.js.map +1 -0
  676. package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts +88 -0
  677. package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts.map +1 -0
  678. package/dist/src/components/preset-book-menu/preset-book-menu.types.js +14 -0
  679. package/dist/src/components/preset-book-menu/preset-book-menu.types.js.map +1 -0
  680. package/dist/src/components/preset-book-menu/preset-grid.d.ts +16 -0
  681. package/dist/src/components/preset-book-menu/preset-grid.d.ts.map +1 -0
  682. package/dist/src/components/preset-book-menu/preset-grid.js +49 -0
  683. package/dist/src/components/preset-book-menu/preset-grid.js.map +1 -0
  684. package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts +3 -0
  685. package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts.map +1 -0
  686. package/dist/src/components/preset-book-menu/resolve-image-uri.js +28 -0
  687. package/dist/src/components/preset-book-menu/resolve-image-uri.js.map +1 -0
  688. package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts +13 -0
  689. package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts.map +1 -0
  690. package/dist/src/components/preset-book-menu/resolve-image-uri.types.js +5 -0
  691. package/dist/src/components/preset-book-menu/resolve-image-uri.types.js.map +1 -0
  692. package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts +3 -0
  693. package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts.map +1 -0
  694. package/dist/src/components/preset-book-menu/resolve-image-uri.web.js +17 -0
  695. package/dist/src/components/preset-book-menu/resolve-image-uri.web.js.map +1 -0
  696. package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts +14 -0
  697. package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts.map +1 -0
  698. package/dist/src/components/preset-control-panel/composite-layer-control-panel.js +36 -0
  699. package/dist/src/components/preset-control-panel/composite-layer-control-panel.js.map +1 -0
  700. package/dist/src/components/preset-control-panel/control-section.d.ts +9 -0
  701. package/dist/src/components/preset-control-panel/control-section.d.ts.map +1 -0
  702. package/dist/src/components/preset-control-panel/control-section.js +47 -0
  703. package/dist/src/components/preset-control-panel/control-section.js.map +1 -0
  704. package/dist/src/components/preset-control-panel/control.d.ts +10 -0
  705. package/dist/src/components/preset-control-panel/control.d.ts.map +1 -0
  706. package/dist/src/components/preset-control-panel/control.js +35 -0
  707. package/dist/src/components/preset-control-panel/control.js.map +1 -0
  708. package/dist/src/components/preset-control-panel/index.d.ts +14 -0
  709. package/dist/src/components/preset-control-panel/index.d.ts.map +1 -0
  710. package/dist/src/components/preset-control-panel/index.js +49 -0
  711. package/dist/src/components/preset-control-panel/index.js.map +1 -0
  712. package/dist/src/components/preset-control-panel/mask-control-panel.d.ts +11 -0
  713. package/dist/src/components/preset-control-panel/mask-control-panel.d.ts.map +1 -0
  714. package/dist/src/components/preset-control-panel/mask-control-panel.js +34 -0
  715. package/dist/src/components/preset-control-panel/mask-control-panel.js.map +1 -0
  716. package/dist/src/components/preset-control-panel/preset-control-panel.d.ts +12 -0
  717. package/dist/src/components/preset-control-panel/preset-control-panel.d.ts.map +1 -0
  718. package/dist/src/components/preset-control-panel/preset-control-panel.js +23 -0
  719. package/dist/src/components/preset-control-panel/preset-control-panel.js.map +1 -0
  720. package/dist/src/components/preset-control-panel/transform-control-panel.d.ts +14 -0
  721. package/dist/src/components/preset-control-panel/transform-control-panel.d.ts.map +1 -0
  722. package/dist/src/components/preset-control-panel/transform-control-panel.js +58 -0
  723. package/dist/src/components/preset-control-panel/transform-control-panel.js.map +1 -0
  724. package/dist/src/components/preset-tile/index.d.ts +24 -0
  725. package/dist/src/components/preset-tile/index.d.ts.map +1 -0
  726. package/dist/src/components/preset-tile/index.js +98 -0
  727. package/dist/src/components/preset-tile/index.js.map +1 -0
  728. package/dist/src/components/theme/provider.d.ts +18 -0
  729. package/dist/src/components/theme/provider.d.ts.map +1 -0
  730. package/dist/src/components/theme/provider.js +29 -0
  731. package/dist/src/components/theme/provider.js.map +1 -0
  732. package/dist/src/components/theme/slots.d.ts +17 -0
  733. package/dist/src/components/theme/slots.d.ts.map +1 -0
  734. package/dist/src/components/theme/slots.js +9 -0
  735. package/dist/src/components/theme/slots.js.map +1 -0
  736. package/dist/src/components/ui/button.d.ts +14 -0
  737. package/dist/src/components/ui/button.d.ts.map +1 -0
  738. package/dist/src/components/ui/button.js +29 -0
  739. package/dist/src/components/ui/button.js.map +1 -0
  740. package/dist/src/components/ui/color-picker.d.ts +12 -0
  741. package/dist/src/components/ui/color-picker.d.ts.map +1 -0
  742. package/dist/src/components/ui/color-picker.js +43 -0
  743. package/dist/src/components/ui/color-picker.js.map +1 -0
  744. package/dist/src/components/ui/index.d.ts +6 -0
  745. package/dist/src/components/ui/index.d.ts.map +1 -0
  746. package/dist/src/components/ui/index.js +18 -0
  747. package/dist/src/components/ui/index.js.map +1 -0
  748. package/dist/src/components/ui/label.d.ts +10 -0
  749. package/dist/src/components/ui/label.d.ts.map +1 -0
  750. package/dist/src/components/ui/label.js +14 -0
  751. package/dist/src/components/ui/label.js.map +1 -0
  752. package/dist/src/components/ui/point.d.ts +19 -0
  753. package/dist/src/components/ui/point.d.ts.map +1 -0
  754. package/dist/src/components/ui/point.js +52 -0
  755. package/dist/src/components/ui/point.js.map +1 -0
  756. package/dist/src/components/ui/polygon-field.d.ts +10 -0
  757. package/dist/src/components/ui/polygon-field.d.ts.map +1 -0
  758. package/dist/src/components/ui/polygon-field.js +50 -0
  759. package/dist/src/components/ui/polygon-field.js.map +1 -0
  760. package/dist/src/components/ui/readout.d.ts +10 -0
  761. package/dist/src/components/ui/readout.d.ts.map +1 -0
  762. package/dist/src/components/ui/readout.js +14 -0
  763. package/dist/src/components/ui/readout.js.map +1 -0
  764. package/dist/src/components/ui/slider-value.d.ts +8 -0
  765. package/dist/src/components/ui/slider-value.d.ts.map +1 -0
  766. package/dist/src/components/ui/slider-value.js +17 -0
  767. package/dist/src/components/ui/slider-value.js.map +1 -0
  768. package/dist/src/components/ui/slider.d.ts +15 -0
  769. package/dist/src/components/ui/slider.d.ts.map +1 -0
  770. package/dist/src/components/ui/slider.js +58 -0
  771. package/dist/src/components/ui/slider.js.map +1 -0
  772. package/dist/src/components/ui/switch.d.ts +8 -0
  773. package/dist/src/components/ui/switch.d.ts.map +1 -0
  774. package/dist/src/components/ui/switch.js +24 -0
  775. package/dist/src/components/ui/switch.js.map +1 -0
  776. package/dist/src/index.d.ts +18 -0
  777. package/dist/src/index.d.ts.map +1 -0
  778. package/dist/src/index.js +187 -0
  779. package/dist/src/index.js.map +1 -0
  780. package/dist/src/index.web.d.ts +32 -0
  781. package/dist/src/index.web.d.ts.map +1 -0
  782. package/dist/src/index.web.js +119 -0
  783. package/dist/src/index.web.js.map +1 -0
  784. package/dist/src/kaleidoscope/controls.d.ts +24 -0
  785. package/dist/src/kaleidoscope/controls.d.ts.map +1 -0
  786. package/dist/src/kaleidoscope/controls.js +92 -0
  787. package/dist/src/kaleidoscope/controls.js.map +1 -0
  788. package/dist/src/kaleidoscope/effect.d.ts +4 -0
  789. package/dist/src/kaleidoscope/effect.d.ts.map +1 -0
  790. package/dist/src/kaleidoscope/effect.js +7 -0
  791. package/dist/src/kaleidoscope/effect.js.map +1 -0
  792. package/dist/src/kaleidoscope/effect.types.d.ts +47 -0
  793. package/dist/src/kaleidoscope/effect.types.d.ts.map +1 -0
  794. package/dist/src/kaleidoscope/effect.types.js +9 -0
  795. package/dist/src/kaleidoscope/effect.types.js.map +1 -0
  796. package/dist/src/kaleidoscope/shader-to-spec.d.ts +4 -0
  797. package/dist/src/kaleidoscope/shader-to-spec.d.ts.map +1 -0
  798. package/dist/src/kaleidoscope/shader-to-spec.js +17 -0
  799. package/dist/src/kaleidoscope/shader-to-spec.js.map +1 -0
  800. package/dist/src/kaleidoscope/types.d.ts +79 -0
  801. package/dist/src/kaleidoscope/types.d.ts.map +1 -0
  802. package/dist/src/kaleidoscope/types.js +18 -0
  803. package/dist/src/kaleidoscope/types.js.map +1 -0
  804. package/dist/src/kaleidoscope.preset-book.types.d.ts +86 -0
  805. package/dist/src/kaleidoscope.preset-book.types.d.ts.map +1 -0
  806. package/dist/src/kaleidoscope.preset-book.types.js +16 -0
  807. package/dist/src/kaleidoscope.preset-book.types.js.map +1 -0
  808. package/dist/src/lib/primitives.types.d.ts +3 -0
  809. package/dist/src/lib/primitives.types.d.ts.map +1 -0
  810. package/dist/src/lib/primitives.types.js +5 -0
  811. package/dist/src/lib/primitives.types.js.map +1 -0
  812. package/dist/src/lib/test-id.d.ts +30 -0
  813. package/dist/src/lib/test-id.d.ts.map +1 -0
  814. package/dist/src/lib/test-id.js +81 -0
  815. package/dist/src/lib/test-id.js.map +1 -0
  816. package/dist/src/livekit.d.ts +24 -0
  817. package/dist/src/livekit.d.ts.map +1 -0
  818. package/dist/src/livekit.js +63 -0
  819. package/dist/src/livekit.js.map +1 -0
  820. package/dist/src/nativewind.d.ts +7 -0
  821. package/dist/src/nativewind.d.ts.map +1 -0
  822. package/dist/src/nativewind.js +43 -0
  823. package/dist/src/nativewind.js.map +1 -0
  824. package/dist/web-driver/effects/composite.d.ts +14 -0
  825. package/dist/web-driver/effects/composite.d.ts.map +1 -0
  826. package/dist/web-driver/effects/composite.js +576 -0
  827. package/dist/web-driver/effects/composite.js.map +1 -0
  828. package/dist/web-driver/effects/layer-shaders.d.ts +2 -0
  829. package/dist/web-driver/effects/layer-shaders.d.ts.map +1 -0
  830. package/dist/web-driver/effects/layer-shaders.js +11 -0
  831. package/dist/web-driver/effects/layer-shaders.js.map +1 -0
  832. package/dist/web-driver/effects/transform.d.ts +4 -0
  833. package/dist/web-driver/effects/transform.d.ts.map +1 -0
  834. package/dist/web-driver/effects/transform.js +66 -0
  835. package/dist/web-driver/effects/transform.js.map +1 -0
  836. package/dist/web-driver/index.d.ts +6 -0
  837. package/dist/web-driver/index.d.ts.map +1 -0
  838. package/dist/web-driver/index.js +21 -0
  839. package/dist/web-driver/index.js.map +1 -0
  840. package/dist/web-driver/insertable-streams.d.ts.map +1 -0
  841. package/dist/web-driver/insertable-streams.js +68 -0
  842. package/dist/web-driver/insertable-streams.js.map +1 -0
  843. package/dist/web-driver/segmenter.d.ts.map +1 -0
  844. package/dist/web-driver/segmenter.js +89 -0
  845. package/dist/web-driver/segmenter.js.map +1 -0
  846. package/dist/web-driver/shaders.d.ts +2 -0
  847. package/dist/web-driver/shaders.d.ts.map +1 -0
  848. package/dist/web-driver/shaders.generated.d.ts +17 -0
  849. package/dist/web-driver/shaders.generated.d.ts.map +1 -0
  850. package/dist/web-driver/shaders.generated.js +1180 -0
  851. package/dist/web-driver/shaders.generated.js.map +1 -0
  852. package/dist/web-driver/shaders.js +28 -0
  853. package/dist/web-driver/shaders.js.map +1 -0
  854. package/dist/web-driver/tuning.d.ts.map +1 -0
  855. package/dist/web-driver/tuning.js +61 -0
  856. package/dist/web-driver/tuning.js.map +1 -0
  857. package/ios/Kaleidoscope.podspec +22 -15
  858. package/ios/KaleidoscopeModule/BundledImage.swift +39 -0
  859. package/ios/KaleidoscopeModule/CompositeLayers.swift +142 -0
  860. package/ios/KaleidoscopeModule/EffectTuning.swift +86 -86
  861. package/ios/KaleidoscopeModule/KaleidoscopeModule.swift +55 -27
  862. package/ios/KaleidoscopeModule/Registration.swift +36 -57
  863. package/ios/KaleidoscopeModule/effects/CompositeProcessor.swift +906 -0
  864. package/ios/KaleidoscopeModule/effects/FrameBridge.swift +25 -25
  865. package/ios/KaleidoscopeModule/effects/TransformProcessor.swift +127 -126
  866. package/ios/KaleidoscopeModule/gpu/CompositeRendering.swift +352 -0
  867. package/ios/KaleidoscopeModule/gpu/Ingest.swift +104 -102
  868. package/ios/KaleidoscopeModule/gpu/MetalRenderer.swift +473 -544
  869. package/ios/KaleidoscopeModule/gpu/Orientation.swift +41 -41
  870. package/ios/KaleidoscopeModule/gpu/ShaderLibrary.swift +100 -54
  871. package/ios/KaleidoscopeModule/gpu/TextureBridge.swift +245 -244
  872. package/ios/KaleidoscopeModule/segmentation/MaskTuning.swift +11 -11
  873. package/ios/KaleidoscopeModule/segmentation/Segmenter.swift +360 -359
  874. package/ios/KaleidoscopeModule/shaders/GENERATIVE.txt +9 -0
  875. package/ios/KaleidoscopeModule/shaders/SHADERS.txt +13 -2
  876. package/ios/KaleidoscopeModule/shaders/anamorphic-lensflare.metalsrc +47 -0
  877. package/ios/KaleidoscopeModule/shaders/clouds.metalsrc +185 -0
  878. package/ios/KaleidoscopeModule/shaders/composite-blit.metalsrc +22 -0
  879. package/ios/KaleidoscopeModule/shaders/composite-blur.metalsrc +93 -0
  880. package/ios/KaleidoscopeModule/shaders/composite-camera.metalsrc +22 -0
  881. package/ios/KaleidoscopeModule/shaders/composite-image.metalsrc +24 -0
  882. package/ios/KaleidoscopeModule/shaders/composite-masked.metalsrc +22 -0
  883. package/ios/KaleidoscopeModule/shaders/composite-subject.metalsrc +23 -0
  884. package/ios/KaleidoscopeModule/shaders/corporate-blobs.metalsrc +221 -0
  885. package/ios/KaleidoscopeModule/shaders/fireflies.metalsrc +44 -0
  886. package/ios/KaleidoscopeModule/shaders/godrays.metalsrc +46 -0
  887. package/ios/KaleidoscopeModule/shaders/light-beams-and-motes.metalsrc +316 -0
  888. package/ios/KaleidoscopeModule/shaders/nebula.metalsrc +45 -45
  889. package/ios/KaleidoscopeModule/shaders/plasma.metalsrc +26 -0
  890. package/ios/KaleidoscopeModule/shaders/simianlights.metalsrc +45 -45
  891. package/package.json +485 -115
  892. package/plugin/build/android/assets.js +45 -0
  893. package/plugin/build/android/index.js +34 -0
  894. package/plugin/build/index.js +39 -0
  895. package/plugin/build/ios/assets.js +110 -0
  896. package/plugin/build/ios/deployment-target.js +105 -0
  897. package/plugin/build/ios/index.js +63 -0
  898. package/plugin/build/ios/pods.js +73 -0
  899. package/plugin/build/lib/constants.js +15 -0
  900. package/plugin/build/lib/file-manipulation.js +57 -0
  901. package/plugin/build/lib/mods.js +36 -0
  902. package/plugin/build/lib/preset-book.js +215 -0
  903. package/plugin/build/lib/types.js +16 -0
  904. package/src/components/form/control-form.tsx +112 -0
  905. package/src/components/form/make-controls.ts +33 -0
  906. package/src/components/form/scope.ts +9 -0
  907. package/src/components/form/use-field.ts +35 -0
  908. package/src/components/preset-book-menu/index.tsx +286 -0
  909. package/src/components/preset-book-menu/layout.tsx +63 -0
  910. package/src/components/preset-book-menu/preset-book-menu.types.ts +112 -0
  911. package/src/components/preset-book-menu/preset-grid.tsx +80 -0
  912. package/src/components/preset-book-menu/resolve-image-uri.ts +31 -0
  913. package/src/components/preset-book-menu/resolve-image-uri.types.ts +18 -0
  914. package/src/components/preset-book-menu/resolve-image-uri.web.ts +15 -0
  915. package/src/components/preset-control-panel/composite-layer-control-panel.tsx +56 -0
  916. package/src/components/preset-control-panel/control-section.tsx +84 -0
  917. package/src/components/preset-control-panel/control.tsx +50 -0
  918. package/src/components/preset-control-panel/index.ts +31 -0
  919. package/src/components/preset-control-panel/mask-control-panel.tsx +93 -0
  920. package/src/components/preset-control-panel/preset-control-panel.tsx +48 -0
  921. package/src/components/preset-control-panel/transform-control-panel.tsx +146 -0
  922. package/src/components/preset-tile/index.tsx +160 -0
  923. package/src/components/theme/provider.tsx +50 -0
  924. package/src/components/theme/slots.ts +37 -0
  925. package/src/components/ui/button.tsx +54 -0
  926. package/src/components/ui/color-picker.tsx +74 -0
  927. package/src/components/ui/index.ts +10 -0
  928. package/src/components/ui/label.tsx +24 -0
  929. package/src/components/ui/point.tsx +116 -0
  930. package/src/components/ui/polygon-field.tsx +84 -0
  931. package/src/components/ui/readout.tsx +25 -0
  932. package/src/components/ui/slider-value.ts +15 -0
  933. package/src/components/ui/slider.tsx +98 -0
  934. package/src/components/ui/switch.tsx +40 -0
  935. package/src/index.ts +176 -95
  936. package/src/index.web.ts +126 -74
  937. package/src/kaleidoscope/controls.ts +127 -0
  938. package/src/kaleidoscope/effect.ts +5 -0
  939. package/src/kaleidoscope/effect.types.ts +63 -0
  940. package/src/kaleidoscope/shader-to-spec.ts +16 -0
  941. package/src/kaleidoscope/types.ts +101 -0
  942. package/src/kaleidoscope.preset-book.types.ts +105 -0
  943. package/src/lib/primitives.types.ts +5 -0
  944. package/src/lib/test-id.ts +81 -0
  945. package/src/livekit.ts +6 -4
  946. package/src/nativewind.ts +41 -0
  947. package/android/src/main/assets/backgrounds/stylized-dark.webp +0 -0
  948. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BackgroundImageFactory.kt +0 -365
  949. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BlurFactory.kt +0 -400
  950. package/dist/backgrounds/dark-office.d.ts +0 -3
  951. package/dist/backgrounds/dark-office.d.ts.map +0 -1
  952. package/dist/backgrounds/dark-office.js +0 -5
  953. package/dist/backgrounds/dark-office.js.map +0 -1
  954. package/dist/backgrounds/dark-office.web.d.ts +0 -3
  955. package/dist/backgrounds/dark-office.web.d.ts.map +0 -1
  956. package/dist/backgrounds/dark-office.web.js +0 -8
  957. package/dist/backgrounds/dark-office.web.js.map +0 -1
  958. package/dist/backgrounds/debug-resolutions.d.ts +0 -3
  959. package/dist/backgrounds/debug-resolutions.d.ts.map +0 -1
  960. package/dist/backgrounds/debug-resolutions.js +0 -6
  961. package/dist/backgrounds/debug-resolutions.js.map +0 -1
  962. package/dist/backgrounds/debug-resolutions.web.d.ts +0 -3
  963. package/dist/backgrounds/debug-resolutions.web.d.ts.map +0 -1
  964. package/dist/backgrounds/debug-resolutions.web.js +0 -8
  965. package/dist/backgrounds/debug-resolutions.web.js.map +0 -1
  966. package/dist/backgrounds/home-dark.d.ts +0 -3
  967. package/dist/backgrounds/home-dark.d.ts.map +0 -1
  968. package/dist/backgrounds/home-dark.js +0 -5
  969. package/dist/backgrounds/home-dark.js.map +0 -1
  970. package/dist/backgrounds/home-dark.web.d.ts +0 -3
  971. package/dist/backgrounds/home-dark.web.d.ts.map +0 -1
  972. package/dist/backgrounds/home-dark.web.js +0 -6
  973. package/dist/backgrounds/home-dark.web.js.map +0 -1
  974. package/dist/backgrounds/home-light.d.ts +0 -3
  975. package/dist/backgrounds/home-light.d.ts.map +0 -1
  976. package/dist/backgrounds/home-light.js +0 -5
  977. package/dist/backgrounds/home-light.js.map +0 -1
  978. package/dist/backgrounds/home-light.web.d.ts +0 -3
  979. package/dist/backgrounds/home-light.web.d.ts.map +0 -1
  980. package/dist/backgrounds/home-light.web.js +0 -6
  981. package/dist/backgrounds/home-light.web.js.map +0 -1
  982. package/dist/backgrounds/index.d.ts +0 -3
  983. package/dist/backgrounds/index.d.ts.map +0 -1
  984. package/dist/backgrounds/index.js +0 -6
  985. package/dist/backgrounds/index.js.map +0 -1
  986. package/dist/backgrounds/light-office.d.ts +0 -3
  987. package/dist/backgrounds/light-office.d.ts.map +0 -1
  988. package/dist/backgrounds/light-office.js +0 -5
  989. package/dist/backgrounds/light-office.js.map +0 -1
  990. package/dist/backgrounds/light-office.web.d.ts +0 -3
  991. package/dist/backgrounds/light-office.web.d.ts.map +0 -1
  992. package/dist/backgrounds/light-office.web.js +0 -8
  993. package/dist/backgrounds/light-office.web.js.map +0 -1
  994. package/dist/backgrounds/nature-dark.d.ts +0 -3
  995. package/dist/backgrounds/nature-dark.d.ts.map +0 -1
  996. package/dist/backgrounds/nature-dark.js +0 -5
  997. package/dist/backgrounds/nature-dark.js.map +0 -1
  998. package/dist/backgrounds/nature-dark.web.d.ts +0 -3
  999. package/dist/backgrounds/nature-dark.web.d.ts.map +0 -1
  1000. package/dist/backgrounds/nature-dark.web.js +0 -6
  1001. package/dist/backgrounds/nature-dark.web.js.map +0 -1
  1002. package/dist/backgrounds/nature-light.d.ts +0 -3
  1003. package/dist/backgrounds/nature-light.d.ts.map +0 -1
  1004. package/dist/backgrounds/nature-light.js +0 -5
  1005. package/dist/backgrounds/nature-light.js.map +0 -1
  1006. package/dist/backgrounds/nature-light.web.d.ts +0 -3
  1007. package/dist/backgrounds/nature-light.web.d.ts.map +0 -1
  1008. package/dist/backgrounds/nature-light.web.js +0 -6
  1009. package/dist/backgrounds/nature-light.web.js.map +0 -1
  1010. package/dist/backgrounds/preset-source.types.d.ts +0 -2
  1011. package/dist/backgrounds/preset-source.types.d.ts.map +0 -1
  1012. package/dist/backgrounds/preset-source.types.js +0 -2
  1013. package/dist/backgrounds/preset-source.types.js.map +0 -1
  1014. package/dist/backgrounds/presets.d.ts +0 -3
  1015. package/dist/backgrounds/presets.d.ts.map +0 -1
  1016. package/dist/backgrounds/presets.js +0 -34
  1017. package/dist/backgrounds/presets.js.map +0 -1
  1018. package/dist/backgrounds/simiancraft-dark.d.ts +0 -3
  1019. package/dist/backgrounds/simiancraft-dark.d.ts.map +0 -1
  1020. package/dist/backgrounds/simiancraft-dark.js +0 -5
  1021. package/dist/backgrounds/simiancraft-dark.js.map +0 -1
  1022. package/dist/backgrounds/simiancraft-dark.web.d.ts +0 -3
  1023. package/dist/backgrounds/simiancraft-dark.web.d.ts.map +0 -1
  1024. package/dist/backgrounds/simiancraft-dark.web.js +0 -6
  1025. package/dist/backgrounds/simiancraft-dark.web.js.map +0 -1
  1026. package/dist/backgrounds/simiancraft-light.d.ts +0 -3
  1027. package/dist/backgrounds/simiancraft-light.d.ts.map +0 -1
  1028. package/dist/backgrounds/simiancraft-light.js +0 -5
  1029. package/dist/backgrounds/simiancraft-light.js.map +0 -1
  1030. package/dist/backgrounds/simiancraft-light.web.d.ts +0 -3
  1031. package/dist/backgrounds/simiancraft-light.web.d.ts.map +0 -1
  1032. package/dist/backgrounds/simiancraft-light.web.js +0 -6
  1033. package/dist/backgrounds/simiancraft-light.web.js.map +0 -1
  1034. package/dist/backgrounds/stylized-dark.d.ts +0 -3
  1035. package/dist/backgrounds/stylized-dark.d.ts.map +0 -1
  1036. package/dist/backgrounds/stylized-dark.js +0 -5
  1037. package/dist/backgrounds/stylized-dark.js.map +0 -1
  1038. package/dist/backgrounds/stylized-dark.web.d.ts +0 -3
  1039. package/dist/backgrounds/stylized-dark.web.d.ts.map +0 -1
  1040. package/dist/backgrounds/stylized-dark.web.js +0 -6
  1041. package/dist/backgrounds/stylized-dark.web.js.map +0 -1
  1042. package/dist/backgrounds/stylized-dark.webp +0 -0
  1043. package/dist/backgrounds/stylized-light.d.ts +0 -3
  1044. package/dist/backgrounds/stylized-light.d.ts.map +0 -1
  1045. package/dist/backgrounds/stylized-light.js +0 -5
  1046. package/dist/backgrounds/stylized-light.js.map +0 -1
  1047. package/dist/backgrounds/stylized-light.web.d.ts +0 -3
  1048. package/dist/backgrounds/stylized-light.web.d.ts.map +0 -1
  1049. package/dist/backgrounds/stylized-light.web.js +0 -6
  1050. package/dist/backgrounds/stylized-light.web.js.map +0 -1
  1051. package/dist/index.d.ts +0 -42
  1052. package/dist/index.d.ts.map +0 -1
  1053. package/dist/index.js +0 -155
  1054. package/dist/index.js.map +0 -1
  1055. package/dist/index.web.d.ts +0 -49
  1056. package/dist/index.web.d.ts.map +0 -1
  1057. package/dist/index.web.js +0 -113
  1058. package/dist/index.web.js.map +0 -1
  1059. package/dist/livekit.d.ts +0 -24
  1060. package/dist/livekit.d.ts.map +0 -1
  1061. package/dist/livekit.js +0 -57
  1062. package/dist/livekit.js.map +0 -1
  1063. package/dist/types.d.ts +0 -74
  1064. package/dist/types.d.ts.map +0 -1
  1065. package/dist/types.js +0 -10
  1066. package/dist/types.js.map +0 -1
  1067. package/dist/web/blur-kernel.d.ts +0 -6
  1068. package/dist/web/blur-kernel.d.ts.map +0 -1
  1069. package/dist/web/blur-kernel.js +0 -41
  1070. package/dist/web/blur-kernel.js.map +0 -1
  1071. package/dist/web/effects/background-image.d.ts +0 -3
  1072. package/dist/web/effects/background-image.d.ts.map +0 -1
  1073. package/dist/web/effects/background-image.js +0 -284
  1074. package/dist/web/effects/background-image.js.map +0 -1
  1075. package/dist/web/effects/blur.d.ts +0 -3
  1076. package/dist/web/effects/blur.d.ts.map +0 -1
  1077. package/dist/web/effects/blur.js +0 -339
  1078. package/dist/web/effects/blur.js.map +0 -1
  1079. package/dist/web/effects/transform.d.ts +0 -4
  1080. package/dist/web/effects/transform.d.ts.map +0 -1
  1081. package/dist/web/effects/transform.js +0 -62
  1082. package/dist/web/effects/transform.js.map +0 -1
  1083. package/dist/web/insertable-streams.d.ts.map +0 -1
  1084. package/dist/web/insertable-streams.js +0 -64
  1085. package/dist/web/insertable-streams.js.map +0 -1
  1086. package/dist/web/segmenter.d.ts.map +0 -1
  1087. package/dist/web/segmenter.js +0 -83
  1088. package/dist/web/segmenter.js.map +0 -1
  1089. package/dist/web/shaders.d.ts +0 -2
  1090. package/dist/web/shaders.d.ts.map +0 -1
  1091. package/dist/web/shaders.generated.d.ts +0 -4
  1092. package/dist/web/shaders.generated.d.ts.map +0 -1
  1093. package/dist/web/shaders.generated.js +0 -54
  1094. package/dist/web/shaders.generated.js.map +0 -1
  1095. package/dist/web/shaders.js +0 -32
  1096. package/dist/web/shaders.js.map +0 -1
  1097. package/dist/web/tuning.d.ts.map +0 -1
  1098. package/dist/web/tuning.js +0 -55
  1099. package/dist/web/tuning.js.map +0 -1
  1100. package/ios/KaleidoscopeModule/effects/BackgroundImageProcessor.swift +0 -293
  1101. package/ios/KaleidoscopeModule/effects/BlurProcessor.swift +0 -238
  1102. package/ios/KaleidoscopeModule/resources/backgrounds/dark-office.webp +0 -0
  1103. package/ios/KaleidoscopeModule/resources/backgrounds/debug-resolutions.webp +0 -0
  1104. package/ios/KaleidoscopeModule/resources/backgrounds/home-dark.webp +0 -0
  1105. package/ios/KaleidoscopeModule/resources/backgrounds/home-light.webp +0 -0
  1106. package/ios/KaleidoscopeModule/resources/backgrounds/light-office.webp +0 -0
  1107. package/ios/KaleidoscopeModule/resources/backgrounds/nature-dark.webp +0 -0
  1108. package/ios/KaleidoscopeModule/resources/backgrounds/nature-light.webp +0 -0
  1109. package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-dark.webp +0 -0
  1110. package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-light.webp +0 -0
  1111. package/ios/KaleidoscopeModule/resources/backgrounds/stylized-dark.webp +0 -0
  1112. package/ios/KaleidoscopeModule/resources/backgrounds/stylized-light.webp +0 -0
  1113. package/ios/KaleidoscopeModule/shaders/blur.metalsrc +0 -72
  1114. package/ios/KaleidoscopeModule/shaders/composite.metalsrc +0 -22
  1115. package/src/backgrounds/README.md +0 -83
  1116. package/src/backgrounds/dark-office.ts +0 -6
  1117. package/src/backgrounds/dark-office.web.ts +0 -9
  1118. package/src/backgrounds/dark-office.webp +0 -0
  1119. package/src/backgrounds/debug-resolutions.ts +0 -7
  1120. package/src/backgrounds/debug-resolutions.web.ts +0 -9
  1121. package/src/backgrounds/debug-resolutions.webp +0 -0
  1122. package/src/backgrounds/home-dark.ts +0 -6
  1123. package/src/backgrounds/home-dark.web.ts +0 -7
  1124. package/src/backgrounds/home-dark.webp +0 -0
  1125. package/src/backgrounds/home-light.ts +0 -6
  1126. package/src/backgrounds/home-light.web.ts +0 -7
  1127. package/src/backgrounds/home-light.webp +0 -0
  1128. package/src/backgrounds/index.ts +0 -7
  1129. package/src/backgrounds/light-office.ts +0 -6
  1130. package/src/backgrounds/light-office.web.ts +0 -9
  1131. package/src/backgrounds/light-office.webp +0 -0
  1132. package/src/backgrounds/nature-dark.ts +0 -6
  1133. package/src/backgrounds/nature-dark.web.ts +0 -7
  1134. package/src/backgrounds/nature-dark.webp +0 -0
  1135. package/src/backgrounds/nature-light.ts +0 -6
  1136. package/src/backgrounds/nature-light.web.ts +0 -7
  1137. package/src/backgrounds/nature-light.webp +0 -0
  1138. package/src/backgrounds/preset-source.types.ts +0 -5
  1139. package/src/backgrounds/presets.ts +0 -36
  1140. package/src/backgrounds/simiancraft-dark.ts +0 -6
  1141. package/src/backgrounds/simiancraft-dark.web.ts +0 -7
  1142. package/src/backgrounds/simiancraft-dark.webp +0 -0
  1143. package/src/backgrounds/simiancraft-light.ts +0 -6
  1144. package/src/backgrounds/simiancraft-light.web.ts +0 -7
  1145. package/src/backgrounds/simiancraft-light.webp +0 -0
  1146. package/src/backgrounds/stylized-dark.ts +0 -6
  1147. package/src/backgrounds/stylized-dark.web.ts +0 -7
  1148. package/src/backgrounds/stylized-dark.webp +0 -0
  1149. package/src/backgrounds/stylized-light.ts +0 -6
  1150. package/src/backgrounds/stylized-light.web.ts +0 -7
  1151. package/src/backgrounds/stylized-light.webp +0 -0
  1152. package/src/types.ts +0 -89
  1153. package/src/web/blur-kernel.ts +0 -44
  1154. package/src/web/effects/background-image.ts +0 -364
  1155. package/src/web/effects/blur.ts +0 -430
  1156. package/src/web/effects/transform.ts +0 -69
  1157. package/src/web/insertable-streams.ts +0 -112
  1158. package/src/web/segmenter.ts +0 -107
  1159. package/src/web/shaders.generated.ts +0 -56
  1160. package/src/web/shaders.ts +0 -31
  1161. package/src/web/tuning.ts +0 -67
  1162. /package/{src/backgrounds → catalog/images}/assets.d.ts +0 -0
  1163. /package/{android/src/main/assets/backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
  1164. /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-dark.webp +0 -0
  1165. /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-light.webp +0 -0
  1166. /package/{android/src/main/assets/backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
  1167. /package/{android/src/main/assets/backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
  1168. /package/{android/src/main/assets/backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
  1169. /package/{android/src/main/assets/backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
  1170. /package/{android/src/main/assets/backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
  1171. /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
  1172. /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
  1173. /package/dist/{backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
  1174. /package/dist/{backgrounds → catalog/images/home}/home-dark.webp +0 -0
  1175. /package/dist/{backgrounds → catalog/images/home}/home-light.webp +0 -0
  1176. /package/dist/{backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
  1177. /package/dist/{backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
  1178. /package/dist/{backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
  1179. /package/dist/{backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
  1180. /package/dist/{backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
  1181. /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
  1182. /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
  1183. /package/dist/{web → web-driver}/insertable-streams.d.ts +0 -0
  1184. /package/dist/{web → web-driver}/segmenter.d.ts +0 -0
  1185. /package/dist/{web → web-driver}/tuning.d.ts +0 -0
@@ -0,0 +1,30 @@
1
+ // Layer-shader GLSL for the native composite compositor. Every program here is
2
+ // single-sourced from catalog/shaders/_shared/<name>.frag via build:shaders and
3
+ // read through ShadersGenerated; CompositeFactory links each with PASSTHROUGH_VERT.
4
+ // The generative backgrounds are likewise the generated GENERATIVE map.
5
+ //
6
+ // All are GLSL ES 3.00, matching the native GL context. image/subject/masked are
7
+ // the fixed compositor primitives (cover-fit image, masked camera person, masked
8
+ // scratch); each shaders/_shared/composite-*.frag documents its premultiply and
9
+ // mask-UV contract.
10
+
11
+ package com.simiancraft.kaleidoscope.effects
12
+
13
+ import com.simiancraft.kaleidoscope.gpu.ShadersGenerated
14
+
15
+ internal object LayerShaders {
16
+ // Cover-fit a still image, premultiplied. shaders/_shared/composite-image.frag.
17
+ val IMAGE_FRAG = ShadersGenerated.COMPOSITE_IMAGE_FRAG
18
+
19
+ // Masked camera person, premultiplied. shaders/_shared/composite-subject.frag.
20
+ val SUBJECT_FRAG = ShadersGenerated.COMPOSITE_SUBJECT_FRAG
21
+
22
+ // Stencil any layer to the subject. shaders/_shared/composite-masked.frag.
23
+ val MASKED_FRAG = ShadersGenerated.COMPOSITE_MASKED_FRAG
24
+
25
+ // Every generative background is single-sourced from shaders/<name>.frag via
26
+ // build:shaders, which emits the name -> source map. The compositor reads this
27
+ // directly, so adding a generative to GENERATIVE_SHADERS registers it on
28
+ // Android with no edit here.
29
+ val GENERATIVE: Map<String, String> = ShadersGenerated.GENERATIVE
30
+ }
@@ -1,4 +1,4 @@
1
- // Android transform effects GPU pipeline. One factory class serves all four
1
+ // Android transform effects: GPU pipeline. One factory class serves all four
2
2
  // geometric reorientation ops (flip-x, flip-y, rotate-cw, rotate-ccw); each
3
3
  // registration passes a different Orientation.Op.
4
4
  //
@@ -11,10 +11,16 @@
11
11
  // mirror); MirrorFactory and its "mirror" registration are removed.
12
12
  //
13
13
  // Per frame:
14
- // 1. Render the input OES camera texture through the OES->2D passthrough into
15
- // a cached DISPLAY-UPRIGHT "original 2D" FBO, exactly like BlurFactory /
16
- // BackgroundImageFactory. Ingest folds the display rotation into the
17
- // texture matrix, so the FBO is sized in display dims and already upright.
14
+ // 1. Render the input texture into a cached DISPLAY-UPRIGHT "original 2D" FBO,
15
+ // exactly like the composite factory. The input is either:
16
+ // - an OES camera texture (first in the chain): OES->2D passthrough with
17
+ // Ingest folding the display rotation into the texture matrix, so the
18
+ // FBO is sized in display dims and already upright; or
19
+ // - an RGB GL_TEXTURE_2D texture (chained after an art effect or a
20
+ // preceding transform): a plain 2D-sampler passthrough copy, since the
21
+ // upstream pass already normalized orientation (display-upright,
22
+ // rotation 0). No texture matrix on this path; folding rotation again
23
+ // would double-apply it.
18
24
  // 2. Single TRANSFORM_FRAG pass: sample that upright 2D copy through the
19
25
  // uUvTransform mat2 from Orientation.mat2For(op) into a fresh output
20
26
  // texture sized display w x h (flips) or h x w (rotations).
@@ -50,228 +56,270 @@ import org.webrtc.YuvConverter
50
56
  * @param op Which screen-space reorientation this factory's processor applies.
51
57
  */
52
58
  class TransformFactory(
53
- private val op: Orientation.Op,
59
+ private val op: Orientation.Op,
54
60
  ) : VideoFrameProcessorFactoryInterface {
55
- override fun build(): VideoFrameProcessor = TransformProcessor(op)
61
+ override fun build(): VideoFrameProcessor = TransformProcessor(op)
56
62
  }
57
63
 
58
64
  private class TransformProcessor(
59
- private val op: Orientation.Op,
65
+ private val op: Orientation.Op,
60
66
  ) : VideoFrameProcessor {
61
- // process() is only ever invoked on the single SurfaceTextureHelper capture
62
- // thread (VideoEffectProcessor.onFrameCaptured), so this never actually
63
- // contends. Retained as cheap uncontended insurance and as an explicit marker
64
- // that the GL state below is single-threaded; it is NOT a cross-thread guard.
65
- private val lock = Any()
67
+ // process() is only ever invoked on the single SurfaceTextureHelper capture
68
+ // thread (VideoEffectProcessor.onFrameCaptured), so this never actually
69
+ // contends. Retained as cheap uncontended insurance and as an explicit marker
70
+ // that the GL state below is single-threaded; it is NOT a cross-thread guard.
71
+ private val lock = Any()
66
72
 
67
- private var oesToTwoD: GlProgram? = null
68
- private var transformProgram: GlProgram? = null
73
+ private var oesToTwoD: GlProgram? = null
69
74
 
70
- // Cached display-oriented "original 2D" copy at full input resolution.
71
- private var originalFbo: Fbo? = null
72
- private var cachedWidth = 0
73
- private var cachedHeight = 0
75
+ // 2D-sampler passthrough for the RGB-input branch (chained after an art
76
+ // effect or a preceding transform, whose output is a GL_TEXTURE_2D buffer).
77
+ private var twoDToTwoD: GlProgram? = null
78
+ private var transformProgram: GlProgram? = null
74
79
 
75
- private var yuvConverter: YuvConverter? = null
80
+ // Cached display-oriented "original 2D" copy at full input resolution.
81
+ private var originalFbo: Fbo? = null
82
+ private var cachedWidth = 0
83
+ private var cachedHeight = 0
76
84
 
77
- // R3: one-frame GPU pipeline (see FramePipeline). Replaces the per-frame
78
- // glFinish; only changes WHEN the frame is returned, not its orientation.
79
- private val pipeline = FramePipeline()
85
+ private var yuvConverter: YuvConverter? = null
80
86
 
81
- override fun process(frame: VideoFrame, textureHelper: SurfaceTextureHelper?): VideoFrame? {
82
- return synchronized(lock) { processOuter(frame, textureHelper) }
83
- }
87
+ // R3: one-frame GPU pipeline (see FramePipeline). Replaces the per-frame
88
+ // glFinish; only changes WHEN the frame is returned, not its orientation.
89
+ private val pipeline = FramePipeline()
84
90
 
85
- private fun processOuter(frame: VideoFrame, textureHelper: SurfaceTextureHelper?): VideoFrame? {
86
- return try {
87
- processInner(frame, textureHelper)
88
- } catch (t: Throwable) {
89
- Log.e(
90
- TAG,
91
- "process() threw; falling through to original frame. op=$op " +
92
- "frame=${frame.buffer.width}x${frame.buffer.height} " +
93
- "rotation=${frame.rotation} bufferClass=${frame.buffer.javaClass.simpleName}",
94
- t,
95
- )
96
- null
97
- }
98
- }
91
+ override fun process(
92
+ frame: VideoFrame,
93
+ textureHelper: SurfaceTextureHelper?,
94
+ ): VideoFrame? =
95
+ synchronized(lock) {
96
+ processOuter(frame, textureHelper)
97
+ }
99
98
 
100
- private fun processInner(
101
- frame: VideoFrame,
102
- textureHelper: SurfaceTextureHelper?,
103
- ): VideoFrame? {
104
- if (textureHelper == null) {
105
- Log.w(TAG, "textureHelper is null; falling through.")
106
- return null
107
- }
108
- val inputBuffer = frame.buffer
109
- if (inputBuffer !is VideoFrame.TextureBuffer) {
110
- // Chained after a CPU effect emitting I420 — silently forward.
111
- return null
112
- }
113
- if (inputBuffer.type != VideoFrame.TextureBuffer.Type.OES) {
114
- Log.w(TAG, "TextureBuffer type is ${inputBuffer.type}; expected OES. Forwarding original.")
115
- return null
116
- }
117
- val bufW = inputBuffer.width
118
- val bufH = inputBuffer.height
119
- if (bufW <= 0 || bufH <= 0) {
120
- Log.w(TAG, "Degenerate dims ${bufW}x${bufH}; forwarding.")
121
- return null
122
- }
99
+ private fun processOuter(
100
+ frame: VideoFrame,
101
+ textureHelper: SurfaceTextureHelper?,
102
+ ): VideoFrame? =
103
+ try {
104
+ processInner(frame, textureHelper)
105
+ } catch (t: Throwable) {
106
+ Log.e(
107
+ TAG,
108
+ "process() threw; falling through to original frame. op=$op " +
109
+ "frame=${frame.buffer.width}x${frame.buffer.height} " +
110
+ "rotation=${frame.rotation} bufferClass=${frame.buffer.javaClass.simpleName}",
111
+ t,
112
+ )
113
+ null
114
+ }
123
115
 
124
- // Ingest normalization: the OES->2D pass lands a DISPLAY-UPRIGHT frame, so
125
- // the original FBO is sized in DISPLAY dims and the op runs in pure screen
126
- // space (Orientation no longer consults frame.rotation).
127
- val width = Ingest.displayWidth(bufW, bufH, frame.rotation)
128
- val height = Ingest.displayHeight(bufW, bufH, frame.rotation)
116
+ private fun processInner(
117
+ frame: VideoFrame,
118
+ textureHelper: SurfaceTextureHelper?,
119
+ ): VideoFrame? {
120
+ if (textureHelper == null) {
121
+ Log.w(TAG, "textureHelper is null; falling through.")
122
+ return null
123
+ }
124
+ val inputBuffer = frame.buffer
125
+ if (inputBuffer !is VideoFrame.TextureBuffer) {
126
+ // Chained after a CPU effect emitting I420; silently forward.
127
+ return null
128
+ }
129
+ // Both texture types are valid inputs:
130
+ // - OES (GL_TEXTURE_EXTERNAL_OES): the raw camera frame, first in the
131
+ // chain. Sampled through OES_PASSTHROUGH_FRAG with the composed texture
132
+ // matrix so the FBO lands display-upright (Ingest normalization).
133
+ // - RGB (GL_TEXTURE_2D): the output of a preceding art effect
134
+ // (background/blur/shader) or a preceding transform. That upstream pass
135
+ // already normalized orientation (display-upright, rotation 0), so it is
136
+ // copied into the FBO via a plain 2D-sampler passthrough with NO texture
137
+ // matrix; re-applying Ingest here would double-apply the rotation.
138
+ val isOes = inputBuffer.type == VideoFrame.TextureBuffer.Type.OES
139
+ val bufW = inputBuffer.width
140
+ val bufH = inputBuffer.height
141
+ if (bufW <= 0 || bufH <= 0) {
142
+ Log.w(TAG, "Degenerate dims ${bufW}x$bufH; forwarding.")
143
+ return null
144
+ }
129
145
 
130
- // Rotations swap the (display) output dimensions; flips keep them.
131
- val swap = Orientation.swapsDimensions(op)
132
- val outWidth = if (swap) height else width
133
- val outHeight = if (swap) width else height
146
+ // Ingest normalization: the OES->2D pass lands a DISPLAY-UPRIGHT frame, so
147
+ // the original FBO is sized in DISPLAY dims and the op runs in pure screen
148
+ // space (Orientation no longer consults frame.rotation). For an RGB input
149
+ // the upstream effect already emitted display dims at rotation 0, so the
150
+ // buffer dims ARE the display dims; do not fold rotation a second time.
151
+ val width = if (isOes) Ingest.displayWidth(bufW, bufH, frame.rotation) else bufW
152
+ val height = if (isOes) Ingest.displayHeight(bufW, bufH, frame.rotation) else bufH
134
153
 
135
- GlDebug.check("transform entry")
136
- val saved = Egl.save()
137
- var outputTextureId = 0
138
- var outputFboHandle = 0
139
- return try {
140
- ensurePrograms()
141
- ensureIntermediates(width, height)
142
- val origFbo = originalFbo ?: error("originalFbo null after ensure")
143
- val oes = oesToTwoD ?: error("oesToTwoD program null after ensure")
144
- val transform = transformProgram ?: error("transformProgram null after ensure")
154
+ // Rotations swap the (display) output dimensions; flips keep them.
155
+ val swap = Orientation.swapsDimensions(op)
156
+ val outWidth = if (swap) height else width
157
+ val outHeight = if (swap) width else height
145
158
 
146
- // ===== Pass 1: OES camera -> display-oriented "original 2D" =====
147
- GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
148
- GLES30.glBindTexture(GL_TEXTURE_EXTERNAL_OES, inputBuffer.textureId)
149
- origFbo.bind()
150
- oes.use()
151
- oes.setInt("uTex", 0)
152
- // Compose transformMatrix with the display rotation so the FBO lands upright.
153
- val texMatrix = Ingest.composedTexMatrix(inputBuffer.transformMatrix, frame.rotation)
154
- GLES30.glUniformMatrix4fv(oes.uniformLocation("uTexMatrix"), 1, false, texMatrix, 0)
155
- GLES30.glDisable(GLES30.GL_DEPTH_TEST)
156
- GLES30.glDisable(GLES30.GL_BLEND)
157
- GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
158
- GlDebug.check("transform OES->2D")
159
+ GlDebug.check("transform entry")
160
+ val saved = Egl.save()
161
+ var outputTextureId = 0
162
+ var outputFboHandle = 0
163
+ return try {
164
+ ensurePrograms()
165
+ ensureIntermediates(width, height)
166
+ val origFbo = originalFbo ?: error("originalFbo null after ensure")
167
+ val transform = transformProgram ?: error("transformProgram null after ensure")
159
168
 
160
- // ===== Pass 2: geometric reorientation into a fresh output texture =====
161
- // Output FBO is sized for the (possibly swapped) output dims. The
162
- // uUvTransform mat2 reads the square [0,1] original UV back through the
163
- // op; rotations map the unit square onto itself, so swapping the FBO's
164
- // physical dims yields the rotated image with no UV clamping.
165
- val outputFbo = Fbo(outWidth, outHeight)
166
- outputTextureId = outputFbo.texture
167
- outputFboHandle = outputFbo.framebuffer
169
+ // ===== Pass 1: input texture -> display-oriented "original 2D" =====
170
+ // Two input acquisitions land the same display-upright "original 2D" FBO;
171
+ // only the sampler + matrix differ. Pass 2 below is identical for both.
172
+ origFbo.bind()
173
+ GLES30.glDisable(GLES30.GL_DEPTH_TEST)
174
+ GLES30.glDisable(GLES30.GL_BLEND)
175
+ GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
176
+ if (isOes) {
177
+ val oes = oesToTwoD ?: error("oesToTwoD program null after ensure")
178
+ GLES30.glBindTexture(GL_TEXTURE_EXTERNAL_OES, inputBuffer.textureId)
179
+ oes.use()
180
+ oes.setInt("uTex", 0)
181
+ // Compose transformMatrix with the display rotation so the FBO lands upright.
182
+ val texMatrix = Ingest.composedTexMatrix(inputBuffer.transformMatrix, frame.rotation)
183
+ GLES30.glUniformMatrix4fv(oes.uniformLocation("uTexMatrix"), 1, false, texMatrix, 0)
184
+ GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
185
+ GlDebug.check("transform OES->2D")
186
+ } else {
187
+ // RGB / GL_TEXTURE_2D input: upstream already display-upright at
188
+ // rotation 0. Plain passthrough copy; no texture matrix (mirrors
189
+ // Mask's 2D downsample and the bg/blur 2D-source handling).
190
+ val twoD = twoDToTwoD ?: error("twoDToTwoD program null after ensure")
191
+ GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, inputBuffer.textureId)
192
+ twoD.use()
193
+ twoD.setInt("uTex", 0)
194
+ GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
195
+ GlDebug.check("transform 2D->2D")
196
+ }
168
197
 
169
- outputFbo.bind()
170
- transform.use()
171
- GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
172
- GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, origFbo.texture)
173
- transform.setInt("uTex", 0)
174
- // Input is already display-upright (ingest), so the op is pure screen
175
- // space; frame.rotation is no longer consulted here.
176
- transform.setMat2("uUvTransform", Orientation.mat2For(op))
177
- GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
178
- GlDebug.check("transform reorient pass")
198
+ // ===== Pass 2: geometric reorientation into a fresh output texture =====
199
+ // Output FBO is sized for the (possibly swapped) output dims. The
200
+ // uUvTransform mat2 reads the square [0,1] original UV back through the
201
+ // op; rotations map the unit square onto itself, so swapping the FBO's
202
+ // physical dims yields the rotated image with no UV clamping.
203
+ val outputFbo = Fbo(outWidth, outHeight)
204
+ outputTextureId = outputFbo.texture
205
+ outputFboHandle = outputFbo.framebuffer
179
206
 
180
- // Detach the texture from the FBO and free the FBO; the texture lives
181
- // with the VideoFrame and is deleted in the release callback.
182
- GLES30.glFramebufferTexture2D(
183
- GLES30.GL_FRAMEBUFFER,
184
- GLES30.GL_COLOR_ATTACHMENT0,
185
- GLES30.GL_TEXTURE_2D,
186
- 0,
187
- 0,
188
- )
189
- GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
190
- GLES30.glDeleteFramebuffers(1, intArrayOf(outputFboHandle), 0)
191
- outputFboHandle = 0
192
- GlDebug.check("transform output cleanup")
207
+ outputFbo.bind()
208
+ transform.use()
209
+ GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
210
+ GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, origFbo.texture)
211
+ transform.setInt("uTex", 0)
212
+ // Input is already display-upright (ingest), so the op is pure screen
213
+ // space; frame.rotation is no longer consulted here.
214
+ transform.setMat2("uUvTransform", Orientation.mat2For(op))
215
+ GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
216
+ GlDebug.check("transform reorient pass")
193
217
 
194
- // R3: fence this frame and hand the previous GPU-complete frame off. The
195
- // (possibly swapped) output dims travel with the frame, so the previous
196
- // frame's own dims/rotation are wrapped unchanged; orientation behavior
197
- // is untouched, only the return is deferred one frame.
198
- val ready = pipeline.enqueue(
199
- outputTextureId,
200
- outWidth,
201
- outHeight,
202
- // Pixels are already display-upright after ingest; emit rotation 0.
203
- 0,
204
- frame.timestampNs,
205
- EffectTuning.debugTiming,
206
- TAG,
207
- )
208
- outputTextureId = 0
209
- ready ?: return null
218
+ // Detach the texture from the FBO and free the FBO; the texture lives
219
+ // with the VideoFrame and is deleted in the release callback.
220
+ GLES30.glFramebufferTexture2D(
221
+ GLES30.GL_FRAMEBUFFER,
222
+ GLES30.GL_COLOR_ATTACHMENT0,
223
+ GLES30.GL_TEXTURE_2D,
224
+ 0,
225
+ 0,
226
+ )
227
+ GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
228
+ GLES30.glDeleteFramebuffers(1, intArrayOf(outputFboHandle), 0)
229
+ outputFboHandle = 0
230
+ GlDebug.check("transform output cleanup")
210
231
 
211
- val yc = yuvConverter ?: run {
212
- val c = YuvConverter()
213
- yuvConverter = c
214
- c
215
- }
232
+ // R3: fence this frame and hand the previous GPU-complete frame off. The
233
+ // (possibly swapped) output dims travel with the frame, so the previous
234
+ // frame's own dims/rotation are wrapped unchanged; orientation behavior
235
+ // is untouched, only the return is deferred one frame.
236
+ val ready =
237
+ pipeline.enqueue(
238
+ outputTextureId,
239
+ outWidth,
240
+ outHeight,
241
+ // Pixels are already display-upright after ingest; emit rotation 0.
242
+ 0,
243
+ frame.timestampNs,
244
+ EffectTuning.debugTiming,
245
+ TAG,
246
+ )
247
+ outputTextureId = 0
248
+ ready ?: return null
216
249
 
217
- val readyTextureId = ready.textureId
218
- val outputBuffer = TextureBufferImpl(
219
- ready.width,
220
- ready.height,
221
- VideoFrame.TextureBuffer.Type.RGB,
222
- readyTextureId,
223
- Matrix(),
224
- textureHelper.handler,
225
- yc,
226
- Runnable {
227
- GLES30.glDeleteTextures(1, intArrayOf(readyTextureId), 0)
228
- },
229
- )
250
+ val yc =
251
+ yuvConverter ?: run {
252
+ val c = YuvConverter()
253
+ yuvConverter = c
254
+ c
255
+ }
230
256
 
231
- VideoFrame(outputBuffer, ready.rotation, ready.timestampNs)
232
- } catch (t: Throwable) {
233
- if (outputTextureId != 0) {
234
- try {
235
- GLES30.glDeleteTextures(1, intArrayOf(outputTextureId), 0)
236
- } catch (delErr: Throwable) {
237
- Log.w(TAG, "failed to free orphan texture $outputTextureId", delErr)
238
- }
239
- }
240
- if (outputFboHandle != 0) {
241
- try {
242
- GLES30.glDeleteFramebuffers(1, intArrayOf(outputFboHandle), 0)
243
- } catch (delErr: Throwable) {
244
- Log.w(TAG, "failed to free orphan FBO $outputFboHandle", delErr)
257
+ val readyTextureId = ready.textureId
258
+ val outputBuffer =
259
+ TextureBufferImpl(
260
+ ready.width,
261
+ ready.height,
262
+ VideoFrame.TextureBuffer.Type.RGB,
263
+ readyTextureId,
264
+ Matrix(),
265
+ textureHelper.handler,
266
+ yc,
267
+ Runnable {
268
+ GLES30.glDeleteTextures(1, intArrayOf(readyTextureId), 0)
269
+ },
270
+ )
271
+
272
+ VideoFrame(outputBuffer, ready.rotation, ready.timestampNs)
273
+ } catch (t: Throwable) {
274
+ if (outputTextureId != 0) {
275
+ try {
276
+ GLES30.glDeleteTextures(1, intArrayOf(outputTextureId), 0)
277
+ } catch (delErr: Throwable) {
278
+ Log.w(TAG, "failed to free orphan texture $outputTextureId", delErr)
279
+ }
280
+ }
281
+ if (outputFboHandle != 0) {
282
+ try {
283
+ GLES30.glDeleteFramebuffers(1, intArrayOf(outputFboHandle), 0)
284
+ } catch (delErr: Throwable) {
285
+ Log.w(TAG, "failed to free orphan FBO $outputFboHandle", delErr)
286
+ }
287
+ }
288
+ throw t
289
+ } finally {
290
+ Egl.restore(saved)
245
291
  }
246
- }
247
- throw t
248
- } finally {
249
- Egl.restore(saved)
250
292
  }
251
- }
252
293
 
253
- private fun ensurePrograms() {
254
- if (oesToTwoD == null) {
255
- oesToTwoD = GlProgram(Shaders.PASSTHROUGH_VERT, Shaders.OES_PASSTHROUGH_FRAG)
256
- GlDebug.check("oesToTwoD program compile/link")
257
- }
258
- if (transformProgram == null) {
259
- transformProgram = GlProgram(Shaders.PASSTHROUGH_VERT, Shaders.TRANSFORM_FRAG)
260
- GlDebug.check("transform program compile/link")
294
+ private fun ensurePrograms() {
295
+ if (oesToTwoD == null) {
296
+ oesToTwoD = GlProgram(Shaders.PASSTHROUGH_VERT, Shaders.OES_PASSTHROUGH_FRAG)
297
+ GlDebug.check("oesToTwoD program compile/link")
298
+ }
299
+ if (twoDToTwoD == null) {
300
+ twoDToTwoD = GlProgram(Shaders.PASSTHROUGH_VERT, Shaders.TWO_D_PASSTHROUGH_FRAG)
301
+ GlDebug.check("twoDToTwoD program compile/link")
302
+ }
303
+ if (transformProgram == null) {
304
+ transformProgram = GlProgram(Shaders.PASSTHROUGH_VERT, Shaders.TRANSFORM_FRAG)
305
+ GlDebug.check("transform program compile/link")
306
+ }
261
307
  }
262
- }
263
308
 
264
- private fun ensureIntermediates(width: Int, height: Int) {
265
- if (cachedWidth == width && cachedHeight == height && originalFbo != null) return
266
- originalFbo?.delete()
267
- originalFbo = Fbo(width, height)
268
- cachedWidth = width
269
- cachedHeight = height
270
- GlDebug.check("transform intermediates allocated")
271
- }
309
+ private fun ensureIntermediates(
310
+ width: Int,
311
+ height: Int,
312
+ ) {
313
+ if (cachedWidth == width && cachedHeight == height && originalFbo != null) return
314
+ originalFbo?.delete()
315
+ originalFbo = Fbo(width, height)
316
+ cachedWidth = width
317
+ cachedHeight = height
318
+ GlDebug.check("transform intermediates allocated")
319
+ }
272
320
 
273
- companion object {
274
- private const val TAG = "Kaleidoscope.Transform"
275
- private const val GL_TEXTURE_EXTERNAL_OES = 0x8D65
276
- }
321
+ companion object {
322
+ private const val TAG = "Kaleidoscope.Transform"
323
+ private const val GL_TEXTURE_EXTERNAL_OES = 0x8D65
324
+ }
277
325
  }