@supersoniks/concorde 4.9.98-visual-stack.0 → 4.9.98-visual-stack.2

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 (476) hide show
  1. package/.gitlab-ci.yml +0 -13
  2. package/build-infos.json +1 -1
  3. package/concorde-3d.bundle.js +201 -152
  4. package/concorde-3d.es.js +14688 -13906
  5. package/concorde-core.bundle.js +557 -622
  6. package/concorde-core.es.js +6025 -5575
  7. package/concorde-hugging-face-infer.bundle.js +1 -1
  8. package/concorde-hugging-face-infer.es.js +1 -1
  9. package/concorde-interactive.bundle.js +1162 -0
  10. package/concorde-interactive.es.js +10723 -0
  11. package/concorde-shader.bundle.js +31 -20
  12. package/concorde-shader.es.js +2773 -2547
  13. package/concorde-webgpu.bundle.js +43 -32
  14. package/concorde-webgpu.es.js +1819 -1553
  15. package/dist/concorde-3d.bundle.js +201 -152
  16. package/dist/concorde-3d.es.js +14688 -13906
  17. package/dist/concorde-core.bundle.js +557 -622
  18. package/dist/concorde-core.es.js +6025 -5575
  19. package/dist/concorde-hugging-face-infer.bundle.js +1 -1
  20. package/dist/concorde-hugging-face-infer.es.js +1 -1
  21. package/dist/concorde-interactive.bundle.js +1162 -0
  22. package/dist/concorde-interactive.es.js +10723 -0
  23. package/dist/concorde-shader.bundle.js +31 -20
  24. package/dist/concorde-shader.es.js +2773 -2547
  25. package/dist/concorde-webgpu.bundle.js +43 -32
  26. package/dist/concorde-webgpu.es.js +1819 -1553
  27. package/dist/docs-mock-api-sw.js +5 -1
  28. package/dist/docs-mock-api-sw.js.map +2 -2
  29. package/dist/js/addons/interactive.js +6 -0
  30. package/dist/js/addons/interactive.js.map +1 -0
  31. package/dist/js/core/components/functional/3d/3d.js +90 -2
  32. package/dist/js/core/components/functional/3d/3d.js.map +1 -1
  33. package/dist/js/core/components/functional/3d/constants.js +1 -0
  34. package/dist/js/core/components/functional/3d/constants.js.map +1 -1
  35. package/dist/js/core/components/functional/3d/ensure.js +6 -3
  36. package/dist/js/core/components/functional/3d/ensure.js.map +1 -1
  37. package/dist/js/core/components/functional/3d/form-params.js +2 -0
  38. package/dist/js/core/components/functional/3d/form-params.js.map +1 -1
  39. package/dist/js/core/components/functional/3d/life.js +2 -1
  40. package/dist/js/core/components/functional/3d/life.js.map +1 -1
  41. package/dist/js/core/components/functional/3d/out-publish.js +3 -2
  42. package/dist/js/core/components/functional/3d/out-publish.js.map +1 -1
  43. package/dist/js/core/components/functional/3d/playback.js +6 -1
  44. package/dist/js/core/components/functional/3d/playback.js.map +1 -1
  45. package/dist/js/core/components/functional/3d/post-bind.js +207 -0
  46. package/dist/js/core/components/functional/3d/post-bind.js.map +1 -0
  47. package/dist/js/core/components/functional/3d/post-channels.js +39 -0
  48. package/dist/js/core/components/functional/3d/post-channels.js.map +1 -0
  49. package/dist/js/core/components/functional/3d/post-fx.js +495 -0
  50. package/dist/js/core/components/functional/3d/post-fx.js.map +1 -0
  51. package/dist/js/core/components/functional/3d/props.js +142 -0
  52. package/dist/js/core/components/functional/3d/props.js.map +1 -1
  53. package/dist/js/core/components/functional/3d/reload.js +2 -0
  54. package/dist/js/core/components/functional/3d/reload.js.map +1 -1
  55. package/dist/js/core/components/functional/3d/runtime.js +80 -3
  56. package/dist/js/core/components/functional/3d/runtime.js.map +1 -1
  57. package/dist/js/core/components/functional/3d/scene-runtime.js +1 -1
  58. package/dist/js/core/components/functional/3d/scene-runtime.js.map +1 -1
  59. package/dist/js/core/components/functional/3d/tune.js +21 -0
  60. package/dist/js/core/components/functional/3d/tune.js.map +1 -1
  61. package/dist/js/core/components/functional/3d/updated.js +13 -1
  62. package/dist/js/core/components/functional/3d/updated.js.map +1 -1
  63. package/dist/js/core/components/functional/if/if.js +65 -7
  64. package/dist/js/core/components/functional/if/if.js.map +1 -1
  65. package/dist/js/core/components/functional/interactive/action.js +96 -0
  66. package/dist/js/core/components/functional/interactive/action.js.map +1 -0
  67. package/dist/js/core/components/functional/interactive/gamepad.js +206 -0
  68. package/dist/js/core/components/functional/interactive/gamepad.js.map +1 -0
  69. package/dist/js/core/components/functional/interactive/gesture.js +148 -0
  70. package/dist/js/core/components/functional/interactive/gesture.js.map +1 -0
  71. package/dist/js/core/components/functional/interactive/helpers.js +82 -0
  72. package/dist/js/core/components/functional/interactive/helpers.js.map +1 -0
  73. package/dist/js/core/components/functional/interactive/index.js +20 -0
  74. package/dist/js/core/components/functional/interactive/index.js.map +1 -0
  75. package/dist/js/core/components/functional/interactive/keyboard.js +183 -0
  76. package/dist/js/core/components/functional/interactive/keyboard.js.map +1 -0
  77. package/dist/js/core/components/functional/interactive/matrix.js +201 -0
  78. package/dist/js/core/components/functional/interactive/matrix.js.map +1 -0
  79. package/dist/js/core/components/functional/interactive/registry.js +28 -0
  80. package/dist/js/core/components/functional/interactive/registry.js.map +1 -0
  81. package/dist/js/core/components/functional/interactive/store.js +264 -0
  82. package/dist/js/core/components/functional/interactive/store.js.map +1 -0
  83. package/dist/js/core/components/functional/interactive/ticker.js +182 -0
  84. package/dist/js/core/components/functional/interactive/ticker.js.map +1 -0
  85. package/dist/js/core/components/functional/shader/gl-runtime.js +128 -14
  86. package/dist/js/core/components/functional/shader/gl-runtime.js.map +1 -1
  87. package/dist/js/core/components/functional/shader/shader.js +154 -57
  88. package/dist/js/core/components/functional/shader/shader.js.map +1 -1
  89. package/dist/js/core/components/functional/shader/shadertoy-prelude.js +39 -5
  90. package/dist/js/core/components/functional/shader/shadertoy-prelude.js.map +1 -1
  91. package/dist/js/core/components/functional/shader/types.js +58 -7
  92. package/dist/js/core/components/functional/shader/types.js.map +1 -1
  93. package/dist/js/core/components/functional/value/value.js +49 -4
  94. package/dist/js/core/components/functional/value/value.js.map +1 -1
  95. package/dist/js/core/components/functional/webgpu/gl-fallback.js +27 -6
  96. package/dist/js/core/components/functional/webgpu/gl-fallback.js.map +1 -1
  97. package/dist/js/core/components/functional/webgpu/gpu-runtime.js +115 -13
  98. package/dist/js/core/components/functional/webgpu/gpu-runtime.js.map +1 -1
  99. package/dist/js/core/components/functional/webgpu/helpers.js +8 -2
  100. package/dist/js/core/components/functional/webgpu/helpers.js.map +1 -1
  101. package/dist/js/core/components/functional/webgpu/webgpu.js +34 -1
  102. package/dist/js/core/components/functional/webgpu/webgpu.js.map +1 -1
  103. package/dist/js/core/components/ui/_css/rounded.js +34 -0
  104. package/dist/js/core/components/ui/_css/rounded.js.map +1 -0
  105. package/dist/js/core/components/ui/_css/type.js +44 -0
  106. package/dist/js/core/components/ui/_css/type.js.map +1 -1
  107. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js +95 -0
  108. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js.map +1 -0
  109. package/dist/js/core/components/ui/alert/alert.js +72 -87
  110. package/dist/js/core/components/ui/alert/alert.js.map +1 -1
  111. package/dist/js/core/components/ui/alert-messages/alert-messages.js +1 -0
  112. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +1 -1
  113. package/dist/js/core/components/ui/badge/badge.js +29 -80
  114. package/dist/js/core/components/ui/badge/badge.js.map +1 -1
  115. package/dist/js/core/components/ui/button/button.js +8 -7
  116. package/dist/js/core/components/ui/button/button.js.map +1 -1
  117. package/dist/js/core/components/ui/card/card-header.js +7 -2
  118. package/dist/js/core/components/ui/card/card-header.js.map +1 -1
  119. package/dist/js/core/components/ui/divider/divider.js +1 -1
  120. package/dist/js/core/components/ui/divider/divider.js.map +1 -1
  121. package/dist/js/core/components/ui/form/checkbox/checkbox.js +4 -20
  122. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +1 -1
  123. package/dist/js/core/components/ui/form/fieldset/legend-description.js +1 -1
  124. package/dist/js/core/components/ui/form/fieldset/legend.js +1 -1
  125. package/dist/js/core/components/ui/form/input/input.js +12 -15
  126. package/dist/js/core/components/ui/form/input/input.js.map +1 -1
  127. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +363 -158
  128. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +1 -1
  129. package/dist/js/core/components/ui/form/radio/radio.js +1 -1
  130. package/dist/js/core/components/ui/form/select/select.js +3 -6
  131. package/dist/js/core/components/ui/form/select/select.js.map +1 -1
  132. package/dist/js/core/components/ui/form/textarea/textarea.js +1 -2
  133. package/dist/js/core/components/ui/form/textarea/textarea.js.map +1 -1
  134. package/dist/js/core/components/ui/image/image.js +9 -37
  135. package/dist/js/core/components/ui/image/image.js.map +1 -1
  136. package/dist/js/core/components/ui/link/link.js +25 -26
  137. package/dist/js/core/components/ui/link/link.js.map +1 -1
  138. package/dist/js/core/components/ui/modal/modal-close.js +3 -12
  139. package/dist/js/core/components/ui/modal/modal-close.js.map +1 -1
  140. package/dist/js/core/components/ui/modal/modal.js +18 -18
  141. package/dist/js/core/components/ui/modal/modal.js.map +1 -1
  142. package/dist/js/core/components/ui/pop/pop.js +131 -112
  143. package/dist/js/core/components/ui/pop/pop.js.map +1 -1
  144. package/dist/js/core/components/ui/table/table.js.map +1 -1
  145. package/dist/js/core/components/ui/theme/theme.js +1 -1
  146. package/dist/js/core/components/ui/toast/dismissed.js +9 -0
  147. package/dist/js/core/components/ui/toast/dismissed.js.map +1 -0
  148. package/dist/js/core/components/ui/toast/render-content.js +14 -0
  149. package/dist/js/core/components/ui/toast/render-content.js.map +1 -0
  150. package/dist/js/core/components/ui/toast/toast-item.js +150 -96
  151. package/dist/js/core/components/ui/toast/toast-item.js.map +1 -1
  152. package/dist/js/core/components/ui/toast/toast.js +41 -13
  153. package/dist/js/core/components/ui/toast/toast.js.map +1 -1
  154. package/dist/js/core/components/ui/tooltip/tooltip.js +144 -143
  155. package/dist/js/core/components/ui/tooltip/tooltip.js.map +1 -1
  156. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +1 -1
  157. package/dist/js/core/decorators/subscriber/derive.js +3 -1
  158. package/dist/js/core/decorators/subscriber/derive.js.map +1 -1
  159. package/dist/js/core/mixins/Fetcher.js.map +1 -1
  160. package/dist/js/core/mixins/FormCheckable.js +1 -8
  161. package/dist/js/core/mixins/FormCheckable.js.map +1 -1
  162. package/dist/js/core/mixins/FormElement.js +26 -53
  163. package/dist/js/core/mixins/FormElement.js.map +1 -1
  164. package/dist/js/core/utils/AncestorAttributeObserver.js +130 -55
  165. package/dist/js/core/utils/AncestorAttributeObserver.js.map +1 -1
  166. package/dist/js/core/utils/LocationHandler.js +1 -1
  167. package/dist/js/core/utils/LocationHandler.js.map +1 -1
  168. package/dist/js/core/utils/dismissed.js +23 -0
  169. package/dist/js/core/utils/dismissed.js.map +1 -0
  170. package/dist/js/core/utils/mediaRef.js +37 -0
  171. package/dist/js/core/utils/mediaRef.js.map +1 -1
  172. package/dist/js/core/utils/positioning.js +110 -0
  173. package/dist/js/core/utils/positioning.js.map +1 -0
  174. package/dist/js/directives.js +1 -2
  175. package/dist/js/directives.js.map +1 -1
  176. package/dist/types/addons/interactive.d.ts +6 -0
  177. package/dist/types/addons/interactive.d.ts.map +1 -0
  178. package/dist/types/core/components/functional/3d/3d.d.ts +26 -3
  179. package/dist/types/core/components/functional/3d/3d.d.ts.map +1 -1
  180. package/dist/types/core/components/functional/3d/constants.d.ts +1 -1
  181. package/dist/types/core/components/functional/3d/constants.d.ts.map +1 -1
  182. package/dist/types/core/components/functional/3d/ensure.d.ts +3 -0
  183. package/dist/types/core/components/functional/3d/ensure.d.ts.map +1 -1
  184. package/dist/types/core/components/functional/3d/form-params.d.ts.map +1 -1
  185. package/dist/types/core/components/functional/3d/life.d.ts +2 -0
  186. package/dist/types/core/components/functional/3d/life.d.ts.map +1 -1
  187. package/dist/types/core/components/functional/3d/out-publish.d.ts +1 -0
  188. package/dist/types/core/components/functional/3d/out-publish.d.ts.map +1 -1
  189. package/dist/types/core/components/functional/3d/playback.d.ts +9 -0
  190. package/dist/types/core/components/functional/3d/playback.d.ts.map +1 -1
  191. package/dist/types/core/components/functional/3d/post-bind.d.ts +52 -0
  192. package/dist/types/core/components/functional/3d/post-bind.d.ts.map +1 -0
  193. package/dist/types/core/components/functional/3d/post-channels.d.ts +40 -0
  194. package/dist/types/core/components/functional/3d/post-channels.d.ts.map +1 -0
  195. package/dist/types/core/components/functional/3d/post-fx.d.ts +73 -0
  196. package/dist/types/core/components/functional/3d/post-fx.d.ts.map +1 -0
  197. package/dist/types/core/components/functional/3d/props.d.ts +42 -0
  198. package/dist/types/core/components/functional/3d/props.d.ts.map +1 -1
  199. package/dist/types/core/components/functional/3d/reload.d.ts.map +1 -1
  200. package/dist/types/core/components/functional/3d/runtime.d.ts +16 -1
  201. package/dist/types/core/components/functional/3d/runtime.d.ts.map +1 -1
  202. package/dist/types/core/components/functional/3d/scene-runtime.d.ts +1 -1
  203. package/dist/types/core/components/functional/3d/scene-runtime.d.ts.map +1 -1
  204. package/dist/types/core/components/functional/3d/tune.d.ts +5 -0
  205. package/dist/types/core/components/functional/3d/tune.d.ts.map +1 -1
  206. package/dist/types/core/components/functional/3d/types.d.ts +9 -0
  207. package/dist/types/core/components/functional/3d/types.d.ts.map +1 -1
  208. package/dist/types/core/components/functional/3d/updated.d.ts.map +1 -1
  209. package/dist/types/core/components/functional/if/if.d.ts +14 -5
  210. package/dist/types/core/components/functional/if/if.d.ts.map +1 -1
  211. package/dist/types/core/components/functional/interactive/action.d.ts +22 -0
  212. package/dist/types/core/components/functional/interactive/action.d.ts.map +1 -0
  213. package/dist/types/core/components/functional/interactive/gamepad.d.ts +37 -0
  214. package/dist/types/core/components/functional/interactive/gamepad.d.ts.map +1 -0
  215. package/dist/types/core/components/functional/interactive/gesture.d.ts +26 -0
  216. package/dist/types/core/components/functional/interactive/gesture.d.ts.map +1 -0
  217. package/dist/types/core/components/functional/interactive/helpers.d.ts +23 -0
  218. package/dist/types/core/components/functional/interactive/helpers.d.ts.map +1 -0
  219. package/dist/types/core/components/functional/interactive/index.d.ts +20 -0
  220. package/dist/types/core/components/functional/interactive/index.d.ts.map +1 -0
  221. package/dist/types/core/components/functional/interactive/keyboard.d.ts +37 -0
  222. package/dist/types/core/components/functional/interactive/keyboard.d.ts.map +1 -0
  223. package/dist/types/core/components/functional/interactive/matrix.d.ts +31 -0
  224. package/dist/types/core/components/functional/interactive/matrix.d.ts.map +1 -0
  225. package/dist/types/core/components/functional/interactive/registry.d.ts +23 -0
  226. package/dist/types/core/components/functional/interactive/registry.d.ts.map +1 -0
  227. package/dist/types/core/components/functional/interactive/store.d.ts +46 -0
  228. package/dist/types/core/components/functional/interactive/store.d.ts.map +1 -0
  229. package/dist/types/core/components/functional/interactive/ticker.d.ts +33 -0
  230. package/dist/types/core/components/functional/interactive/ticker.d.ts.map +1 -0
  231. package/dist/types/core/components/functional/shader/gl-runtime.d.ts +33 -1
  232. package/dist/types/core/components/functional/shader/gl-runtime.d.ts.map +1 -1
  233. package/dist/types/core/components/functional/shader/shader.d.ts +28 -7
  234. package/dist/types/core/components/functional/shader/shader.d.ts.map +1 -1
  235. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts +16 -2
  236. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts.map +1 -1
  237. package/dist/types/core/components/functional/shader/types.d.ts +29 -5
  238. package/dist/types/core/components/functional/shader/types.d.ts.map +1 -1
  239. package/dist/types/core/components/functional/value/value.d.ts +6 -0
  240. package/dist/types/core/components/functional/value/value.d.ts.map +1 -1
  241. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts +4 -0
  242. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts.map +1 -1
  243. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts +14 -0
  244. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts.map +1 -1
  245. package/dist/types/core/components/functional/webgpu/helpers.d.ts +1 -0
  246. package/dist/types/core/components/functional/webgpu/helpers.d.ts.map +1 -1
  247. package/dist/types/core/components/functional/webgpu/webgpu.d.ts +7 -1
  248. package/dist/types/core/components/functional/webgpu/webgpu.d.ts.map +1 -1
  249. package/dist/types/core/components/ui/_css/rounded.d.ts +3 -0
  250. package/dist/types/core/components/ui/_css/rounded.d.ts.map +1 -0
  251. package/dist/types/core/components/ui/_css/type.d.ts +13 -0
  252. package/dist/types/core/components/ui/_css/type.d.ts.map +1 -1
  253. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts +83 -0
  254. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts.map +1 -0
  255. package/dist/types/core/components/ui/alert/alert.d.ts +14 -12
  256. package/dist/types/core/components/ui/alert/alert.d.ts.map +1 -1
  257. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +1 -1
  258. package/dist/types/core/components/ui/badge/badge.d.ts +1 -1
  259. package/dist/types/core/components/ui/badge/badge.d.ts.map +1 -1
  260. package/dist/types/core/components/ui/button/button.d.ts +13 -29
  261. package/dist/types/core/components/ui/button/button.d.ts.map +1 -1
  262. package/dist/types/core/components/ui/card/card-header.d.ts.map +1 -1
  263. package/dist/types/core/components/ui/divider/divider.d.ts +2 -1
  264. package/dist/types/core/components/ui/divider/divider.d.ts.map +1 -1
  265. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +25 -73
  266. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +1 -1
  267. package/dist/types/core/components/ui/form/input/input.d.ts +14 -29
  268. package/dist/types/core/components/ui/form/input/input.d.ts.map +1 -1
  269. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +63 -65
  270. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +1 -1
  271. package/dist/types/core/components/ui/form/radio/radio.d.ts +1 -1
  272. package/dist/types/core/components/ui/form/select/select.d.ts +3 -5
  273. package/dist/types/core/components/ui/form/select/select.d.ts.map +1 -1
  274. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +12 -28
  275. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +1 -1
  276. package/dist/types/core/components/ui/image/image.d.ts +2 -1
  277. package/dist/types/core/components/ui/image/image.d.ts.map +1 -1
  278. package/dist/types/core/components/ui/link/link.d.ts +10 -9
  279. package/dist/types/core/components/ui/link/link.d.ts.map +1 -1
  280. package/dist/types/core/components/ui/modal/modal-close.d.ts +2 -2
  281. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +1 -1
  282. package/dist/types/core/components/ui/pop/pop.d.ts +12 -4
  283. package/dist/types/core/components/ui/pop/pop.d.ts.map +1 -1
  284. package/dist/types/core/components/ui/table/table.d.ts +2 -1
  285. package/dist/types/core/components/ui/table/table.d.ts.map +1 -1
  286. package/dist/types/core/components/ui/toast/dismissed.d.ts +3 -0
  287. package/dist/types/core/components/ui/toast/dismissed.d.ts.map +1 -0
  288. package/dist/types/core/components/ui/toast/render-content.d.ts +7 -0
  289. package/dist/types/core/components/ui/toast/render-content.d.ts.map +1 -0
  290. package/dist/types/core/components/ui/toast/toast-item.d.ts +26 -9
  291. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +1 -1
  292. package/dist/types/core/components/ui/toast/toast.d.ts +6 -3
  293. package/dist/types/core/components/ui/toast/toast.d.ts.map +1 -1
  294. package/dist/types/core/components/ui/toast/types.d.ts +12 -2
  295. package/dist/types/core/components/ui/toast/types.d.ts.map +1 -1
  296. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +19 -11
  297. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +1 -1
  298. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +3 -4
  299. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +1 -1
  300. package/dist/types/core/decorators/subscriber/derive.d.ts.map +1 -1
  301. package/dist/types/core/mixins/FormCheckable.d.ts +10 -27
  302. package/dist/types/core/mixins/FormCheckable.d.ts.map +1 -1
  303. package/dist/types/core/mixins/FormElement.d.ts +21 -10
  304. package/dist/types/core/mixins/FormElement.d.ts.map +1 -1
  305. package/dist/types/core/mixins/FormInput.d.ts +11 -27
  306. package/dist/types/core/mixins/FormInput.d.ts.map +1 -1
  307. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +17 -9
  308. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +1 -1
  309. package/dist/types/core/utils/LocationHandler.d.ts +3 -2
  310. package/dist/types/core/utils/LocationHandler.d.ts.map +1 -1
  311. package/dist/types/core/utils/dismissed.d.ts +3 -0
  312. package/dist/types/core/utils/dismissed.d.ts.map +1 -0
  313. package/dist/types/core/utils/mediaRef.d.ts +15 -0
  314. package/dist/types/core/utils/mediaRef.d.ts.map +1 -1
  315. package/dist/types/core/utils/positioning.d.ts +44 -0
  316. package/dist/types/core/utils/positioning.d.ts.map +1 -0
  317. package/dist/types/directives.d.ts +1 -3
  318. package/dist/types/directives.d.ts.map +1 -1
  319. package/dist/types/mixins.d.ts +22 -55
  320. package/dist/types/mixins.d.ts.map +1 -1
  321. package/docs/assets/{index-FmK4JaIM.js → index-D8MVWqY6.js} +946 -687
  322. package/docs/assets/index-DiD0qYvE.css +1 -0
  323. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +17 -85
  324. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +1 -1
  325. package/docs/crawl/hubs/form-components.html +13 -11
  326. package/docs/docs-mock-api-sw.js +5 -1
  327. package/docs/docs-mock-api-sw.js.map +2 -2
  328. package/docs/index.html +2 -2
  329. package/docs/llms-full.txt +12 -38
  330. package/docs/llms.txt +1 -1
  331. package/docs/src/core/components/functional/sdui/sdui.md +0 -0
  332. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -0
  333. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  334. package/docs/src/docs/_getting-started/create-a-component.md +0 -0
  335. package/docs/src/docs/_misc/formelement-subscriber-removal.md +1 -1
  336. package/docs/src/docs/search/docs-search.json +195 -200
  337. package/docs/src/tsconfig.json +324 -0
  338. package/gitlab/job_tests.sh +25 -12
  339. package/index.html +3 -3
  340. package/package.json +217 -9
  341. package/public/docs-mock-api-sw.js +5 -1
  342. package/public/docs-mock-api-sw.js.map +2 -2
  343. package/scripts/build-addons.mjs +2 -2
  344. package/scripts/post-build.mjs +9 -0
  345. package/src/addons/interactive.ts +5 -0
  346. package/src/core/components/functional/3d/3d.md +34 -1
  347. package/src/core/components/functional/3d/3d.spec.ts +42 -0
  348. package/src/core/components/functional/3d/3d.ts +101 -3
  349. package/src/core/components/functional/3d/constants.ts +1 -0
  350. package/src/core/components/functional/3d/ensure.ts +11 -3
  351. package/src/core/components/functional/3d/form-params.ts +2 -0
  352. package/src/core/components/functional/3d/life.ts +4 -1
  353. package/src/core/components/functional/3d/out-publish.ts +4 -3
  354. package/src/core/components/functional/3d/playback.ts +13 -1
  355. package/src/core/components/functional/3d/post-bind.ts +262 -0
  356. package/src/core/components/functional/3d/post-channels.spec.ts +36 -0
  357. package/src/core/components/functional/3d/post-channels.ts +69 -0
  358. package/src/core/components/functional/3d/post-fx.ts +594 -0
  359. package/src/core/components/functional/3d/props.ts +45 -0
  360. package/src/core/components/functional/3d/reload.ts +2 -0
  361. package/src/core/components/functional/3d/runtime.ts +93 -4
  362. package/src/core/components/functional/3d/scene-runtime.ts +3 -0
  363. package/src/core/components/functional/3d/tune.ts +21 -0
  364. package/src/core/components/functional/3d/types.ts +9 -0
  365. package/src/core/components/functional/3d/updated.ts +17 -1
  366. package/src/core/components/functional/if/if.ts +54 -7
  367. package/src/core/components/functional/interactive/action.ts +84 -0
  368. package/src/core/components/functional/interactive/gamepad.ts +197 -0
  369. package/src/core/components/functional/interactive/gesture.ts +136 -0
  370. package/src/core/components/functional/interactive/helpers.spec.ts +50 -0
  371. package/src/core/components/functional/interactive/helpers.ts +97 -0
  372. package/src/core/components/functional/interactive/index.ts +25 -0
  373. package/src/core/components/functional/interactive/interactive.md +33 -0
  374. package/src/core/components/functional/interactive/keyboard.ts +171 -0
  375. package/src/core/components/functional/interactive/matrix.ts +185 -0
  376. package/src/core/components/functional/interactive/registry.ts +46 -0
  377. package/src/core/components/functional/interactive/store.ts +264 -0
  378. package/src/core/components/functional/interactive/ticker.ts +171 -0
  379. package/src/core/components/functional/list/list.ts +0 -0
  380. package/src/core/components/functional/shader/gl-runtime.ts +169 -12
  381. package/src/core/components/functional/shader/shader.md +27 -4
  382. package/src/core/components/functional/shader/shader.spec.ts +267 -0
  383. package/src/core/components/functional/shader/shader.ts +177 -55
  384. package/src/core/components/functional/shader/shadertoy-prelude.ts +49 -5
  385. package/src/core/components/functional/shader/types.ts +89 -12
  386. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  387. package/src/core/components/functional/value/value.ts +44 -4
  388. package/src/core/components/functional/webgpu/gl-fallback.ts +28 -4
  389. package/src/core/components/functional/webgpu/gpu-runtime.ts +154 -18
  390. package/src/core/components/functional/webgpu/helpers.ts +8 -2
  391. package/src/core/components/functional/webgpu/webgpu.md +13 -2
  392. package/src/core/components/functional/webgpu/webgpu.spec.ts +37 -0
  393. package/src/core/components/functional/webgpu/webgpu.ts +39 -1
  394. package/src/core/components/ui/_css/rounded.ts +36 -0
  395. package/src/core/components/ui/_css/type.ts +49 -0
  396. package/src/core/components/ui/_i18n/ui-aria-labels.ts +104 -0
  397. package/src/core/components/ui/alert/alert.md +128 -72
  398. package/src/core/components/ui/alert/alert.spec.ts +145 -0
  399. package/src/core/components/ui/alert/alert.ts +86 -91
  400. package/src/core/components/ui/alert-messages/alert-messages.ts +1 -1
  401. package/src/core/components/ui/badge/badge.md +126 -78
  402. package/src/core/components/ui/badge/badge.ts +29 -81
  403. package/src/core/components/ui/button/button.md +1 -0
  404. package/src/core/components/ui/button/button.ts +12 -10
  405. package/src/core/components/ui/card/card-header.ts +7 -2
  406. package/src/core/components/ui/card/card.md +120 -65
  407. package/src/core/components/ui/divider/divider.ts +4 -9
  408. package/src/core/components/ui/form/checkbox/checkbox.md +1 -1
  409. package/src/core/components/ui/form/checkbox/checkbox.ts +4 -20
  410. package/src/core/components/ui/form/fieldset/legend-description.ts +1 -1
  411. package/src/core/components/ui/form/fieldset/legend.ts +1 -1
  412. package/src/core/components/ui/form/input/input.md +1 -1
  413. package/src/core/components/ui/form/input/input.ts +25 -27
  414. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  415. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.ts +419 -187
  416. package/src/core/components/ui/form/radio/radio.ts +1 -1
  417. package/src/core/components/ui/form/select/select.ts +3 -6
  418. package/src/core/components/ui/form/textarea/textarea.md +1 -1
  419. package/src/core/components/ui/form/textarea/textarea.ts +1 -2
  420. package/src/core/components/ui/image/image.md +147 -53
  421. package/src/core/components/ui/image/image.ts +10 -44
  422. package/src/core/components/ui/link/link.md +2 -2
  423. package/src/core/components/ui/link/link.ts +42 -37
  424. package/src/core/components/ui/modal/modal-close.ts +8 -12
  425. package/src/core/components/ui/modal/modal.ts +18 -18
  426. package/src/core/components/ui/pop/pop.md +105 -1
  427. package/src/core/components/ui/pop/pop.ts +145 -141
  428. package/src/core/components/ui/table/table.ts +2 -8
  429. package/src/core/components/ui/theme/theme.ts +1 -1
  430. package/src/core/components/ui/toast/dismissed.ts +14 -0
  431. package/src/core/components/ui/toast/render-content.ts +13 -0
  432. package/src/core/components/ui/toast/toast-item.ts +179 -103
  433. package/src/core/components/ui/toast/toast.ts +58 -21
  434. package/src/core/components/ui/toast/types.ts +14 -2
  435. package/src/core/components/ui/tooltip/tooltip.ts +176 -154
  436. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
  437. package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
  438. package/src/core/decorators/subscriber/derive.ts +3 -3
  439. package/src/core/mixins/Fetcher.ts +1 -1
  440. package/src/core/mixins/FormCheckable.ts +1 -8
  441. package/src/core/mixins/FormElement.ts +74 -76
  442. package/src/core/mixins/Subscriber.ts +0 -0
  443. package/src/core/utils/AncestorAttributeObserver.ts +183 -70
  444. package/src/core/utils/DataBindObserver.ts +0 -0
  445. package/src/core/utils/LocationHandler.ts +12 -5
  446. package/src/core/utils/Objects.ts +0 -0
  447. package/src/core/utils/dismissed.ts +22 -0
  448. package/src/core/utils/mediaRef.spec.ts +25 -0
  449. package/src/core/utils/mediaRef.ts +45 -0
  450. package/src/core/utils/positioning.spec.ts +208 -0
  451. package/src/core/utils/positioning.ts +183 -0
  452. package/src/directives.ts +1 -3
  453. package/src/docs/_core-concept/dataFlow.md +1 -1
  454. package/src/docs/_decorators/ancestor-attribute.md +3 -2
  455. package/src/docs/_getting-started/concorde-outside.md +3 -3
  456. package/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  457. package/src/docs/_misc/html-integration.md +2 -0
  458. package/src/docs/_misc/visual-stack.md +19 -1
  459. package/src/docs/code.ts +3 -1
  460. package/src/docs/components/docs-demo-sources.ts +88 -0
  461. package/src/docs/docs.ts +3 -0
  462. package/src/docs/example/docs-3d-post-depth-demo.ts +68 -0
  463. package/src/docs/example/docs-3d-webgpu-live-demo.ts +83 -0
  464. package/src/docs/example/docs-harris-webgpu-demo.ts +53 -55
  465. package/src/docs/example/docs-input-autocomplete-demos.ts +110 -0
  466. package/src/docs/mock-api/router.ts +17 -1
  467. package/src/docs/navigation/navigation.ts +4 -0
  468. package/src/docs/search/docs-search.json +922 -1762
  469. package/src/docs/tailwind/css/tailwind.css +13 -6
  470. package/src/tsconfig.json +162 -6
  471. package/src/tsconfig.tsbuildinfo +1 -1
  472. package/tailwind.config.js +50 -3
  473. package/vite/config.js +23 -35
  474. package/vite.config.mts +5 -0
  475. package/vitest.setup.ts +49 -13
  476. package/docs/assets/index-BZiZXMU-.css +0 -1
