@supersoniks/concorde 4.9.95 → 4.9.97-visual-stack.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 (1013) hide show
  1. package/README.md +34 -17
  2. package/build-infos.json +1 -1
  3. package/concorde-3d.bundle.js +1 -1
  4. package/concorde-3d.es.js +1 -1
  5. package/concorde-core.bundle.js +147 -147
  6. package/concorde-core.es.js +4375 -4282
  7. package/concorde-hugging-face-infer.bundle.js +1 -1
  8. package/concorde-hugging-face-infer.es.js +1 -1
  9. package/concorde-shader.bundle.js +1 -1
  10. package/concorde-shader.es.js +1 -1
  11. package/concorde-webgpu.bundle.js +1 -1
  12. package/concorde-webgpu.es.js +1 -1
  13. package/dist/concorde-3d.bundle.js +3911 -0
  14. package/dist/concorde-3d.es.js +32635 -0
  15. package/dist/concorde-core.bundle.js +147 -147
  16. package/dist/concorde-core.es.js +4375 -4282
  17. package/dist/concorde-hugging-face-infer.bundle.js +32 -0
  18. package/dist/concorde-hugging-face-infer.es.js +2952 -0
  19. package/dist/concorde-shader.bundle.js +105 -0
  20. package/dist/concorde-shader.es.js +7982 -0
  21. package/dist/concorde-webgpu.bundle.js +296 -0
  22. package/dist/concorde-webgpu.es.js +8268 -0
  23. package/dist/docs/hf-samples/beach.jpg +0 -0
  24. package/dist/docs/hf-samples/cats.jpg +0 -0
  25. package/dist/docs/hf-samples/corgi.jpg +0 -0
  26. package/dist/docs/hf-samples/portrait.jpg +0 -0
  27. package/dist/docs/hf-samples/scene.jpg +0 -0
  28. package/dist/docs/hf-samples/singer.jpg +0 -0
  29. package/dist/docs/shader-samples/color.jpg +0 -0
  30. package/dist/docs/shader-samples/depth.png +0 -0
  31. package/dist/docs/shader-samples/impact.jpg +0 -0
  32. package/dist/docs/shader-samples/video.webm +0 -0
  33. package/dist/js/addons/3d.js +6 -0
  34. package/dist/js/addons/3d.js.map +1 -0
  35. package/dist/js/addons/hugging-face-infer.js +8 -0
  36. package/dist/js/addons/hugging-face-infer.js.map +1 -0
  37. package/dist/js/addons/shader.js +6 -0
  38. package/dist/js/addons/shader.js.map +1 -0
  39. package/dist/js/addons/webgpu.js +7 -0
  40. package/dist/js/addons/webgpu.js.map +1 -0
  41. package/dist/js/components.js +12 -0
  42. package/dist/js/components.js.map +1 -0
  43. package/dist/js/concorde-loaded.js +5 -0
  44. package/dist/js/concorde-loaded.js.map +1 -0
  45. package/dist/js/core/_types/endpoint.js +5 -0
  46. package/dist/js/core/_types/endpoint.js.map +1 -0
  47. package/dist/js/core/_types/key.js +2 -0
  48. package/dist/js/core/_types/key.js.map +1 -0
  49. package/dist/js/core/_types/types.js +3 -0
  50. package/dist/js/core/_types/types.js.map +1 -0
  51. package/dist/js/core/components/functional/3d/3d.js +151 -0
  52. package/dist/js/core/components/functional/3d/3d.js.map +1 -0
  53. package/dist/js/core/components/functional/3d/asset.js +20 -0
  54. package/dist/js/core/components/functional/3d/asset.js.map +1 -0
  55. package/dist/js/core/components/functional/3d/boot.js +47 -0
  56. package/dist/js/core/components/functional/3d/boot.js.map +1 -0
  57. package/dist/js/core/components/functional/3d/constants.js +88 -0
  58. package/dist/js/core/components/functional/3d/constants.js.map +1 -0
  59. package/dist/js/core/components/functional/3d/demo-content.js +38 -0
  60. package/dist/js/core/components/functional/3d/demo-content.js.map +1 -0
  61. package/dist/js/core/components/functional/3d/ensure.js +73 -0
  62. package/dist/js/core/components/functional/3d/ensure.js.map +1 -0
  63. package/dist/js/core/components/functional/3d/form-bind.js +25 -0
  64. package/dist/js/core/components/functional/3d/form-bind.js.map +1 -0
  65. package/dist/js/core/components/functional/3d/form-fields.js +76 -0
  66. package/dist/js/core/components/functional/3d/form-fields.js.map +1 -0
  67. package/dist/js/core/components/functional/3d/form-params.js +67 -0
  68. package/dist/js/core/components/functional/3d/form-params.js.map +1 -0
  69. package/dist/js/core/components/functional/3d/frame-capture.js +108 -0
  70. package/dist/js/core/components/functional/3d/frame-capture.js.map +1 -0
  71. package/dist/js/core/components/functional/3d/gl.js +34 -0
  72. package/dist/js/core/components/functional/3d/gl.js.map +1 -0
  73. package/dist/js/core/components/functional/3d/life.js +55 -0
  74. package/dist/js/core/components/functional/3d/life.js.map +1 -0
  75. package/dist/js/core/components/functional/3d/load.js +109 -0
  76. package/dist/js/core/components/functional/3d/load.js.map +1 -0
  77. package/dist/js/core/components/functional/3d/ops.js +78 -0
  78. package/dist/js/core/components/functional/3d/ops.js.map +1 -0
  79. package/dist/js/core/components/functional/3d/opts.js +2 -0
  80. package/dist/js/core/components/functional/3d/opts.js.map +1 -0
  81. package/dist/js/core/components/functional/3d/orbit.js +136 -0
  82. package/dist/js/core/components/functional/3d/orbit.js.map +1 -0
  83. package/dist/js/core/components/functional/3d/out-publish.js +103 -0
  84. package/dist/js/core/components/functional/3d/out-publish.js.map +1 -0
  85. package/dist/js/core/components/functional/3d/parse.js +95 -0
  86. package/dist/js/core/components/functional/3d/parse.js.map +1 -0
  87. package/dist/js/core/components/functional/3d/pick.js +62 -0
  88. package/dist/js/core/components/functional/3d/pick.js.map +1 -0
  89. package/dist/js/core/components/functional/3d/playback.js +56 -0
  90. package/dist/js/core/components/functional/3d/playback.js.map +1 -0
  91. package/dist/js/core/components/functional/3d/pointer.js +58 -0
  92. package/dist/js/core/components/functional/3d/pointer.js.map +1 -0
  93. package/dist/js/core/components/functional/3d/props.js +105 -0
  94. package/dist/js/core/components/functional/3d/props.js.map +1 -0
  95. package/dist/js/core/components/functional/3d/publisher-listen.js +6 -0
  96. package/dist/js/core/components/functional/3d/publisher-listen.js.map +1 -0
  97. package/dist/js/core/components/functional/3d/reload.js +60 -0
  98. package/dist/js/core/components/functional/3d/reload.js.map +1 -0
  99. package/dist/js/core/components/functional/3d/runtime.js +116 -0
  100. package/dist/js/core/components/functional/3d/runtime.js.map +1 -0
  101. package/dist/js/core/components/functional/3d/scene-runtime.js +6 -0
  102. package/dist/js/core/components/functional/3d/scene-runtime.js.map +1 -0
  103. package/dist/js/core/components/functional/3d/snapshot.js +47 -0
  104. package/dist/js/core/components/functional/3d/snapshot.js.map +1 -0
  105. package/dist/js/core/components/functional/3d/styles.js +38 -0
  106. package/dist/js/core/components/functional/3d/styles.js.map +1 -0
  107. package/dist/js/core/components/functional/3d/tune.js +42 -0
  108. package/dist/js/core/components/functional/3d/tune.js.map +1 -0
  109. package/dist/js/core/components/functional/3d/types.js +8 -0
  110. package/dist/js/core/components/functional/3d/types.js.map +1 -0
  111. package/dist/js/core/components/functional/3d/updated.js +58 -0
  112. package/dist/js/core/components/functional/3d/updated.js.map +1 -0
  113. package/dist/js/core/components/functional/3d/view.js +40 -0
  114. package/dist/js/core/components/functional/3d/view.js.map +1 -0
  115. package/dist/js/core/components/functional/3d/wire.js +34 -0
  116. package/dist/js/core/components/functional/3d/wire.js.map +1 -0
  117. package/dist/js/core/components/functional/date/date.js +272 -0
  118. package/dist/js/core/components/functional/date/date.js.map +1 -0
  119. package/dist/js/core/components/functional/example/example.js +44 -0
  120. package/dist/js/core/components/functional/example/example.js.map +1 -0
  121. package/dist/js/core/components/functional/fetch/fetch.js +79 -0
  122. package/dist/js/core/components/functional/fetch/fetch.js.map +1 -0
  123. package/dist/js/core/components/functional/functional.js +18 -0
  124. package/dist/js/core/components/functional/functional.js.map +1 -0
  125. package/dist/js/core/components/functional/if/if.js +39 -0
  126. package/dist/js/core/components/functional/if/if.js.map +1 -0
  127. package/dist/js/core/components/functional/infer/hugging-face/hf-cache.js +183 -0
  128. package/dist/js/core/components/functional/infer/hugging-face/hf-cache.js.map +1 -0
  129. package/dist/js/core/components/functional/infer/hugging-face/hf-config.js +50 -0
  130. package/dist/js/core/components/functional/infer/hugging-face/hf-config.js.map +1 -0
  131. package/dist/js/core/components/functional/infer/hugging-face/hf-controller.js +460 -0
  132. package/dist/js/core/components/functional/infer/hugging-face/hf-controller.js.map +1 -0
  133. package/dist/js/core/components/functional/infer/hugging-face/hf-engine.js +116 -0
  134. package/dist/js/core/components/functional/infer/hugging-face/hf-engine.js.map +1 -0
  135. package/dist/js/core/components/functional/infer/hugging-face/hf-input.js +170 -0
  136. package/dist/js/core/components/functional/infer/hugging-face/hf-input.js.map +1 -0
  137. package/dist/js/core/components/functional/infer/hugging-face/hf-protocol.js +2 -0
  138. package/dist/js/core/components/functional/infer/hugging-face/hf-protocol.js.map +1 -0
  139. package/dist/js/core/components/functional/infer/hugging-face/hf-registry.js +367 -0
  140. package/dist/js/core/components/functional/infer/hugging-face/hf-registry.js.map +1 -0
  141. package/dist/js/core/components/functional/infer/hugging-face/hf-schema.js +288 -0
  142. package/dist/js/core/components/functional/infer/hugging-face/hf-schema.js.map +1 -0
  143. package/dist/js/core/components/functional/infer/hugging-face/hf-worker-runtime.js +309 -0
  144. package/dist/js/core/components/functional/infer/hugging-face/hf-worker-runtime.js.map +1 -0
  145. package/dist/js/core/components/functional/infer/hugging-face/hugging-face-infer.js +213 -0
  146. package/dist/js/core/components/functional/infer/hugging-face/hugging-face-infer.js.map +1 -0
  147. package/dist/js/core/components/functional/infer/hugging-face/hugging-face.js +76 -0
  148. package/dist/js/core/components/functional/infer/hugging-face/hugging-face.js.map +1 -0
  149. package/dist/js/core/components/functional/infer/hugging-face/types.js +62 -0
  150. package/dist/js/core/components/functional/infer/hugging-face/types.js.map +1 -0
  151. package/dist/js/core/components/functional/jsonata/jsonata.js +119 -0
  152. package/dist/js/core/components/functional/jsonata/jsonata.js.map +1 -0
  153. package/dist/js/core/components/functional/list/list.js +341 -0
  154. package/dist/js/core/components/functional/list/list.js.map +1 -0
  155. package/dist/js/core/components/functional/mix/mix.js +103 -0
  156. package/dist/js/core/components/functional/mix/mix.js.map +1 -0
  157. package/dist/js/core/components/functional/queue/queue.js +450 -0
  158. package/dist/js/core/components/functional/queue/queue.js.map +1 -0
  159. package/dist/js/core/components/functional/router/redirect.js +54 -0
  160. package/dist/js/core/components/functional/router/redirect.js.map +1 -0
  161. package/dist/js/core/components/functional/router/router.js +179 -0
  162. package/dist/js/core/components/functional/router/router.js.map +1 -0
  163. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js +216 -0
  164. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js.map +1 -0
  165. package/dist/js/core/components/functional/sdui/default-library.json +108 -0
  166. package/dist/js/core/components/functional/sdui/sdui-utils.js +64 -0
  167. package/dist/js/core/components/functional/sdui/sdui-utils.js.map +1 -0
  168. package/dist/js/core/components/functional/sdui/sdui.js +271 -0
  169. package/dist/js/core/components/functional/sdui/sdui.js.map +1 -0
  170. package/dist/js/core/components/functional/sdui/types.js +2 -0
  171. package/dist/js/core/components/functional/sdui/types.js.map +1 -0
  172. package/dist/js/core/components/functional/shader/gl-runtime.js +603 -0
  173. package/dist/js/core/components/functional/shader/gl-runtime.js.map +1 -0
  174. package/dist/js/core/components/functional/shader/shader.js +1593 -0
  175. package/dist/js/core/components/functional/shader/shader.js.map +1 -0
  176. package/dist/js/core/components/functional/shader/shadertoy-prelude.js +48 -0
  177. package/dist/js/core/components/functional/shader/shadertoy-prelude.js.map +1 -0
  178. package/dist/js/core/components/functional/shader/types.js +179 -0
  179. package/dist/js/core/components/functional/shader/types.js.map +1 -0
  180. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js +22 -0
  181. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js.map +1 -0
  182. package/dist/js/core/components/functional/states/states.js +172 -0
  183. package/dist/js/core/components/functional/states/states.js.map +1 -0
  184. package/dist/js/core/components/functional/submit/submit.js +284 -0
  185. package/dist/js/core/components/functional/submit/submit.js.map +1 -0
  186. package/dist/js/core/components/functional/subscriber/subscriber.js +39 -0
  187. package/dist/js/core/components/functional/subscriber/subscriber.js.map +1 -0
  188. package/dist/js/core/components/functional/translation/translation.js +28 -0
  189. package/dist/js/core/components/functional/translation/translation.js.map +1 -0
  190. package/dist/js/core/components/functional/value/value.js +28 -0
  191. package/dist/js/core/components/functional/value/value.js.map +1 -0
  192. package/dist/js/core/components/functional/webgpu/canvas2d-fallback.js +117 -0
  193. package/dist/js/core/components/functional/webgpu/canvas2d-fallback.js.map +1 -0
  194. package/dist/js/core/components/functional/webgpu/form-bind.js +92 -0
  195. package/dist/js/core/components/functional/webgpu/form-bind.js.map +1 -0
  196. package/dist/js/core/components/functional/webgpu/gl-fallback.js +135 -0
  197. package/dist/js/core/components/functional/webgpu/gl-fallback.js.map +1 -0
  198. package/dist/js/core/components/functional/webgpu/gpu-runtime.js +305 -0
  199. package/dist/js/core/components/functional/webgpu/gpu-runtime.js.map +1 -0
  200. package/dist/js/core/components/functional/webgpu/helpers.js +44 -0
  201. package/dist/js/core/components/functional/webgpu/helpers.js.map +1 -0
  202. package/dist/js/core/components/functional/webgpu/out-frame.js +117 -0
  203. package/dist/js/core/components/functional/webgpu/out-frame.js.map +1 -0
  204. package/dist/js/core/components/functional/webgpu/particles-runtime.js +407 -0
  205. package/dist/js/core/components/functional/webgpu/particles-runtime.js.map +1 -0
  206. package/dist/js/core/components/functional/webgpu/pointer.js +56 -0
  207. package/dist/js/core/components/functional/webgpu/pointer.js.map +1 -0
  208. package/dist/js/core/components/functional/webgpu/types.js +24 -0
  209. package/dist/js/core/components/functional/webgpu/types.js.map +1 -0
  210. package/dist/js/core/components/functional/webgpu/webgpu.js +667 -0
  211. package/dist/js/core/components/functional/webgpu/webgpu.js.map +1 -0
  212. package/dist/js/core/components/functional/webgpu/wgsl-prelude.js +77 -0
  213. package/dist/js/core/components/functional/webgpu/wgsl-prelude.js.map +1 -0
  214. package/dist/js/core/components/ui/_css/scroll.js +27 -0
  215. package/dist/js/core/components/ui/_css/scroll.js.map +1 -0
  216. package/dist/js/core/components/ui/_css/shadow.js +22 -0
  217. package/dist/js/core/components/ui/_css/shadow.js.map +1 -0
  218. package/dist/js/core/components/ui/_css/size.js +36 -0
  219. package/dist/js/core/components/ui/_css/size.js.map +1 -0
  220. package/dist/js/core/components/ui/_css/type.js +92 -0
  221. package/dist/js/core/components/ui/_css/type.js.map +1 -0
  222. package/dist/js/core/components/ui/alert/alert.js +213 -0
  223. package/dist/js/core/components/ui/alert/alert.js.map +1 -0
  224. package/dist/js/core/components/ui/alert-messages/alert-messages.js +68 -0
  225. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +1 -0
  226. package/dist/js/core/components/ui/badge/badge.js +199 -0
  227. package/dist/js/core/components/ui/badge/badge.js.map +1 -0
  228. package/dist/js/core/components/ui/button/button.js +697 -0
  229. package/dist/js/core/components/ui/button/button.js.map +1 -0
  230. package/dist/js/core/components/ui/captcha/altchaStyles.js +226 -0
  231. package/dist/js/core/components/ui/captcha/altchaStyles.js.map +1 -0
  232. package/dist/js/core/components/ui/captcha/captcha.js +167 -0
  233. package/dist/js/core/components/ui/captcha/captcha.js.map +1 -0
  234. package/dist/js/core/components/ui/card/card-footer.js +26 -0
  235. package/dist/js/core/components/ui/card/card-footer.js.map +1 -0
  236. package/dist/js/core/components/ui/card/card-header-descripton.js +30 -0
  237. package/dist/js/core/components/ui/card/card-header-descripton.js.map +1 -0
  238. package/dist/js/core/components/ui/card/card-header.js +79 -0
  239. package/dist/js/core/components/ui/card/card-header.js.map +1 -0
  240. package/dist/js/core/components/ui/card/card-main.js +26 -0
  241. package/dist/js/core/components/ui/card/card-main.js.map +1 -0
  242. package/dist/js/core/components/ui/card/card.js +67 -0
  243. package/dist/js/core/components/ui/card/card.js.map +1 -0
  244. package/dist/js/core/components/ui/divider/divider.js +200 -0
  245. package/dist/js/core/components/ui/divider/divider.js.map +1 -0
  246. package/dist/js/core/components/ui/form/checkbox/checkbox.js +257 -0
  247. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +1 -0
  248. package/dist/js/core/components/ui/form/css/form-control.js +393 -0
  249. package/dist/js/core/components/ui/form/css/form-control.js.map +1 -0
  250. package/dist/js/core/components/ui/form/fieldset/fieldset.js +124 -0
  251. package/dist/js/core/components/ui/form/fieldset/fieldset.js.map +1 -0
  252. package/dist/js/core/components/ui/form/fieldset/legend-description.js +38 -0
  253. package/dist/js/core/components/ui/form/fieldset/legend-description.js.map +1 -0
  254. package/dist/js/core/components/ui/form/fieldset/legend.js +130 -0
  255. package/dist/js/core/components/ui/form/fieldset/legend.js.map +1 -0
  256. package/dist/js/core/components/ui/form/form-actions/form-actions.js +47 -0
  257. package/dist/js/core/components/ui/form/form-actions/form-actions.js.map +1 -0
  258. package/dist/js/core/components/ui/form/form-layout/form-layout.js +84 -0
  259. package/dist/js/core/components/ui/form/form-layout/form-layout.js.map +1 -0
  260. package/dist/js/core/components/ui/form/input/input.js +316 -0
  261. package/dist/js/core/components/ui/form/input/input.js.map +1 -0
  262. package/dist/js/core/components/ui/form/input/password-helper.js +134 -0
  263. package/dist/js/core/components/ui/form/input/password-helper.js.map +1 -0
  264. package/dist/js/core/components/ui/form/input/same-value-helper.js +85 -0
  265. package/dist/js/core/components/ui/form/input/same-value-helper.js.map +1 -0
  266. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +405 -0
  267. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +1 -0
  268. package/dist/js/core/components/ui/form/radio/radio.js +63 -0
  269. package/dist/js/core/components/ui/form/radio/radio.js.map +1 -0
  270. package/dist/js/core/components/ui/form/select/select.js +323 -0
  271. package/dist/js/core/components/ui/form/select/select.js.map +1 -0
  272. package/dist/js/core/components/ui/form/switch/switch.js +90 -0
  273. package/dist/js/core/components/ui/form/switch/switch.js.map +1 -0
  274. package/dist/js/core/components/ui/form/textarea/textarea.js +162 -0
  275. package/dist/js/core/components/ui/form/textarea/textarea.js.map +1 -0
  276. package/dist/js/core/components/ui/group/group.js +128 -0
  277. package/dist/js/core/components/ui/group/group.js.map +1 -0
  278. package/dist/js/core/components/ui/icon/icon.js +145 -0
  279. package/dist/js/core/components/ui/icon/icon.js.map +1 -0
  280. package/dist/js/core/components/ui/icon/icons.js +184 -0
  281. package/dist/js/core/components/ui/icon/icons.js.map +1 -0
  282. package/dist/js/core/components/ui/icon/icons.json +1 -0
  283. package/dist/js/core/components/ui/image/image.js +160 -0
  284. package/dist/js/core/components/ui/image/image.js.map +1 -0
  285. package/dist/js/core/components/ui/link/link.js +125 -0
  286. package/dist/js/core/components/ui/link/link.js.map +1 -0
  287. package/dist/js/core/components/ui/loader/loader.js +106 -0
  288. package/dist/js/core/components/ui/loader/loader.js.map +1 -0
  289. package/dist/js/core/components/ui/loader/styles/fixed.js +56 -0
  290. package/dist/js/core/components/ui/loader/styles/fixed.js.map +1 -0
  291. package/dist/js/core/components/ui/loader/styles/inline.js +70 -0
  292. package/dist/js/core/components/ui/loader/styles/inline.js.map +1 -0
  293. package/dist/js/core/components/ui/menu/menu-item.js +35 -0
  294. package/dist/js/core/components/ui/menu/menu-item.js.map +1 -0
  295. package/dist/js/core/components/ui/menu/menu.js +436 -0
  296. package/dist/js/core/components/ui/menu/menu.js.map +1 -0
  297. package/dist/js/core/components/ui/modal/modal-actions.js +44 -0
  298. package/dist/js/core/components/ui/modal/modal-actions.js.map +1 -0
  299. package/dist/js/core/components/ui/modal/modal-close.js +56 -0
  300. package/dist/js/core/components/ui/modal/modal-close.js.map +1 -0
  301. package/dist/js/core/components/ui/modal/modal-content.js +27 -0
  302. package/dist/js/core/components/ui/modal/modal-content.js.map +1 -0
  303. package/dist/js/core/components/ui/modal/modal-subtitle.js +34 -0
  304. package/dist/js/core/components/ui/modal/modal-subtitle.js.map +1 -0
  305. package/dist/js/core/components/ui/modal/modal-title.js +35 -0
  306. package/dist/js/core/components/ui/modal/modal-title.js.map +1 -0
  307. package/dist/js/core/components/ui/modal/modal-utils.js +32 -0
  308. package/dist/js/core/components/ui/modal/modal-utils.js.map +1 -0
  309. package/dist/js/core/components/ui/modal/modal.js +568 -0
  310. package/dist/js/core/components/ui/modal/modal.js.map +1 -0
  311. package/dist/js/core/components/ui/pop/pop.js +337 -0
  312. package/dist/js/core/components/ui/pop/pop.js.map +1 -0
  313. package/dist/js/core/components/ui/progress/progress.js +164 -0
  314. package/dist/js/core/components/ui/progress/progress.js.map +1 -0
  315. package/dist/js/core/components/ui/table/table-caption.js +29 -0
  316. package/dist/js/core/components/ui/table/table-caption.js.map +1 -0
  317. package/dist/js/core/components/ui/table/table-tbody.js +41 -0
  318. package/dist/js/core/components/ui/table/table-tbody.js.map +1 -0
  319. package/dist/js/core/components/ui/table/table-td.js +69 -0
  320. package/dist/js/core/components/ui/table/table-td.js.map +1 -0
  321. package/dist/js/core/components/ui/table/table-tfoot.js +28 -0
  322. package/dist/js/core/components/ui/table/table-tfoot.js.map +1 -0
  323. package/dist/js/core/components/ui/table/table-th.js +80 -0
  324. package/dist/js/core/components/ui/table/table-th.js.map +1 -0
  325. package/dist/js/core/components/ui/table/table-thead.js +26 -0
  326. package/dist/js/core/components/ui/table/table-thead.js.map +1 -0
  327. package/dist/js/core/components/ui/table/table-tr.js +67 -0
  328. package/dist/js/core/components/ui/table/table-tr.js.map +1 -0
  329. package/dist/js/core/components/ui/table/table.js +106 -0
  330. package/dist/js/core/components/ui/table/table.js.map +1 -0
  331. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js +74 -0
  332. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js.map +1 -0
  333. package/dist/js/core/components/ui/theme/theme-collection/dark.js +39 -0
  334. package/dist/js/core/components/ui/theme/theme-collection/dark.js.map +1 -0
  335. package/dist/js/core/components/ui/theme/theme-collection/light.js +32 -0
  336. package/dist/js/core/components/ui/theme/theme-collection/light.js.map +1 -0
  337. package/dist/js/core/components/ui/theme/theme.js +150 -0
  338. package/dist/js/core/components/ui/theme/theme.js.map +1 -0
  339. package/dist/js/core/components/ui/toast/message-subscriber.js +41 -0
  340. package/dist/js/core/components/ui/toast/message-subscriber.js.map +1 -0
  341. package/dist/js/core/components/ui/toast/toast-item.js +379 -0
  342. package/dist/js/core/components/ui/toast/toast-item.js.map +1 -0
  343. package/dist/js/core/components/ui/toast/toast.js +269 -0
  344. package/dist/js/core/components/ui/toast/toast.js.map +1 -0
  345. package/dist/js/core/components/ui/toast/types.js +2 -0
  346. package/dist/js/core/components/ui/toast/types.js.map +1 -0
  347. package/dist/js/core/components/ui/tooltip/tooltip.js +219 -0
  348. package/dist/js/core/components/ui/tooltip/tooltip.js.map +1 -0
  349. package/dist/js/core/components/ui/ui.js +41 -0
  350. package/dist/js/core/components/ui/ui.js.map +1 -0
  351. package/dist/js/core/core.js +14 -0
  352. package/dist/js/core/core.js.map +1 -0
  353. package/dist/js/core/decorators/Subscriber.js +10 -0
  354. package/dist/js/core/decorators/Subscriber.js.map +1 -0
  355. package/dist/js/core/decorators/api.js +806 -0
  356. package/dist/js/core/decorators/api.js.map +1 -0
  357. package/dist/js/core/decorators/lifecycle.js +67 -0
  358. package/dist/js/core/decorators/lifecycle.js.map +1 -0
  359. package/dist/js/core/decorators/subscriber/ancestorAttribute.js +27 -0
  360. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +1 -0
  361. package/dist/js/core/decorators/subscriber/autoFill.js +26 -0
  362. package/dist/js/core/decorators/subscriber/autoFill.js.map +1 -0
  363. package/dist/js/core/decorators/subscriber/autoSubscribe.js +46 -0
  364. package/dist/js/core/decorators/subscriber/autoSubscribe.js.map +1 -0
  365. package/dist/js/core/decorators/subscriber/bind.js +150 -0
  366. package/dist/js/core/decorators/subscriber/bind.js.map +1 -0
  367. package/dist/js/core/decorators/subscriber/common.js +44 -0
  368. package/dist/js/core/decorators/subscriber/common.js.map +1 -0
  369. package/dist/js/core/decorators/subscriber/derive.js +60 -0
  370. package/dist/js/core/decorators/subscriber/derive.js.map +1 -0
  371. package/dist/js/core/decorators/subscriber/dynamicPath.js +75 -0
  372. package/dist/js/core/decorators/subscriber/dynamicPath.js.map +1 -0
  373. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js +138 -0
  374. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js.map +1 -0
  375. package/dist/js/core/decorators/subscriber/handle.js +22 -0
  376. package/dist/js/core/decorators/subscriber/handle.js.map +1 -0
  377. package/dist/js/core/decorators/subscriber/onAssign.js +199 -0
  378. package/dist/js/core/decorators/subscriber/onAssign.js.map +1 -0
  379. package/dist/js/core/decorators/subscriber/publish.js +108 -0
  380. package/dist/js/core/decorators/subscriber/publish.js.map +1 -0
  381. package/dist/js/core/decorators/subscriber/publisherPath.js +16 -0
  382. package/dist/js/core/decorators/subscriber/publisherPath.js.map +1 -0
  383. package/dist/js/core/decorators/subscriber/subscribe.js +20 -0
  384. package/dist/js/core/decorators/subscriber/subscribe.js.map +1 -0
  385. package/dist/js/core/directives/DataProvider.js +127 -0
  386. package/dist/js/core/directives/DataProvider.js.map +1 -0
  387. package/dist/js/core/directives/Wording.js +221 -0
  388. package/dist/js/core/directives/Wording.js.map +1 -0
  389. package/dist/js/core/mixins/Fetcher.js +325 -0
  390. package/dist/js/core/mixins/Fetcher.js.map +1 -0
  391. package/dist/js/core/mixins/FormCheckable.js +313 -0
  392. package/dist/js/core/mixins/FormCheckable.js.map +1 -0
  393. package/dist/js/core/mixins/FormElement.js +304 -0
  394. package/dist/js/core/mixins/FormElement.js.map +1 -0
  395. package/dist/js/core/mixins/FormInput.js +82 -0
  396. package/dist/js/core/mixins/FormInput.js.map +1 -0
  397. package/dist/js/core/mixins/Subscriber.js +354 -0
  398. package/dist/js/core/mixins/Subscriber.js.map +1 -0
  399. package/dist/js/core/mixins/TemplatesContainer.js +70 -0
  400. package/dist/js/core/mixins/TemplatesContainer.js.map +1 -0
  401. package/dist/js/core/mixins/mixins.js +7 -0
  402. package/dist/js/core/mixins/mixins.js.map +1 -0
  403. package/dist/js/core/utils/AncestorAttributeObserver.js +140 -0
  404. package/dist/js/core/utils/AncestorAttributeObserver.js.map +1 -0
  405. package/dist/js/core/utils/Arrays.js +141 -0
  406. package/dist/js/core/utils/Arrays.js.map +1 -0
  407. package/dist/js/core/utils/DataBindObserver.js +265 -0
  408. package/dist/js/core/utils/DataBindObserver.js.map +1 -0
  409. package/dist/js/core/utils/Electron.js +14 -0
  410. package/dist/js/core/utils/Electron.js.map +1 -0
  411. package/dist/js/core/utils/Format.js +43 -0
  412. package/dist/js/core/utils/Format.js.map +1 -0
  413. package/dist/js/core/utils/HTML.js +307 -0
  414. package/dist/js/core/utils/HTML.js.map +1 -0
  415. package/dist/js/core/utils/LocationHandler.js +143 -0
  416. package/dist/js/core/utils/LocationHandler.js.map +1 -0
  417. package/dist/js/core/utils/Objects.js +111 -0
  418. package/dist/js/core/utils/Objects.js.map +1 -0
  419. package/dist/js/core/utils/PublisherProxy.js +970 -0
  420. package/dist/js/core/utils/PublisherProxy.js.map +1 -0
  421. package/dist/js/core/utils/SafariScrollGuard.js +384 -0
  422. package/dist/js/core/utils/SafariScrollGuard.js.map +1 -0
  423. package/dist/js/core/utils/Utils.js +19 -0
  424. package/dist/js/core/utils/Utils.js.map +1 -0
  425. package/dist/js/core/utils/aesCrypto.js +98 -0
  426. package/dist/js/core/utils/aesCrypto.js.map +1 -0
  427. package/dist/js/core/utils/api.js +595 -0
  428. package/dist/js/core/utils/api.js.map +1 -0
  429. package/dist/js/core/utils/dataProviderKey.js +64 -0
  430. package/dist/js/core/utils/dataProviderKey.js.map +1 -0
  431. package/dist/js/core/utils/derive.js +246 -0
  432. package/dist/js/core/utils/derive.js.map +1 -0
  433. package/dist/js/core/utils/endpoint.js +74 -0
  434. package/dist/js/core/utils/endpoint.js.map +1 -0
  435. package/dist/js/core/utils/jsonataHelpers.js +84 -0
  436. package/dist/js/core/utils/jsonataHelpers.js.map +1 -0
  437. package/dist/js/core/utils/jsonataRuntime.js +75 -0
  438. package/dist/js/core/utils/jsonataRuntime.js.map +1 -0
  439. package/dist/js/core/utils/mediaRef.js +120 -0
  440. package/dist/js/core/utils/mediaRef.js.map +1 -0
  441. package/dist/js/core/utils/route.js +149 -0
  442. package/dist/js/core/utils/route.js.map +1 -0
  443. package/dist/js/core/utils/similarity.js +44 -0
  444. package/dist/js/core/utils/similarity.js.map +1 -0
  445. package/dist/js/core/utils/url-pattern.js +3 -0
  446. package/dist/js/core/utils/url-pattern.js.map +1 -0
  447. package/dist/js/dataprovider.js +2 -0
  448. package/dist/js/dataprovider.js.map +1 -0
  449. package/dist/js/decorators.js +43 -0
  450. package/dist/js/decorators.js.map +1 -0
  451. package/dist/js/directives.js +30 -0
  452. package/dist/js/directives.js.map +1 -0
  453. package/dist/js/index.js +8 -0
  454. package/dist/js/index.js.map +1 -0
  455. package/dist/js/mixins.js +23 -0
  456. package/dist/js/mixins.js.map +1 -0
  457. package/dist/js/test-utils/TestUtils.js +10 -0
  458. package/dist/js/test-utils/TestUtils.js.map +1 -0
  459. package/dist/js/utils.js +46 -0
  460. package/dist/js/utils.js.map +1 -0
  461. package/dist/types/addons/3d.d.ts +6 -0
  462. package/dist/types/addons/3d.d.ts.map +1 -0
  463. package/dist/types/addons/hugging-face-infer.d.ts +8 -0
  464. package/dist/types/addons/hugging-face-infer.d.ts.map +1 -0
  465. package/dist/types/addons/shader.d.ts +6 -0
  466. package/dist/types/addons/shader.d.ts.map +1 -0
  467. package/dist/types/addons/webgpu.d.ts +7 -0
  468. package/dist/types/addons/webgpu.d.ts.map +1 -0
  469. package/dist/types/components.d.ts +5 -0
  470. package/dist/types/components.d.ts.map +1 -0
  471. package/dist/types/concorde-loaded.d.ts +2 -0
  472. package/dist/types/concorde-loaded.d.ts.map +1 -0
  473. package/dist/types/core/_types/endpoint.d.ts +5 -0
  474. package/dist/types/core/_types/endpoint.d.ts.map +1 -0
  475. package/dist/types/core/_types/key.d.ts +2 -0
  476. package/dist/types/core/_types/key.d.ts.map +1 -0
  477. package/dist/types/core/_types/types.d.ts +28 -0
  478. package/dist/types/core/_types/types.d.ts.map +1 -0
  479. package/dist/types/core/components/functional/3d/3d.d.ts +66 -0
  480. package/dist/types/core/components/functional/3d/3d.d.ts.map +1 -0
  481. package/dist/types/core/components/functional/3d/asset.d.ts +12 -0
  482. package/dist/types/core/components/functional/3d/asset.d.ts.map +1 -0
  483. package/dist/types/core/components/functional/3d/boot.d.ts +23 -0
  484. package/dist/types/core/components/functional/3d/boot.d.ts.map +1 -0
  485. package/dist/types/core/components/functional/3d/constants.d.ts +43 -0
  486. package/dist/types/core/components/functional/3d/constants.d.ts.map +1 -0
  487. package/dist/types/core/components/functional/3d/demo-content.d.ts +10 -0
  488. package/dist/types/core/components/functional/3d/demo-content.d.ts.map +1 -0
  489. package/dist/types/core/components/functional/3d/ensure.d.ts +36 -0
  490. package/dist/types/core/components/functional/3d/ensure.d.ts.map +1 -0
  491. package/dist/types/core/components/functional/3d/form-bind.d.ts +20 -0
  492. package/dist/types/core/components/functional/3d/form-bind.d.ts.map +1 -0
  493. package/dist/types/core/components/functional/3d/form-fields.d.ts +14 -0
  494. package/dist/types/core/components/functional/3d/form-fields.d.ts.map +1 -0
  495. package/dist/types/core/components/functional/3d/form-params.d.ts +37 -0
  496. package/dist/types/core/components/functional/3d/form-params.d.ts.map +1 -0
  497. package/dist/types/core/components/functional/3d/frame-capture.d.ts +33 -0
  498. package/dist/types/core/components/functional/3d/frame-capture.d.ts.map +1 -0
  499. package/dist/types/core/components/functional/3d/gl.d.ts +4 -0
  500. package/dist/types/core/components/functional/3d/gl.d.ts.map +1 -0
  501. package/dist/types/core/components/functional/3d/life.d.ts +41 -0
  502. package/dist/types/core/components/functional/3d/life.d.ts.map +1 -0
  503. package/dist/types/core/components/functional/3d/load.d.ts +36 -0
  504. package/dist/types/core/components/functional/3d/load.d.ts.map +1 -0
  505. package/dist/types/core/components/functional/3d/ops.d.ts +48 -0
  506. package/dist/types/core/components/functional/3d/ops.d.ts.map +1 -0
  507. package/dist/types/core/components/functional/3d/opts.d.ts +16 -0
  508. package/dist/types/core/components/functional/3d/opts.d.ts.map +1 -0
  509. package/dist/types/core/components/functional/3d/orbit.d.ts +55 -0
  510. package/dist/types/core/components/functional/3d/orbit.d.ts.map +1 -0
  511. package/dist/types/core/components/functional/3d/out-publish.d.ts +47 -0
  512. package/dist/types/core/components/functional/3d/out-publish.d.ts.map +1 -0
  513. package/dist/types/core/components/functional/3d/parse.d.ts +23 -0
  514. package/dist/types/core/components/functional/3d/parse.d.ts.map +1 -0
  515. package/dist/types/core/components/functional/3d/pick.d.ts +32 -0
  516. package/dist/types/core/components/functional/3d/pick.d.ts.map +1 -0
  517. package/dist/types/core/components/functional/3d/playback.d.ts +26 -0
  518. package/dist/types/core/components/functional/3d/playback.d.ts.map +1 -0
  519. package/dist/types/core/components/functional/3d/pointer.d.ts +27 -0
  520. package/dist/types/core/components/functional/3d/pointer.d.ts.map +1 -0
  521. package/dist/types/core/components/functional/3d/props.d.ts +30 -0
  522. package/dist/types/core/components/functional/3d/props.d.ts.map +1 -0
  523. package/dist/types/core/components/functional/3d/publisher-listen.d.ts +8 -0
  524. package/dist/types/core/components/functional/3d/publisher-listen.d.ts.map +1 -0
  525. package/dist/types/core/components/functional/3d/reload.d.ts +35 -0
  526. package/dist/types/core/components/functional/3d/reload.d.ts.map +1 -0
  527. package/dist/types/core/components/functional/3d/runtime.d.ts +75 -0
  528. package/dist/types/core/components/functional/3d/runtime.d.ts.map +1 -0
  529. package/dist/types/core/components/functional/3d/scene-runtime.d.ts +6 -0
  530. package/dist/types/core/components/functional/3d/scene-runtime.d.ts.map +1 -0
  531. package/dist/types/core/components/functional/3d/snapshot.d.ts +29 -0
  532. package/dist/types/core/components/functional/3d/snapshot.d.ts.map +1 -0
  533. package/dist/types/core/components/functional/3d/styles.d.ts +2 -0
  534. package/dist/types/core/components/functional/3d/styles.d.ts.map +1 -0
  535. package/dist/types/core/components/functional/3d/tune.d.ts +32 -0
  536. package/dist/types/core/components/functional/3d/tune.d.ts.map +1 -0
  537. package/dist/types/core/components/functional/3d/types.d.ts +133 -0
  538. package/dist/types/core/components/functional/3d/types.d.ts.map +1 -0
  539. package/dist/types/core/components/functional/3d/updated.d.ts +7 -0
  540. package/dist/types/core/components/functional/3d/updated.d.ts.map +1 -0
  541. package/dist/types/core/components/functional/3d/view.d.ts +25 -0
  542. package/dist/types/core/components/functional/3d/view.d.ts.map +1 -0
  543. package/dist/types/core/components/functional/3d/wire.d.ts +32 -0
  544. package/dist/types/core/components/functional/3d/wire.d.ts.map +1 -0
  545. package/dist/types/core/components/functional/date/date.d.ts +52 -0
  546. package/dist/types/core/components/functional/date/date.d.ts.map +1 -0
  547. package/dist/types/core/components/functional/example/example.d.ts +15 -0
  548. package/dist/types/core/components/functional/example/example.d.ts.map +1 -0
  549. package/dist/types/core/components/functional/fetch/fetch.d.ts +102 -0
  550. package/dist/types/core/components/functional/fetch/fetch.d.ts.map +1 -0
  551. package/dist/types/core/components/functional/functional.d.ts +18 -0
  552. package/dist/types/core/components/functional/functional.d.ts.map +1 -0
  553. package/dist/types/core/components/functional/if/if.d.ts +13 -0
  554. package/dist/types/core/components/functional/if/if.d.ts.map +1 -0
  555. package/dist/types/core/components/functional/infer/hugging-face/hf-cache.d.ts +21 -0
  556. package/dist/types/core/components/functional/infer/hugging-face/hf-cache.d.ts.map +1 -0
  557. package/dist/types/core/components/functional/infer/hugging-face/hf-config.d.ts +133 -0
  558. package/dist/types/core/components/functional/infer/hugging-face/hf-config.d.ts.map +1 -0
  559. package/dist/types/core/components/functional/infer/hugging-face/hf-controller.d.ts +79 -0
  560. package/dist/types/core/components/functional/infer/hugging-face/hf-controller.d.ts.map +1 -0
  561. package/dist/types/core/components/functional/infer/hugging-face/hf-engine.d.ts +43 -0
  562. package/dist/types/core/components/functional/infer/hugging-face/hf-engine.d.ts.map +1 -0
  563. package/dist/types/core/components/functional/infer/hugging-face/hf-input.d.ts +47 -0
  564. package/dist/types/core/components/functional/infer/hugging-face/hf-input.d.ts.map +1 -0
  565. package/dist/types/core/components/functional/infer/hugging-face/hf-protocol.d.ts +95 -0
  566. package/dist/types/core/components/functional/infer/hugging-face/hf-protocol.d.ts.map +1 -0
  567. package/dist/types/core/components/functional/infer/hugging-face/hf-registry.d.ts +77 -0
  568. package/dist/types/core/components/functional/infer/hugging-face/hf-registry.d.ts.map +1 -0
  569. package/dist/types/core/components/functional/infer/hugging-face/hf-schema.d.ts +1251 -0
  570. package/dist/types/core/components/functional/infer/hugging-face/hf-schema.d.ts.map +1 -0
  571. package/dist/types/core/components/functional/infer/hugging-face/hf-worker-runtime.d.ts +56 -0
  572. package/dist/types/core/components/functional/infer/hugging-face/hf-worker-runtime.d.ts.map +1 -0
  573. package/dist/types/core/components/functional/infer/hugging-face/hugging-face-infer.d.ts +67 -0
  574. package/dist/types/core/components/functional/infer/hugging-face/hugging-face-infer.d.ts.map +1 -0
  575. package/dist/types/core/components/functional/infer/hugging-face/hugging-face.d.ts +116 -0
  576. package/dist/types/core/components/functional/infer/hugging-face/hugging-face.d.ts.map +1 -0
  577. package/dist/types/core/components/functional/infer/hugging-face/types.d.ts +167 -0
  578. package/dist/types/core/components/functional/infer/hugging-face/types.d.ts.map +1 -0
  579. package/dist/types/core/components/functional/jsonata/jsonata.d.ts +29 -0
  580. package/dist/types/core/components/functional/jsonata/jsonata.d.ts.map +1 -0
  581. package/dist/types/core/components/functional/list/list.d.ts +149 -0
  582. package/dist/types/core/components/functional/list/list.d.ts.map +1 -0
  583. package/dist/types/core/components/functional/mix/mix.d.ts +23 -0
  584. package/dist/types/core/components/functional/mix/mix.d.ts.map +1 -0
  585. package/dist/types/core/components/functional/queue/queue.d.ts +93 -0
  586. package/dist/types/core/components/functional/queue/queue.d.ts.map +1 -0
  587. package/dist/types/core/components/functional/router/redirect.d.ts +19 -0
  588. package/dist/types/core/components/functional/router/redirect.d.ts.map +1 -0
  589. package/dist/types/core/components/functional/router/router.d.ts +46 -0
  590. package/dist/types/core/components/functional/router/router.d.ts.map +1 -0
  591. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts +59 -0
  592. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts.map +1 -0
  593. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts +6 -0
  594. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts.map +1 -0
  595. package/dist/types/core/components/functional/sdui/sdui.d.ts +148 -0
  596. package/dist/types/core/components/functional/sdui/sdui.d.ts.map +1 -0
  597. package/dist/types/core/components/functional/sdui/types.d.ts +38 -0
  598. package/dist/types/core/components/functional/sdui/types.d.ts.map +1 -0
  599. package/dist/types/core/components/functional/shader/gl-runtime.d.ts +71 -0
  600. package/dist/types/core/components/functional/shader/gl-runtime.d.ts.map +1 -0
  601. package/dist/types/core/components/functional/shader/shader.d.ts +274 -0
  602. package/dist/types/core/components/functional/shader/shader.d.ts.map +1 -0
  603. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts +6 -0
  604. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts.map +1 -0
  605. package/dist/types/core/components/functional/shader/types.d.ts +256 -0
  606. package/dist/types/core/components/functional/shader/types.d.ts.map +1 -0
  607. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts +6 -0
  608. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts.map +1 -0
  609. package/dist/types/core/components/functional/states/states.d.ts +42 -0
  610. package/dist/types/core/components/functional/states/states.d.ts.map +1 -0
  611. package/dist/types/core/components/functional/submit/submit.d.ts +37 -0
  612. package/dist/types/core/components/functional/submit/submit.d.ts.map +1 -0
  613. package/dist/types/core/components/functional/subscriber/subscriber.d.ts +13 -0
  614. package/dist/types/core/components/functional/subscriber/subscriber.d.ts.map +1 -0
  615. package/dist/types/core/components/functional/translation/translation.d.ts +7 -0
  616. package/dist/types/core/components/functional/translation/translation.d.ts.map +1 -0
  617. package/dist/types/core/components/functional/value/value.d.ts +8 -0
  618. package/dist/types/core/components/functional/value/value.d.ts.map +1 -0
  619. package/dist/types/core/components/functional/webgpu/canvas2d-fallback.d.ts +29 -0
  620. package/dist/types/core/components/functional/webgpu/canvas2d-fallback.d.ts.map +1 -0
  621. package/dist/types/core/components/functional/webgpu/form-bind.d.ts +43 -0
  622. package/dist/types/core/components/functional/webgpu/form-bind.d.ts.map +1 -0
  623. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts +31 -0
  624. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts.map +1 -0
  625. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts +53 -0
  626. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts.map +1 -0
  627. package/dist/types/core/components/functional/webgpu/helpers.d.ts +9 -0
  628. package/dist/types/core/components/functional/webgpu/helpers.d.ts.map +1 -0
  629. package/dist/types/core/components/functional/webgpu/out-frame.d.ts +29 -0
  630. package/dist/types/core/components/functional/webgpu/out-frame.d.ts.map +1 -0
  631. package/dist/types/core/components/functional/webgpu/particles-runtime.d.ts +37 -0
  632. package/dist/types/core/components/functional/webgpu/particles-runtime.d.ts.map +1 -0
  633. package/dist/types/core/components/functional/webgpu/pointer.d.ts +41 -0
  634. package/dist/types/core/components/functional/webgpu/pointer.d.ts.map +1 -0
  635. package/dist/types/core/components/functional/webgpu/types.d.ts +75 -0
  636. package/dist/types/core/components/functional/webgpu/types.d.ts.map +1 -0
  637. package/dist/types/core/components/functional/webgpu/webgpu.d.ts +123 -0
  638. package/dist/types/core/components/functional/webgpu/webgpu.d.ts.map +1 -0
  639. package/dist/types/core/components/functional/webgpu/wgsl-prelude.d.ts +8 -0
  640. package/dist/types/core/components/functional/webgpu/wgsl-prelude.d.ts.map +1 -0
  641. package/dist/types/core/components/ui/_css/scroll.d.ts +2 -0
  642. package/dist/types/core/components/ui/_css/scroll.d.ts.map +1 -0
  643. package/dist/types/core/components/ui/_css/shadow.d.ts +3 -0
  644. package/dist/types/core/components/ui/_css/shadow.d.ts.map +1 -0
  645. package/dist/types/core/components/ui/_css/size.d.ts +3 -0
  646. package/dist/types/core/components/ui/_css/size.d.ts.map +1 -0
  647. package/dist/types/core/components/ui/_css/type.d.ts +3 -0
  648. package/dist/types/core/components/ui/_css/type.d.ts.map +1 -0
  649. package/dist/types/core/components/ui/alert/alert.d.ts +37 -0
  650. package/dist/types/core/components/ui/alert/alert.d.ts.map +1 -0
  651. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts +15 -0
  652. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +1 -0
  653. package/dist/types/core/components/ui/badge/badge.d.ts +27 -0
  654. package/dist/types/core/components/ui/badge/badge.d.ts.map +1 -0
  655. package/dist/types/core/components/ui/button/button.d.ts +180 -0
  656. package/dist/types/core/components/ui/button/button.d.ts.map +1 -0
  657. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts +2 -0
  658. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts.map +1 -0
  659. package/dist/types/core/components/ui/captcha/captcha.d.ts +30 -0
  660. package/dist/types/core/components/ui/captcha/captcha.d.ts.map +1 -0
  661. package/dist/types/core/components/ui/card/card-footer.d.ts +6 -0
  662. package/dist/types/core/components/ui/card/card-footer.d.ts.map +1 -0
  663. package/dist/types/core/components/ui/card/card-header-descripton.d.ts +6 -0
  664. package/dist/types/core/components/ui/card/card-header-descripton.d.ts.map +1 -0
  665. package/dist/types/core/components/ui/card/card-header.d.ts +9 -0
  666. package/dist/types/core/components/ui/card/card-header.d.ts.map +1 -0
  667. package/dist/types/core/components/ui/card/card-main.d.ts +6 -0
  668. package/dist/types/core/components/ui/card/card-main.d.ts.map +1 -0
  669. package/dist/types/core/components/ui/card/card.d.ts +13 -0
  670. package/dist/types/core/components/ui/card/card.d.ts.map +1 -0
  671. package/dist/types/core/components/ui/divider/divider.d.ts +16 -0
  672. package/dist/types/core/components/ui/divider/divider.d.ts.map +1 -0
  673. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +176 -0
  674. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +1 -0
  675. package/dist/types/core/components/ui/form/css/form-control.d.ts +5 -0
  676. package/dist/types/core/components/ui/form/css/form-control.d.ts.map +1 -0
  677. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts +24 -0
  678. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts.map +1 -0
  679. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts +6 -0
  680. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts.map +1 -0
  681. package/dist/types/core/components/ui/form/fieldset/legend.d.ts +17 -0
  682. package/dist/types/core/components/ui/form/fieldset/legend.d.ts.map +1 -0
  683. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts +8 -0
  684. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts.map +1 -0
  685. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts +13 -0
  686. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts.map +1 -0
  687. package/dist/types/core/components/ui/form/input/input.d.ts +123 -0
  688. package/dist/types/core/components/ui/form/input/input.d.ts.map +1 -0
  689. package/dist/types/core/components/ui/form/input/password-helper.d.ts +26 -0
  690. package/dist/types/core/components/ui/form/input/password-helper.d.ts.map +1 -0
  691. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts +17 -0
  692. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts.map +1 -0
  693. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +155 -0
  694. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +1 -0
  695. package/dist/types/core/components/ui/form/radio/radio.d.ts +15 -0
  696. package/dist/types/core/components/ui/form/radio/radio.d.ts.map +1 -0
  697. package/dist/types/core/components/ui/form/select/select.d.ts +59 -0
  698. package/dist/types/core/components/ui/form/select/select.d.ts.map +1 -0
  699. package/dist/types/core/components/ui/form/switch/switch.d.ts +6 -0
  700. package/dist/types/core/components/ui/form/switch/switch.d.ts.map +1 -0
  701. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +94 -0
  702. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +1 -0
  703. package/dist/types/core/components/ui/group/group.d.ts +17 -0
  704. package/dist/types/core/components/ui/group/group.d.ts.map +1 -0
  705. package/dist/types/core/components/ui/icon/icon.d.ts +30 -0
  706. package/dist/types/core/components/ui/icon/icon.d.ts.map +1 -0
  707. package/dist/types/core/components/ui/icon/icons.d.ts +13 -0
  708. package/dist/types/core/components/ui/icon/icons.d.ts.map +1 -0
  709. package/dist/types/core/components/ui/image/image.d.ts +16 -0
  710. package/dist/types/core/components/ui/image/image.d.ts.map +1 -0
  711. package/dist/types/core/components/ui/link/link.d.ts +30 -0
  712. package/dist/types/core/components/ui/link/link.d.ts.map +1 -0
  713. package/dist/types/core/components/ui/loader/loader.d.ts +24 -0
  714. package/dist/types/core/components/ui/loader/loader.d.ts.map +1 -0
  715. package/dist/types/core/components/ui/loader/styles/fixed.d.ts +2 -0
  716. package/dist/types/core/components/ui/loader/styles/fixed.d.ts.map +1 -0
  717. package/dist/types/core/components/ui/loader/styles/inline.d.ts +2 -0
  718. package/dist/types/core/components/ui/loader/styles/inline.d.ts.map +1 -0
  719. package/dist/types/core/components/ui/menu/menu-item.d.ts +6 -0
  720. package/dist/types/core/components/ui/menu/menu-item.d.ts.map +1 -0
  721. package/dist/types/core/components/ui/menu/menu.d.ts +52 -0
  722. package/dist/types/core/components/ui/menu/menu.d.ts.map +1 -0
  723. package/dist/types/core/components/ui/modal/modal-actions.d.ts +9 -0
  724. package/dist/types/core/components/ui/modal/modal-actions.d.ts.map +1 -0
  725. package/dist/types/core/components/ui/modal/modal-close.d.ts +11 -0
  726. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +1 -0
  727. package/dist/types/core/components/ui/modal/modal-content.d.ts +6 -0
  728. package/dist/types/core/components/ui/modal/modal-content.d.ts.map +1 -0
  729. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts +6 -0
  730. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts.map +1 -0
  731. package/dist/types/core/components/ui/modal/modal-title.d.ts +6 -0
  732. package/dist/types/core/components/ui/modal/modal-title.d.ts.map +1 -0
  733. package/dist/types/core/components/ui/modal/modal-utils.d.ts +4 -0
  734. package/dist/types/core/components/ui/modal/modal-utils.d.ts.map +1 -0
  735. package/dist/types/core/components/ui/modal/modal.d.ts +79 -0
  736. package/dist/types/core/components/ui/modal/modal.d.ts.map +1 -0
  737. package/dist/types/core/components/ui/pop/pop.d.ts +42 -0
  738. package/dist/types/core/components/ui/pop/pop.d.ts.map +1 -0
  739. package/dist/types/core/components/ui/progress/progress.d.ts +12 -0
  740. package/dist/types/core/components/ui/progress/progress.d.ts.map +1 -0
  741. package/dist/types/core/components/ui/table/table-caption.d.ts +6 -0
  742. package/dist/types/core/components/ui/table/table-caption.d.ts.map +1 -0
  743. package/dist/types/core/components/ui/table/table-tbody.d.ts +6 -0
  744. package/dist/types/core/components/ui/table/table-tbody.d.ts.map +1 -0
  745. package/dist/types/core/components/ui/table/table-td.d.ts +13 -0
  746. package/dist/types/core/components/ui/table/table-td.d.ts.map +1 -0
  747. package/dist/types/core/components/ui/table/table-tfoot.d.ts +6 -0
  748. package/dist/types/core/components/ui/table/table-tfoot.d.ts.map +1 -0
  749. package/dist/types/core/components/ui/table/table-th.d.ts +12 -0
  750. package/dist/types/core/components/ui/table/table-th.d.ts.map +1 -0
  751. package/dist/types/core/components/ui/table/table-thead.d.ts +6 -0
  752. package/dist/types/core/components/ui/table/table-thead.d.ts.map +1 -0
  753. package/dist/types/core/components/ui/table/table-tr.d.ts +14 -0
  754. package/dist/types/core/components/ui/table/table-tr.d.ts.map +1 -0
  755. package/dist/types/core/components/ui/table/table.d.ts +18 -0
  756. package/dist/types/core/components/ui/table/table.d.ts.map +1 -0
  757. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts +2 -0
  758. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts.map +1 -0
  759. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts +2 -0
  760. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts.map +1 -0
  761. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts +2 -0
  762. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts.map +1 -0
  763. package/dist/types/core/components/ui/theme/theme.d.ts +20 -0
  764. package/dist/types/core/components/ui/theme/theme.d.ts.map +1 -0
  765. package/dist/types/core/components/ui/toast/message-subscriber.d.ts +19 -0
  766. package/dist/types/core/components/ui/toast/message-subscriber.d.ts.map +1 -0
  767. package/dist/types/core/components/ui/toast/toast-item.d.ts +41 -0
  768. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +1 -0
  769. package/dist/types/core/components/ui/toast/toast.d.ts +28 -0
  770. package/dist/types/core/components/ui/toast/toast.d.ts.map +1 -0
  771. package/dist/types/core/components/ui/toast/types.d.ts +12 -0
  772. package/dist/types/core/components/ui/toast/types.d.ts.map +1 -0
  773. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +21 -0
  774. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +1 -0
  775. package/dist/types/core/components/ui/ui.d.ts +35 -0
  776. package/dist/types/core/components/ui/ui.d.ts.map +1 -0
  777. package/dist/types/core/core.d.ts +5 -0
  778. package/dist/types/core/core.d.ts.map +1 -0
  779. package/dist/types/core/decorators/Subscriber.d.ts +13 -0
  780. package/dist/types/core/decorators/Subscriber.d.ts.map +1 -0
  781. package/dist/types/core/decorators/api.d.ts +155 -0
  782. package/dist/types/core/decorators/api.d.ts.map +1 -0
  783. package/dist/types/core/decorators/lifecycle.d.ts +19 -0
  784. package/dist/types/core/decorators/lifecycle.d.ts.map +1 -0
  785. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +11 -0
  786. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +1 -0
  787. package/dist/types/core/decorators/subscriber/autoFill.d.ts +2 -0
  788. package/dist/types/core/decorators/subscriber/autoFill.d.ts.map +1 -0
  789. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts +2 -0
  790. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts.map +1 -0
  791. package/dist/types/core/decorators/subscriber/bind.d.ts +28 -0
  792. package/dist/types/core/decorators/subscriber/bind.d.ts.map +1 -0
  793. package/dist/types/core/decorators/subscriber/common.d.ts +14 -0
  794. package/dist/types/core/decorators/subscriber/common.d.ts.map +1 -0
  795. package/dist/types/core/decorators/subscriber/derive.d.ts +30 -0
  796. package/dist/types/core/decorators/subscriber/derive.d.ts.map +1 -0
  797. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts +23 -0
  798. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts.map +1 -0
  799. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts +42 -0
  800. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts.map +1 -0
  801. package/dist/types/core/decorators/subscriber/handle.d.ts +74 -0
  802. package/dist/types/core/decorators/subscriber/handle.d.ts.map +1 -0
  803. package/dist/types/core/decorators/subscriber/onAssign.d.ts +53 -0
  804. package/dist/types/core/decorators/subscriber/onAssign.d.ts.map +1 -0
  805. package/dist/types/core/decorators/subscriber/publish.d.ts +23 -0
  806. package/dist/types/core/decorators/subscriber/publish.d.ts.map +1 -0
  807. package/dist/types/core/decorators/subscriber/publisherPath.d.ts +3 -0
  808. package/dist/types/core/decorators/subscriber/publisherPath.d.ts.map +1 -0
  809. package/dist/types/core/decorators/subscriber/subscribe.d.ts +20 -0
  810. package/dist/types/core/decorators/subscriber/subscribe.d.ts.map +1 -0
  811. package/dist/types/core/directives/DataProvider.d.ts +45 -0
  812. package/dist/types/core/directives/DataProvider.d.ts.map +1 -0
  813. package/dist/types/core/directives/Wording.d.ts +44 -0
  814. package/dist/types/core/directives/Wording.d.ts.map +1 -0
  815. package/dist/types/core/mixins/Fetcher.d.ts +108 -0
  816. package/dist/types/core/mixins/Fetcher.d.ts.map +1 -0
  817. package/dist/types/core/mixins/FormCheckable.d.ts +95 -0
  818. package/dist/types/core/mixins/FormCheckable.d.ts.map +1 -0
  819. package/dist/types/core/mixins/FormElement.d.ts +37 -0
  820. package/dist/types/core/mixins/FormElement.d.ts.map +1 -0
  821. package/dist/types/core/mixins/FormInput.d.ts +79 -0
  822. package/dist/types/core/mixins/FormInput.d.ts.map +1 -0
  823. package/dist/types/core/mixins/Subscriber.d.ts +38 -0
  824. package/dist/types/core/mixins/Subscriber.d.ts.map +1 -0
  825. package/dist/types/core/mixins/TemplatesContainer.d.ts +14 -0
  826. package/dist/types/core/mixins/TemplatesContainer.d.ts.map +1 -0
  827. package/dist/types/core/mixins/mixins.d.ts +7 -0
  828. package/dist/types/core/mixins/mixins.d.ts.map +1 -0
  829. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +38 -0
  830. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +1 -0
  831. package/dist/types/core/utils/Arrays.d.ts +98 -0
  832. package/dist/types/core/utils/Arrays.d.ts.map +1 -0
  833. package/dist/types/core/utils/DataBindObserver.d.ts +84 -0
  834. package/dist/types/core/utils/DataBindObserver.d.ts.map +1 -0
  835. package/dist/types/core/utils/Electron.d.ts +8 -0
  836. package/dist/types/core/utils/Electron.d.ts.map +1 -0
  837. package/dist/types/core/utils/Format.d.ts +13 -0
  838. package/dist/types/core/utils/Format.d.ts.map +1 -0
  839. package/dist/types/core/utils/HTML.d.ts +59 -0
  840. package/dist/types/core/utils/HTML.d.ts.map +1 -0
  841. package/dist/types/core/utils/LocationHandler.d.ts +48 -0
  842. package/dist/types/core/utils/LocationHandler.d.ts.map +1 -0
  843. package/dist/types/core/utils/Objects.d.ts +31 -0
  844. package/dist/types/core/utils/Objects.d.ts.map +1 -0
  845. package/dist/types/core/utils/PublisherProxy.d.ts +230 -0
  846. package/dist/types/core/utils/PublisherProxy.d.ts.map +1 -0
  847. package/dist/types/core/utils/SafariScrollGuard.d.ts +36 -0
  848. package/dist/types/core/utils/SafariScrollGuard.d.ts.map +1 -0
  849. package/dist/types/core/utils/Utils.d.ts +6 -0
  850. package/dist/types/core/utils/Utils.d.ts.map +1 -0
  851. package/dist/types/core/utils/aesCrypto.d.ts +53 -0
  852. package/dist/types/core/utils/aesCrypto.d.ts.map +1 -0
  853. package/dist/types/core/utils/api.d.ts +173 -0
  854. package/dist/types/core/utils/api.d.ts.map +1 -0
  855. package/dist/types/core/utils/dataProviderKey.d.ts +56 -0
  856. package/dist/types/core/utils/dataProviderKey.d.ts.map +1 -0
  857. package/dist/types/core/utils/derive.d.ts +40 -0
  858. package/dist/types/core/utils/derive.d.ts.map +1 -0
  859. package/dist/types/core/utils/endpoint.d.ts +37 -0
  860. package/dist/types/core/utils/endpoint.d.ts.map +1 -0
  861. package/dist/types/core/utils/jsonataHelpers.d.ts +15 -0
  862. package/dist/types/core/utils/jsonataHelpers.d.ts.map +1 -0
  863. package/dist/types/core/utils/jsonataRuntime.d.ts +13 -0
  864. package/dist/types/core/utils/jsonataRuntime.d.ts.map +1 -0
  865. package/dist/types/core/utils/mediaRef.d.ts +34 -0
  866. package/dist/types/core/utils/mediaRef.d.ts.map +1 -0
  867. package/dist/types/core/utils/route.d.ts +41 -0
  868. package/dist/types/core/utils/route.d.ts.map +1 -0
  869. package/dist/types/core/utils/similarity.d.ts +15 -0
  870. package/dist/types/core/utils/similarity.d.ts.map +1 -0
  871. package/dist/types/core/utils/url-pattern.d.ts +3 -0
  872. package/dist/types/core/utils/url-pattern.d.ts.map +1 -0
  873. package/dist/types/dataprovider.d.ts +2 -0
  874. package/dist/types/dataprovider.d.ts.map +1 -0
  875. package/dist/types/decorators.d.ts +30 -0
  876. package/dist/types/decorators.d.ts.map +1 -0
  877. package/dist/types/directives.d.ts +21 -0
  878. package/dist/types/directives.d.ts.map +1 -0
  879. package/dist/types/index.d.ts +8 -0
  880. package/dist/types/index.d.ts.map +1 -0
  881. package/dist/types/mixins.d.ts +204 -0
  882. package/dist/types/mixins.d.ts.map +1 -0
  883. package/dist/types/test-utils/TestUtils.d.ts +4 -0
  884. package/dist/types/test-utils/TestUtils.d.ts.map +1 -0
  885. package/dist/types/utils.d.ts +20 -0
  886. package/dist/types/utils.d.ts.map +1 -0
  887. package/package.json +1780 -382
  888. package/public/docs/hf-samples/beach.jpg +0 -0
  889. package/public/docs/hf-samples/cats.jpg +0 -0
  890. package/public/docs/hf-samples/corgi.jpg +0 -0
  891. package/public/docs/hf-samples/portrait.jpg +0 -0
  892. package/public/docs/hf-samples/scene.jpg +0 -0
  893. package/public/docs/hf-samples/singer.jpg +0 -0
  894. package/public/docs/shader-samples/color.jpg +0 -0
  895. package/public/docs/shader-samples/depth.png +0 -0
  896. package/public/docs/shader-samples/impact.jpg +0 -0
  897. package/public/docs/shader-samples/video.webm +0 -0
  898. package/scripts/build-addons.mjs +26 -0
  899. package/scripts/gen-shader-depth.mjs +85 -0
  900. package/scripts/gen-shader-harris-video.mjs +17 -0
  901. package/scripts/gen-shader-harris-video.py +84 -0
  902. package/scripts/hf-vendor.mjs +154 -0
  903. package/scripts/post-build.mjs +116 -10
  904. package/scripts/pre-build.mjs +119 -36
  905. package/scripts/pre-publish.mjs +76 -54
  906. package/src/addons/3d.ts +5 -0
  907. package/src/addons/hugging-face-infer.ts +11 -0
  908. package/src/addons/shader.ts +5 -0
  909. package/src/addons/webgpu.ts +15 -0
  910. package/src/core/components/functional/3d/3d.md +118 -0
  911. package/src/core/components/functional/3d/3d.spec.ts +171 -0
  912. package/src/core/components/functional/3d/3d.ts +175 -0
  913. package/src/core/components/functional/3d/asset.ts +22 -0
  914. package/src/core/components/functional/3d/boot.ts +77 -0
  915. package/src/core/components/functional/3d/constants.ts +98 -0
  916. package/src/core/components/functional/3d/demo-content.ts +45 -0
  917. package/src/core/components/functional/3d/ensure.ts +99 -0
  918. package/src/core/components/functional/3d/form-bind.ts +40 -0
  919. package/src/core/components/functional/3d/form-fields.ts +80 -0
  920. package/src/core/components/functional/3d/form-params.ts +97 -0
  921. package/src/core/components/functional/3d/frame-capture.spec.ts +72 -0
  922. package/src/core/components/functional/3d/frame-capture.ts +135 -0
  923. package/src/core/components/functional/3d/gl.ts +35 -0
  924. package/src/core/components/functional/3d/life.ts +101 -0
  925. package/src/core/components/functional/3d/load.ts +129 -0
  926. package/src/core/components/functional/3d/ops.ts +126 -0
  927. package/src/core/components/functional/3d/opts.ts +16 -0
  928. package/src/core/components/functional/3d/orbit.ts +185 -0
  929. package/src/core/components/functional/3d/out-publish.ts +140 -0
  930. package/src/core/components/functional/3d/parse.ts +95 -0
  931. package/src/core/components/functional/3d/pick.ts +92 -0
  932. package/src/core/components/functional/3d/playback.ts +70 -0
  933. package/src/core/components/functional/3d/pointer.ts +79 -0
  934. package/src/core/components/functional/3d/props.ts +50 -0
  935. package/src/core/components/functional/3d/publisher-listen.ts +13 -0
  936. package/src/core/components/functional/3d/reload.ts +88 -0
  937. package/src/core/components/functional/3d/runtime.ts +148 -0
  938. package/src/core/components/functional/3d/scene-runtime.ts +9 -0
  939. package/src/core/components/functional/3d/snapshot.ts +73 -0
  940. package/src/core/components/functional/3d/styles.ts +38 -0
  941. package/src/core/components/functional/3d/tune.ts +72 -0
  942. package/src/core/components/functional/3d/types.ts +145 -0
  943. package/src/core/components/functional/3d/updated.ts +70 -0
  944. package/src/core/components/functional/3d/view.ts +63 -0
  945. package/src/core/components/functional/3d/wire.ts +65 -0
  946. package/src/core/components/functional/infer/hugging-face/hf-cache.ts +198 -0
  947. package/src/core/components/functional/infer/hugging-face/hf-config.ts +188 -0
  948. package/src/core/components/functional/infer/hugging-face/hf-controller.spec.ts +350 -0
  949. package/src/core/components/functional/infer/hugging-face/hf-controller.ts +622 -0
  950. package/src/core/components/functional/infer/hugging-face/hf-engine.ts +178 -0
  951. package/src/core/components/functional/infer/hugging-face/hf-input.spec.ts +99 -0
  952. package/src/core/components/functional/infer/hugging-face/hf-input.ts +218 -0
  953. package/src/core/components/functional/infer/hugging-face/hf-protocol.ts +76 -0
  954. package/src/core/components/functional/infer/hugging-face/hf-registry.ts +457 -0
  955. package/src/core/components/functional/infer/hugging-face/hf-schema.spec.ts +124 -0
  956. package/src/core/components/functional/infer/hugging-face/hf-schema.ts +390 -0
  957. package/src/core/components/functional/infer/hugging-face/hf-worker-runtime.spec.ts +147 -0
  958. package/src/core/components/functional/infer/hugging-face/hf-worker-runtime.ts +381 -0
  959. package/src/core/components/functional/infer/hugging-face/hugging-face-infer.md +304 -0
  960. package/src/core/components/functional/infer/hugging-face/hugging-face-infer.ts +202 -0
  961. package/src/core/components/functional/infer/hugging-face/hugging-face.ts +282 -0
  962. package/src/core/components/functional/infer/hugging-face/types.ts +325 -0
  963. package/src/core/components/functional/jsonata/jsonata.md +4 -2
  964. package/src/core/components/functional/sdui/sdui.md +2 -2
  965. package/src/core/components/functional/sdui/sdui.ts +40 -29
  966. package/src/core/components/functional/shader/gl-runtime.ts +782 -0
  967. package/src/core/components/functional/shader/shader.md +207 -0
  968. package/src/core/components/functional/shader/shader.spec.ts +288 -0
  969. package/src/core/components/functional/shader/shader.ts +1569 -0
  970. package/src/core/components/functional/shader/shadertoy-prelude.ts +52 -0
  971. package/src/core/components/functional/shader/types.ts +446 -0
  972. package/src/core/components/functional/webgpu/canvas2d-fallback.ts +125 -0
  973. package/src/core/components/functional/webgpu/form-bind.ts +116 -0
  974. package/src/core/components/functional/webgpu/gl-fallback.ts +158 -0
  975. package/src/core/components/functional/webgpu/gpu-runtime.ts +349 -0
  976. package/src/core/components/functional/webgpu/helpers.ts +47 -0
  977. package/src/core/components/functional/webgpu/out-frame.ts +137 -0
  978. package/src/core/components/functional/webgpu/particles-runtime.ts +426 -0
  979. package/src/core/components/functional/webgpu/pointer.ts +85 -0
  980. package/src/core/components/functional/webgpu/types.ts +96 -0
  981. package/src/core/components/functional/webgpu/webgpu.md +75 -0
  982. package/src/core/components/functional/webgpu/webgpu.spec.ts +141 -0
  983. package/src/core/components/functional/webgpu/webgpu.ts +659 -0
  984. package/src/core/components/functional/webgpu/wgsl-prelude.ts +81 -0
  985. package/src/core/utils/HTML.ts +107 -74
  986. package/src/core/utils/PublisherProxy.ts +29 -6
  987. package/src/core/utils/jsonataHelpers.ts +36 -0
  988. package/src/core/utils/mediaRef.spec.ts +85 -0
  989. package/src/core/utils/mediaRef.ts +130 -0
  990. package/src/core/utils/similarity.spec.ts +34 -0
  991. package/src/core/utils/similarity.ts +54 -0
  992. package/src/docs/_core-concept/dataFlow.md +2 -0
  993. package/src/docs/_getting-started/cdn-addons.md +73 -0
  994. package/src/docs/_getting-started/create-a-component.md +1 -1
  995. package/src/docs/_misc/visual-stack.md +49 -0
  996. package/src/docs/components/docs-demo-sources.ts +359 -39
  997. package/src/docs/docs.ts +6 -0
  998. package/src/docs/example/docs-3d-demos.ts +8 -0
  999. package/src/docs/example/docs-3d-form.ts +95 -0
  1000. package/src/docs/example/docs-3d-orbit.ts +44 -0
  1001. package/src/docs/example/docs-3d-out.ts +56 -0
  1002. package/src/docs/example/docs-3d-shared.ts +15 -0
  1003. package/src/docs/example/docs-harris-webgpu-demo.ts +482 -0
  1004. package/src/docs/example/docs-hugging-face-demos.ts +516 -0
  1005. package/src/docs/example/docs-shader-demos.ts +357 -0
  1006. package/src/docs/example/docs-visual-stack-demo.ts +394 -0
  1007. package/src/docs/example/docs-webgpu-demo.ts +77 -0
  1008. package/src/docs/navigation/navigation.ts +25 -0
  1009. package/src/docs/search/docs-search.json +899 -2319
  1010. package/src/tsconfig.json +481 -301
  1011. package/src/tsconfig.tsbuildinfo +1 -1
  1012. package/vite/config.js +42 -30
  1013. package/vite.config.mts +51 -12