@@ -2,6 +2,8 @@
2
2
 
3
3
  Some hosts (legacy PHP pages, static HTML) embed Concorde components **without** a Lit build step. They can use HTML attributes such as **`data-bind`**, **`dataProvider`**, and **`formDataProvider`** on tags directly in the page.
4
4
 
5
+ **Form fields** (`sonic-input`, checkbox, select, …) bind only via **`formDataProvider` + `name`**. They do not autofill from ancestor `dataProvider` (Subscriber was removed from FormElement — see [FormElement without Subscriber](#docs/_misc/formelement-subscriber-removal.md/formelement-subscriber-removal)).
6
+
5
7
  That style is **not** what we demonstrate in this doc site: live examples are **Lit components** under `src/docs/example/`, registered once and reused from Markdown via tags like `<docs-joke-search-demo>`.
6
8
 
7
9
  | Goal | Use |
@@ -44,9 +44,27 @@ Also accepted: `<img>`, `<video>`, `<canvas>`, or another Concorde host that imp
44
44
 
45
45
  <docs-lit-demo for="docs-3d-shader-live-demo"></docs-lit-demo>
46
46
 
47
+ ## 3D → WebGPU live
48
+
49
+ Same `#id` bridge as the shader: `sonic-webgpu channel0="#plateau-gpu"` copies the 3D canvas each `frameSeq` via `copyExternalImageToTexture` (persistent texture — no recreate when size is stable).
50
+
51
+ <docs-lit-demo for="docs-3d-webgpu-live-demo"></docs-lit-demo>
52
+
53
+ ## Post FX + depth (in sonic-3d)
54
+
55
+ Scene → offscreen color + depth → GLSL passes (`post-*`) in the same WebGL context. Use `post-image-ch1="depth"` for edge / DoF-style effects without a second component.
56
+
57
+ <docs-lit-demo for="docs-3d-post-depth-demo"></docs-lit-demo>
58
+
47
59
  ## Harris → patches → WebGPU
48
60
 
49
- `sonic-shader` detects corners (Harris) and extracts patches → `channel0…3` on `sonic-webgpu` (`kernel="image"`): GPU mosaic.
61
+ `sonic-shader` detects corners (Harris, `buffer-format="rgba16f"` + NMS 5×5 / shape filter) and extracts patches → `channel0…3` on `sonic-webgpu` (`kernel="image"`): GPU mosaic.
62
+
63
+ Use `buffer-format="rgba16f"` so signed `IxIy` / non-clamped `Ix²` survive the buffer (RGBA8 zeros negatives and saturates). See [Shader — buffer precision](#core/components/functional/shader/shader.md/shader).
64
+
65
+ Channel rebinds and `release-offscreen="auto"` (keep FBO state when a pass uses `self`) : [Shader — état et visibilité](#core/components/functional/shader/shader.md/shader).
66
+
67
+ `sonic-3d` live sources keep playing off-screen when a `#id` consumer is registered (or `play-offscreen`) — see [3D — bridging](#core/components/functional/3d/3d.md/3d).
50
68
 
51
69
  <docs-lit-demo for="docs-harris-webgpu-demo"></docs-lit-demo>
52
70
 
package/src/docs/code.ts CHANGED
@@ -36,6 +36,8 @@ export class DocsCode extends LitElement {
36
36
  pre {
37
37
  font-size: 13px !important;
38
38
  padding-right: 5rem !important;
39
+ border: 1px solid var(--sc-base-200);
40
+ border-radius: var(--sc-rounded);
39
41
  }
40
42
  .custom-scroll {
41
43
  overflow: auto !important;
@@ -239,7 +241,7 @@ export class DocsCode extends LitElement {
239
241
  return html`
240
242
  <div
241
243
  class="relative ${this.language === "markup"
242
- ? "border border-neutral-100 p-4 rounded-md"
244
+ ? "rounded-md border border-neutral-200 bg-neutral-50/80 dark:border-neutral-700/80 dark:bg-neutral-900/40 p-4"
243
245
  : ""}"
244
246
  >
245
247
  ${this.language === "markup" && !this.noOutput
@@ -96,6 +96,42 @@ export const DOCS_LIT_DEMO_REGISTRY: Record<string, DocsLitDemoConfig> = {
96
96
  { path: "src/docs/example/docs-queue-demos.ts", line: 38, label: "geo" },
97
97
  ],
98
98
  },
99
+ "docs-input-autocomplete-basic-demo": {
100
+ sources: [
101
+ {
102
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
103
+ line: 11,
104
+ label: "basic",
105
+ },
106
+ ],
107
+ },
108
+ "docs-input-autocomplete-code-demo": {
109
+ sources: [
110
+ {
111
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
112
+ line: 36,
113
+ label: "code",
114
+ },
115
+ ],
116
+ },
117
+ "docs-input-autocomplete-select-demo": {
118
+ sources: [
119
+ {
120
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
121
+ line: 63,
122
+ label: "select",
123
+ },
124
+ ],
125
+ },
126
+ "docs-input-autocomplete-keyboard-demo": {
127
+ sources: [
128
+ {
129
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
130
+ line: 91,
131
+ label: "keyboard",
132
+ },
133
+ ],
134
+ },
99
135
  "docs-users-list": {
100
136
  sources: [
101
137
  {
@@ -223,6 +259,22 @@ export const DOCS_LIT_DEMO_REGISTRY: Record<string, DocsLitDemoConfig> = {
223
259
  },
224
260
  ],
225
261
  },
262
+ "docs-3d-webgpu-live-demo": {
263
+ sources: [
264
+ {
265
+ path: "src/docs/example/docs-3d-webgpu-live-demo.ts",
266
+ label: "3D → webgpu live",
267
+ },
268
+ ],
269
+ },
270
+ "docs-3d-post-depth-demo": {
271
+ sources: [
272
+ {
273
+ path: "src/docs/example/docs-3d-post-depth-demo.ts",
274
+ label: "3D post depth edges",
275
+ },
276
+ ],
277
+ },
226
278
  "docs-webgpu-demo": {
227
279
  sources: [
228
280
  {
@@ -506,6 +558,18 @@ export const DOCS_DEMO_SOURCE_REGISTRY: Record<string, DocsSource[]> = {
506
558
  label: "3d → shader live",
507
559
  },
508
560
  ],
561
+ "docs-3d-webgpu-live-demo": [
562
+ {
563
+ path: "src/docs/example/docs-3d-webgpu-live-demo.ts",
564
+ label: "3d → webgpu live",
565
+ },
566
+ ],
567
+ "docs-3d-post-depth-demo": [
568
+ {
569
+ path: "src/docs/example/docs-3d-post-depth-demo.ts",
570
+ label: "3d post depth",
571
+ },
572
+ ],
509
573
  "docs-webgpu-demo": [
510
574
  { path: "src/docs/example/docs-webgpu-demo.ts", label: "webgpu demo" },
511
575
  ],
@@ -530,6 +594,30 @@ export const DOCS_DEMO_SOURCE_REGISTRY: Record<string, DocsSource[]> = {
530
594
  "docs-queue-geo-demo": [
531
595
  { path: "src/docs/example/docs-queue-demos.ts", label: "queue demos" },
532
596
  ],
597
+ "docs-input-autocomplete-basic-demo": [
598
+ {
599
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
600
+ label: "autocomplete demos",
601
+ },
602
+ ],
603
+ "docs-input-autocomplete-code-demo": [
604
+ {
605
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
606
+ label: "autocomplete demos",
607
+ },
608
+ ],
609
+ "docs-input-autocomplete-select-demo": [
610
+ {
611
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
612
+ label: "autocomplete demos",
613
+ },
614
+ ],
615
+ "docs-input-autocomplete-keyboard-demo": [
616
+ {
617
+ path: "src/docs/example/docs-input-autocomplete-demos.ts",
618
+ label: "autocomplete demos",
619
+ },
620
+ ],
533
621
  "docs-queue-users-demo": [
534
622
  { path: "src/docs/example/docs-queue-demos.ts", label: "queue demos" },
535
623
  ],
package/src/docs/docs.ts CHANGED
@@ -13,6 +13,7 @@ import "./example/docs-users-list";
13
13
  import "./example/docs-user-two-scopes";
14
14
  import "./example/docs-joke-demos";
15
15
  import "./example/docs-queue-demos";
16
+ import "./example/docs-input-autocomplete-demos";
16
17
  import "./example/docs-toggle-demos";
17
18
  import "./example/docs-list-demos";
18
19
  import "./example/docs-jsonata-demos";
@@ -22,6 +23,8 @@ import "./example/docs-shader-demos";
22
23
  import "./example/docs-webgpu-demo";
23
24
  import "./example/docs-visual-stack-demo";
24
25
  import "./example/docs-3d-shader-live-demo";
26
+ import "./example/docs-3d-webgpu-live-demo";
27
+ import "./example/docs-3d-post-depth-demo";
25
28
  import "./example/docs-harris-webgpu-demo";
26
29
  import "./example/docs-router-demos";
27
30
  import "./example/docs-submit-demos";
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Démo Lot 2 : post FX dans sonic-3d avec canal depth (contours).
3
+ */
4
+ import { css, html, LitElement } from "lit";
5
+ import { customElement } from "lit/decorators.js";
6
+ import { tailwind } from "../tailwind";
7
+ import "../../core/components/functional/3d/3d";
8
+ import { DEMO_3D_STYLES, HELMET_GLB } from "./docs-3d-shared";
9
+
10
+ const DEPTH_EDGE = `
11
+ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
12
+ vec2 uv = fragCoord / iResolution.xy;
13
+ vec2 px = 1.0 / max(iResolution.xy, vec2(1.0));
14
+ vec3 col = texture(iChannel0, uv).rgb;
15
+
16
+ float dC = texture(iChannel1, uv).r;
17
+ float dL = texture(iChannel1, uv - px * vec2(1.0, 0.0)).r;
18
+ float dR = texture(iChannel1, uv + px * vec2(1.0, 0.0)).r;
19
+ float dU = texture(iChannel1, uv + px * vec2(0.0, 1.0)).r;
20
+ float dD = texture(iChannel1, uv - px * vec2(0.0, 1.0)).r;
21
+ float edge = length(vec2(dR - dL, dU - dD));
22
+ edge = smoothstep(0.002 + uParam0 * 0.02, 0.02 + uParam0 * 0.05, edge);
23
+
24
+ vec3 ink = vec3(0.05, 0.95, 1.0);
25
+ col = mix(col, ink, edge * 0.85);
26
+ col *= 0.92 + 0.08 * sin(iTime * 1.5);
27
+ fragColor = vec4(col, 1.0);
28
+ }
29
+ `;
30
+
31
+ @customElement("docs-3d-post-depth-demo")
32
+ export class Docs3dPostDepthDemo extends LitElement {
33
+ static styles = [
34
+ tailwind,
35
+ DEMO_3D_STYLES,
36
+ css`
37
+ sonic-3d {
38
+ width: 100%;
39
+ }
40
+ `,
41
+ ];
42
+
43
+ render() {
44
+ return html`
45
+ <div class="flex flex-col gap-2">
46
+ <sonic-3d
47
+ src=${HELMET_GLB}
48
+ camera="orbit"
49
+ auto-rotate
50
+ play
51
+ pick
52
+ min-distance="1"
53
+ max-distance="10"
54
+ aspect-ratio="16/10"
55
+ post-image=${DEPTH_EDGE}
56
+ post-image-ch0="scene"
57
+ post-image-ch1="depth"
58
+ param0="0.55"
59
+ ></sonic-3d>
60
+ <p class="text-sm text-neutral-500">
61
+ Post FX interne (<code>post-image</code>) : couleur
62
+ <code>scene</code> + discontinuités sur <code>depth</code> — pas de
63
+ copie vers un second composant.
64
+ </p>
65
+ </div>
66
+ `;
67
+ }
68
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Démo pont live : sonic-3d → sonic-webgpu via channel0="#plateau-gpu"
3
+ * (copyExternalImageToTexture chaque frameSeq, texture réutilisée).
4
+ */
5
+ import { css, html, LitElement } from "lit";
6
+ import { customElement } from "lit/decorators.js";
7
+ import { tailwind } from "../tailwind";
8
+ import "../../core/components/functional/3d/3d";
9
+ import "../../core/components/functional/webgpu/webgpu";
10
+ import { DEMO_3D_STYLES, HELMET_GLB } from "./docs-3d-shared";
11
+
12
+ /** Tint + vignette — prouve le sampling live du canvas 3D. */
13
+ const LIVE_WGSL = `
14
+ fn mainImage(uv: vec2f, fragCoord: vec2f) -> vec4f {
15
+ _ = fragCoord;
16
+ let c = iChannel0(uv).rgb;
17
+ let mid = uv - vec2f(0.5);
18
+ let vig = smoothstep(1.1, 0.35, length(mid));
19
+ let pulse = 0.92 + 0.08 * sin(u.time * 2.0);
20
+ let tint = vec3f(0.15, 0.85, 1.0);
21
+ let edge = length(c - iChannel0(uv + mid * 0.012).rgb);
22
+ var col = mix(c, c * tint * 1.15, clamp(edge * 4.0, 0.0, 0.55));
23
+ col *= vig * pulse;
24
+ return vec4f(col, 1.0);
25
+ }
26
+ `;
27
+
28
+ @customElement("docs-3d-webgpu-live-demo")
29
+ export class Docs3dWebgpuLiveDemo extends LitElement {
30
+ static styles = [
31
+ tailwind,
32
+ DEMO_3D_STYLES,
33
+ css`
34
+ .grid {
35
+ display: grid;
36
+ gap: 0.75rem;
37
+ grid-template-columns: 1fr;
38
+ }
39
+ @media (min-width: 720px) {
40
+ .grid {
41
+ grid-template-columns: 1fr 1fr;
42
+ }
43
+ }
44
+ sonic-3d,
45
+ sonic-webgpu {
46
+ width: 100%;
47
+ border-radius: 0.5rem;
48
+ overflow: hidden;
49
+ }
50
+ `,
51
+ ];
52
+
53
+ render() {
54
+ return html`
55
+ <div class="flex flex-col gap-2">
56
+ <div class="grid">
57
+ <sonic-3d
58
+ id="plateau-gpu"
59
+ src=${HELMET_GLB}
60
+ camera="orbit"
61
+ auto-rotate
62
+ play
63
+ min-distance="1"
64
+ max-distance="10"
65
+ aspect-ratio="16/10"
66
+ ></sonic-3d>
67
+ <sonic-webgpu
68
+ play
69
+ kernel="image"
70
+ channel0="#plateau-gpu"
71
+ .shader=${LIVE_WGSL}
72
+ aspect-ratio="16/10"
73
+ ></sonic-webgpu>
74
+ </div>
75
+ <p class="text-sm text-neutral-500">
76
+ Live bridge: <code>channel0="#plateau-gpu"</code> →
77
+ <code>copyExternalImageToTexture</code> (texture persistante, pas de
78
+ JPEG). Gauche = <code>sonic-3d</code>, droite = tint / edge WebGPU.
79
+ </p>
80
+ </div>
81
+ `;
82
+ }
83
+ }
@@ -17,6 +17,7 @@ const sample = (file: string) =>
17
17
  new URL(`/docs/shader-samples/${file}`, location.origin).href;
18
18
 
19
19
  const HARRIS_BUFFER_A = `
20
+ // Tenseur structure (Ix², Iy², IxIy) — nécessite buffer-format=rgba16f (IxIy signé).
20
21
  void mainImage(out vec4 fragColor, in vec2 fragCoord) {
21
22
  vec2 uv = fragCoord / iResolution.xy;
22
23
  vec2 px = 1.0 / iResolution.xy;
@@ -30,11 +31,12 @@ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
30
31
  float br = dot(texture(iChannel0, uv + px * vec2( 1.0, -1.0)).rgb, vec3(0.299, 0.587, 0.114));
31
32
  float Ix = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);
32
33
  float Iy = (tl + 2.0 * t + tr) - (bl + 2.0 * b + br);
33
- fragColor = vec4(Ix * Ix, Iy * Iy, Ix * Iy, 1.0) * 4.0;
34
+ fragColor = vec4(Ix * Ix, Iy * Iy, Ix * Iy, 1.0);
34
35
  }
35
36
  `;
36
37
 
37
38
  const HARRIS_BUFFER_B = `
39
+ // Lissage gaussien 5×5 du tenseur (σ ≈ 1.26).
38
40
  void mainImage(out vec4 fragColor, in vec2 fragCoord) {
39
41
  vec2 uv = fragCoord / iResolution.xy;
40
42
  vec2 px = 1.0 / iResolution.xy;
@@ -51,58 +53,50 @@ void mainImage(out vec4 fragColor, in vec2 fragCoord) {
51
53
  }
52
54
  `;
53
55
 
54
- const HARRIS_IMAGE = `
55
- float harrisR(vec2 uv) {
56
+ const HARRIS_EXTRACT_MASK = `
57
+ // Réponse Harris + filtre de forme + max local STRICT 5×5 (départage par position).
58
+ float harrisAt(vec2 uv) {
56
59
  vec3 t = texture(iChannel0, uv).rgb;
57
60
  float k = max(uParam1, 0.001);
58
61
  float det = t.x * t.y - t.z * t.z;
59
62
  float trace = t.x + t.y;
60
- return det - k * trace * trace;
63
+ float R = det - k * trace * trace;
64
+ // Forme ≈ 4 det / trace² ∈ [0,1] : ~1 coin isotropique, ~0 bord.
65
+ float shape = (trace > 1e-5) ? clamp(4.0 * det / (trace * trace), 0.0, 1.0) : 0.0;
66
+ if (R < max(uParam0, 1e-6) || shape < 0.45) return 0.0;
67
+ return R;
61
68
  }
62
69
  void mainImage(out vec4 fragColor, in vec2 fragCoord) {
63
70
  vec2 uv = fragCoord / iResolution.xy;
64
71
  vec2 px = 1.0 / iResolution.xy;
65
- vec3 video = texture(iChannel1, uv).rgb;
66
- float R = harrisR(uv);
67
- float thr = max(uParam0, 0.0001);
68
- float overlay = clamp(uParam2, 0.0, 1.0);
69
- float Rmax = R;
70
- for (int j = -1; j <= 1; j++) {
71
- for (int i = -1; i <= 1; i++) {
72
- Rmax = max(Rmax, harrisR(uv + px * vec2(float(i), float(j))));
72
+ float R = harrisAt(uv);
73
+ float thr = max(uParam0, 1e-6);
74
+ float isMax = step(thr, R);
75
+ for (int j = -2; j <= 2; j++) {
76
+ for (int i = -2; i <= 2; i++) {
77
+ if (i == 0 && j == 0) continue;
78
+ float n = harrisAt(uv + px * vec2(float(i), float(j)));
79
+ bool before = j < 0 || (j == 0 && i < 0);
80
+ if (n > R || (before && abs(n - R) < 1e-8)) isMax = 0.0;
73
81
  }
74
82
  }
75
- float isCorner = step(thr, R) * step(Rmax - 1e-6, R);
76
- float heat = smoothstep(thr, thr * 3.0, max(R, 0.0));
77
- vec3 col = mix(video, video * vec3(1.15, 0.35, 1.05) + vec3(0.35, 0.05, 0.4) * heat, heat * overlay);
78
- col = mix(col, vec3(0.15, 1.0, 0.45), isCorner * overlay);
79
- fragColor = vec4(col, 1.0);
83
+ float Rp = max(R, 0.0);
84
+ float score = isMax * (Rp / (Rp + thr * 4.0));
85
+ fragColor = vec4(vec3(score), 1.0);
80
86
  }
81
87
  `;
82
88
 
83
- const HARRIS_EXTRACT_MASK = `
84
- float harrisR(vec2 uv) {
85
- vec3 t = texture(iChannel0, uv).rgb;
86
- float k = max(uParam1, 0.001);
87
- float det = t.x * t.y - t.z * t.z;
88
- float trace = t.x + t.y;
89
- return det - k * trace * trace;
90
- }
89
+ const HARRIS_IMAGE = `
91
90
  void mainImage(out vec4 fragColor, in vec2 fragCoord) {
92
91
  vec2 uv = fragCoord / iResolution.xy;
93
- vec2 px = 1.0 / iResolution.xy;
94
- float R = harrisR(uv);
95
- float thr = max(uParam0, 0.0001);
96
- float Rmax = R;
97
- for (int j = -1; j <= 1; j++) {
98
- for (int i = -1; i <= 1; i++) {
99
- Rmax = max(Rmax, harrisR(uv + px * vec2(float(i), float(j))));
100
- }
101
- }
102
- float isCorner = step(thr, R) * step(Rmax - 1e-6, R);
103
- float Rp = max(R, 0.0);
104
- float score = isCorner * (Rp / (Rp + thr * 3.0));
105
- fragColor = vec4(vec3(score), 1.0);
92
+ vec3 video = texture(iChannel1, uv).rgb;
93
+ float score = texture(iChannel0, uv).r;
94
+ float overlay = clamp(uParam2, 0.0, 1.0);
95
+ float heat = smoothstep(0.05, 0.55, score);
96
+ vec3 col = mix(video, video * vec3(1.12, 0.4, 1.05) + vec3(0.28, 0.04, 0.35) * heat, heat * overlay * 0.55);
97
+ // Points isolés (pas de traînées de bords).
98
+ col = mix(col, vec3(0.12, 1.0, 0.42), step(0.08, score) * overlay);
99
+ fragColor = vec4(col, 1.0);
106
100
  }
107
101
  `;
108
102
 
@@ -285,9 +279,9 @@ export class DocsHarrisWebgpuDemo extends LitElement {
285
279
  if (this.active) return;
286
280
  this.active = true;
287
281
  set(shaderKey, {
288
- param0: 0.08,
289
- param1: 0.1,
290
- param2: 0.85,
282
+ param0: 0.015,
283
+ param1: 0.05,
284
+ param2: 0.9,
291
285
  extractCount: 0,
292
286
  extractSeq: 0,
293
287
  extracts: [],
@@ -299,7 +293,7 @@ export class DocsHarrisWebgpuDemo extends LitElement {
299
293
  .map((it) => it.blobUrl || it.url)
300
294
  .filter((u): u is string => typeof u === "string" && u.length > 0)
301
295
  .slice(0, 4);
302
- this.patches = items.slice(0, 4);
296
+ this.patches = items.slice(0, 8);
303
297
  set(gpuKey, {
304
298
  param0: 0.55,
305
299
  param1: Math.max(1, urls.length),
@@ -331,7 +325,7 @@ export class DocsHarrisWebgpuDemo extends LitElement {
331
325
  .map((it) => it.blobUrl || it.url)
332
326
  .filter((u): u is string => typeof u === "string" && u.length > 0)
333
327
  .slice(0, 4);
334
- this.patches = items.slice(0, 4);
328
+ this.patches = items.slice(0, 8);
335
329
  set(gpuKey, {
336
330
  param0: 0.55,
337
331
  param1: Math.max(1, urls.length),
@@ -355,8 +349,8 @@ export class DocsHarrisWebgpuDemo extends LitElement {
355
349
  <span class="text-neutral-400">(mosaïque)</span>
356
350
  </div>
357
351
  <p class="m-0 text-sm text-neutral-600">
358
- Vidéo → coins Harris → crops → collage GPU (channels + diff entre
359
- patches). Une seule démo, deux bandes empilées.
352
+ Vidéo → Harris (<code>rgba16f</code>, NMS 5×5 + filtre forme) →
353
+ crops → collage GPU. Coins isolés, pas de traînées sur les bords.
360
354
  </p>
361
355
  <sonic-button type="primary" size="sm" @click=${this.start}
362
356
  >Try</sonic-button
@@ -388,8 +382,8 @@ export class DocsHarrisWebgpuDemo extends LitElement {
388
382
  type="range"
389
383
  name="param0"
390
384
  min="0.002"
391
- max="0.08"
392
- step="0.002"
385
+ max="0.06"
386
+ step="0.001"
393
387
  class="flex-1"
394
388
  ></sonic-input>
395
389
  </div>
@@ -399,7 +393,7 @@ export class DocsHarrisWebgpuDemo extends LitElement {
399
393
  type="range"
400
394
  name="param1"
401
395
  min="0.02"
402
- max="0.1"
396
+ max="0.12"
403
397
  step="0.005"
404
398
  class="flex-1"
405
399
  ></sonic-input>
@@ -409,19 +403,21 @@ export class DocsHarrisWebgpuDemo extends LitElement {
409
403
  <div class="stack">
410
404
  <div class="label-bar">
411
405
  <span
412
- ><code>sonic-shader</code> Harris + extract-bitmaps</span
406
+ ><code>sonic-shader</code> Harris
407
+ <code>rgba16f</code> + extract</span
413
408
  >
414
- <span class="text-neutral-400">coins → peaks</span>
409
+ <span class="text-neutral-400">coins isolés → peaks</span>
415
410
  </div>
416
411
  <sonic-shader
417
412
  play
413
+ buffer-format="rgba16f"
418
414
  .mouse=${false}
419
415
  extract
420
416
  extract-bitmaps
421
417
  extract-mask="buffer-c"
422
418
  extract-source="image"
423
- extract-threshold="0.12"
424
- extract-max="4"
419
+ extract-threshold="0.08"
420
+ extract-max="8"
425
421
  extract-patch="56"
426
422
  extract-interval="400"
427
423
  extract-data-provider=${shaderKey.path}
@@ -430,7 +426,7 @@ export class DocsHarrisWebgpuDemo extends LitElement {
430
426
  buffer-a-ch0=${video}
431
427
  buffer-b-ch0="buffer-a"
432
428
  buffer-c-ch0="buffer-b"
433
- image-ch0="buffer-b"
429
+ image-ch0="buffer-c"
434
430
  image-ch1=${video}
435
431
  .bufferA=${HARRIS_BUFFER_A}
436
432
  .bufferB=${HARRIS_BUFFER_B}
@@ -473,8 +469,10 @@ export class DocsHarrisWebgpuDemo extends LitElement {
473
469
  </div>
474
470
 
475
471
  <p class="m-0 text-xs text-neutral-500">
476
- Extract → DP → <code>channel0…3</code>. Le WGSL compare chaque case à
477
- son voisin (diff RGB) pour un effet correspondence léger.
472
+ <code>buffer-format="rgba16f"</code> conserve
473
+ <code>IxIy</code> signé ; NMS 5×5 + forme
474
+ <code>4·det/trace²</code> → points isolés. Extract → DP →
475
+ <code>channel0…3</code>.
478
476
  </p>
479
477
  </div>
480
478
  `;
@@ -0,0 +1,110 @@
1
+ import { html, LitElement } from "lit";
2
+ import { customElement } from "lit/decorators.js";
3
+ import { DOCS_MOCK_GEO_SERVICE } from "../mock-api/urls";
4
+
5
+ import "../../core/components/ui/form/input-autocomplete/input-autocomplete";
6
+ import "../../core/components/ui/menu/menu-item";
7
+
8
+ type CommuneRow = { nom: string; code: string };
9
+
10
+ /** Ligne suggestion : pas de radio/name (évite d'écrire dans le form au render). */
11
+ const communeItem =
12
+ (valueKey: "nom" | "code") => (item: CommuneRow) =>
13
+ html`<sonic-menu-item
14
+ data-autocomplete-value=${item[valueKey]}
15
+ data-autocomplete-label=${item.nom}
16
+ >${item.nom}</sonic-menu-item
17
+ >`;
18
+
19
+ @customElement("docs-input-autocomplete-basic-demo")
20
+ export class DocsInputAutocompleteBasicDemo extends LitElement {
21
+ private items = communeItem("nom");
22
+
23
+ render() {
24
+ return html`
25
+ <sonic-input-autocomplete
26
+ class="w-64"
27
+ label="Ville"
28
+ formDataProvider="autoComplete-example-base"
29
+ name="nom"
30
+ placeholder="Paris, Lyon, Tours, ..."
31
+ serviceURL=${DOCS_MOCK_GEO_SERVICE}
32
+ dataProviderExpression="communes?limit=5"
33
+ .items=${this.items}
34
+ ></sonic-input-autocomplete>
35
+ `;
36
+ }
37
+ }
38
+
39
+ @customElement("docs-input-autocomplete-code-demo")
40
+ export class DocsInputAutocompleteCodeDemo extends LitElement {
41
+ private items = communeItem("code");
42
+
43
+ render() {
44
+ return html`
45
+ <sonic-input-autocomplete
46
+ class="w-64"
47
+ label="Ville (code INSEE)"
48
+ formDataProvider="autoComplete-example"
49
+ name="code"
50
+ value="13055"
51
+ placeholder="Paris, Lyon, Tours, ..."
52
+ serviceURL=${DOCS_MOCK_GEO_SERVICE}
53
+ dataProviderExpression="communes?limit=5"
54
+ searchParameter="nom"
55
+ .items=${this.items}
56
+ ></sonic-input-autocomplete>
57
+ `;
58
+ }
59
+ }
60
+
61
+ @customElement("docs-input-autocomplete-select-demo")
62
+ export class DocsInputAutocompleteSelectDemo extends LitElement {
63
+ private items = communeItem("code");
64
+
65
+ render() {
66
+ return html`
67
+ <sonic-input-autocomplete
68
+ select
69
+ class="w-64"
70
+ label="Ville (select)"
71
+ formDataProvider="autoComplete-example2"
72
+ name="code"
73
+ value="69123"
74
+ placeholder="Paris, Lyon, Tours, ..."
75
+ serviceURL=${DOCS_MOCK_GEO_SERVICE}
76
+ dataProviderExpression="communes?limit=5"
77
+ searchParameter="nom"
78
+ .items=${this.items}
79
+ ></sonic-input-autocomplete>
80
+ `;
81
+ }
82
+ }
83
+
84
+ @customElement("docs-input-autocomplete-keyboard-demo")
85
+ export class DocsInputAutocompleteKeyboardDemo extends LitElement {
86
+ private items = (item: CommuneRow) =>
87
+ html`<sonic-menu-item
88
+ data-keyboard-nav="nav-autocomplete"
89
+ data-autocomplete-value=${item.nom}
90
+ data-autocomplete-label=${item.nom}
91
+ >${item.nom}</sonic-menu-item
92
+ >`;
93
+
94
+ render() {
95
+ return html`
96
+ <sonic-input-autocomplete
97
+ class="w-64"
98
+ label="Ville"
99
+ formDataProvider="autoComplete-example-keyboard"
100
+ name="nom"
101
+ data-keyboard-nav="nav-autocomplete"
102
+ placeholder="Paris, Lyon, Tours, ..."
103
+ serviceURL=${DOCS_MOCK_GEO_SERVICE}
104
+ dataProviderExpression="communes?limit=60"
105
+ minSearchLength="1"
106
+ .items=${this.items}
107
+ ></sonic-input-autocomplete>
108
+ `;
109
+ }
110
+ }