@@ -0,0 +1,1569 @@
1
+ import { css, html, LitElement } from "lit";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
+ import HTML from "@supersoniks/concorde/core/utils/HTML";
4
+ import { revokeMediaUrls, toMediaUrl } from "@supersoniks/concorde/core/utils/mediaRef";
5
+ import { PublisherManager } from "@supersoniks/concorde/utils";
6
+ import {
7
+ parseChannelSource,
8
+ ShaderToyRuntime,
9
+ } from "./gl-runtime";
10
+ import {
11
+ PassChannels,
12
+ ShaderCompileError,
13
+ ShaderExtractItem,
14
+ ShaderExtractOutput,
15
+ ShaderHoverParam,
16
+ ShaderMouseMode,
17
+ ShaderPassId,
18
+ ShaderRoi,
19
+ ShaderSources,
20
+ SonicShaderOutput,
21
+ findPeaks,
22
+ meanRgba,
23
+ parseExtractPass,
24
+ parseHoverParam,
25
+ roiToPixels,
26
+ } from "./types";
27
+
28
+ const tagName = "sonic-shader";
29
+
30
+ const MAX_PATCH_PX = 128;
31
+
32
+ /**
33
+ * Champs méta publiés vers le out-dataProvider.
34
+ * `param0…3` sont exclus du gate « consommateur » : un `sonic-input name="param0"`
35
+ * ne doit pas activer la publication (sinon write-back → reset des champs form).
36
+ */
37
+ const OUT_META_KEYS = [
38
+ "time",
39
+ "frame",
40
+ "mouseX",
41
+ "mouseY",
42
+ "hovering",
43
+ ] as const;
44
+
45
+ const OUT_PARAM_KEYS = ["param0", "param1", "param2", "param3"] as const;
46
+
47
+ /** Champs canaux lisibles depuis dataProvider (string | SonicMediaRef). */
48
+ const CHANNEL_FORM_KEYS = [
49
+ "channel0",
50
+ "channel1",
51
+ "channel2",
52
+ "channel3",
53
+ "imageCh0",
54
+ "imageCh1",
55
+ "imageCh2",
56
+ "imageCh3",
57
+ "bufferACh0",
58
+ "bufferACh1",
59
+ "bufferACh2",
60
+ "bufferACh3",
61
+ "bufferBCh0",
62
+ "bufferBCh1",
63
+ "bufferBCh2",
64
+ "bufferBCh3",
65
+ "bufferCCh0",
66
+ "bufferCCh1",
67
+ "bufferCCh2",
68
+ "bufferCCh3",
69
+ "bufferDCh0",
70
+ "bufferDCh1",
71
+ "bufferDCh2",
72
+ "bufferDCh3",
73
+ ] as const;
74
+
75
+ /** Champs sample (coûteux : readPixels). */
76
+ const OUT_SAMPLE_KEYS = [
77
+ "sampleR",
78
+ "sampleG",
79
+ "sampleB",
80
+ "sampleA",
81
+ "sampleLuma",
82
+ ] as const;
83
+
84
+ const EXTRACT_OUT_KEYS = ["extracts", "extractCount", "extractSeq"] as const;
85
+
86
+ type OutPublisherLike = {
87
+ _proxies_?: Map<string, { hasListener?: () => boolean }>;
88
+ get?: () => Record<string, unknown>;
89
+ };
90
+
91
+ function prefersReducedMotion(): boolean {
92
+ return (
93
+ typeof matchMedia === "function" &&
94
+ matchMedia("(prefers-reduced-motion: reduce)").matches
95
+ );
96
+ }
97
+
98
+ function toNum(v: unknown, fallback: number): number {
99
+ if (typeof v === "number" && Number.isFinite(v)) return v;
100
+ if (typeof v === "string" && v.trim() !== "") {
101
+ const n = Number(v);
102
+ if (Number.isFinite(n)) return n;
103
+ }
104
+ return fallback;
105
+ }
106
+
107
+ /** Valeur canal depuis DP : string (url ou buffer-a) | MediaRef → url. */
108
+ function channelFormValue(value: unknown): string | undefined {
109
+ if (value === null || value === "") return "";
110
+ if (typeof value === "string") return value.trim();
111
+ const url = toMediaUrl(value);
112
+ if (url) return url;
113
+ if (value && typeof value === "object") return undefined;
114
+ return "";
115
+ }
116
+
117
+ function parseRois(value: unknown): ShaderRoi[] {
118
+ if (!Array.isArray(value)) return [];
119
+ const out: ShaderRoi[] = [];
120
+ for (const raw of value) {
121
+ if (!raw || typeof raw !== "object") continue;
122
+ const o = raw as Record<string, unknown>;
123
+ const x = toNum(o.x, NaN);
124
+ const y = toNum(o.y, NaN);
125
+ if (!Number.isFinite(x) || !Number.isFinite(y)) continue;
126
+ const roi: ShaderRoi = { x, y, source: "manual" };
127
+ if (typeof o.id === "string" && o.id) roi.id = o.id;
128
+ if ("w" in o) roi.w = toNum(o.w, 0);
129
+ if ("h" in o) roi.h = toNum(o.h, 0);
130
+ if ("patch" in o) roi.patch = toNum(o.patch, 16);
131
+ out.push(roi);
132
+ }
133
+ return out;
134
+ }
135
+
136
+ const BYTES_PER_PIXEL = 4;
137
+
138
+ async function rgbaToBlobUrl(
139
+ data: Uint8Array,
140
+ width: number,
141
+ height: number,
142
+ ): Promise<string | null> {
143
+ if (typeof document === "undefined" || width < 1 || height < 1) return null;
144
+ try {
145
+ const canvas = document.createElement("canvas");
146
+ canvas.width = width;
147
+ canvas.height = height;
148
+ const ctx = canvas.getContext("2d");
149
+ if (!ctx) return null;
150
+ // WebGL readPixels is bottom-up; flip for canvas display.
151
+ const imageData = ctx.createImageData(width, height);
152
+ const dst = imageData.data;
153
+ for (let y = 0; y < height; y++) {
154
+ const srcRow = (height - 1 - y) * width * BYTES_PER_PIXEL;
155
+ const dstRow = y * width * BYTES_PER_PIXEL;
156
+ for (let i = 0; i < width * BYTES_PER_PIXEL; i++) {
157
+ dst[dstRow + i] = data[srcRow + i];
158
+ }
159
+ }
160
+ ctx.putImageData(imageData, 0, 0);
161
+ const blob = await new Promise<Blob | null>((resolve) => {
162
+ try {
163
+ canvas.toBlob((b) => resolve(b), "image/png");
164
+ } catch {
165
+ resolve(null);
166
+ }
167
+ });
168
+ if (blob) return URL.createObjectURL(blob);
169
+ // Fallback (certs navigateurs / contexts bloquent toBlob)
170
+ const dataUrl = canvas.toDataURL("image/png");
171
+ return dataUrl || null;
172
+ } catch {
173
+ return null;
174
+ }
175
+ }
176
+
177
+ function assignExtractMediaUrls(item: ShaderExtractItem, url: string): void {
178
+ item.blobUrl = url;
179
+ item.url = url;
180
+ }
181
+
182
+ type PendingRoi = ShaderRoi & { score?: number };
183
+
184
+ /**
185
+ * ShaderToy-compatible multipass renderer (Image + Buffer A–D + Common).
186
+ * Opt-in: import `@supersoniks/concorde/shader`.
187
+ *
188
+ * Optional `dataProvider` (attr or ancestor `dataProvider` / `formDataProvider`):
189
+ * maps form fields `param0`…`param3` → uniforms `uParam0`…`uParam3`.
190
+ */
191
+ @customElement(tagName)
192
+ export class SonicShader extends LitElement {
193
+ static styles = css`
194
+ :host {
195
+ display: block;
196
+ position: relative;
197
+ width: 100%;
198
+ max-width: 100%;
199
+ height: auto;
200
+ aspect-ratio: var(--sonic-shader-ar, 16 / 9);
201
+ overflow: hidden;
202
+ background: #0a0a0a;
203
+ color: #f87171;
204
+ font: 12px/1.4 ui-monospace, monospace;
205
+ }
206
+ canvas {
207
+ position: absolute;
208
+ inset: 0;
209
+ width: 100%;
210
+ height: 100%;
211
+ display: block;
212
+ touch-action: none;
213
+ }
214
+ .err {
215
+ position: absolute;
216
+ inset: 0;
217
+ z-index: 1;
218
+ padding: 0.75rem;
219
+ background: rgba(0, 0, 0, 0.85);
220
+ white-space: pre-wrap;
221
+ overflow: auto;
222
+ }
223
+ `;
224
+
225
+ @property() image = "";
226
+ @property({ attribute: "buffer-a" }) bufferA = "";
227
+ @property({ attribute: "buffer-b" }) bufferB = "";
228
+ @property({ attribute: "buffer-c" }) bufferC = "";
229
+ @property({ attribute: "buffer-d" }) bufferD = "";
230
+ @property() common = "";
231
+
232
+ @property() channel0 = "";
233
+ @property() channel1 = "";
234
+ @property() channel2 = "";
235
+ @property() channel3 = "";
236
+
237
+ @property({ attribute: "image-ch0" }) imageCh0 = "";
238
+ @property({ attribute: "image-ch1" }) imageCh1 = "";
239
+ @property({ attribute: "image-ch2" }) imageCh2 = "";
240
+ @property({ attribute: "image-ch3" }) imageCh3 = "";
241
+
242
+ @property({ attribute: "buffer-a-ch0" }) bufferACh0 = "";
243
+ @property({ attribute: "buffer-a-ch1" }) bufferACh1 = "";
244
+ @property({ attribute: "buffer-a-ch2" }) bufferACh2 = "";
245
+ @property({ attribute: "buffer-a-ch3" }) bufferACh3 = "";
246
+
247
+ @property({ attribute: "buffer-b-ch0" }) bufferBCh0 = "";
248
+ @property({ attribute: "buffer-b-ch1" }) bufferBCh1 = "";
249
+ @property({ attribute: "buffer-b-ch2" }) bufferBCh2 = "";
250
+ @property({ attribute: "buffer-b-ch3" }) bufferBCh3 = "";
251
+
252
+ @property({ attribute: "buffer-c-ch0" }) bufferCCh0 = "";
253
+ @property({ attribute: "buffer-c-ch1" }) bufferCCh1 = "";
254
+ @property({ attribute: "buffer-c-ch2" }) bufferCCh2 = "";
255
+ @property({ attribute: "buffer-c-ch3" }) bufferCCh3 = "";
256
+
257
+ @property({ attribute: "buffer-d-ch0" }) bufferDCh0 = "";
258
+ @property({ attribute: "buffer-d-ch1" }) bufferDCh1 = "";
259
+ @property({ attribute: "buffer-d-ch2" }) bufferDCh2 = "";
260
+ @property({ attribute: "buffer-d-ch3" }) bufferDCh3 = "";
261
+
262
+ @property({ type: Boolean, reflect: true }) play = true;
263
+ /**
264
+ * N’anime que pendant le hover (ou tant que le param hover n’a pas fini
265
+ * sa transition). Utile avec beaucoup d’instances.
266
+ */
267
+ @property({ type: Boolean, attribute: "play-on-hover" }) playOnHover = false;
268
+ @property({ type: Boolean }) mouse = true;
269
+ /**
270
+ * `direct` — `iMouse.xy` = pointeur (ShaderToy).
271
+ * `target` — le pointeur est une cible ; `iMouse.xy` suit (vitesse ∝ distance).
272
+ */
273
+ @property({ type: String, attribute: "mouse-mode" })
274
+ mouseMode: ShaderMouseMode = "direct";
275
+ /**
276
+ * Vitesse de poursuite en mode `target` (1/s). Plus haut = plus snappy.
277
+ * Déplacement ≈ `(cible − pos) * (1 − e^(−speed·dt))`.
278
+ */
279
+ @property({ type: Number, attribute: "mouse-speed" }) mouseSpeed = 8;
280
+ /**
281
+ * Anime `uParamN` au rollover / roll-out (0↔1). Ex. `hover-param="0"` ou `"param0"`.
282
+ * Le shader lit `uParamN` pour mixer l’effet on/off.
283
+ */
284
+ @property({ attribute: "hover-param" }) hoverParam: ShaderHoverParam | string =
285
+ "";
286
+ /** Vitesse d’easing hover on/off (1/s, défaut 10). */
287
+ @property({ type: Number, attribute: "hover-speed" }) hoverSpeed = 10;
288
+ /**
289
+ * Libère le contexte WebGL hors viewport (défaut true).
290
+ * Les navigateurs limitent ~8–16 contextes.
291
+ */
292
+ @property({ type: Boolean, attribute: "release-offscreen" })
293
+ releaseOffscreen = true;
294
+ @property({ type: Number, attribute: "dpr-max" }) dprMax = 2;
295
+
296
+ /** Generic float uniforms `uParam0`…`uParam3` (no shader rebuild). */
297
+ @property({ type: Number, attribute: "param0" }) param0 = 0;
298
+ @property({ type: Number, attribute: "param1" }) param1 = 0;
299
+ @property({ type: Number, attribute: "param2" }) param2 = 0;
300
+ @property({ type: Number, attribute: "param3" }) param3 = 0;
301
+
302
+ /**
303
+ * Publisher id. Fields `param0`…`param3` feed `uParam0`…`uParam3`.
304
+ * Falls back to ancestor `dataProvider` or `formDataProvider` when unset.
305
+ * Also used as default out publisher (see `outDataProvider`).
306
+ */
307
+ @property({ type: String })
308
+ dataProvider = "";
309
+
310
+ /**
311
+ * Publisher de sortie. Défaut : même id que `dataProvider` / ancêtre.
312
+ * Écrit mouseX/Y, hovering, frame (+ sample* si `sample`).
313
+ * Sur DP partagé form+out : ne réécrit pas param0…3 (sauf slot hover-param).
314
+ * Paresseux : pas de set / readPixels sans lecteur méta/sample ni listener `out`.
315
+ */
316
+ @property({ type: String, attribute: "out-data-provider" })
317
+ outDataProvider = "";
318
+
319
+ /**
320
+ * Active le sample couleur → sampleR/G/B/A + sampleLuma.
321
+ * `readPixels` uniquement s’il y a un consommateur out (DP ou event `out`).
322
+ */
323
+ @property({ type: Boolean }) sample = false;
324
+
325
+ /** Intervalle de publication / event `out` (ms, défaut 80). */
326
+ @property({ type: Number, attribute: "out-interval" }) outInterval = 80;
327
+
328
+ /** Active l’extraction de patches / singularités. */
329
+ @property({ type: Boolean }) extract = false;
330
+ /** Throttle extract ms (défaut = `out-interval` ou 100). */
331
+ @property({ type: Number, attribute: "extract-interval" })
332
+ extractInterval = 0;
333
+ /** Pass où lire les pixels couleur : `image` \| `buffer-a`… */
334
+ @property({ type: String, attribute: "extract-source" })
335
+ extractSource = "image";
336
+ /** Pass mask pour détection : `none` \| `buffer-a`… */
337
+ @property({ type: String, attribute: "extract-mask" })
338
+ extractMask = "none";
339
+ /** Seuil 0–1 sur le mask (défaut 0.5). */
340
+ @property({ type: Number, attribute: "extract-threshold" })
341
+ extractThreshold = 0.5;
342
+ /** Cap N items détectés (défaut 8). */
343
+ @property({ type: Number, attribute: "extract-max" }) extractMax = 8;
344
+ /** Taille patch px par défaut pour un point (défaut 16). */
345
+ @property({ type: Number, attribute: "extract-patch" }) extractPatch = 16;
346
+ /** Génère des blob URLs par item. */
347
+ @property({ type: Boolean, attribute: "extract-bitmaps" })
348
+ extractBitmaps = false;
349
+ /** Publisher dédié extract (défaut = out / dataProvider). */
350
+ @property({ type: String, attribute: "extract-data-provider" })
351
+ extractDataProvider = "";
352
+
353
+ /**
354
+ * Force CSS aspect-ratio (e.g. `"16/9"`, `"1"`).
355
+ * When empty, uses channel0 (or first texture) dimensions.
356
+ */
357
+ @property({ type: String, attribute: "aspect-ratio" })
358
+ aspectRatio = "";
359
+
360
+ @state() private errorMessage = "";
361
+
362
+ private runtime: ShaderToyRuntime | null = null;
363
+ private raf = 0;
364
+ private startTime = 0;
365
+ private lastTime = 0;
366
+ private frame = 0;
367
+ private mouseVec: [number, number, number, number] = [0, 0, 0, 0];
368
+ /** Cible pointeur (px drawing buffer, origine bas-gauche). */
369
+ private mouseTarget: [number, number] = [0, 0];
370
+ /** Position suivie → `iMouse.xy` en mode target. */
371
+ private mouseFollow: [number, number] = [0, 0];
372
+ private mouseHasPointer = false;
373
+ private pointerDown = false;
374
+ private hovering = false;
375
+ private hoverGoal = 0;
376
+ /**
377
+ * Valeur easée 0↔1 pour le slot `hover-param`.
378
+ * Privée (pas une @property) pour éviter un requestUpdate Lit à chaque frame
379
+ * — sinon re-renders / write-back dataProvider → enter/leave en boucle.
380
+ */
381
+ private hoverMix = 0;
382
+ private leaveRaf = 0;
383
+ /** Compteur d’écouteurs `out` (publication paresseuse). */
384
+ private outEventListeners = 0;
385
+ /** Compteur d’écouteurs `extract`. */
386
+ private extractEventListeners = 0;
387
+ private releasing = false;
388
+ private inView = true;
389
+ private resizeObserver: ResizeObserver | null = null;
390
+ private intersectionObserver: IntersectionObserver | null = null;
391
+ private rebuildToken = 0;
392
+ private ready = false;
393
+ private formPublisher: ReturnType<typeof PublisherManager.get> | null = null;
394
+ private outPublisher: ReturnType<typeof PublisherManager.get> | null = null;
395
+ private extractPublisher: ReturnType<typeof PublisherManager.get> | null =
396
+ null;
397
+ private lastOutAt = 0;
398
+ private lastExtractAt = 0;
399
+ private manualRois: ShaderRoi[] = [];
400
+ private lastBlobUrls: string[] = [];
401
+ private pendingRevokeUrls: string[] = [];
402
+ private extractRunning = false;
403
+ private extractSeq = 0;
404
+ private onFormMutation = () => {
405
+ const data = (this.formPublisher?.get() ?? {}) as Record<string, unknown>;
406
+ this.applyFormParams(data);
407
+ };
408
+
409
+ connectedCallback() {
410
+ super.connectedCallback();
411
+ this.addEventListener("pointermove", this.onPointerMove as EventListener);
412
+ this.addEventListener("pointerdown", this.onPointerDown as EventListener);
413
+ this.addEventListener("pointerup", this.onPointerUp as EventListener);
414
+ this.addEventListener("pointerleave", this.onPointerLeave);
415
+ this.addEventListener("pointerenter", this.onPointerEnter);
416
+ this.bindFormProvider();
417
+ this.bindOutPublisher();
418
+ this.bindExtractPublisher();
419
+ }
420
+
421
+ /**
422
+ * Suit les listeners `out` / `extract` pour ne publier (et ne readPixels)
423
+ * que s’il y a un consommateur — zéro coût tant que personne ne lit.
424
+ */
425
+ override addEventListener(
426
+ type: string,
427
+ listener: EventListenerOrEventListenerObject | null,
428
+ options?: boolean | AddEventListenerOptions,
429
+ ): void {
430
+ if (type === "out" && listener) this.outEventListeners++;
431
+ if (type === "extract" && listener) this.extractEventListeners++;
432
+ super.addEventListener(type, listener as never, options);
433
+ }
434
+
435
+ override removeEventListener(
436
+ type: string,
437
+ listener: EventListenerOrEventListenerObject | null,
438
+ options?: boolean | EventListenerOptions,
439
+ ): void {
440
+ if (type === "out" && listener) {
441
+ this.outEventListeners = Math.max(0, this.outEventListeners - 1);
442
+ }
443
+ if (type === "extract" && listener) {
444
+ this.extractEventListeners = Math.max(0, this.extractEventListeners - 1);
445
+ }
446
+ super.removeEventListener(type, listener as never, options);
447
+ }
448
+
449
+ disconnectedCallback() {
450
+ super.disconnectedCallback();
451
+ this.removeEventListener("pointermove", this.onPointerMove as EventListener);
452
+ this.removeEventListener("pointerdown", this.onPointerDown as EventListener);
453
+ this.removeEventListener("pointerup", this.onPointerUp as EventListener);
454
+ this.removeEventListener("pointerleave", this.onPointerLeave);
455
+ this.removeEventListener("pointerenter", this.onPointerEnter);
456
+ if (this.leaveRaf) {
457
+ cancelAnimationFrame(this.leaveRaf);
458
+ this.leaveRaf = 0;
459
+ }
460
+ this.unbindFormProvider();
461
+ this.unbindContextEvents();
462
+ this.revokeBlobUrls();
463
+ for (const url of this.pendingRevokeUrls) {
464
+ try {
465
+ URL.revokeObjectURL(url);
466
+ } catch {
467
+ /* ignore */
468
+ }
469
+ }
470
+ this.pendingRevokeUrls = [];
471
+ this.stopLoop();
472
+ this.resizeObserver?.disconnect();
473
+ this.intersectionObserver?.disconnect();
474
+ this.rebuildToken++;
475
+ this.ready = false;
476
+ this.releasing = true;
477
+ this.runtime?.dispose(true); // libère le slot navigateur
478
+ this.runtime = null;
479
+ this.outPublisher = null;
480
+ this.releasing = false;
481
+ }
482
+
483
+ protected firstUpdated() {
484
+ this.resizeObserver = new ResizeObserver(() => this.syncSize());
485
+ this.resizeObserver.observe(this);
486
+ this.intersectionObserver = new IntersectionObserver(
487
+ (entries) => {
488
+ this.inView = entries.some((e) => e.isIntersecting);
489
+ this.syncVisibility();
490
+ },
491
+ { threshold: 0 },
492
+ );
493
+ this.intersectionObserver.observe(this);
494
+ this.bindFormProvider();
495
+ this.bindOutPublisher();
496
+ this.bindExtractPublisher();
497
+ requestAnimationFrame(() => {
498
+ if (this.inView || !this.releaseOffscreen) {
499
+ void this.ensureRuntime();
500
+ }
501
+ });
502
+ }
503
+
504
+ protected updated(changed: Map<string, unknown>) {
505
+ if (!this.runtime) return;
506
+ const shaderKeys = [
507
+ "image",
508
+ "bufferA",
509
+ "bufferB",
510
+ "bufferC",
511
+ "bufferD",
512
+ "common",
513
+ "channel0",
514
+ "channel1",
515
+ "channel2",
516
+ "channel3",
517
+ "imageCh0",
518
+ "imageCh1",
519
+ "imageCh2",
520
+ "imageCh3",
521
+ "bufferACh0",
522
+ "bufferACh1",
523
+ "bufferACh2",
524
+ "bufferACh3",
525
+ "bufferBCh0",
526
+ "bufferBCh1",
527
+ "bufferBCh2",
528
+ "bufferBCh3",
529
+ "bufferCCh0",
530
+ "bufferCCh1",
531
+ "bufferCCh2",
532
+ "bufferCCh3",
533
+ "bufferDCh0",
534
+ "bufferDCh1",
535
+ "bufferDCh2",
536
+ "bufferDCh3",
537
+ ];
538
+ if (shaderKeys.some((k) => changed.has(k))) {
539
+ void this.rebuild();
540
+ }
541
+ if (changed.has("play")) {
542
+ this.syncPlayback();
543
+ }
544
+ if (
545
+ changed.has("dataProvider") ||
546
+ changed.has("outDataProvider") ||
547
+ changed.has("extractDataProvider")
548
+ ) {
549
+ this.bindFormProvider();
550
+ this.bindOutPublisher();
551
+ this.bindExtractPublisher();
552
+ }
553
+ if (changed.has("aspectRatio")) {
554
+ this.applyAspectRatio();
555
+ }
556
+ }
557
+
558
+ private applyAspectRatio(textureUrl?: string) {
559
+ const forced = this.aspectRatio.trim();
560
+ if (forced) {
561
+ this.style.setProperty(
562
+ "--sonic-shader-ar",
563
+ forced.includes("/") ? forced : forced.replace(":", " / "),
564
+ );
565
+ return;
566
+ }
567
+ const url = textureUrl || this.channel0;
568
+ const size = url ? this.runtime?.getTextureSize(url) : null;
569
+ if (size) {
570
+ this.style.setProperty(
571
+ "--sonic-shader-ar",
572
+ `${size.width} / ${size.height}`,
573
+ );
574
+ return;
575
+ }
576
+ this.style.removeProperty("--sonic-shader-ar");
577
+ }
578
+
579
+ private resolveFormProviderId(): string {
580
+ const own = this.dataProvider?.trim();
581
+ if (own) return own;
582
+ return (
583
+ HTML.getAncestorAttributeValue(this, "dataProvider") ||
584
+ HTML.getAncestorAttributeValue(this, "formDataProvider") ||
585
+ ""
586
+ );
587
+ }
588
+
589
+ private unbindFormProvider() {
590
+ if (this.formPublisher) {
591
+ // Nested form fields (sonic-input) mutate children — root onAssign
592
+ // does not fire; onInternalMutation does.
593
+ this.formPublisher.offInternalMutation(this.onFormMutation);
594
+ this.formPublisher = null;
595
+ }
596
+ }
597
+
598
+ private bindFormProvider() {
599
+ this.unbindFormProvider();
600
+ const id = this.resolveFormProviderId();
601
+ if (!id) return;
602
+ this.formPublisher = PublisherManager.get(id);
603
+ this.formPublisher.onInternalMutation(this.onFormMutation);
604
+ this.onFormMutation();
605
+ }
606
+
607
+ private resolveOutProviderId(): string {
608
+ const own = this.outDataProvider?.trim();
609
+ if (own) return own;
610
+ return this.resolveFormProviderId();
611
+ }
612
+
613
+ private bindOutPublisher() {
614
+ const id = this.resolveOutProviderId();
615
+ this.outPublisher = id ? PublisherManager.get(id) : null;
616
+ }
617
+
618
+ private resolveExtractProviderId(): string {
619
+ const own = this.extractDataProvider?.trim();
620
+ if (own) return own;
621
+ return this.resolveOutProviderId();
622
+ }
623
+
624
+ private bindExtractPublisher() {
625
+ const id = this.resolveExtractProviderId();
626
+ this.extractPublisher = id ? PublisherManager.get(id) : null;
627
+ }
628
+
629
+ private applyFormParams(value: unknown) {
630
+ const data =
631
+ value && typeof value === "object"
632
+ ? (value as Record<string, unknown>)
633
+ : {};
634
+ // Le slot hover-param est piloté en interne : ne pas le réécrire depuis le
635
+ // publisher (évite la boucle out → mutation → param ↔ hoverGoal).
636
+ const hoverSlot = parseHoverParam(this.hoverParam);
637
+ if (hoverSlot !== 0) this.param0 = toNum(data.param0, this.param0);
638
+ if (hoverSlot !== 1) this.param1 = toNum(data.param1, this.param1);
639
+ if (hoverSlot !== 2) this.param2 = toNum(data.param2, this.param2);
640
+ if (hoverSlot !== 3) this.param3 = toNum(data.param3, this.param3);
641
+ if ("mouseSpeed" in data) {
642
+ this.mouseSpeed = toNum(data.mouseSpeed, this.mouseSpeed);
643
+ }
644
+ if ("hoverSpeed" in data) {
645
+ this.hoverSpeed = toNum(data.hoverSpeed, this.hoverSpeed);
646
+ }
647
+ if ("extractThreshold" in data) {
648
+ this.extractThreshold = toNum(data.extractThreshold, this.extractThreshold);
649
+ }
650
+ if ("extractMax" in data) {
651
+ this.extractMax = toNum(data.extractMax, this.extractMax);
652
+ }
653
+ if ("extractPatch" in data) {
654
+ this.extractPatch = toNum(data.extractPatch, this.extractPatch);
655
+ }
656
+ if ("rois" in data) {
657
+ this.manualRois = parseRois(data.rois);
658
+ }
659
+ for (const key of CHANNEL_FORM_KEYS) {
660
+ if (!(key in data)) continue;
661
+ const next = channelFormValue(data[key]);
662
+ if (next === undefined) continue;
663
+ if ((this as unknown as Record<string, string>)[key] !== next) {
664
+ (this as unknown as Record<string, string>)[key] = next;
665
+ }
666
+ }
667
+ }
668
+
669
+ /** Params GPU : remplace le slot `hover-param` par `hoverMix`. */
670
+ private effectiveParams(): [number, number, number, number] {
671
+ const params: [number, number, number, number] = [
672
+ this.param0,
673
+ this.param1,
674
+ this.param2,
675
+ this.param3,
676
+ ];
677
+ const slot = parseHoverParam(this.hoverParam);
678
+ if (slot !== null) params[slot] = this.hoverMix;
679
+ return params;
680
+ }
681
+
682
+ /**
683
+ * Hors viewport : libère textures / FBO / programmes, **sans** loseContext
684
+ * (sinon le même canvas ne peut plus compiler au retour).
685
+ * Le slot navigateur est libéré au disconnect (`dispose(true)`).
686
+ */
687
+ private releaseRuntime() {
688
+ this.rebuildToken++;
689
+ this.stopLoop();
690
+ this.ready = false;
691
+ this.releasing = true;
692
+ this.unbindContextEvents();
693
+ this.runtime?.dispose(false);
694
+ this.runtime = null;
695
+ this.releasing = false;
696
+ }
697
+
698
+ private getCanvas(): HTMLCanvasElement | null {
699
+ return (
700
+ (this.renderRoot?.querySelector("canvas") as HTMLCanvasElement | null) ??
701
+ null
702
+ );
703
+ }
704
+
705
+ private bindContextEvents() {
706
+ const canvas = this.getCanvas();
707
+ canvas?.addEventListener("webglcontextlost", this.onContextLost);
708
+ canvas?.addEventListener("webglcontextrestored", this.onContextRestored);
709
+ }
710
+
711
+ private unbindContextEvents() {
712
+ const canvas = this.getCanvas();
713
+ canvas?.removeEventListener("webglcontextlost", this.onContextLost);
714
+ canvas?.removeEventListener(
715
+ "webglcontextrestored",
716
+ this.onContextRestored,
717
+ );
718
+ }
719
+
720
+ private onContextLost = (e: Event) => {
721
+ e.preventDefault();
722
+ if (this.releasing) return;
723
+ this.rebuildToken++;
724
+ this.stopLoop();
725
+ this.ready = false;
726
+ this.runtime = null;
727
+ };
728
+
729
+ private onContextRestored = () => {
730
+ if (this.releasing || !this.inView) return;
731
+ void this.ensureRuntime();
732
+ };
733
+
734
+ private async ensureRuntime() {
735
+ if (this.runtime && !this.runtime.isLost) return;
736
+ this.runtime = null;
737
+ await this.updateComplete;
738
+ if (!this.isConnected || (!this.inView && this.releaseOffscreen)) return;
739
+
740
+ const canvas = this.getCanvas();
741
+ if (!canvas) return;
742
+
743
+ try {
744
+ this.errorMessage = "";
745
+ this.runtime = new ShaderToyRuntime(canvas);
746
+ this.bindContextEvents();
747
+ this.syncSize();
748
+ await this.rebuild();
749
+ } catch (err) {
750
+ this.emitError(err);
751
+ }
752
+ }
753
+
754
+ private syncVisibility() {
755
+ if (!this.inView && this.releaseOffscreen) {
756
+ this.releaseRuntime();
757
+ return;
758
+ }
759
+ if (this.inView && (!this.runtime || this.runtime.isLost)) {
760
+ void this.ensureRuntime();
761
+ return;
762
+ }
763
+ this.syncPlayback();
764
+ }
765
+
766
+ private syncSize() {
767
+ if (!this.runtime) return;
768
+ const rect = this.getBoundingClientRect();
769
+ const cssW = Math.max(rect.width, this.clientWidth, 1);
770
+ const cssH = Math.max(rect.height, this.clientHeight, 1);
771
+ const dpr = Math.min(window.devicePixelRatio || 1, this.dprMax);
772
+ this.runtime.resize(cssW * dpr, cssH * dpr);
773
+ if (this.ready) {
774
+ this.drawFrame(performance.now());
775
+ }
776
+ }
777
+
778
+ private buildChannels(pass: ShaderPassId): PassChannels {
779
+ const fallbacks = [
780
+ this.channel0,
781
+ this.channel1,
782
+ this.channel2,
783
+ this.channel3,
784
+ ];
785
+ const overrides: (string | undefined)[] =
786
+ pass === "image"
787
+ ? [this.imageCh0, this.imageCh1, this.imageCh2, this.imageCh3]
788
+ : pass === "bufferA"
789
+ ? [
790
+ this.bufferACh0,
791
+ this.bufferACh1,
792
+ this.bufferACh2,
793
+ this.bufferACh3,
794
+ ]
795
+ : pass === "bufferB"
796
+ ? [
797
+ this.bufferBCh0,
798
+ this.bufferBCh1,
799
+ this.bufferBCh2,
800
+ this.bufferBCh3,
801
+ ]
802
+ : pass === "bufferC"
803
+ ? [
804
+ this.bufferCCh0,
805
+ this.bufferCCh1,
806
+ this.bufferCCh2,
807
+ this.bufferCCh3,
808
+ ]
809
+ : [
810
+ this.bufferDCh0,
811
+ this.bufferDCh1,
812
+ this.bufferDCh2,
813
+ this.bufferDCh3,
814
+ ];
815
+ return [0, 1, 2, 3].map((i) =>
816
+ parseChannelSource(overrides[i], fallbacks[i]),
817
+ ) as PassChannels;
818
+ }
819
+
820
+ private collectUrls(channels: Map<ShaderPassId, PassChannels>): string[] {
821
+ const urls: string[] = [];
822
+ for (const chs of channels.values()) {
823
+ for (const c of chs) {
824
+ if (c.kind === "url") urls.push(c.url);
825
+ }
826
+ }
827
+ return urls;
828
+ }
829
+
830
+ private async rebuild() {
831
+ if (!this.runtime || this.runtime.isLost || !this.image.trim()) return;
832
+ const token = ++this.rebuildToken;
833
+ this.errorMessage = "";
834
+ const sources: ShaderSources = {
835
+ common: this.common,
836
+ image: this.image,
837
+ bufferA: this.bufferA,
838
+ bufferB: this.bufferB,
839
+ bufferC: this.bufferC,
840
+ bufferD: this.bufferD,
841
+ };
842
+ const channels = new Map<ShaderPassId, PassChannels>();
843
+ for (const pass of [
844
+ "bufferA",
845
+ "bufferB",
846
+ "bufferC",
847
+ "bufferD",
848
+ "image",
849
+ ] as ShaderPassId[]) {
850
+ channels.set(pass, this.buildChannels(pass));
851
+ }
852
+ try {
853
+ this.syncSize();
854
+ const urls = this.collectUrls(channels);
855
+ await this.runtime.ensureTextures(urls);
856
+ if (token !== this.rebuildToken || !this.runtime || this.runtime.isLost) {
857
+ return;
858
+ }
859
+ this.applyAspectRatio(this.channel0 || urls[0]);
860
+ this.syncSize();
861
+ this.runtime.setSources(sources, channels);
862
+ if (token !== this.rebuildToken || !this.runtime || this.runtime.isLost) {
863
+ return;
864
+ }
865
+ this.ready = true;
866
+ this.startTime = performance.now();
867
+ this.lastTime = this.startTime;
868
+ this.frame = 0;
869
+ this.drawFrame(this.startTime);
870
+ this.syncPlayback();
871
+ } catch (err) {
872
+ if (token !== this.rebuildToken) return;
873
+ this.ready = false;
874
+ this.stopLoop();
875
+ this.emitError(err);
876
+ }
877
+ }
878
+
879
+ private emitError(err: unknown) {
880
+ const message =
881
+ err instanceof ShaderCompileError
882
+ ? err.message
883
+ : err instanceof Error
884
+ ? err.message
885
+ : String(err);
886
+ this.errorMessage = message;
887
+ this.dispatchEvent(
888
+ new CustomEvent("error", {
889
+ detail: {
890
+ message,
891
+ pass: err instanceof ShaderCompileError ? err.pass : undefined,
892
+ infoLog: err instanceof ShaderCompileError ? err.infoLog : undefined,
893
+ },
894
+ bubbles: true,
895
+ composed: true,
896
+ }),
897
+ );
898
+ }
899
+
900
+ private shouldAnimate(): boolean {
901
+ if (
902
+ !this.play ||
903
+ !this.ready ||
904
+ !this.inView ||
905
+ prefersReducedMotion() ||
906
+ !this.runtime
907
+ ) {
908
+ return false;
909
+ }
910
+ if (this.playOnHover) {
911
+ return this.hovering || !this.hoverSettled();
912
+ }
913
+ return true;
914
+ }
915
+
916
+ private hoverSettled(): boolean {
917
+ if (parseHoverParam(this.hoverParam) === null) return true;
918
+ return Math.abs(this.hoverMix - this.hoverGoal) < 0.002;
919
+ }
920
+
921
+ private syncPlayback() {
922
+ if (this.shouldAnimate()) {
923
+ this.runtime?.setVideosPlaying(true);
924
+ if (!this.raf) {
925
+ this.lastTime = performance.now();
926
+ this.loop();
927
+ }
928
+ } else {
929
+ this.stopLoop();
930
+ this.runtime?.setVideosPlaying(false);
931
+ if (this.ready) this.drawFrame(performance.now());
932
+ }
933
+ }
934
+
935
+ private loop = () => {
936
+ this.raf = requestAnimationFrame(this.loop);
937
+ this.drawFrame(performance.now());
938
+ // play-on-hover : arrêter une fois la transition terminée
939
+ if (this.playOnHover && !this.hovering && this.hoverSettled()) {
940
+ this.stopLoop();
941
+ this.runtime?.setVideosPlaying(false);
942
+ }
943
+ };
944
+
945
+ private stopLoop() {
946
+ if (this.raf) {
947
+ cancelAnimationFrame(this.raf);
948
+ this.raf = 0;
949
+ }
950
+ }
951
+
952
+ private drawFrame(now: number) {
953
+ if (!this.runtime || !this.ready) return;
954
+ const time = (now - this.startTime) / 1000;
955
+ const timeDelta = Math.max(0, (now - this.lastTime) / 1000);
956
+ this.lastTime = now;
957
+ this.advanceMouseFollow(timeDelta);
958
+ this.advanceHover(timeDelta);
959
+ const params = this.effectiveParams();
960
+ this.runtime.render({
961
+ time,
962
+ timeDelta,
963
+ frame: this.frame++,
964
+ mouse: this.mouseVec,
965
+ params,
966
+ });
967
+ this.maybePublishOut(now, time, params);
968
+ void this.maybeExtract(now, time);
969
+ }
970
+
971
+ private round3(n: number): number {
972
+ return Math.round(n * 1000) / 1000;
973
+ }
974
+
975
+ private buildOutput(
976
+ time: number,
977
+ params?: [number, number, number, number],
978
+ wantSample = false,
979
+ ): SonicShaderOutput {
980
+ const { width, height } = this.runtime?.size ?? { width: 1, height: 1 };
981
+ const hasPtr = this.mouseHasPointer;
982
+ const mx = hasPtr && width > 0 ? this.mouseVec[0] / width : 0.5;
983
+ const my = hasPtr && height > 0 ? this.mouseVec[1] / height : 0.5;
984
+ const p = params ?? this.effectiveParams();
985
+ const out: SonicShaderOutput = {
986
+ time: this.round3(time),
987
+ frame: this.frame,
988
+ mouseX: this.round3(mx),
989
+ mouseY: this.round3(my),
990
+ hovering: this.hovering ? 1 : 0,
991
+ param0: this.round3(p[0]),
992
+ param1: this.round3(p[1]),
993
+ param2: this.round3(p[2]),
994
+ param3: this.round3(p[3]),
995
+ };
996
+ if (wantSample && this.runtime) {
997
+ const sx = hasPtr ? this.mouseVec[0] : width * 0.5;
998
+ const sy = hasPtr ? this.mouseVec[1] : height * 0.5;
999
+ const [r8, g8, b8, a8] = this.runtime.readPixel(sx, sy);
1000
+ const r = r8 / 255;
1001
+ const g = g8 / 255;
1002
+ const b = b8 / 255;
1003
+ const a = a8 / 255;
1004
+ out.sampleR = this.round3(r);
1005
+ out.sampleG = this.round3(g);
1006
+ out.sampleB = this.round3(b);
1007
+ out.sampleA = this.round3(a);
1008
+ out.sampleLuma = this.round3(0.2126 * r + 0.7152 * g + 0.0722 * b);
1009
+ }
1010
+ return out;
1011
+ }
1012
+
1013
+ /** Un champ out du publisher a-t-il un listener (sonic-value, @subscribe…) ? */
1014
+ private publisherFieldHasListener(key: string): boolean {
1015
+ const pub = this.outPublisher as OutPublisherLike | null;
1016
+ const child = pub?._proxies_?.get(key);
1017
+ return !!child?.hasListener?.();
1018
+ }
1019
+
1020
+ /**
1021
+ * Publication paresseuse : uniquement s’il y a un event `out` ou un lecteur
1022
+ * DP sur un champ de sortie. Sinon aucun coût (pas de set, pas de readPixels).
1023
+ */
1024
+ private hasOutConsumers(): boolean {
1025
+ if (this.outEventListeners > 0) return true;
1026
+ if (!this.outPublisher) return false;
1027
+ for (const key of OUT_META_KEYS) {
1028
+ if (this.publisherFieldHasListener(key)) return true;
1029
+ }
1030
+ for (const key of OUT_SAMPLE_KEYS) {
1031
+ if (this.publisherFieldHasListener(key)) return true;
1032
+ }
1033
+ return false;
1034
+ }
1035
+
1036
+ /**
1037
+ * Même DP pour form (entrée param*) et out : ne pas réécrire les params
1038
+ * pilotés par le formulaire (sinon sortie viewport / hoverMix → champs à 0).
1039
+ * Seul le slot `hover-param` reste écrit (piloté par le shader).
1040
+ */
1041
+ private shouldSkipParamOutWrite(key: string): boolean {
1042
+ if (!(OUT_PARAM_KEYS as readonly string[]).includes(key)) return false;
1043
+ if (!this.formPublisher || this.formPublisher !== this.outPublisher) {
1044
+ return false;
1045
+ }
1046
+ const slot = parseHoverParam(this.hoverParam);
1047
+ if (slot === null) return true;
1048
+ return Number(key.slice(5)) !== slot;
1049
+ }
1050
+
1051
+ /**
1052
+ * `readPixels` si `sample` et au moins un consommateur out.
1053
+ * (Un `@handle(frame)` + `get(dp)` massif doit recevoir les samples.)
1054
+ */
1055
+ private needsSampleRead(): boolean {
1056
+ return this.sample && this.hasOutConsumers();
1057
+ }
1058
+
1059
+ private maybePublishOut(
1060
+ now: number,
1061
+ time: number,
1062
+ params?: [number, number, number, number],
1063
+ ) {
1064
+ if (!this.outPublisher) this.bindOutPublisher();
1065
+ if (!this.hasOutConsumers()) return;
1066
+ const interval = Math.max(16, this.outInterval || 80);
1067
+ if (now - this.lastOutAt < interval) return;
1068
+ this.lastOutAt = now;
1069
+ const payload = this.buildOutput(time, params, this.needsSampleRead());
1070
+ const pub = this.outPublisher;
1071
+ if (pub) {
1072
+ for (const [key, value] of Object.entries(payload)) {
1073
+ if (value === undefined) continue;
1074
+ if (this.shouldSkipParamOutWrite(key)) continue;
1075
+ try {
1076
+ // Champs individuels pour ne pas écraser le reste du form
1077
+ (pub as Record<string, { set: (v: unknown) => void }>)[key].set(
1078
+ value,
1079
+ );
1080
+ } catch {
1081
+ /* publisher leaf manquant / non settable */
1082
+ }
1083
+ }
1084
+ }
1085
+ this.dispatchEvent(
1086
+ new CustomEvent("out", {
1087
+ detail: payload,
1088
+ bubbles: true,
1089
+ composed: true,
1090
+ }),
1091
+ );
1092
+ }
1093
+
1094
+ private revokeBlobUrls() {
1095
+ for (const url of this.lastBlobUrls) {
1096
+ try {
1097
+ URL.revokeObjectURL(url);
1098
+ } catch {
1099
+ /* ignore */
1100
+ }
1101
+ }
1102
+ this.lastBlobUrls = [];
1103
+ }
1104
+
1105
+ /** Révoque les URLs du batch précédent après un court délai (évite img cassées). */
1106
+ private scheduleRevokePreviousBlobs(urls: string[]) {
1107
+ const objectUrls = urls.filter((u) => u.startsWith("blob:"));
1108
+ if (objectUrls.length === 0) return;
1109
+ this.pendingRevokeUrls.push(...objectUrls);
1110
+ const toRevoke = objectUrls;
1111
+ window.setTimeout(() => {
1112
+ for (const url of toRevoke) {
1113
+ try {
1114
+ URL.revokeObjectURL(url);
1115
+ } catch {
1116
+ /* ignore */
1117
+ }
1118
+ const i = this.pendingRevokeUrls.indexOf(url);
1119
+ if (i >= 0) this.pendingRevokeUrls.splice(i, 1);
1120
+ }
1121
+ }, 1500);
1122
+ }
1123
+
1124
+ private publisherHasFieldListener(
1125
+ pub: OutPublisherLike | null,
1126
+ key: string,
1127
+ ): boolean {
1128
+ const child = pub?._proxies_?.get(key);
1129
+ return !!child?.hasListener?.();
1130
+ }
1131
+
1132
+ private hasExtractConsumers(): boolean {
1133
+ if (this.extractEventListeners > 0) return true;
1134
+ const pub = this.extractPublisher as OutPublisherLike | null;
1135
+ if (!pub) return false;
1136
+ for (const key of EXTRACT_OUT_KEYS) {
1137
+ if (this.publisherHasFieldListener(pub, key)) return true;
1138
+ }
1139
+ return false;
1140
+ }
1141
+
1142
+ private syncManualRoisFromPublishers() {
1143
+ const tryGet = (pub: OutPublisherLike | null) => {
1144
+ if (!pub?.get) return;
1145
+ try {
1146
+ const data = pub.get() ?? {};
1147
+ if ("rois" in data) this.manualRois = parseRois(data.rois);
1148
+ } catch {
1149
+ /* ignore */
1150
+ }
1151
+ };
1152
+ tryGet(this.formPublisher as OutPublisherLike | null);
1153
+ if (this.extractPublisher && this.extractPublisher !== this.formPublisher) {
1154
+ tryGet(this.extractPublisher as OutPublisherLike | null);
1155
+ }
1156
+ }
1157
+
1158
+ private resolveExtractInterval(): number {
1159
+ if (this.extractInterval > 0) return Math.max(16, this.extractInterval);
1160
+ return Math.max(16, this.outInterval || 100);
1161
+ }
1162
+
1163
+ /**
1164
+ * Lit une ROI à la demande (hors throttle). Nécessite un runtime prêt.
1165
+ */
1166
+ async readRegion(roi: ShaderRoi): Promise<ShaderExtractItem | null> {
1167
+ if (!this.runtime || !this.ready) return null;
1168
+ const item = await this.buildExtractItem(roi, "manual", undefined);
1169
+ return item;
1170
+ }
1171
+
1172
+ /** Lance une extraction complète immédiatement. */
1173
+ async extractNow(): Promise<ShaderExtractOutput> {
1174
+ const time = (performance.now() - this.startTime) / 1000;
1175
+ return this.runExtract(time);
1176
+ }
1177
+
1178
+ private async maybeExtract(now: number, time: number) {
1179
+ if (!this.extract || !this.ready || !this.runtime) return;
1180
+ if (!this.extractPublisher) this.bindExtractPublisher();
1181
+ if (!this.hasExtractConsumers()) return;
1182
+ if (now - this.lastExtractAt < this.resolveExtractInterval()) return;
1183
+ if (this.extractRunning) return;
1184
+ this.lastExtractAt = now;
1185
+ await this.runExtract(time);
1186
+ }
1187
+
1188
+ private async runExtract(time: number): Promise<ShaderExtractOutput> {
1189
+ const empty: ShaderExtractOutput = {
1190
+ frame: this.frame,
1191
+ time: this.round3(time),
1192
+ items: [],
1193
+ };
1194
+ if (!this.runtime || !this.ready) return empty;
1195
+ this.extractRunning = true;
1196
+ try {
1197
+ this.syncManualRoisFromPublishers();
1198
+ const { width: bufW, height: bufH } = this.runtime.size;
1199
+ const rois: PendingRoi[] = this.manualRois.map((r) => ({
1200
+ ...r,
1201
+ source: "manual" as const,
1202
+ }));
1203
+
1204
+ const maskPass = parseExtractPass(this.extractMask);
1205
+ if (maskPass) {
1206
+ const full = this.runtime.readBufferRect(maskPass, 0, 0, bufW, bufH);
1207
+ if (full) {
1208
+ const peaks = findPeaks(full.data, full.width, full.height, {
1209
+ threshold: this.extractThreshold,
1210
+ maxCount: Math.max(0, Math.floor(this.extractMax)),
1211
+ // Défaut ≈ patch/3 plafonné à 16 (doc) — laisse assez de coins espacés
1212
+ minDistance: Math.max(
1213
+ 8,
1214
+ Math.floor(Math.min(this.extractPatch / 3, 16)),
1215
+ ),
1216
+ });
1217
+ // Score relatif au meilleur peak du batch (ordre inchangé, UI lisible)
1218
+ const topScore = peaks[0]?.score || 1;
1219
+ for (let i = 0; i < peaks.length; i++) {
1220
+ const p = peaks[i];
1221
+ rois.push({
1222
+ id: `detect-${i}`,
1223
+ x: (p.x + 0.5) / bufW,
1224
+ y: (p.y + 0.5) / bufH,
1225
+ patch: this.extractPatch,
1226
+ source: "detect",
1227
+ score: topScore > 0 ? p.score / topScore : p.score,
1228
+ });
1229
+ }
1230
+ }
1231
+ }
1232
+
1233
+ // Phase sync : tous les readPixels AVANT tout await
1234
+ // (preserveDrawingBuffer=false → buffer Image vidé dès qu’on yield).
1235
+ type PendingItem = {
1236
+ item: ShaderExtractItem;
1237
+ rgba: Uint8Array;
1238
+ width: number;
1239
+ height: number;
1240
+ };
1241
+ const pending: PendingItem[] = [];
1242
+ let detectIdx = 0;
1243
+ const pass = parseExtractPass(this.extractSource) ?? "image";
1244
+
1245
+ for (const roi of rois) {
1246
+ const source = roi.source === "detect" ? "detect" : "manual";
1247
+ if (source === "detect") {
1248
+ if (detectIdx >= Math.max(0, Math.floor(this.extractMax))) continue;
1249
+ detectIdx++;
1250
+ }
1251
+ const px = roiToPixels(
1252
+ roi,
1253
+ bufW,
1254
+ bufH,
1255
+ this.extractPatch,
1256
+ MAX_PATCH_PX,
1257
+ );
1258
+ if (!px) continue;
1259
+ const rect =
1260
+ pass === "image"
1261
+ ? this.runtime.readRect(px.x, px.y, px.w, px.h)
1262
+ : this.runtime.readBufferRect(pass, px.x, px.y, px.w, px.h);
1263
+ if (!rect) continue;
1264
+ // Copie : le buffer WebGL peut être réutilisé / invalidé ensuite
1265
+ const rgba = new Uint8Array(rect.data);
1266
+ const mean = meanRgba(rgba);
1267
+ const item: ShaderExtractItem = {
1268
+ id: roi.id || `${source}-${px.x}-${px.y}`,
1269
+ x: this.round3(rect.x / bufW),
1270
+ y: this.round3(rect.y / bufH),
1271
+ w: this.round3(rect.width / bufW),
1272
+ h: this.round3(rect.height / bufH),
1273
+ meanR: this.round3(mean.r),
1274
+ meanG: this.round3(mean.g),
1275
+ meanB: this.round3(mean.b),
1276
+ meanA: this.round3(mean.a),
1277
+ meanLuma: this.round3(mean.luma),
1278
+ source,
1279
+ };
1280
+ if (typeof roi.score === "number") item.score = this.round3(roi.score);
1281
+ pending.push({
1282
+ item,
1283
+ rgba,
1284
+ width: rect.width,
1285
+ height: rect.height,
1286
+ });
1287
+ }
1288
+
1289
+ // Phase async : bitmaps (après copies CPU)
1290
+ if (this.extractBitmaps) {
1291
+ const token = this.rebuildToken;
1292
+ for (const p of pending) {
1293
+ if (token !== this.rebuildToken || !this.isConnected) {
1294
+ for (const q of pending) {
1295
+ if (q.item.blobUrl) revokeMediaUrls([q.item.blobUrl]);
1296
+ }
1297
+ return empty;
1298
+ }
1299
+ const url = await rgbaToBlobUrl(p.rgba, p.width, p.height);
1300
+ if (token !== this.rebuildToken || !this.isConnected) {
1301
+ if (url) revokeMediaUrls([url]);
1302
+ for (const q of pending) {
1303
+ if (q.item.blobUrl) revokeMediaUrls([q.item.blobUrl]);
1304
+ }
1305
+ return empty;
1306
+ }
1307
+ if (url) assignExtractMediaUrls(p.item, url);
1308
+ }
1309
+ }
1310
+
1311
+ if (!this.isConnected) {
1312
+ for (const p of pending) {
1313
+ if (p.item.blobUrl) revokeMediaUrls([p.item.blobUrl]);
1314
+ }
1315
+ return empty;
1316
+ }
1317
+
1318
+ const items = pending.map((p) => p.item);
1319
+ const payload: ShaderExtractOutput = {
1320
+ frame: this.frame,
1321
+ time: this.round3(time),
1322
+ items,
1323
+ };
1324
+ this.publishExtract(payload);
1325
+ return payload;
1326
+ } finally {
1327
+ this.extractRunning = false;
1328
+ }
1329
+ }
1330
+
1331
+ private async buildExtractItem(
1332
+ roi: ShaderRoi,
1333
+ source: "manual" | "detect",
1334
+ score?: number,
1335
+ ): Promise<ShaderExtractItem | null> {
1336
+ if (!this.runtime) return null;
1337
+ const { width: bufW, height: bufH } = this.runtime.size;
1338
+ const px = roiToPixels(roi, bufW, bufH, this.extractPatch, MAX_PATCH_PX);
1339
+ if (!px) return null;
1340
+ const pass = parseExtractPass(this.extractSource) ?? "image";
1341
+ const rect =
1342
+ pass === "image"
1343
+ ? this.runtime.readRect(px.x, px.y, px.w, px.h)
1344
+ : this.runtime.readBufferRect(pass, px.x, px.y, px.w, px.h);
1345
+ if (!rect) return null;
1346
+ const mean = meanRgba(rect.data);
1347
+ const item: ShaderExtractItem = {
1348
+ id: roi.id || `${source}-${px.x}-${px.y}`,
1349
+ x: this.round3(rect.x / bufW),
1350
+ y: this.round3(rect.y / bufH),
1351
+ w: this.round3(rect.width / bufW),
1352
+ h: this.round3(rect.height / bufH),
1353
+ meanR: this.round3(mean.r),
1354
+ meanG: this.round3(mean.g),
1355
+ meanB: this.round3(mean.b),
1356
+ meanA: this.round3(mean.a),
1357
+ meanLuma: this.round3(mean.luma),
1358
+ source,
1359
+ };
1360
+ if (typeof score === "number") item.score = this.round3(score);
1361
+ if (this.extractBitmaps) {
1362
+ const token = this.rebuildToken;
1363
+ const url = await rgbaToBlobUrl(rect.data, rect.width, rect.height);
1364
+ if (token !== this.rebuildToken || !this.isConnected) {
1365
+ if (url) revokeMediaUrls([url]);
1366
+ return null;
1367
+ }
1368
+ if (url) assignExtractMediaUrls(item, url);
1369
+ }
1370
+ return item;
1371
+ }
1372
+
1373
+ private publishExtract(payload: ShaderExtractOutput) {
1374
+ // Ne pas révoquer tout de suite : les <img> du batch précédent casseraient.
1375
+ this.scheduleRevokePreviousBlobs(this.lastBlobUrls);
1376
+ this.lastBlobUrls = [];
1377
+ for (const it of payload.items) {
1378
+ if (it.blobUrl) this.lastBlobUrls.push(it.blobUrl);
1379
+ }
1380
+ this.extractSeq++;
1381
+ if (!this.extractPublisher) this.bindExtractPublisher();
1382
+ const pub = this.extractPublisher;
1383
+ if (pub) {
1384
+ // Set atomique sur la racine : invalide `_cachedGet_` du parent.
1385
+ // (pub.extracts.set(...) seul laisse un snapshot périmé → 1 seul item en get()).
1386
+ try {
1387
+ const prev =
1388
+ ((pub as { get?: () => Record<string, unknown> }).get?.() as
1389
+ | Record<string, unknown>
1390
+ | null
1391
+ | undefined) ?? {};
1392
+ (pub as { set: (v: unknown) => void }).set({
1393
+ ...prev,
1394
+ rois: Array.isArray(prev.rois) ? prev.rois : this.manualRois,
1395
+ extracts: payload.items,
1396
+ extractCount: payload.items.length,
1397
+ extractSeq: this.extractSeq,
1398
+ });
1399
+ } catch {
1400
+ try {
1401
+ (pub as Record<string, { set: (v: unknown) => void }>).extracts.set(
1402
+ payload.items,
1403
+ );
1404
+ (
1405
+ pub as Record<string, { set: (v: unknown) => void }>
1406
+ ).extractCount.set(payload.items.length);
1407
+ (
1408
+ pub as Record<string, { set: (v: unknown) => void }>
1409
+ ).extractSeq.set(this.extractSeq);
1410
+ } catch {
1411
+ /* ignore */
1412
+ }
1413
+ }
1414
+ }
1415
+ this.dispatchEvent(
1416
+ new CustomEvent("extract", {
1417
+ detail: payload,
1418
+ bubbles: true,
1419
+ composed: true,
1420
+ }),
1421
+ );
1422
+ }
1423
+
1424
+ /**
1425
+ * Mode target : poursuite exponentielle (vitesse proportionnelle à la distance).
1426
+ * Frame-rate indépendant via `1 - exp(-speed * dt)`.
1427
+ */
1428
+ private advanceMouseFollow(dt: number) {
1429
+ if (!this.mouse || this.mouseMode !== "target" || !this.mouseHasPointer) {
1430
+ return;
1431
+ }
1432
+ const speed = Math.max(0, this.mouseSpeed);
1433
+ const t = speed <= 0 || dt <= 0 ? 1 : 1 - Math.exp(-speed * dt);
1434
+ this.mouseFollow[0] += (this.mouseTarget[0] - this.mouseFollow[0]) * t;
1435
+ this.mouseFollow[1] += (this.mouseTarget[1] - this.mouseFollow[1]) * t;
1436
+ this.mouseVec[0] = this.mouseFollow[0];
1437
+ this.mouseVec[1] = this.mouseFollow[1];
1438
+ }
1439
+
1440
+ /** Rollover / roll-out → easing de `hoverMix` (0↔1) pour le slot choisi. */
1441
+ private advanceHover(dt: number) {
1442
+ if (parseHoverParam(this.hoverParam) === null) return;
1443
+ const speed = Math.max(0, this.hoverSpeed);
1444
+ const t = speed <= 0 || dt <= 0 ? 1 : 1 - Math.exp(-speed * dt);
1445
+ const next = this.hoverMix + (this.hoverGoal - this.hoverMix) * t;
1446
+ // Snap pour éviter une micro-animation infinie (play-on-hover qui redémarre).
1447
+ this.hoverMix =
1448
+ Math.abs(next - this.hoverGoal) < 0.002 ? this.hoverGoal : next;
1449
+ }
1450
+
1451
+ private localPointer(e: PointerEvent): { x: number; y: number } {
1452
+ const rect = this.getBoundingClientRect();
1453
+ const dpr = Math.min(window.devicePixelRatio || 1, this.dprMax);
1454
+ const x = (e.clientX - rect.left) * dpr;
1455
+ const y = (rect.height - (e.clientY - rect.top)) * dpr;
1456
+ return { x, y };
1457
+ }
1458
+
1459
+ private setPointerTarget(x: number, y: number, snap = false) {
1460
+ this.mouseTarget[0] = x;
1461
+ this.mouseTarget[1] = y;
1462
+ if (!this.mouseHasPointer || snap || this.mouseMode === "direct") {
1463
+ this.mouseHasPointer = true;
1464
+ this.mouseFollow[0] = x;
1465
+ this.mouseFollow[1] = y;
1466
+ this.mouseVec[0] = x;
1467
+ this.mouseVec[1] = y;
1468
+ }
1469
+ }
1470
+
1471
+ private onPointerMove = (e: PointerEvent) => {
1472
+ if (!this.mouse) return;
1473
+ const { x, y } = this.localPointer(e);
1474
+ this.setPointerTarget(x, y);
1475
+ if (this.pointerDown) {
1476
+ this.mouseVec[2] = x;
1477
+ this.mouseVec[3] = y;
1478
+ }
1479
+ };
1480
+
1481
+ private onPointerDown = (e: PointerEvent) => {
1482
+ if (!this.mouse) return;
1483
+ this.pointerDown = true;
1484
+ this.setPointerCapture?.(e.pointerId);
1485
+ const { x, y } = this.localPointer(e);
1486
+ this.setPointerTarget(x, y, true);
1487
+ this.mouseVec[2] = x;
1488
+ this.mouseVec[3] = y;
1489
+ };
1490
+
1491
+ private onPointerUp = (e: PointerEvent) => {
1492
+ if (!this.mouse) return;
1493
+ this.pointerDown = false;
1494
+ const { x, y } = this.localPointer(e);
1495
+ this.setPointerTarget(x, y);
1496
+ this.mouseVec[2] = -Math.abs(this.mouseVec[2]);
1497
+ this.mouseVec[3] = -Math.abs(this.mouseVec[3]);
1498
+ };
1499
+
1500
+ private onPointerEnter = () => {
1501
+ if (this.leaveRaf) {
1502
+ cancelAnimationFrame(this.leaveRaf);
1503
+ this.leaveRaf = 0;
1504
+ }
1505
+ this.hovering = true;
1506
+ this.hoverGoal = 1;
1507
+ this.syncPlayback();
1508
+ };
1509
+
1510
+ private onPointerLeave = () => {
1511
+ // Différer : un leave parasite (re-render / enfant shadow) suivi d’un
1512
+ // re-enter immédiat provoquait activation↔désactivation en boucle.
1513
+ if (this.leaveRaf) cancelAnimationFrame(this.leaveRaf);
1514
+ this.leaveRaf = requestAnimationFrame(() => {
1515
+ this.leaveRaf = 0;
1516
+ if (!this.isConnected || this.matches(":hover")) return;
1517
+ this.hovering = false;
1518
+ this.hoverGoal = 0;
1519
+ this.pointerDown = false;
1520
+ this.syncPlayback();
1521
+ });
1522
+ };
1523
+
1524
+ render() {
1525
+ return html`
1526
+ <canvas part="canvas"></canvas>
1527
+ ${this.errorMessage
1528
+ ? html`<div class="err" part="error">${this.errorMessage}</div>`
1529
+ : null}
1530
+ `;
1531
+ }
1532
+ }
1533
+
1534
+ export { parseChannelSource, ShaderToyRuntime } from "./gl-runtime";
1535
+ export { buildFragmentSource } from "./shadertoy-prelude";
1536
+ export type {
1537
+ ChannelSource,
1538
+ ShaderExtractItem,
1539
+ ShaderExtractOutput,
1540
+ ShaderExtractPass,
1541
+ ShaderHoverParam,
1542
+ ShaderMouseMode,
1543
+ ShaderParamSlot,
1544
+ ShaderPassId,
1545
+ ShaderPeak,
1546
+ ShaderRoi,
1547
+ ShaderSources,
1548
+ SonicShaderConfig,
1549
+ SonicShaderOutput,
1550
+ } from "./types";
1551
+ export type { SonicMediaRef } from "@supersoniks/concorde/core/utils/mediaRef";
1552
+ export {
1553
+ toMediaUrl,
1554
+ cloneMediaRef,
1555
+ } from "@supersoniks/concorde/core/utils/mediaRef";
1556
+ export {
1557
+ findPeaks,
1558
+ meanRgba,
1559
+ parseExtractPass,
1560
+ parseHoverParam,
1561
+ roiToPixels,
1562
+ ShaderCompileError,
1563
+ } from "./types";
1564
+
1565
+ declare global {
1566
+ interface HTMLElementTagNameMap {
1567
+ [tagName]: SonicShader;
1568
+ }
1569
+ }