@supersoniks/concorde 4.9.98-visual-stack.1 → 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 (339) hide show
  1. package/.gitlab-ci.yml +0 -13
  2. package/build-infos.json +1 -1
  3. package/concorde-3d.bundle.js +1 -1
  4. package/concorde-3d.es.js +2 -2
  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 +1 -1
  12. package/concorde-shader.es.js +2 -2
  13. package/concorde-webgpu.bundle.js +1 -1
  14. package/concorde-webgpu.es.js +2 -2
  15. package/dist/concorde-3d.bundle.js +1 -1
  16. package/dist/concorde-3d.es.js +2 -2
  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 +1 -1
  24. package/dist/concorde-shader.es.js +2 -2
  25. package/dist/concorde-webgpu.bundle.js +1 -1
  26. package/dist/concorde-webgpu.es.js +2 -2
  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/if/if.js +65 -7
  32. package/dist/js/core/components/functional/if/if.js.map +1 -1
  33. package/dist/js/core/components/functional/interactive/action.js +96 -0
  34. package/dist/js/core/components/functional/interactive/action.js.map +1 -0
  35. package/dist/js/core/components/functional/interactive/gamepad.js +206 -0
  36. package/dist/js/core/components/functional/interactive/gamepad.js.map +1 -0
  37. package/dist/js/core/components/functional/interactive/gesture.js +148 -0
  38. package/dist/js/core/components/functional/interactive/gesture.js.map +1 -0
  39. package/dist/js/core/components/functional/interactive/helpers.js +82 -0
  40. package/dist/js/core/components/functional/interactive/helpers.js.map +1 -0
  41. package/dist/js/core/components/functional/interactive/index.js +20 -0
  42. package/dist/js/core/components/functional/interactive/index.js.map +1 -0
  43. package/dist/js/core/components/functional/interactive/keyboard.js +183 -0
  44. package/dist/js/core/components/functional/interactive/keyboard.js.map +1 -0
  45. package/dist/js/core/components/functional/interactive/matrix.js +201 -0
  46. package/dist/js/core/components/functional/interactive/matrix.js.map +1 -0
  47. package/dist/js/core/components/functional/interactive/registry.js +28 -0
  48. package/dist/js/core/components/functional/interactive/registry.js.map +1 -0
  49. package/dist/js/core/components/functional/interactive/store.js +264 -0
  50. package/dist/js/core/components/functional/interactive/store.js.map +1 -0
  51. package/dist/js/core/components/functional/interactive/ticker.js +182 -0
  52. package/dist/js/core/components/functional/interactive/ticker.js.map +1 -0
  53. package/dist/js/core/components/functional/value/value.js +49 -4
  54. package/dist/js/core/components/functional/value/value.js.map +1 -1
  55. package/dist/js/core/components/ui/_css/rounded.js +34 -0
  56. package/dist/js/core/components/ui/_css/rounded.js.map +1 -0
  57. package/dist/js/core/components/ui/_css/type.js +44 -0
  58. package/dist/js/core/components/ui/_css/type.js.map +1 -1
  59. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js +95 -0
  60. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js.map +1 -0
  61. package/dist/js/core/components/ui/alert/alert.js +72 -87
  62. package/dist/js/core/components/ui/alert/alert.js.map +1 -1
  63. package/dist/js/core/components/ui/alert-messages/alert-messages.js +1 -0
  64. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +1 -1
  65. package/dist/js/core/components/ui/badge/badge.js +29 -80
  66. package/dist/js/core/components/ui/badge/badge.js.map +1 -1
  67. package/dist/js/core/components/ui/button/button.js +8 -7
  68. package/dist/js/core/components/ui/button/button.js.map +1 -1
  69. package/dist/js/core/components/ui/card/card-header.js +7 -2
  70. package/dist/js/core/components/ui/card/card-header.js.map +1 -1
  71. package/dist/js/core/components/ui/divider/divider.js +1 -1
  72. package/dist/js/core/components/ui/divider/divider.js.map +1 -1
  73. package/dist/js/core/components/ui/form/checkbox/checkbox.js +4 -20
  74. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +1 -1
  75. package/dist/js/core/components/ui/form/fieldset/legend-description.js +1 -1
  76. package/dist/js/core/components/ui/form/fieldset/legend.js +1 -1
  77. package/dist/js/core/components/ui/form/input/input.js +12 -15
  78. package/dist/js/core/components/ui/form/input/input.js.map +1 -1
  79. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +363 -158
  80. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +1 -1
  81. package/dist/js/core/components/ui/form/radio/radio.js +1 -1
  82. package/dist/js/core/components/ui/form/select/select.js +3 -6
  83. package/dist/js/core/components/ui/form/select/select.js.map +1 -1
  84. package/dist/js/core/components/ui/form/textarea/textarea.js +1 -2
  85. package/dist/js/core/components/ui/form/textarea/textarea.js.map +1 -1
  86. package/dist/js/core/components/ui/image/image.js +9 -37
  87. package/dist/js/core/components/ui/image/image.js.map +1 -1
  88. package/dist/js/core/components/ui/link/link.js +25 -26
  89. package/dist/js/core/components/ui/link/link.js.map +1 -1
  90. package/dist/js/core/components/ui/modal/modal-close.js +3 -12
  91. package/dist/js/core/components/ui/modal/modal-close.js.map +1 -1
  92. package/dist/js/core/components/ui/modal/modal.js +18 -18
  93. package/dist/js/core/components/ui/modal/modal.js.map +1 -1
  94. package/dist/js/core/components/ui/pop/pop.js +131 -112
  95. package/dist/js/core/components/ui/pop/pop.js.map +1 -1
  96. package/dist/js/core/components/ui/table/table.js.map +1 -1
  97. package/dist/js/core/components/ui/theme/theme.js +1 -1
  98. package/dist/js/core/components/ui/toast/dismissed.js +9 -0
  99. package/dist/js/core/components/ui/toast/dismissed.js.map +1 -0
  100. package/dist/js/core/components/ui/toast/render-content.js +14 -0
  101. package/dist/js/core/components/ui/toast/render-content.js.map +1 -0
  102. package/dist/js/core/components/ui/toast/toast-item.js +150 -96
  103. package/dist/js/core/components/ui/toast/toast-item.js.map +1 -1
  104. package/dist/js/core/components/ui/toast/toast.js +41 -13
  105. package/dist/js/core/components/ui/toast/toast.js.map +1 -1
  106. package/dist/js/core/components/ui/tooltip/tooltip.js +144 -143
  107. package/dist/js/core/components/ui/tooltip/tooltip.js.map +1 -1
  108. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +1 -1
  109. package/dist/js/core/decorators/subscriber/derive.js +3 -1
  110. package/dist/js/core/decorators/subscriber/derive.js.map +1 -1
  111. package/dist/js/core/mixins/Fetcher.js.map +1 -1
  112. package/dist/js/core/mixins/FormCheckable.js +1 -8
  113. package/dist/js/core/mixins/FormCheckable.js.map +1 -1
  114. package/dist/js/core/mixins/FormElement.js +26 -53
  115. package/dist/js/core/mixins/FormElement.js.map +1 -1
  116. package/dist/js/core/utils/AncestorAttributeObserver.js +130 -55
  117. package/dist/js/core/utils/AncestorAttributeObserver.js.map +1 -1
  118. package/dist/js/core/utils/LocationHandler.js +1 -1
  119. package/dist/js/core/utils/LocationHandler.js.map +1 -1
  120. package/dist/js/core/utils/dismissed.js +23 -0
  121. package/dist/js/core/utils/dismissed.js.map +1 -0
  122. package/dist/js/core/utils/positioning.js +110 -0
  123. package/dist/js/core/utils/positioning.js.map +1 -0
  124. package/dist/js/directives.js +1 -2
  125. package/dist/js/directives.js.map +1 -1
  126. package/dist/types/addons/interactive.d.ts +6 -0
  127. package/dist/types/addons/interactive.d.ts.map +1 -0
  128. package/dist/types/core/components/functional/if/if.d.ts +14 -5
  129. package/dist/types/core/components/functional/if/if.d.ts.map +1 -1
  130. package/dist/types/core/components/functional/interactive/action.d.ts +22 -0
  131. package/dist/types/core/components/functional/interactive/action.d.ts.map +1 -0
  132. package/dist/types/core/components/functional/interactive/gamepad.d.ts +37 -0
  133. package/dist/types/core/components/functional/interactive/gamepad.d.ts.map +1 -0
  134. package/dist/types/core/components/functional/interactive/gesture.d.ts +26 -0
  135. package/dist/types/core/components/functional/interactive/gesture.d.ts.map +1 -0
  136. package/dist/types/core/components/functional/interactive/helpers.d.ts +23 -0
  137. package/dist/types/core/components/functional/interactive/helpers.d.ts.map +1 -0
  138. package/dist/types/core/components/functional/interactive/index.d.ts +20 -0
  139. package/dist/types/core/components/functional/interactive/index.d.ts.map +1 -0
  140. package/dist/types/core/components/functional/interactive/keyboard.d.ts +37 -0
  141. package/dist/types/core/components/functional/interactive/keyboard.d.ts.map +1 -0
  142. package/dist/types/core/components/functional/interactive/matrix.d.ts +31 -0
  143. package/dist/types/core/components/functional/interactive/matrix.d.ts.map +1 -0
  144. package/dist/types/core/components/functional/interactive/registry.d.ts +23 -0
  145. package/dist/types/core/components/functional/interactive/registry.d.ts.map +1 -0
  146. package/dist/types/core/components/functional/interactive/store.d.ts +46 -0
  147. package/dist/types/core/components/functional/interactive/store.d.ts.map +1 -0
  148. package/dist/types/core/components/functional/interactive/ticker.d.ts +33 -0
  149. package/dist/types/core/components/functional/interactive/ticker.d.ts.map +1 -0
  150. package/dist/types/core/components/functional/value/value.d.ts +6 -0
  151. package/dist/types/core/components/functional/value/value.d.ts.map +1 -1
  152. package/dist/types/core/components/ui/_css/rounded.d.ts +3 -0
  153. package/dist/types/core/components/ui/_css/rounded.d.ts.map +1 -0
  154. package/dist/types/core/components/ui/_css/type.d.ts +13 -0
  155. package/dist/types/core/components/ui/_css/type.d.ts.map +1 -1
  156. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts +83 -0
  157. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts.map +1 -0
  158. package/dist/types/core/components/ui/alert/alert.d.ts +14 -12
  159. package/dist/types/core/components/ui/alert/alert.d.ts.map +1 -1
  160. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +1 -1
  161. package/dist/types/core/components/ui/badge/badge.d.ts +1 -1
  162. package/dist/types/core/components/ui/badge/badge.d.ts.map +1 -1
  163. package/dist/types/core/components/ui/button/button.d.ts +13 -29
  164. package/dist/types/core/components/ui/button/button.d.ts.map +1 -1
  165. package/dist/types/core/components/ui/card/card-header.d.ts.map +1 -1
  166. package/dist/types/core/components/ui/divider/divider.d.ts +2 -1
  167. package/dist/types/core/components/ui/divider/divider.d.ts.map +1 -1
  168. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +25 -73
  169. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +1 -1
  170. package/dist/types/core/components/ui/form/input/input.d.ts +14 -29
  171. package/dist/types/core/components/ui/form/input/input.d.ts.map +1 -1
  172. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +63 -65
  173. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +1 -1
  174. package/dist/types/core/components/ui/form/radio/radio.d.ts +1 -1
  175. package/dist/types/core/components/ui/form/select/select.d.ts +3 -5
  176. package/dist/types/core/components/ui/form/select/select.d.ts.map +1 -1
  177. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +12 -28
  178. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +1 -1
  179. package/dist/types/core/components/ui/image/image.d.ts +2 -1
  180. package/dist/types/core/components/ui/image/image.d.ts.map +1 -1
  181. package/dist/types/core/components/ui/link/link.d.ts +10 -9
  182. package/dist/types/core/components/ui/link/link.d.ts.map +1 -1
  183. package/dist/types/core/components/ui/modal/modal-close.d.ts +2 -2
  184. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +1 -1
  185. package/dist/types/core/components/ui/pop/pop.d.ts +12 -4
  186. package/dist/types/core/components/ui/pop/pop.d.ts.map +1 -1
  187. package/dist/types/core/components/ui/table/table.d.ts +2 -1
  188. package/dist/types/core/components/ui/table/table.d.ts.map +1 -1
  189. package/dist/types/core/components/ui/toast/dismissed.d.ts +3 -0
  190. package/dist/types/core/components/ui/toast/dismissed.d.ts.map +1 -0
  191. package/dist/types/core/components/ui/toast/render-content.d.ts +7 -0
  192. package/dist/types/core/components/ui/toast/render-content.d.ts.map +1 -0
  193. package/dist/types/core/components/ui/toast/toast-item.d.ts +26 -9
  194. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +1 -1
  195. package/dist/types/core/components/ui/toast/toast.d.ts +6 -3
  196. package/dist/types/core/components/ui/toast/toast.d.ts.map +1 -1
  197. package/dist/types/core/components/ui/toast/types.d.ts +12 -2
  198. package/dist/types/core/components/ui/toast/types.d.ts.map +1 -1
  199. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +19 -11
  200. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +1 -1
  201. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +3 -4
  202. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +1 -1
  203. package/dist/types/core/decorators/subscriber/derive.d.ts.map +1 -1
  204. package/dist/types/core/mixins/FormCheckable.d.ts +10 -27
  205. package/dist/types/core/mixins/FormCheckable.d.ts.map +1 -1
  206. package/dist/types/core/mixins/FormElement.d.ts +21 -10
  207. package/dist/types/core/mixins/FormElement.d.ts.map +1 -1
  208. package/dist/types/core/mixins/FormInput.d.ts +11 -27
  209. package/dist/types/core/mixins/FormInput.d.ts.map +1 -1
  210. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +17 -9
  211. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +1 -1
  212. package/dist/types/core/utils/LocationHandler.d.ts +3 -2
  213. package/dist/types/core/utils/LocationHandler.d.ts.map +1 -1
  214. package/dist/types/core/utils/dismissed.d.ts +3 -0
  215. package/dist/types/core/utils/dismissed.d.ts.map +1 -0
  216. package/dist/types/core/utils/positioning.d.ts +44 -0
  217. package/dist/types/core/utils/positioning.d.ts.map +1 -0
  218. package/dist/types/directives.d.ts +1 -3
  219. package/dist/types/directives.d.ts.map +1 -1
  220. package/dist/types/mixins.d.ts +22 -55
  221. package/dist/types/mixins.d.ts.map +1 -1
  222. package/docs/assets/{index-FmK4JaIM.js → index-D8MVWqY6.js} +946 -687
  223. package/docs/assets/index-DiD0qYvE.css +1 -0
  224. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +17 -85
  225. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +1 -1
  226. package/docs/crawl/hubs/form-components.html +13 -11
  227. package/docs/docs-mock-api-sw.js +5 -1
  228. package/docs/docs-mock-api-sw.js.map +2 -2
  229. package/docs/index.html +2 -2
  230. package/docs/llms-full.txt +12 -38
  231. package/docs/llms.txt +1 -1
  232. package/docs/src/core/components/functional/sdui/sdui.md +0 -0
  233. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -0
  234. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  235. package/docs/src/docs/_getting-started/create-a-component.md +0 -0
  236. package/docs/src/docs/_misc/formelement-subscriber-removal.md +1 -1
  237. package/docs/src/docs/search/docs-search.json +195 -200
  238. package/docs/src/tsconfig.json +324 -0
  239. package/gitlab/job_tests.sh +25 -12
  240. package/index.html +3 -3
  241. package/package.json +181 -9
  242. package/public/docs-mock-api-sw.js +5 -1
  243. package/public/docs-mock-api-sw.js.map +2 -2
  244. package/scripts/build-addons.mjs +2 -2
  245. package/scripts/post-build.mjs +9 -0
  246. package/src/addons/interactive.ts +5 -0
  247. package/src/core/components/functional/if/if.ts +54 -7
  248. package/src/core/components/functional/interactive/action.ts +84 -0
  249. package/src/core/components/functional/interactive/gamepad.ts +197 -0
  250. package/src/core/components/functional/interactive/gesture.ts +136 -0
  251. package/src/core/components/functional/interactive/helpers.spec.ts +50 -0
  252. package/src/core/components/functional/interactive/helpers.ts +97 -0
  253. package/src/core/components/functional/interactive/index.ts +25 -0
  254. package/src/core/components/functional/interactive/interactive.md +33 -0
  255. package/src/core/components/functional/interactive/keyboard.ts +171 -0
  256. package/src/core/components/functional/interactive/matrix.ts +185 -0
  257. package/src/core/components/functional/interactive/registry.ts +46 -0
  258. package/src/core/components/functional/interactive/store.ts +264 -0
  259. package/src/core/components/functional/interactive/ticker.ts +171 -0
  260. package/src/core/components/functional/list/list.ts +0 -0
  261. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  262. package/src/core/components/functional/value/value.ts +44 -4
  263. package/src/core/components/ui/_css/rounded.ts +36 -0
  264. package/src/core/components/ui/_css/type.ts +49 -0
  265. package/src/core/components/ui/_i18n/ui-aria-labels.ts +104 -0
  266. package/src/core/components/ui/alert/alert.md +128 -72
  267. package/src/core/components/ui/alert/alert.spec.ts +145 -0
  268. package/src/core/components/ui/alert/alert.ts +86 -91
  269. package/src/core/components/ui/alert-messages/alert-messages.ts +1 -1
  270. package/src/core/components/ui/badge/badge.md +126 -78
  271. package/src/core/components/ui/badge/badge.ts +29 -81
  272. package/src/core/components/ui/button/button.md +1 -0
  273. package/src/core/components/ui/button/button.ts +12 -10
  274. package/src/core/components/ui/card/card-header.ts +7 -2
  275. package/src/core/components/ui/card/card.md +120 -65
  276. package/src/core/components/ui/divider/divider.ts +4 -9
  277. package/src/core/components/ui/form/checkbox/checkbox.md +1 -1
  278. package/src/core/components/ui/form/checkbox/checkbox.ts +4 -20
  279. package/src/core/components/ui/form/fieldset/legend-description.ts +1 -1
  280. package/src/core/components/ui/form/fieldset/legend.ts +1 -1
  281. package/src/core/components/ui/form/input/input.md +1 -1
  282. package/src/core/components/ui/form/input/input.ts +25 -27
  283. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  284. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.ts +419 -187
  285. package/src/core/components/ui/form/radio/radio.ts +1 -1
  286. package/src/core/components/ui/form/select/select.ts +3 -6
  287. package/src/core/components/ui/form/textarea/textarea.md +1 -1
  288. package/src/core/components/ui/form/textarea/textarea.ts +1 -2
  289. package/src/core/components/ui/image/image.md +147 -53
  290. package/src/core/components/ui/image/image.ts +10 -44
  291. package/src/core/components/ui/link/link.md +2 -2
  292. package/src/core/components/ui/link/link.ts +42 -37
  293. package/src/core/components/ui/modal/modal-close.ts +8 -12
  294. package/src/core/components/ui/modal/modal.ts +18 -18
  295. package/src/core/components/ui/pop/pop.md +105 -1
  296. package/src/core/components/ui/pop/pop.ts +145 -141
  297. package/src/core/components/ui/table/table.ts +2 -8
  298. package/src/core/components/ui/theme/theme.ts +1 -1
  299. package/src/core/components/ui/toast/dismissed.ts +14 -0
  300. package/src/core/components/ui/toast/render-content.ts +13 -0
  301. package/src/core/components/ui/toast/toast-item.ts +179 -103
  302. package/src/core/components/ui/toast/toast.ts +58 -21
  303. package/src/core/components/ui/toast/types.ts +14 -2
  304. package/src/core/components/ui/tooltip/tooltip.ts +176 -154
  305. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
  306. package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
  307. package/src/core/decorators/subscriber/derive.ts +3 -3
  308. package/src/core/mixins/Fetcher.ts +1 -1
  309. package/src/core/mixins/FormCheckable.ts +1 -8
  310. package/src/core/mixins/FormElement.ts +74 -76
  311. package/src/core/mixins/Subscriber.ts +0 -0
  312. package/src/core/utils/AncestorAttributeObserver.ts +183 -70
  313. package/src/core/utils/DataBindObserver.ts +0 -0
  314. package/src/core/utils/LocationHandler.ts +12 -5
  315. package/src/core/utils/Objects.ts +0 -0
  316. package/src/core/utils/dismissed.ts +22 -0
  317. package/src/core/utils/positioning.spec.ts +208 -0
  318. package/src/core/utils/positioning.ts +183 -0
  319. package/src/directives.ts +1 -3
  320. package/src/docs/_core-concept/dataFlow.md +1 -1
  321. package/src/docs/_decorators/ancestor-attribute.md +3 -2
  322. package/src/docs/_getting-started/concorde-outside.md +3 -3
  323. package/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  324. package/src/docs/_misc/html-integration.md +2 -0
  325. package/src/docs/code.ts +3 -1
  326. package/src/docs/components/docs-demo-sources.ts +60 -0
  327. package/src/docs/docs.ts +1 -0
  328. package/src/docs/example/docs-input-autocomplete-demos.ts +110 -0
  329. package/src/docs/mock-api/router.ts +17 -1
  330. package/src/docs/navigation/navigation.ts +4 -0
  331. package/src/docs/search/docs-search.json +943 -2033
  332. package/src/docs/tailwind/css/tailwind.css +13 -6
  333. package/src/tsconfig.json +135 -6
  334. package/src/tsconfig.tsbuildinfo +1 -1
  335. package/tailwind.config.js +50 -3
  336. package/vite/config.js +23 -35
  337. package/vite.config.mts +5 -0
  338. package/vitest.setup.ts +49 -13
  339. package/docs/assets/index-BZiZXMU-.css +0 -1
@@ -1,609 +1,4 @@
1
1
  [
2
- {
3
- "search": "3D",
4
- "files": {
5
- "core/components/functional/3d/3d.md": {
6
- "title": "3D",
7
- "hashes": {
8
- "3d": {
9
- "count": 1,
10
- "title": "",
11
- "type": "page"
12
- }
13
- }
14
- }
15
- }
16
- },
17
- {
18
- "search": "sonic-3d — viewer Three.js (glTF / GLB), caméra orbit / perspective / ortho, outputs dataProvider paresseux.\n",
19
- "files": {
20
- "core/components/functional/3d/3d.md": {
21
- "title": "3D",
22
- "hashes": {
23
- "3d": {
24
- "count": 1,
25
- "title": "",
26
- "type": "paragraph"
27
- }
28
- }
29
- }
30
- }
31
- },
32
- {
33
- "search": "Import opt-in (hors bundle functional) :\n",
34
- "files": {
35
- "core/components/functional/3d/3d.md": {
36
- "title": "3D",
37
- "hashes": {
38
- "3d": {
39
- "count": 1,
40
- "title": "",
41
- "type": "paragraph"
42
- }
43
- }
44
- },
45
- "core/components/functional/shader/shader.md": {
46
- "title": "Shader",
47
- "hashes": {
48
- "shader": {
49
- "count": 1,
50
- "title": "",
51
- "type": "paragraph"
52
- }
53
- }
54
- }
55
- }
56
- },
57
- {
58
- "search": "CDN (after the core): concorde-3d.bundle.js — see CDN addons.\n",
59
- "files": {
60
- "core/components/functional/3d/3d.md": {
61
- "title": "3D",
62
- "hashes": {
63
- "3d": {
64
- "count": 1,
65
- "title": "",
66
- "type": "paragraph"
67
- }
68
- }
69
- }
70
- }
71
- },
72
- {
73
- "search": "DamagedHelmet (Khronos, jsDelivr). Orbit · zoom · pan · survol highlight · pick · double-clic = recentrer. Sans src : cube de démo. Molette : zoom tant qu’il reste de la marge ; aux bornes minDistance / maxDistance, le scroll page reprend.\n",
74
- "files": {
75
- "core/components/functional/3d/3d.md": {
76
- "title": "3D",
77
- "hashes": {
78
- "démo-modèle-cdn": {
79
- "count": 1,
80
- "title": "Démo (modèle CDN)",
81
- "type": "paragraph"
82
- }
83
- }
84
- }
85
- }
86
- },
87
- {
88
- "search": "\n",
89
- "files": {
90
- "core/components/functional/3d/3d.md": {
91
- "title": "3D",
92
- "hashes": {
93
- "démo-modèle-cdn": {
94
- "count": 1,
95
- "title": "Démo (modèle CDN)",
96
- "type": "paragraph"
97
- },
98
- "form-auto-bind-formdataprovider": {
99
- "count": 1,
100
- "title": "Form auto-bind (`formDataProvider`)",
101
- "type": "paragraph"
102
- },
103
- "sortie--dataprovider": {
104
- "count": 1,
105
- "title": "Sortie / dataProvider",
106
- "type": "paragraph"
107
- }
108
- }
109
- },
110
- "core/components/functional/if/if.md": {
111
- "title": "if",
112
- "hashes": {
113
- "if": {
114
- "count": 1,
115
- "title": "",
116
- "type": "paragraph"
117
- }
118
- }
119
- },
120
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
121
- "title": "Hugging Face infer",
122
- "hashes": {
123
- "image--background-removal": {
124
- "count": 1,
125
- "title": "Image — `background-removal`",
126
- "type": "paragraph"
127
- },
128
- "text--zero-shot-classification": {
129
- "count": 1,
130
- "title": "Text — `zero-shot-classification`",
131
- "type": "paragraph"
132
- }
133
- }
134
- },
135
- "core/components/functional/jsonata/jsonata.md": {
136
- "title": "Jsonata",
137
- "hashes": {
138
- "groupby--top-n": {
139
- "count": 1,
140
- "title": "Groupby + top N",
141
- "type": "paragraph"
142
- },
143
- "totaux-somme--taxe": {
144
- "count": 1,
145
- "title": "Totaux (somme + taxe)",
146
- "type": "paragraph"
147
- }
148
- }
149
- },
150
- "core/components/functional/list/list.md": {
151
- "title": "List",
152
- "hashes": {
153
- "row-renderer-items--recommended": {
154
- "count": 1,
155
- "title": "Row renderer (`items`) — recommended",
156
- "type": "paragraph"
157
- },
158
- "alternating-row-layouts": {
159
- "count": 2,
160
- "title": "Alternating row layouts",
161
- "type": "paragraph"
162
- },
163
- "separator-and-empty-list": {
164
- "count": 1,
165
- "title": "Separator and empty list",
166
- "type": "paragraph"
167
- },
168
- "fetch--extractvalues": {
169
- "count": 1,
170
- "title": "Fetch + `extractValues`",
171
- "type": "paragraph"
172
- }
173
- }
174
- },
175
- "core/components/functional/queue/queue.md": {
176
- "title": "Queue",
177
- "hashes": {
178
- "lazy-load--offset-and-limit": {
179
- "count": 1,
180
- "title": "Lazy load — `$offset` and `$limit`",
181
- "type": "paragraph"
182
- },
183
- "simple-batch-no-lazy-scroll": {
184
- "count": 1,
185
- "title": "Simple batch (no lazy scroll)",
186
- "type": "paragraph"
187
- }
188
- }
189
- },
190
- "core/components/functional/router/router.md": {
191
- "title": "Router",
192
- "hashes": {
193
- "static-routes-no-parameters": {
194
- "count": 1,
195
- "title": "Static routes (no parameters)",
196
- "type": "paragraph"
197
- },
198
- "url-pattern-name": {
199
- "count": 1,
200
- "title": "Url-pattern (`:name`)",
201
- "type": "paragraph"
202
- }
203
- }
204
- },
205
- "core/components/functional/shader/shader.md": {
206
- "title": "Shader",
207
- "hashes": {
208
- "multipass-sur-une-photo": {
209
- "count": 1,
210
- "title": "Multipass sur une photo",
211
- "type": "paragraph"
212
- },
213
- "chaînage-deffets-officiel": {
214
- "count": 1,
215
- "title": "Chaînage d’effets (officiel)",
216
- "type": "paragraph"
217
- },
218
- "rollover--roll-out-hover-param": {
219
- "count": 1,
220
- "title": "Rollover / roll-out (`hover-param`)",
221
- "type": "paragraph"
222
- },
223
- "sortie--sampling-sample--dataprovider": {
224
- "count": 1,
225
- "title": "Sortie / sampling (`sample` + dataProvider)",
226
- "type": "paragraph"
227
- }
228
- }
229
- },
230
- "core/components/functional/submit/submit.md": {
231
- "title": "Submit",
232
- "hashes": {
233
- "form-and-result-handling": {
234
- "count": 1,
235
- "title": "Form and result handling",
236
- "type": "paragraph"
237
- },
238
- "native-html-form": {
239
- "count": 1,
240
- "title": "Native HTML form",
241
- "type": "paragraph"
242
- },
243
- "sendasformdata": {
244
- "count": 1,
245
- "title": "sendAsFormData",
246
- "type": "paragraph"
247
- },
248
- "submit-result-key": {
249
- "count": 1,
250
- "title": "submit-result-key",
251
- "type": "paragraph"
252
- },
253
- "cleareddataonsuccess": {
254
- "count": 1,
255
- "title": "clearedDataOnSuccess",
256
- "type": "paragraph"
257
- },
258
- "custom-submit-event": {
259
- "count": 1,
260
- "title": "Custom `submit` event",
261
- "type": "paragraph"
262
- },
263
- "endpoint-vs-dataprovider": {
264
- "count": 1,
265
- "title": "endPoint vs dataProvider",
266
- "type": "paragraph"
267
- },
268
- "methodget": {
269
- "count": 1,
270
- "title": "method=\"get\"",
271
- "type": "paragraph"
272
- }
273
- }
274
- },
275
- "core/components/functional/webgpu/webgpu.md": {
276
- "title": "WebGPU",
277
- "hashes": {
278
- "demo--particles-compute": {
279
- "count": 1,
280
- "title": "Demo — particles (compute)",
281
- "type": "paragraph"
282
- }
283
- }
284
- },
285
- "core/components/ui/form/checkbox/checkbox.md": {
286
- "title": "Checkbox",
287
- "hashes": {
288
- "example-of-use--blacklist--queue": {
289
- "count": 1,
290
- "title": "Example of use — blacklist + queue",
291
- "type": "paragraph"
292
- }
293
- }
294
- },
295
- "core/components/ui/form/input/input.md": {
296
- "title": "Input",
297
- "hashes": {
298
- "list": {
299
- "count": 1,
300
- "title": "List",
301
- "type": "paragraph"
302
- },
303
- "example-of-use--search--queue": {
304
- "count": 1,
305
- "title": "Example of use — search + queue",
306
- "type": "paragraph"
307
- }
308
- }
309
- },
310
- "core/components/ui/form/radio/radio.md": {
311
- "title": "Radio",
312
- "hashes": {
313
- "example-of-use--blacklist--queue": {
314
- "count": 1,
315
- "title": "Example of use — blacklist + queue",
316
- "type": "paragraph"
317
- }
318
- }
319
- },
320
- "core/components/ui/form/select/select.md": {
321
- "title": "Select",
322
- "hashes": {
323
- "example-of-use--language-filter--queue": {
324
- "count": 1,
325
- "title": "Example of use — language filter + queue",
326
- "type": "paragraph"
327
- }
328
- }
329
- },
330
- "core/components/ui/form/switch/switch.md": {
331
- "title": "Switch",
332
- "hashes": {
333
- "example-of-use--blacklist--queue": {
334
- "count": 1,
335
- "title": "Example of use — blacklist + queue",
336
- "type": "paragraph"
337
- }
338
- }
339
- },
340
- "core/components/ui/icon/icon.md": {
341
- "title": "Icon",
342
- "hashes": {
343
- "custom": {
344
- "count": 1,
345
- "title": "Custom",
346
- "type": "paragraph"
347
- }
348
- }
349
- },
350
- "core/components/ui/loader/loader.md": {
351
- "title": "Loader",
352
- "hashes": {
353
- "fixed-mode": {
354
- "count": 1,
355
- "title": "Fixed mode",
356
- "type": "paragraph"
357
- }
358
- }
359
- },
360
- "docs/_misc/api-configuration.md": {
361
- "title": "API configuration",
362
- "hashes": {
363
- "bearer-token-static": {
364
- "count": 1,
365
- "title": "Bearer token (static)",
366
- "type": "paragraph"
367
- },
368
- "tokenprovider--basic-auth": {
369
- "count": 1,
370
- "title": "tokenProvider + Basic auth",
371
- "type": "paragraph"
372
- },
373
- "http-498--stale-token-refresh": {
374
- "count": 1,
375
- "title": "HTTP 498 — stale token refresh",
376
- "type": "paragraph"
377
- },
378
- "eventsapitoken": {
379
- "count": 1,
380
- "title": "eventsApiToken",
381
- "type": "paragraph"
382
- },
383
- "wording-api": {
384
- "count": 1,
385
- "title": "Wording API",
386
- "type": "paragraph"
387
- },
388
- "scoped-attributes-html--sonic-scope": {
389
- "count": 1,
390
- "title": "Scoped attributes (HTML / sonic-scope)",
391
- "type": "paragraph"
392
- }
393
- }
394
- },
395
- "docs/_misc/visual-stack.md": {
396
- "title": "Visual stack",
397
- "hashes": {
398
- "demo": {
399
- "count": 1,
400
- "title": "Demo",
401
- "type": "paragraph"
402
- },
403
- "3d--shader-live-gpu-bridge": {
404
- "count": 1,
405
- "title": "3D → shader live (GPU bridge)",
406
- "type": "paragraph"
407
- },
408
- "3d--webgpu-live": {
409
- "count": 1,
410
- "title": "3D → WebGPU live",
411
- "type": "paragraph"
412
- },
413
- "post-fx--depth-in-sonic-3d": {
414
- "count": 1,
415
- "title": "Post FX + depth (in sonic-3d)",
416
- "type": "paragraph"
417
- },
418
- "harris--patches--webgpu": {
419
- "count": 1,
420
- "title": "Harris → patches → WebGPU",
421
- "type": "paragraph"
422
- }
423
- }
424
- }
425
- }
426
- },
427
- {
428
- "search": "Comme sonic-shader : si dataProvider (ou un ancêtre formDataProvider) contient des champs aux mêmes noms que l’API, ils pilotent le viewer sans JS.\n",
429
- "files": {
430
- "core/components/functional/3d/3d.md": {
431
- "title": "3D",
432
- "hashes": {
433
- "form-auto-bind-formdataprovider": {
434
- "count": 1,
435
- "title": "Form auto-bind (`formDataProvider`)",
436
- "type": "paragraph"
437
- }
438
- }
439
- }
440
- }
441
- },
442
- {
443
- "search": "Conseil : séparer out-data-provider du form. Les entrées pures (fov, exposure, autoRotate, src…) ne sont jamais réécrites en out sur un DP partagé. yaw / distance / pitch restent publiables ; un changement manuel d’orbit coupe autoRotate.\n",
444
- "files": {
445
- "core/components/functional/3d/3d.md": {
446
- "title": "3D",
447
- "hashes": {
448
- "form-auto-bind-formdataprovider": {
449
- "count": 1,
450
- "title": "Form auto-bind (`formDataProvider`)",
451
- "type": "paragraph"
452
- }
453
- }
454
- }
455
- }
456
- },
457
- {
458
- "search": "Gate paresseuse : un sonic-input name="yaw" ne déclenche pas la publication out (seul un lecteur sur ready / frame / cam* / hit*… le fait).\n",
459
- "files": {
460
- "core/components/functional/3d/3d.md": {
461
- "title": "3D",
462
- "hashes": {
463
- "form-auto-bind-formdataprovider": {
464
- "count": 1,
465
- "title": "Form auto-bind (`formDataProvider`)",
466
- "type": "paragraph"
467
- }
468
- }
469
- }
470
- }
471
- },
472
- {
473
- "search": "Entrée : champs ci-dessus. Sortie (Sonic3dOutput) : cam* / target* / distance / yaw / pitch / pointer* / ready / hit*… With frame-out (or a listener on frameUrl / snapshot): lazy JPEG canvas capture → frameUrl + snapshot (SonicMediaRef). Event out. Publication paresseuse.\n",
474
- "files": {
475
- "core/components/functional/3d/3d.md": {
476
- "title": "3D",
477
- "hashes": {
478
- "sortie--dataprovider": {
479
- "count": 1,
480
- "title": "Sortie / dataProvider",
481
- "type": "paragraph"
482
- }
483
- }
484
- }
485
- }
486
- },
487
- {
488
- "search": "Le viewer lit asset ou src depuis le DP — la source (fetch, upload, HF) n’est pas couplée.\n",
489
- "files": {
490
- "core/components/functional/3d/3d.md": {
491
- "title": "3D",
492
- "hashes": {
493
- "asset-neutre-hf-plus-tard": {
494
- "count": 1,
495
- "title": "Asset neutre (HF plus tard)",
496
- "type": "paragraph"
497
- }
498
- }
499
- }
500
- }
501
- },
502
- {
503
- "search": "No shared WebGL context between sonic-3d and sonic-shader.\n",
504
- "files": {
505
- "core/components/functional/3d/3d.md": {
506
- "title": "3D",
507
- "hashes": {
508
- "shader-bridging": {
509
- "count": 1,
510
- "title": "Shader bridging",
511
- "type": "paragraph"
512
- }
513
- }
514
- }
515
- }
516
- },
517
- {
518
- "search": "Demo: Visual stack — 3D → shader live.\n",
519
- "files": {
520
- "core/components/functional/3d/3d.md": {
521
- "title": "3D",
522
- "hashes": {
523
- "shader-bridging": {
524
- "count": 1,
525
- "title": "Shader bridging",
526
- "type": "paragraph"
527
- }
528
- }
529
- }
530
- }
531
- },
532
- {
533
- "search": "Un sonic-shader / sonic-webgpu qui pointe #id s’enregistre via registerFrameConsumer : le 3D continue hors viewport (pas de dispose). Option explicite : play-offscreen.\n",
534
- "files": {
535
- "core/components/functional/3d/3d.md": {
536
- "title": "3D",
537
- "hashes": {
538
- "shader-bridging": {
539
- "count": 1,
540
- "title": "Shader bridging",
541
- "type": "paragraph"
542
- }
543
- }
544
- }
545
- }
546
- },
547
- {
548
- "search": "el.stopMotion() coupe autoRotate et l’inertie OrbitControls. Quand la caméra est immobile depuis ~8 frames : event rest + champ out moving: 0|1. Attribut damping (défaut 0.08, 0 = off).\n",
549
- "files": {
550
- "core/components/functional/3d/3d.md": {
551
- "title": "3D",
552
- "hashes": {
553
- "arrêt-net": {
554
- "count": 1,
555
- "title": "Arrêt net",
556
- "type": "paragraph"
557
- }
558
- }
559
- }
560
- }
561
- },
562
- {
563
- "search": "When post-image is set, the scene renders to an offscreen target with a depth texture, then ShaderToy-style passes run inside the same Three context (post-buffer-a…post-image). Same GLSL as sonic-shader (mainImage, iChannel0–3, uParam0–3, sonicLinearDepth).\n",
564
- "files": {
565
- "core/components/functional/3d/3d.md": {
566
- "title": "3D",
567
- "hashes": {
568
- "post-fx-in-viewer": {
569
- "count": 1,
570
- "title": "Post FX (in-viewer)",
571
- "type": "paragraph"
572
- }
573
- }
574
- }
575
- }
576
- },
577
- {
578
- "search": "Demo: Visual stack — post depth edges.\n",
579
- "files": {
580
- "core/components/functional/3d/3d.md": {
581
- "title": "3D",
582
- "hashes": {
583
- "post-fx-in-viewer": {
584
- "count": 1,
585
- "title": "Post FX (in-viewer)",
586
- "type": "paragraph"
587
- }
588
- }
589
- }
590
- }
591
- },
592
- {
593
- "search": "Pick / orbit still use scene geometry; frame-out captures the final canvas after post.\n",
594
- "files": {
595
- "core/components/functional/3d/3d.md": {
596
- "title": "3D",
597
- "hashes": {
598
- "post-fx-in-viewer": {
599
- "count": 1,
600
- "title": "Post FX (in-viewer)",
601
- "type": "paragraph"
602
- }
603
- }
604
- }
605
- }
606
- },
607
2
  {
608
3
  "search": "Date",
609
4
  "files": {
@@ -700,229 +95,9 @@
700
95
  "core/components/functional/date/date.md": {
701
96
  "title": "Date",
702
97
  "hashes": {
703
- "language": {
704
- "count": 1,
705
- "title": "Language",
706
- "type": "paragraph"
707
- }
708
- }
709
- }
710
- }
711
- },
712
- {
713
- "search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
714
- "files": {
715
- "core/components/functional/date/date.md": {
716
- "title": "Date",
717
- "hashes": {
718
- "time_zone": {
719
- "count": 1,
720
- "title": "Time_zone",
721
- "type": "paragraph"
722
- }
723
- }
724
- }
725
- }
726
- },
727
- {
728
- "search": "Deprecated\n",
729
- "files": {
730
- "core/components/functional/date/date.md": {
731
- "title": "Date",
732
- "hashes": {
733
- "renderif": {
734
- "count": 1,
735
- "title": ".renderIf",
736
- "type": "paragraph"
737
- }
738
- }
739
- },
740
- "core/components/functional/fetch/fetch.md": {
741
- "title": "Fetch",
742
- "hashes": {
743
- "headersdataprovider": {
744
- "count": 1,
745
- "title": "HeadersDataProvider",
746
- "type": "paragraph"
747
- }
748
- }
749
- }
750
- }
751
- },
752
- {
753
- "search": "Fetch",
754
- "files": {
755
- "core/components/functional/fetch/fetch.md": {
756
- "title": "Fetch",
757
- "hashes": {
758
- "fetch": {
759
- "count": 1,
760
- "title": "",
761
- "type": "page"
762
- }
763
- }
764
- }
765
- }
766
- },
767
- {
768
- "search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
769
- "files": {
770
- "core/components/functional/fetch/fetch.md": {
771
- "title": "Fetch",
772
- "hashes": {
773
- "fetch": {
774
- "count": 1,
775
- "title": "",
776
- "type": "paragraph"
777
- }
778
- }
779
- }
780
- }
781
- },
782
- {
783
- "search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
784
- "files": {
785
- "core/components/functional/fetch/fetch.md": {
786
- "title": "Fetch",
787
- "hashes": {
788
- "fetch": {
789
- "count": 1,
790
- "title": "",
791
- "type": "paragraph"
792
- }
793
- }
794
- }
795
- }
796
- },
797
- {
798
- "search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
799
- "files": {
800
- "core/components/functional/fetch/fetch.md": {
801
- "title": "Fetch",
802
- "hashes": {
803
- "basic-usage": {
804
- "count": 1,
805
- "title": "Basic usage",
806
- "type": "paragraph"
807
- }
808
- }
809
- }
810
- }
811
- },
812
- {
813
- "search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
814
- "files": {
815
- "core/components/functional/fetch/fetch.md": {
816
- "title": "Fetch",
817
- "hashes": {
818
- "dataprovider-as-an-endpoint": {
819
- "count": 1,
820
- "title": "DataProvider as an endPoint",
821
- "type": "paragraph"
822
- }
823
- }
824
- }
825
- }
826
- },
827
- {
828
- "search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
829
- "files": {
830
- "core/components/functional/fetch/fetch.md": {
831
- "title": "Fetch",
832
- "hashes": {
833
- "key": {
834
- "count": 1,
835
- "title": "Key",
836
- "type": "paragraph"
837
- }
838
- }
839
- }
840
- }
841
- },
842
- {
843
- "search": "For example if the data is {my:{data:{a:1,b:2}}} and the key is key="my.data", the data available in the dataProvider will be {a:1 , b:2}\n",
844
- "files": {
845
- "core/components/functional/fetch/fetch.md": {
846
- "title": "Fetch",
847
- "hashes": {
848
- "key": {
849
- "count": 1,
850
- "title": "Key",
851
- "type": "paragraph"
852
- }
853
- }
854
- }
855
- }
856
- },
857
- {
858
- "search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
859
- "files": {
860
- "core/components/functional/fetch/fetch.md": {
861
- "title": "Fetch",
862
- "hashes": {
863
- "text-mode": {
864
- "count": 1,
865
- "title": "Text mode",
866
- "type": "paragraph"
867
- }
868
- }
869
- }
870
- }
871
- },
872
- {
873
- "search": "The noLoader attribute disables display of the default loader\n",
874
- "files": {
875
- "core/components/functional/fetch/fetch.md": {
876
- "title": "Fetch",
877
- "hashes": {
878
- "noloader": {
879
- "count": 1,
880
- "title": "NoLoader",
881
- "type": "paragraph"
882
- }
883
- }
884
- }
885
- }
886
- },
887
- {
888
- "search": "if",
889
- "files": {
890
- "core/components/functional/if/if.md": {
891
- "title": "if",
892
- "hashes": {
893
- "if": {
894
- "count": 1,
895
- "title": "",
896
- "type": "page"
897
- }
898
- }
899
- }
900
- }
901
- },
902
- {
903
- "search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
904
- "files": {
905
- "core/components/functional/if/if.md": {
906
- "title": "if",
907
- "hashes": {
908
- "if": {
909
- "count": 1,
910
- "title": "",
911
- "type": "paragraph"
912
- }
913
- }
914
- }
915
- }
916
- },
917
- {
918
- "search": "Plain HTML without Lit: HTML integration.\n",
919
- "files": {
920
- "core/components/functional/if/if.md": {
921
- "title": "if",
922
- "hashes": {
923
- "if": {
98
+ "language": {
924
99
  "count": 1,
925
- "title": "",
100
+ "title": "Language",
926
101
  "type": "paragraph"
927
102
  }
928
103
  }
@@ -930,29 +105,39 @@
930
105
  }
931
106
  },
932
107
  {
933
- "search": "Hugging Face infer",
108
+ "search": "For the list of supported timeZones, run Intl.supportedValuesOf('timeZone') in the console\n",
934
109
  "files": {
935
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
936
- "title": "Hugging Face infer",
110
+ "core/components/functional/date/date.md": {
111
+ "title": "Date",
937
112
  "hashes": {
938
- "hugging-face-infer": {
113
+ "time_zone": {
939
114
  "count": 1,
940
- "title": "",
941
- "type": "page"
115
+ "title": "Time_zone",
116
+ "type": "paragraph"
942
117
  }
943
118
  }
944
119
  }
945
120
  }
946
121
  },
947
122
  {
948
- "search": "sonic-hugging-face-infer: 1 input → Hugging Face model → 1 output (readonly), computed in the browser with Transformers.js. Data never leaves the device.\n",
123
+ "search": "Deprecated\n",
949
124
  "files": {
950
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
951
- "title": "Hugging Face infer",
125
+ "core/components/functional/date/date.md": {
126
+ "title": "Date",
952
127
  "hashes": {
953
- "hugging-face-infer": {
128
+ "renderif": {
954
129
  "count": 1,
955
- "title": "",
130
+ "title": ".renderIf",
131
+ "type": "paragraph"
132
+ }
133
+ }
134
+ },
135
+ "core/components/functional/fetch/fetch.md": {
136
+ "title": "Fetch",
137
+ "hashes": {
138
+ "headersdataprovider": {
139
+ "count": 1,
140
+ "title": "HeadersDataProvider",
956
141
  "type": "paragraph"
957
142
  }
958
143
  }
@@ -960,29 +145,29 @@
960
145
  }
961
146
  },
962
147
  {
963
- "search": "The name names the engine: other inference paths (server, browser AI, …) will get their own sonic-<engine>-infer, with the same attributes, states, and typed outputs.\n",
148
+ "search": "Fetch",
964
149
  "files": {
965
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
966
- "title": "Hugging Face infer",
150
+ "core/components/functional/fetch/fetch.md": {
151
+ "title": "Fetch",
967
152
  "hashes": {
968
- "hugging-face-infer": {
153
+ "fetch": {
969
154
  "count": 1,
970
155
  "title": "",
971
- "type": "paragraph"
156
+ "type": "page"
972
157
  }
973
158
  }
974
159
  }
975
160
  }
976
161
  },
977
162
  {
978
- "search": "Each demo stays idle until you click Try. The model downloads only after consent.\n",
163
+ "search": "New apps: prefer @get for a typed GET on a component, or List / Queue with fetch for collections. Use Local API demos (serviceURL="/docs-mock-api") to try examples offline.\n",
979
164
  "files": {
980
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
981
- "title": "Hugging Face infer",
165
+ "core/components/functional/fetch/fetch.md": {
166
+ "title": "Fetch",
982
167
  "hashes": {
983
- "examples": {
168
+ "fetch": {
984
169
  "count": 1,
985
- "title": "Examples",
170
+ "title": "",
986
171
  "type": "paragraph"
987
172
  }
988
173
  }
@@ -990,14 +175,14 @@
990
175
  }
991
176
  },
992
177
  {
993
- "search": "Image + depth / shader chains: Visual stack.\n",
178
+ "search": "The sonic-fetch component requests and stores API data. It extends the Fetcher and Subscriber mixins.\n",
994
179
  "files": {
995
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
996
- "title": "Hugging Face infer",
180
+ "core/components/functional/fetch/fetch.md": {
181
+ "title": "Fetch",
997
182
  "hashes": {
998
- "text--zero-shot-classification": {
183
+ "fetch": {
999
184
  "count": 1,
1000
- "title": "Text — `zero-shot-classification`",
185
+ "title": "",
1001
186
  "type": "paragraph"
1002
187
  }
1003
188
  }
@@ -1005,14 +190,14 @@
1005
190
  }
1006
191
  },
1007
192
  {
1008
- "search": "Same component, different allowlist alias. Common patterns:\n",
193
+ "search": "In order to work properly the sonic-fetch component needs at least the following attributes. \n",
1009
194
  "files": {
1010
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1011
- "title": "Hugging Face infer",
195
+ "core/components/functional/fetch/fetch.md": {
196
+ "title": "Fetch",
1012
197
  "hashes": {
1013
- "other-tasks-markup": {
198
+ "basic-usage": {
1014
199
  "count": 1,
1015
- "title": "Other tasks (markup)",
200
+ "title": "Basic usage",
1016
201
  "type": "paragraph"
1017
202
  }
1018
203
  }
@@ -1020,14 +205,14 @@
1020
205
  }
1021
206
  },
1022
207
  {
1023
- "search": "<!-- Translation FR → EN -->\n<sonic-hugging-face-infer\n model="fr-en"\n inputProvider="event.edito.description"\n outputProvider="event.edito.descriptionEn"\n load="consent"\n trigger="demand"\n triggerProvider="translateClick"\n></sonic-hugging-face-infer>\n",
208
+ "search": "If no endPoint is specified it will be filled by the dataProvider ID instead \n",
1024
209
  "files": {
1025
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1026
- "title": "Hugging Face infer",
210
+ "core/components/functional/fetch/fetch.md": {
211
+ "title": "Fetch",
1027
212
  "hashes": {
1028
- "other-tasks-markup": {
213
+ "dataprovider-as-an-endpoint": {
1029
214
  "count": 1,
1030
- "title": "Other tasks (markup)",
215
+ "title": "DataProvider as an endPoint",
1031
216
  "type": "paragraph"
1032
217
  }
1033
218
  }
@@ -1035,14 +220,14 @@
1035
220
  }
1036
221
  },
1037
222
  {
1038
- "search": "<!-- Dictation (Whisper) -->\n<sonic-hugging-face-infer\n model="whisper-tiny"\n inputProvider="voice.clipUrl"\n outputProvider="voice.transcript"\n load="consent"\n></sonic-hugging-face-infer>\n \n\n",
223
+ "search": "When the key attribute is present, only a sub-part of the data received is injected into the dataProvider.\nWe can use the dot syntax to target what we want to keep.\n",
1039
224
  "files": {
1040
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1041
- "title": "Hugging Face infer",
225
+ "core/components/functional/fetch/fetch.md": {
226
+ "title": "Fetch",
1042
227
  "hashes": {
1043
- "other-tasks-markup": {
228
+ "key": {
1044
229
  "count": 1,
1045
- "title": "Other tasks (markup)",
230
+ "title": "Key",
1046
231
  "type": "paragraph"
1047
232
  }
1048
233
  }
@@ -1050,14 +235,14 @@
1050
235
  }
1051
236
  },
1052
237
  {
1053
- "search": "Load concorde-hugging-face-infer.bundle.js after the core, then call ConcordeHF.configureHuggingFace(…) once. Details: CDN addons.\n",
238
+ "search": "For example if the data is {my:{data:{a:1,b:2}}} and the key is key="my.data", the data available in the dataProvider will be {a:1 , b:2}\n",
1054
239
  "files": {
1055
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1056
- "title": "Hugging Face infer",
240
+ "core/components/functional/fetch/fetch.md": {
241
+ "title": "Fetch",
1057
242
  "hashes": {
1058
- "cdn-script--bootstrap": {
243
+ "key": {
1059
244
  "count": 1,
1060
- "title": "CDN (script + bootstrap)",
245
+ "title": "Key",
1061
246
  "type": "paragraph"
1062
247
  }
1063
248
  }
@@ -1065,14 +250,14 @@
1065
250
  }
1066
251
  },
1067
252
  {
1068
- "search": "The script checks that ONNX Runtime binaries are exactly those expected by Transformers.js. Serve the folder with Cache-Control: public, max-age=31536000, immutable: the path includes the version and never changes. To upgrade: new folder, regression tests, then change version / url in config. The previous version can stay served.\n",
253
+ "search": "if the mime type of the content returned by the service begins with text/, then the dataProvider has a key named "text" which contains the text returned by the service.\n",
1069
254
  "files": {
1070
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1071
- "title": "Hugging Face infer",
255
+ "core/components/functional/fetch/fetch.md": {
256
+ "title": "Fetch",
1072
257
  "hashes": {
1073
- "1-pin-and-host-the-runtime": {
258
+ "text-mode": {
1074
259
  "count": 1,
1075
- "title": "1. Pin and host the runtime",
260
+ "title": "Text mode",
1076
261
  "type": "paragraph"
1077
262
  }
1078
263
  }
@@ -1080,14 +265,14 @@
1080
265
  }
1081
266
  },
1082
267
  {
1083
- "search": "The script prints size (sizeBytes) and license for you to verify.\n",
268
+ "search": "The noLoader attribute disables display of the default loader\n",
1084
269
  "files": {
1085
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1086
- "title": "Hugging Face infer",
270
+ "core/components/functional/fetch/fetch.md": {
271
+ "title": "Fetch",
1087
272
  "hashes": {
1088
- "2-host-models-pinned-revision": {
273
+ "noloader": {
1089
274
  "count": 1,
1090
- "title": "2. Host models (pinned revision)",
275
+ "title": "NoLoader",
1091
276
  "type": "paragraph"
1092
277
  }
1093
278
  }
@@ -1095,29 +280,29 @@
1095
280
  }
1096
281
  },
1097
282
  {
1098
- "search": "Three ways to supply the runtime (runtime.source):\n",
283
+ "search": "if",
1099
284
  "files": {
1100
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1101
- "title": "Hugging Face infer",
285
+ "core/components/functional/if/if.md": {
286
+ "title": "if",
1102
287
  "hashes": {
1103
- "3-configure-once-at-startup": {
288
+ "if": {
1104
289
  "count": 1,
1105
- "title": "3. Configure (once, at startup)",
1106
- "type": "paragraph"
290
+ "title": "",
291
+ "type": "page"
1107
292
  }
1108
293
  }
1109
294
  }
1110
295
  }
1111
296
  },
1112
297
  {
1113
- "search": "<!-- Catalog: runs when the browser is idle, cached in IndexedDB -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="events"\n outputProvider="search.vectors"\n options='{"text":"label + edito.sub_title + categories.title"}'\n load="idle"\n persistResults\n></sonic-hugging-face-infer>\n",
298
+ "search": "The sonic-if component shows its slot when .condition is true. In Lit, bind .condition from store-driven state (@subscribe on a formDataProvider field) — live preview and TypeScript source are the same file (docs-lit-demo):\n",
1114
299
  "files": {
1115
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1116
- "title": "Hugging Face infer",
300
+ "core/components/functional/if/if.md": {
301
+ "title": "if",
1117
302
  "hashes": {
1118
- "markup": {
303
+ "if": {
1119
304
  "count": 1,
1120
- "title": "Markup",
305
+ "title": "",
1121
306
  "type": "paragraph"
1122
307
  }
1123
308
  }
@@ -1125,224 +310,264 @@
1125
310
  }
1126
311
  },
1127
312
  {
1128
- "search": "<!-- Query: on each keystroke (300 ms debounce) -->\n<sonic-hugging-face-infer\n model="multilingual-mini"\n inputProvider="searchForm.q"\n outputProvider="search.query"\n statusProvider="searchAiStatus"\n debounce="300"\n></sonic-hugging-face-infer>\n \n\n",
313
+ "search": "\n",
1129
314
  "files": {
1130
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1131
- "title": "Hugging Face infer",
315
+ "core/components/functional/if/if.md": {
316
+ "title": "if",
1132
317
  "hashes": {
1133
- "markup": {
318
+ "if": {
1134
319
  "count": 1,
1135
- "title": "Markup",
320
+ "title": "",
1136
321
  "type": "paragraph"
1137
322
  }
1138
323
  }
1139
- }
1140
- }
1141
- },
1142
- {
1143
- "search": "Ranking combines several inputs (events, vectors, query). With the TypeScript API:\n",
1144
- "files": {
1145
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1146
- "title": "Hugging Face infer",
324
+ },
325
+ "core/components/functional/jsonata/jsonata.md": {
326
+ "title": "Jsonata",
1147
327
  "hashes": {
1148
- "markup": {
328
+ "groupby--top-n": {
1149
329
  "count": 1,
1150
- "title": "Markup",
330
+ "title": "Groupby + top N",
331
+ "type": "paragraph"
332
+ },
333
+ "totaux-somme--taxe": {
334
+ "count": 1,
335
+ "title": "Totaux (somme + taxe)",
1151
336
  "type": "paragraph"
1152
337
  }
1153
338
  }
1154
- }
1155
- }
1156
- },
1157
- {
1158
- "search": "On the JSONata side, $cosine(a, b) and $rankBySimilarity(items, vectors, query, topN?, minScore?) are available in sonic-jsonata (one input: group data under the same DataProvider).\n",
1159
- "files": {
1160
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1161
- "title": "Hugging Face infer",
339
+ },
340
+ "core/components/functional/list/list.md": {
341
+ "title": "List",
1162
342
  "hashes": {
1163
- "markup": {
343
+ "row-renderer-items--recommended": {
1164
344
  "count": 1,
1165
- "title": "Markup",
345
+ "title": "Row renderer (`items`) — recommended",
346
+ "type": "paragraph"
347
+ },
348
+ "alternating-row-layouts": {
349
+ "count": 2,
350
+ "title": "Alternating row layouts",
351
+ "type": "paragraph"
352
+ },
353
+ "separator-and-empty-list": {
354
+ "count": 1,
355
+ "title": "Separator and empty list",
356
+ "type": "paragraph"
357
+ },
358
+ "fetch--extractvalues": {
359
+ "count": 1,
360
+ "title": "Fetch + `extractValues`",
1166
361
  "type": "paragraph"
1167
362
  }
1168
363
  }
1169
- }
1170
- }
1171
- },
1172
- {
1173
- "search": "Methods: run(), loadModel(), accept(), decline().\n",
1174
- "files": {
1175
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1176
- "title": "Hugging Face infer",
364
+ },
365
+ "core/components/functional/queue/queue.md": {
366
+ "title": "Queue",
1177
367
  "hashes": {
1178
- "attributes": {
368
+ "lazy-load--offset-and-limit": {
1179
369
  "count": 1,
1180
- "title": "Attributes",
370
+ "title": "Lazy load — `$offset` and `$limit`",
371
+ "type": "paragraph"
372
+ },
373
+ "simple-batch-no-lazy-scroll": {
374
+ "count": 1,
375
+ "title": "Simple batch (no lazy scroll)",
1181
376
  "type": "paragraph"
1182
377
  }
1183
378
  }
1184
- }
1185
- }
1186
- },
1187
- {
1188
- "search": "Guards, regardless of policy: switch to consent on data-saver, slow network (2G), or when the model exceeds consentAboveMB. A cached model loads without prompting. Choice is stored per alias and revision (hf.revokeConsent(alias) to clear). Nothing downloads while the input is empty.\n",
1189
- "files": {
1190
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1191
- "title": "Hugging Face infer",
379
+ },
380
+ "core/components/functional/router/router.md": {
381
+ "title": "Router",
1192
382
  "hashes": {
1193
- "model-loading": {
383
+ "static-routes-no-parameters": {
384
+ "count": 1,
385
+ "title": "Static routes (no parameters)",
386
+ "type": "paragraph"
387
+ },
388
+ "url-pattern-name": {
1194
389
  "count": 1,
1195
- "title": "Model loading",
390
+ "title": "Url-pattern (`:name`)",
1196
391
  "type": "paragraph"
1197
392
  }
1198
393
  }
1199
- }
1200
- }
1201
- },
1202
- {
1203
- "search": "Consent without JavaScript (SDUI):\n",
1204
- "files": {
1205
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1206
- "title": "Hugging Face infer",
394
+ },
395
+ "core/components/functional/submit/submit.md": {
396
+ "title": "Submit",
1207
397
  "hashes": {
1208
- "model-loading": {
398
+ "form-and-result-handling": {
399
+ "count": 1,
400
+ "title": "Form and result handling",
401
+ "type": "paragraph"
402
+ },
403
+ "native-html-form": {
404
+ "count": 1,
405
+ "title": "Native HTML form",
406
+ "type": "paragraph"
407
+ },
408
+ "sendasformdata": {
409
+ "count": 1,
410
+ "title": "sendAsFormData",
411
+ "type": "paragraph"
412
+ },
413
+ "submit-result-key": {
414
+ "count": 1,
415
+ "title": "submit-result-key",
416
+ "type": "paragraph"
417
+ },
418
+ "cleareddataonsuccess": {
419
+ "count": 1,
420
+ "title": "clearedDataOnSuccess",
421
+ "type": "paragraph"
422
+ },
423
+ "custom-submit-event": {
424
+ "count": 1,
425
+ "title": "Custom `submit` event",
426
+ "type": "paragraph"
427
+ },
428
+ "endpoint-vs-dataprovider": {
429
+ "count": 1,
430
+ "title": "endPoint vs dataProvider",
431
+ "type": "paragraph"
432
+ },
433
+ "methodget": {
1209
434
  "count": 1,
1210
- "title": "Model loading",
435
+ "title": "method=\"get\"",
1211
436
  "type": "paragraph"
1212
437
  }
1213
438
  }
1214
- }
1215
- }
1216
- },
1217
- {
1218
- "search": "{outputProvider root}/_state_ → { status } (loading | ready | error | empty), like sonic-jsonata, for sonic-states.\n",
1219
- "files": {
1220
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1221
- "title": "Hugging Face infer",
439
+ },
440
+ "core/components/ui/form/checkbox/checkbox.md": {
441
+ "title": "Checkbox",
1222
442
  "hashes": {
1223
- "states": {
443
+ "example-of-use--blacklist--queue": {
1224
444
  "count": 1,
1225
- "title": "States",
445
+ "title": "Example of use — blacklist + queue",
1226
446
  "type": "paragraph"
1227
447
  }
1228
448
  }
1229
- }
1230
- }
1231
- },
1232
- {
1233
- "search": "Detailed status on statusProvider:\n",
1234
- "files": {
1235
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1236
- "title": "Hugging Face infer",
449
+ },
450
+ "core/components/ui/form/input/input.md": {
451
+ "title": "Input",
1237
452
  "hashes": {
1238
- "states": {
453
+ "list": {
1239
454
  "count": 1,
1240
- "title": "States",
455
+ "title": "List",
456
+ "type": "paragraph"
457
+ },
458
+ "example-of-use--search--queue": {
459
+ "count": 1,
460
+ "title": "Example of use — search + queue",
1241
461
  "type": "paragraph"
1242
462
  }
1243
463
  }
1244
- }
1245
- }
1246
- },
1247
- {
1248
- "search": "ONNX Runtime is a WASM binary in every case (≈ 27 MB, ≈ 6.6 MB compressed for 1.31), including WebGPU: it downloads with the first model from your CDN, then is cached. It is not part of the component.\n",
1249
- "files": {
1250
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1251
- "title": "Hugging Face infer",
464
+ },
465
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
466
+ "title": "Input-autocomplete",
1252
467
  "hashes": {
1253
- "webgpu-and-wasm": {
468
+ "simple": {
469
+ "count": 1,
470
+ "title": "Simple",
471
+ "type": "paragraph"
472
+ },
473
+ "valeur--paramètre-de-recherche": {
474
+ "count": 1,
475
+ "title": "Valeur ≠ paramètre de recherche",
476
+ "type": "paragraph"
477
+ },
478
+ "mode-select": {
479
+ "count": 1,
480
+ "title": "Mode select",
481
+ "type": "paragraph"
482
+ },
483
+ "navigation-clavier": {
1254
484
  "count": 1,
1255
- "title": "WebGPU and WASM",
485
+ "title": "Navigation clavier",
1256
486
  "type": "paragraph"
1257
487
  }
1258
488
  }
1259
- }
1260
- }
1261
- },
1262
- {
1263
- "search": "What you control: CPU (WASM) execution when WebGPU is missing. Allowed per model (devices) and only under allowWasmUpToMB. Beyond that → unsupported; the page keeps working without the model.\n",
1264
- "files": {
1265
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1266
- "title": "Hugging Face infer",
489
+ },
490
+ "core/components/ui/form/radio/radio.md": {
491
+ "title": "Radio",
1267
492
  "hashes": {
1268
- "webgpu-and-wasm": {
493
+ "example-of-use--blacklist--queue": {
1269
494
  "count": 1,
1270
- "title": "WebGPU and WASM",
495
+ "title": "Example of use — blacklist + queue",
1271
496
  "type": "paragraph"
1272
497
  }
1273
498
  }
1274
- }
1275
- }
1276
- },
1277
- {
1278
- "search": "configureHuggingFace returns an API typed by the allowlist:\n",
1279
- "files": {
1280
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1281
- "title": "Hugging Face infer",
499
+ },
500
+ "core/components/ui/form/select/select.md": {
501
+ "title": "Select",
1282
502
  "hashes": {
1283
- "typescript": {
503
+ "example-of-use--language-filter--queue": {
1284
504
  "count": 1,
1285
- "title": "TypeScript",
505
+ "title": "Example of use — language filter + queue",
1286
506
  "type": "paragraph"
1287
507
  }
1288
508
  }
1289
- }
1290
- }
1291
- },
1292
- {
1293
- "search": "Cleanup: hf.clearModel(alias), hf.clearAll() (models, WASM, and results).\n",
1294
- "files": {
1295
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1296
- "title": "Hugging Face infer",
509
+ },
510
+ "core/components/ui/form/switch/switch.md": {
511
+ "title": "Switch",
1297
512
  "hashes": {
1298
- "typescript": {
513
+ "example-of-use--blacklist--queue": {
1299
514
  "count": 1,
1300
- "title": "TypeScript",
515
+ "title": "Example of use — blacklist + queue",
1301
516
  "type": "paragraph"
1302
517
  }
1303
518
  }
1304
- }
1305
- }
1306
- },
1307
- {
1308
- "search": "Supported tasks: feature-extraction, text-classification, zero-shot-classification, translation, token-classification, fill-mask, question-answering, image-classification, zero-shot-image-classification, object-detection, zero-shot-object-detection, image-feature-extraction, image-segmentation, depth-estimation, background-removal, image-to-text, audio-classification, automatic-speech-recognition. No free-form LLM (text-generation, etc.).\n",
1309
- "files": {
1310
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1311
- "title": "Hugging Face infer",
519
+ },
520
+ "core/components/ui/icon/icon.md": {
521
+ "title": "Icon",
1312
522
  "hashes": {
1313
- "tasks-and-light-models": {
523
+ "custom": {
1314
524
  "count": 1,
1315
- "title": "Tasks and light models",
525
+ "title": "Custom",
1316
526
  "type": "paragraph"
1317
527
  }
1318
528
  }
1319
- }
1320
- }
1321
- },
1322
- {
1323
- "search": "Indicative sizes (quantized); verify with hf-vendor.mjs before allowlisting, including license:\n",
1324
- "files": {
1325
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1326
- "title": "Hugging Face infer",
529
+ },
530
+ "core/components/ui/loader/loader.md": {
531
+ "title": "Loader",
1327
532
  "hashes": {
1328
- "tasks-and-light-models": {
533
+ "fixed-mode": {
1329
534
  "count": 1,
1330
- "title": "Tasks and light models",
535
+ "title": "Fixed mode",
1331
536
  "type": "paragraph"
1332
537
  }
1333
538
  }
1334
- }
1335
- }
1336
- },
1337
- {
1338
- "search": "Produced images (cutout, depth, segmentation) come out as { width, height, channels, blob, url } (PNG). url is an ObjectURL attached on the main thread at publish time — chainable into sonic-shader / sonic-jsonata ($mediaUrl) without app glue. Images are not stored in IndexedDB.\n",
1339
- "files": {
1340
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1341
- "title": "Hugging Face infer",
539
+ },
540
+ "docs/_misc/api-configuration.md": {
541
+ "title": "API configuration",
1342
542
  "hashes": {
1343
- "tasks-and-light-models": {
543
+ "bearer-token-static": {
1344
544
  "count": 1,
1345
- "title": "Tasks and light models",
545
+ "title": "Bearer token (static)",
546
+ "type": "paragraph"
547
+ },
548
+ "tokenprovider--basic-auth": {
549
+ "count": 1,
550
+ "title": "tokenProvider + Basic auth",
551
+ "type": "paragraph"
552
+ },
553
+ "http-498--stale-token-refresh": {
554
+ "count": 1,
555
+ "title": "HTTP 498 — stale token refresh",
556
+ "type": "paragraph"
557
+ },
558
+ "eventsapitoken": {
559
+ "count": 1,
560
+ "title": "eventsApiToken",
561
+ "type": "paragraph"
562
+ },
563
+ "wording-api": {
564
+ "count": 1,
565
+ "title": "Wording API",
566
+ "type": "paragraph"
567
+ },
568
+ "scoped-attributes-html--sonic-scope": {
569
+ "count": 1,
570
+ "title": "Scoped attributes (HTML / sonic-scope)",
1346
571
  "type": "paragraph"
1347
572
  }
1348
573
  }
@@ -1350,14 +575,14 @@
1350
575
  }
1351
576
  },
1352
577
  {
1353
- "search": "End-to-end (depth + shader / Harris) : Visual stack.\n",
578
+ "search": "Plain HTML without Lit: HTML integration.\n",
1354
579
  "files": {
1355
- "core/components/functional/infer/hugging-face/hugging-face-infer.md": {
1356
- "title": "Hugging Face infer",
580
+ "core/components/functional/if/if.md": {
581
+ "title": "if",
1357
582
  "hashes": {
1358
- "tasks-and-light-models": {
583
+ "if": {
1359
584
  "count": 1,
1360
- "title": "Tasks and light models",
585
+ "title": "",
1361
586
  "type": "paragraph"
1362
587
  }
1363
588
  }
@@ -1455,7 +680,7 @@
1455
680
  }
1456
681
  },
1457
682
  {
1458
- "search": "$ucFirst · $currency · $percent · $date · $toChart(items, labelKey, valueKey, datasetLabel?) · $cosine · $rankBySimilarity · $mediaUrl(x) (string | {url} | {blobUrl})\n",
683
+ "search": "$ucFirst · $currency · $percent · $date · $toChart(items, labelKey, valueKey, datasetLabel?)\n",
1459
684
  "files": {
1460
685
  "core/components/functional/jsonata/jsonata.md": {
1461
686
  "title": "Jsonata",
@@ -1470,7 +695,7 @@
1470
695
  }
1471
696
  },
1472
697
  {
1473
- "search": "Pas de DOM, pas de réseau, pas d’eval. $mediaUrl ne crée pas d’ObjectURL (les producteurs HF / extract publient déjà url).\n",
698
+ "search": "Pas de DOM, pas de réseau, pas d’eval.\n",
1474
699
  "files": {
1475
700
  "core/components/functional/jsonata/jsonata.md": {
1476
701
  "title": "Jsonata",
@@ -1499,21 +724,6 @@
1499
724
  }
1500
725
  }
1501
726
  },
1502
- {
1503
- "search": "Visual stack (3d → HF → jsonata → shader): Visual stack.\n",
1504
- "files": {
1505
- "core/components/functional/jsonata/jsonata.md": {
1506
- "title": "Jsonata",
1507
- "hashes": {
1508
- "markup": {
1509
- "count": 1,
1510
- "title": "Markup",
1511
- "type": "paragraph"
1512
- }
1513
- }
1514
- }
1515
- }
1516
- },
1517
727
  {
1518
728
  "search": "{output}/_state_ → { status, error? } (loading | ready | error | empty). Brancher avec sonic-states.\n",
1519
729
  "files": {
@@ -2602,187 +1812,7 @@
2602
1812
  "hashes": {
2603
1813
  "sduikey": {
2604
1814
  "count": 1,
2605
- "title": "sduiKey",
2606
- "type": "paragraph"
2607
- }
2608
- }
2609
- }
2610
- }
2611
- },
2612
- {
2613
- "search": "This is an HTML attribute to set on the component if needed. In this case, the component will automatically create a sonic-toast-message-subscriber component. The data found in props[messageKey] will be treated as the data expected by the sonic-toast-message-subscriber. So, by respecting the format of data supported by this component, you will be able to show multiple toasts in the result of a request.\n",
2614
- "files": {
2615
- "core/components/functional/sdui/sdui.md": {
2616
- "title": "SDUI",
2617
- "hashes": {
2618
- "messagekey": {
2619
- "count": 1,
2620
- "title": "messageKey",
2621
- "type": "paragraph"
2622
- }
2623
- }
2624
- }
2625
- }
2626
- },
2627
- {
2628
- "search": "Example of JSON with messageKey=messages:\n\n",
2629
- "files": {
2630
- "core/components/functional/sdui/sdui.md": {
2631
- "title": "SDUI",
2632
- "hashes": {
2633
- "messagekey": {
2634
- "count": 1,
2635
- "title": "messageKey",
2636
- "type": "paragraph"
2637
- }
2638
- }
2639
- }
2640
- }
2641
- },
2642
- {
2643
- "search": "This is an HTML attribute to set on the component if needed. You can set a URL pointing to a JSON describing a library with the same structure as the library in the SDUIDescriptor. The component will simply override its library with the given one.\n",
2644
- "files": {
2645
- "core/components/functional/sdui/sdui.md": {
2646
- "title": "SDUI",
2647
- "hashes": {
2648
- "library": {
2649
- "count": 1,
2650
- "title": "library",
2651
- "type": "paragraph"
2652
- }
2653
- }
2654
- }
2655
- }
2656
- },
2657
- {
2658
- "search": "Here is a little playground to let you test some simple tricks.\n",
2659
- "files": {
2660
- "core/components/functional/sdui/sdui.md": {
2661
- "title": "SDUI",
2662
- "hashes": {
2663
- "playground": {
2664
- "count": 1,
2665
- "title": "Playground",
2666
- "type": "paragraph"
2667
- }
2668
- }
2669
- }
2670
- }
2671
- },
2672
- {
2673
- "search": "Shader",
2674
- "files": {
2675
- "core/components/functional/shader/shader.md": {
2676
- "title": "Shader",
2677
- "hashes": {
2678
- "shader": {
2679
- "count": 1,
2680
- "title": "",
2681
- "type": "page"
2682
- }
2683
- }
2684
- }
2685
- }
2686
- },
2687
- {
2688
- "search": "sonic-shader — renderer WebGL2 compatible ShaderToy (pass Image + buffers A–D + Common).\n",
2689
- "files": {
2690
- "core/components/functional/shader/shader.md": {
2691
- "title": "Shader",
2692
- "hashes": {
2693
- "shader": {
2694
- "count": 1,
2695
- "title": "",
2696
- "type": "paragraph"
2697
- }
2698
- }
2699
- }
2700
- }
2701
- },
2702
- {
2703
- "search": "For WGSL / WebGPU (1 pass, same DP glue): sonic-webgpu.\n",
2704
- "files": {
2705
- "core/components/functional/shader/shader.md": {
2706
- "title": "Shader",
2707
- "hashes": {
2708
- "shader": {
2709
- "count": 1,
2710
- "title": "",
2711
- "type": "paragraph"
2712
- }
2713
- }
2714
- }
2715
- }
2716
- },
2717
- {
2718
- "search": "CDN (after the core): concorde-shader.bundle.js — see CDN addons.\n",
2719
- "files": {
2720
- "core/components/functional/shader/shader.md": {
2721
- "title": "Shader",
2722
- "hashes": {
2723
- "shader": {
2724
- "count": 1,
2725
- "title": "",
2726
- "type": "paragraph"
2727
- }
2728
- }
2729
- }
2730
- }
2731
- },
2732
- {
2733
- "search": "Uniforms supportés : iResolution, iTime, iTimeDelta, iFrame, iFrameRate, iMouse, iDate, iChannel0–3, iChannelResolution, iChannelTime, iSampleRate, uParam0–3.\n",
2734
- "files": {
2735
- "core/components/functional/shader/shader.md": {
2736
- "title": "Shader",
2737
- "hashes": {
2738
- "shader": {
2739
- "count": 1,
2740
- "title": "",
2741
- "type": "paragraph"
2742
- }
2743
- }
2744
- }
2745
- }
2746
- },
2747
- {
2748
- "search": "Textures channel0–3 : images, vidéos (.webm / .mp4 / …), ou éléments page via #id (<img>, <video>, <canvas>, sonic-3d / sonic-webgpu / sonic-shader).\n",
2749
- "files": {
2750
- "core/components/functional/shader/shader.md": {
2751
- "title": "Shader",
2752
- "hashes": {
2753
- "shader": {
2754
- "count": 1,
2755
- "title": "",
2756
- "type": "paragraph"
2757
- }
2758
- }
2759
- }
2760
- }
2761
- },
2762
- {
2763
- "search": "Buffer A simule une height-map d’ondes (ripple) ; Image réfracte la photo via le gradient — sans teinte. Glisser la souris pour faire des vagues.\n",
2764
- "files": {
2765
- "core/components/functional/shader/shader.md": {
2766
- "title": "Shader",
2767
- "hashes": {
2768
- "multipass-sur-une-photo": {
2769
- "count": 1,
2770
- "title": "Multipass sur une photo",
2771
- "type": "paragraph"
2772
- }
2773
- }
2774
- }
2775
- }
2776
- },
2777
- {
2778
- "search": "Photo + depth parallax (HF): Visual stack.\n",
2779
- "files": {
2780
- "core/components/functional/shader/shader.md": {
2781
- "title": "Shader",
2782
- "hashes": {
2783
- "multipass-sur-une-photo": {
2784
- "count": 1,
2785
- "title": "Multipass sur une photo",
1815
+ "title": "sduiKey",
2786
1816
  "type": "paragraph"
2787
1817
  }
2788
1818
  }
@@ -2790,14 +1820,14 @@
2790
1820
  }
2791
1821
  },
2792
1822
  {
2793
- "search": "Live 3D → shader (no JPEG): Visual stack.\n",
1823
+ "search": "This is an HTML attribute to set on the component if needed. In this case, the component will automatically create a sonic-toast-message-subscriber component. The data found in props[messageKey] will be treated as the data expected by the sonic-toast-message-subscriber. So, by respecting the format of data supported by this component, you will be able to show multiple toasts in the result of a request.\n",
2794
1824
  "files": {
2795
- "core/components/functional/shader/shader.md": {
2796
- "title": "Shader",
1825
+ "core/components/functional/sdui/sdui.md": {
1826
+ "title": "SDUI",
2797
1827
  "hashes": {
2798
- "multipass-sur-une-photo": {
1828
+ "messagekey": {
2799
1829
  "count": 1,
2800
- "title": "Multipass sur une photo",
1830
+ "title": "messageKey",
2801
1831
  "type": "paragraph"
2802
1832
  }
2803
1833
  }
@@ -2805,14 +1835,14 @@
2805
1835
  }
2806
1836
  },
2807
1837
  {
2808
- "search": "Règle : brancher des passes dans un sonic-shader (buffers A–D → Image), pas deux composants via dataProvider — sauf pont live #élément (copie canvas chaque frame).\n",
1838
+ "search": "Example of JSON with messageKey=messages:\n\n",
2809
1839
  "files": {
2810
- "core/components/functional/shader/shader.md": {
2811
- "title": "Shader",
1840
+ "core/components/functional/sdui/sdui.md": {
1841
+ "title": "SDUI",
2812
1842
  "hashes": {
2813
- "chaînage-deffets-officiel": {
1843
+ "messagekey": {
2814
1844
  "count": 1,
2815
- "title": "Chaînage d’effets (officiel)",
1845
+ "title": "messageKey",
2816
1846
  "type": "paragraph"
2817
1847
  }
2818
1848
  }
@@ -2820,14 +1850,14 @@
2820
1850
  }
2821
1851
  },
2822
1852
  {
2823
- "search": "Les passes intermédiaires sont déjà offscreen (FBO). Pas besoin d’un second sonic-shader invisible pour du multipass interne.\n",
1853
+ "search": "This is an HTML attribute to set on the component if needed. You can set a URL pointing to a JSON describing a library with the same structure as the library in the SDUIDescriptor. The component will simply override its library with the given one.\n",
2824
1854
  "files": {
2825
- "core/components/functional/shader/shader.md": {
2826
- "title": "Shader",
1855
+ "core/components/functional/sdui/sdui.md": {
1856
+ "title": "SDUI",
2827
1857
  "hashes": {
2828
- "chaînage-deffets-officiel": {
1858
+ "library": {
2829
1859
  "count": 1,
2830
- "title": "Chaînage d’effets (officiel)",
1860
+ "title": "library",
2831
1861
  "type": "paragraph"
2832
1862
  }
2833
1863
  }
@@ -2835,14 +1865,14 @@
2835
1865
  }
2836
1866
  },
2837
1867
  {
2838
- "search": "Deux instances séparées ne partagent pas leurs textures WebGL (contextes distincts). Le pont live #id copie le canvas source ; frame-out JPEG reste pour export / freeze.\nDémo pédagogique : Buffer A = Sobel → Image = overlay + param0.\n",
1868
+ "search": "Here is a little playground to let you test some simple tricks.\n",
2839
1869
  "files": {
2840
- "core/components/functional/shader/shader.md": {
2841
- "title": "Shader",
1870
+ "core/components/functional/sdui/sdui.md": {
1871
+ "title": "SDUI",
2842
1872
  "hashes": {
2843
- "chaînage-deffets-officiel": {
1873
+ "playground": {
2844
1874
  "count": 1,
2845
- "title": "Chaînage d’effets (officiel)",
1875
+ "title": "Playground",
2846
1876
  "type": "paragraph"
2847
1877
  }
2848
1878
  }
@@ -2850,29 +1880,29 @@
2850
1880
  }
2851
1881
  },
2852
1882
  {
2853
- "search": "Exemple de câblage :\n",
1883
+ "search": "States",
2854
1884
  "files": {
2855
- "core/components/functional/shader/shader.md": {
2856
- "title": "Shader",
1885
+ "core/components/functional/states/states.md": {
1886
+ "title": "States",
2857
1887
  "hashes": {
2858
- "chaînage-deffets-officiel": {
1888
+ "states": {
2859
1889
  "count": 1,
2860
- "title": "Chaînage d’effets (officiel)",
2861
- "type": "paragraph"
1890
+ "title": "",
1891
+ "type": "page"
2862
1892
  }
2863
1893
  }
2864
1894
  }
2865
1895
  }
2866
1896
  },
2867
1897
  {
2868
- "search": "Au survol, le composant anime un uParamN de 0 → 1 (et l’inverse au leave), avec easing hover-speed. Le shader lit ce param pour mixer l’effet on/off (zoom, aberration, ripple…). play-on-hover n’anime que pendant le hover / la transition.\n",
1898
+ "search": "When using capturing groups () the stored values are accessible via the dataProviderExpressione.g., data-value="#couleur_(\\d+)" => dataProviderExpression="api/unknown/$1"\n",
2869
1899
  "files": {
2870
- "core/components/functional/shader/shader.md": {
2871
- "title": "Shader",
1900
+ "core/components/functional/states/states.md": {
1901
+ "title": "States",
2872
1902
  "hashes": {
2873
- "rollover--roll-out-hover-param": {
1903
+ "regexp": {
2874
1904
  "count": 1,
2875
- "title": "Rollover / roll-out (`hover-param`)",
1905
+ "title": "Regexp",
2876
1906
  "type": "paragraph"
2877
1907
  }
2878
1908
  }
@@ -2880,14 +1910,14 @@
2880
1910
  }
2881
1911
  },
2882
1912
  {
2883
- "search": "Type : ShaderHoverParam = 0 | 1 | 2 | 3 | "param0"…"param3" | "".\n",
1913
+ "search": "Same as RegExp but using url patternse.g., data-value="#couleur_:id" => dataProviderExpression="api/unknown/:id"\n",
2884
1914
  "files": {
2885
- "core/components/functional/shader/shader.md": {
2886
- "title": "Shader",
1915
+ "core/components/functional/states/states.md": {
1916
+ "title": "States",
2887
1917
  "hashes": {
2888
- "rollover--roll-out-hover-param": {
1918
+ "url-pattern": {
2889
1919
  "count": 1,
2890
- "title": "Rollover / roll-out (`hover-param`)",
1920
+ "title": "Url-pattern",
2891
1921
  "type": "paragraph"
2892
1922
  }
2893
1923
  }
@@ -2895,29 +1925,29 @@
2895
1925
  }
2896
1926
  },
2897
1927
  {
2898
- "search": "dataProvider est bidirectionnel : param0… en entrée ; en sortie mouseX / mouseY / hovering / frame (+ param0… si out-data-provider est séparé, ou le slot hover-param seul si le DP est partagé avec le formulaire). Avec sample, lit la couleur sous le curseur → sampleR/G/B/A + sampleLuma (SonicShaderOutput). Event out (payload complet, y compris les params). Optionnel : out-data-provider pour séparer l’écriture.\n",
1928
+ "search": "Submit",
2899
1929
  "files": {
2900
- "core/components/functional/shader/shader.md": {
2901
- "title": "Shader",
1930
+ "core/components/functional/submit/submit.md": {
1931
+ "title": "Submit",
2902
1932
  "hashes": {
2903
- "sortie--sampling-sample--dataprovider": {
1933
+ "submit": {
2904
1934
  "count": 1,
2905
- "title": "Sortie / sampling (`sample` + dataProvider)",
2906
- "type": "paragraph"
1935
+ "title": "",
1936
+ "type": "page"
2907
1937
  }
2908
1938
  }
2909
1939
  }
2910
1940
  }
2911
1941
  },
2912
1942
  {
2913
- "search": "Publication paresseuse : rien n’est écrit (ni readPixels) tant qu’aucun champ méta/sample n’a de lecteur DP (@handle(frame) / @subscribe / sonic-value…) et qu’aucun listener out n’est branché. Un sonic-input name="param0" ne compte pas comme consommateur out (évite le write-back qui remettait les champs à 0). Dès qu’un vrai consommateur apparaît, les maj partent au rythme de out-interval. Avec sample, le readPixels suit le même gate.\n",
1943
+ "search": "Live demos: <docs-lit-demo> + src/docs/example/docs-submit-demos.ts. Use Local API demos (serviceURL="/docs-mock-api").\n",
2914
1944
  "files": {
2915
- "core/components/functional/shader/shader.md": {
2916
- "title": "Shader",
1945
+ "core/components/functional/submit/submit.md": {
1946
+ "title": "Submit",
2917
1947
  "hashes": {
2918
- "sortie--sampling-sample--dataprovider": {
1948
+ "submit": {
2919
1949
  "count": 1,
2920
- "title": "Sortie / sampling (`sample` + dataProvider)",
1950
+ "title": "",
2921
1951
  "type": "paragraph"
2922
1952
  }
2923
1953
  }
@@ -2925,14 +1955,14 @@
2925
1955
  }
2926
1956
  },
2927
1957
  {
2928
- "search": "Pattern typique — écoute frame + lecture massive :\n",
1958
+ "search": "sonic-submit sends the formDataProvider publisher to a REST endpoint (same configuration model as fetch: serviceURL on an ancestor, path via dataProvider or endPoint).\n",
2929
1959
  "files": {
2930
- "core/components/functional/shader/shader.md": {
2931
- "title": "Shader",
1960
+ "core/components/functional/submit/submit.md": {
1961
+ "title": "Submit",
2932
1962
  "hashes": {
2933
- "sortie--sampling-sample--dataprovider": {
1963
+ "overview": {
2934
1964
  "count": 1,
2935
- "title": "Sortie / sampling (`sample` + dataProvider)",
1965
+ "title": "Overview",
2936
1966
  "type": "paragraph"
2937
1967
  }
2938
1968
  }
@@ -2940,14 +1970,14 @@
2940
1970
  }
2941
1971
  },
2942
1972
  {
2943
- "search": "A GPU pass writes a score mask (R channel) into a buffer; extract scans it, crops patches around peaks, and publishes scalars + blobUrl for downstream use.\n",
1973
+ "search": "While a REST submit runs, the slot is wrapped with data-disabled (faded, no pointer events). With native, validation and loader still run, then the browser performs a normal form submission.\n",
2944
1974
  "files": {
2945
- "core/components/functional/shader/shader.md": {
2946
- "title": "Shader",
1975
+ "core/components/functional/submit/submit.md": {
1976
+ "title": "Submit",
2947
1977
  "hashes": {
2948
- "extraction-patches--singularities-extract": {
1978
+ "overview": {
2949
1979
  "count": 1,
2950
- "title": "Extraction patches / singularities (`extract`)",
1980
+ "title": "Overview",
2951
1981
  "type": "paragraph"
2952
1982
  }
2953
1983
  }
@@ -2955,14 +1985,14 @@
2955
1985
  }
2956
1986
  },
2957
1987
  {
2958
- "search": "detect scores: mask R channel (prefer a soft map, not hard-clipped), then renormalized to the best peak in the batch (1 = strongest). findPeaks sorts and keeps the top ones (NMS ≈ min(patch/3, 16) px).\n",
1988
+ "search": "POST to mock api/register; result publisher submit-example-result.\n",
2959
1989
  "files": {
2960
- "core/components/functional/shader/shader.md": {
2961
- "title": "Shader",
1990
+ "core/components/functional/submit/submit.md": {
1991
+ "title": "Submit",
2962
1992
  "hashes": {
2963
- "extraction-patches--singularities-extract": {
1993
+ "form-and-result-handling": {
2964
1994
  "count": 1,
2965
- "title": "Extraction patches / singularities (`extract`)",
1995
+ "title": "Form and result handling",
2966
1996
  "type": "paragraph"
2967
1997
  }
2968
1998
  }
@@ -2970,14 +2000,14 @@
2970
2000
  }
2971
2001
  },
2972
2002
  {
2973
- "search": "Lazy: no readPixels without a DP reader / extract event listener.\n",
2003
+ "search": "With native, Concorde does not call fetch. After form validation it:\n",
2974
2004
  "files": {
2975
- "core/components/functional/shader/shader.md": {
2976
- "title": "Shader",
2005
+ "core/components/functional/submit/submit.md": {
2006
+ "title": "Submit",
2977
2007
  "hashes": {
2978
- "extraction-patches--singularities-extract": {
2008
+ "native-html-form": {
2979
2009
  "count": 1,
2980
- "title": "Extraction patches / singularities (`extract`)",
2010
+ "title": "Native HTML form",
2981
2011
  "type": "paragraph"
2982
2012
  }
2983
2013
  }
@@ -2985,14 +2015,14 @@
2985
2015
  }
2986
2016
  },
2987
2017
  {
2988
- "search": "Live Harris → patches → WebGPU: Visual stack.\n",
2018
+ "search": "Use a real <form action="…" method="post"> ancestor. For SPAs, a named target (e.g. iframe) avoids leaving the doc page.\n",
2989
2019
  "files": {
2990
- "core/components/functional/shader/shader.md": {
2991
- "title": "Shader",
2020
+ "core/components/functional/submit/submit.md": {
2021
+ "title": "Submit",
2992
2022
  "hashes": {
2993
- "extraction-patches--singularities-extract": {
2023
+ "native-html-form": {
2994
2024
  "count": 1,
2995
- "title": "Extraction patches / singularities (`extract`)",
2025
+ "title": "Native HTML form",
2996
2026
  "type": "paragraph"
2997
2027
  }
2998
2028
  }
@@ -3000,14 +2030,14 @@
3000
2030
  }
3001
2031
  },
3002
2032
  {
3003
- "search": "Par défaut, les buffers A–D sont en RGBA8 (unsigned). Un tenseur Harris naïf (Ix*Ix, Iy*Iy, Ix*Iy) perd le signe de IxIy et sature les carrés → bords au lieu de coins.\n",
2033
+ "search": "Sends fields as multipart/form-data instead of application/json (response is still parsed as JSON).\n",
3004
2034
  "files": {
3005
- "core/components/functional/shader/shader.md": {
3006
- "title": "Shader",
2035
+ "core/components/functional/submit/submit.md": {
2036
+ "title": "Submit",
3007
2037
  "hashes": {
3008
- "précision-des-buffers-buffer-format": {
2038
+ "sendasformdata": {
3009
2039
  "count": 1,
3010
- "title": "Précision des buffers (`buffer-format`)",
2040
+ "title": "sendAsFormData",
3011
2041
  "type": "paragraph"
3012
2042
  }
3013
2043
  }
@@ -3015,14 +2045,14 @@
3015
2045
  }
3016
2046
  },
3017
2047
  {
3018
- "search": "Repli auto en rgba8 si EXT_color_buffer_float est absent (console.warn une fois). L’attribut reflété active-buffer-format indique le format réellement utilisé. La passe Image reste le canvas RGBA8.\n",
2048
+ "search": "When the API wraps the payload (e.g. { data: { id, token } }), set submit-result-key="data" on sonic-submit so submitResultDataProvider receives only the inner object.\n",
3019
2049
  "files": {
3020
- "core/components/functional/shader/shader.md": {
3021
- "title": "Shader",
2050
+ "core/components/functional/submit/submit.md": {
2051
+ "title": "Submit",
3022
2052
  "hashes": {
3023
- "précision-des-buffers-buffer-format": {
2053
+ "submit-result-key": {
3024
2054
  "count": 1,
3025
- "title": "Précision des buffers (`buffer-format`)",
2055
+ "title": "submit-result-key",
3026
2056
  "type": "paragraph"
3027
2057
  }
3028
2058
  }
@@ -3030,14 +2060,14 @@
3030
2060
  }
3031
2061
  },
3032
2062
  {
3033
- "search": "Un shader qui garde un état via self (feedback frame précédente) n’est plus réinitialisé quand il sort de l’écran : avec release-offscreen="auto" (défaut), seuls le RAF et les vidéos sont mis en pause ; les FBO restent. Forcer release-offscreen (attribut booléen / true) restaure l’ancien comportement (libération hors viewport même avec self).\n",
2063
+ "search": "Mock endpoint: POST /docs-mock-api/api/register/nested.\n",
3034
2064
  "files": {
3035
- "core/components/functional/shader/shader.md": {
3036
- "title": "Shader",
2065
+ "core/components/functional/submit/submit.md": {
2066
+ "title": "Submit",
3037
2067
  "hashes": {
3038
- "état-et-visibilité": {
2068
+ "submit-result-key": {
3039
2069
  "count": 1,
3040
- "title": "État et visibilité",
2070
+ "title": "submit-result-key",
3041
2071
  "type": "paragraph"
3042
2072
  }
3043
2073
  }
@@ -3045,14 +2075,14 @@
3045
2075
  }
3046
2076
  },
3047
2077
  {
3048
- "search": "Changer channel0…3 / *-ch* re-lie les textures sans recompiler ni vider les buffers.\n",
2078
+ "search": "Lists one or more publisher ids (space-separated). After the API returns a result object, each is set to {} — useful to reset the form publisher.\n",
3049
2079
  "files": {
3050
- "core/components/functional/shader/shader.md": {
3051
- "title": "Shader",
2080
+ "core/components/functional/submit/submit.md": {
2081
+ "title": "Submit",
3052
2082
  "hashes": {
3053
- "état-et-visibilité": {
2083
+ "cleareddataonsuccess": {
3054
2084
  "count": 1,
3055
- "title": "État et visibilité",
2085
+ "title": "clearedDataOnSuccess",
3056
2086
  "type": "paragraph"
3057
2087
  }
3058
2088
  }
@@ -3060,14 +2090,14 @@
3060
2090
  }
3061
2091
  },
3062
2092
  {
3063
- "search": "Assigne le GLSL via .image (et .bufferA, …) depuis JS / Lit.\n",
2093
+ "search": "Listen for the bubbling submit event; event.detail is the same result written to submitResultDataProvider (if configured).\n",
3064
2094
  "files": {
3065
- "core/components/functional/shader/shader.md": {
3066
- "title": "Shader",
2095
+ "core/components/functional/submit/submit.md": {
2096
+ "title": "Submit",
3067
2097
  "hashes": {
3068
- "markup": {
2098
+ "custom-submit-event": {
3069
2099
  "count": 1,
3070
- "title": "Markup",
2100
+ "title": "Custom `submit` event",
3071
2101
  "type": "paragraph"
3072
2102
  }
3073
2103
  }
@@ -3075,14 +2105,14 @@
3075
2105
  }
3076
2106
  },
3077
2107
  {
3078
- "search": "error — compile / link / WebGL (detail.message, detail.pass, detail.infoLog).\n",
2108
+ "search": "Ancestor dataProvider is the default path; endPoint on sonic-submit overrides it for that button only.\n",
3079
2109
  "files": {
3080
- "core/components/functional/shader/shader.md": {
3081
- "title": "Shader",
2110
+ "core/components/functional/submit/submit.md": {
2111
+ "title": "Submit",
3082
2112
  "hashes": {
3083
- "events": {
2113
+ "endpoint-vs-dataprovider": {
3084
2114
  "count": 1,
3085
- "title": "Events",
2115
+ "title": "endPoint vs dataProvider",
3086
2116
  "type": "paragraph"
3087
2117
  }
3088
2118
  }
@@ -3090,14 +2120,14 @@
3090
2120
  }
3091
2121
  },
3092
2122
  {
3093
- "search": "out — snapshot SonicShaderOutput (throttlé par out-interval, seulement s’il y a un listener) : souris, params, samples.\n",
2123
+ "search": "Appends publisher fields as a query string on the endpoint, then performs a GET. The mock route api/register/echo returns the query for inspection.\n",
3094
2124
  "files": {
3095
- "core/components/functional/shader/shader.md": {
3096
- "title": "Shader",
2125
+ "core/components/functional/submit/submit.md": {
2126
+ "title": "Submit",
3097
2127
  "hashes": {
3098
- "events": {
2128
+ "methodget": {
3099
2129
  "count": 1,
3100
- "title": "Events",
2130
+ "title": "method=\"get\"",
3101
2131
  "type": "paragraph"
3102
2132
  }
3103
2133
  }
@@ -3105,14 +2135,14 @@
3105
2135
  }
3106
2136
  },
3107
2137
  {
3108
- "search": "extract — snapshot ShaderExtractOutput (throttlé, paresseux) : patches manuels + détectés.\n",
2138
+ "search": "You can use dot notation in name on form controls; the publisher stores nested objects:\n",
3109
2139
  "files": {
3110
- "core/components/functional/shader/shader.md": {
3111
- "title": "Shader",
2140
+ "core/components/functional/submit/submit.md": {
2141
+ "title": "Submit",
3112
2142
  "hashes": {
3113
- "events": {
2143
+ "dot-notation-formdataprovider-shape": {
3114
2144
  "count": 1,
3115
- "title": "Events",
2145
+ "title": "dot notation (formDataProvider shape)",
3116
2146
  "type": "paragraph"
3117
2147
  }
3118
2148
  }
@@ -3120,44 +2150,44 @@
3120
2150
  }
3121
2151
  },
3122
2152
  {
3123
- "search": "States",
2153
+ "search": "Stored shape:\n",
3124
2154
  "files": {
3125
- "core/components/functional/states/states.md": {
3126
- "title": "States",
2155
+ "core/components/functional/submit/submit.md": {
2156
+ "title": "Submit",
3127
2157
  "hashes": {
3128
- "states": {
2158
+ "dot-notation-formdataprovider-shape": {
3129
2159
  "count": 1,
3130
- "title": "",
3131
- "type": "page"
2160
+ "title": "dot notation (formDataProvider shape)",
2161
+ "type": "paragraph"
3132
2162
  }
3133
2163
  }
3134
2164
  }
3135
2165
  }
3136
2166
  },
3137
2167
  {
3138
- "search": "When using capturing groups () the stored values are accessible via the dataProviderExpressione.g., data-value="#couleur_(\\d+)" => dataProviderExpression="api/unknown/$1"\n",
2168
+ "search": "Subscriber",
3139
2169
  "files": {
3140
- "core/components/functional/states/states.md": {
3141
- "title": "States",
2170
+ "core/components/functional/subscriber/subscriber.md": {
2171
+ "title": "Subscriber",
3142
2172
  "hashes": {
3143
- "regexp": {
2173
+ "subscriber": {
3144
2174
  "count": 1,
3145
- "title": "Regexp",
3146
- "type": "paragraph"
2175
+ "title": "",
2176
+ "type": "page"
3147
2177
  }
3148
2178
  }
3149
2179
  }
3150
2180
  }
3151
2181
  },
3152
2182
  {
3153
- "search": "Same as RegExp but using url patternse.g., data-value="#couleur_:id" => dataProviderExpression="api/unknown/:id"\n",
2183
+ "search": "La mixin Subscriber permet lier un composant à un publisher.\nLa liaison à un publisher se fait via l'attribut dataProvider du composant qui représente ce que l'on obtient en appellant PublisherManager.get(dataProvider).\n",
3154
2184
  "files": {
3155
- "core/components/functional/states/states.md": {
3156
- "title": "States",
2185
+ "core/components/functional/subscriber/subscriber.md": {
2186
+ "title": "Subscriber",
3157
2187
  "hashes": {
3158
- "url-pattern": {
2188
+ "subscriber": {
3159
2189
  "count": 1,
3160
- "title": "Url-pattern",
2190
+ "title": "",
3161
2191
  "type": "paragraph"
3162
2192
  }
3163
2193
  }
@@ -3165,27 +2195,27 @@
3165
2195
  }
3166
2196
  },
3167
2197
  {
3168
- "search": "Submit",
2198
+ "search": "Les propriétés du composant sont automatiquement remplies avec les propriétés du même nom dans les données du publisher.\n",
3169
2199
  "files": {
3170
- "core/components/functional/submit/submit.md": {
3171
- "title": "Submit",
2200
+ "core/components/functional/subscriber/subscriber.md": {
2201
+ "title": "Subscriber",
3172
2202
  "hashes": {
3173
- "submit": {
2203
+ "subscriber": {
3174
2204
  "count": 1,
3175
2205
  "title": "",
3176
- "type": "page"
2206
+ "type": "paragraph"
3177
2207
  }
3178
2208
  }
3179
2209
  }
3180
2210
  }
3181
2211
  },
3182
2212
  {
3183
- "search": "Live demos: <docs-lit-demo> + src/docs/example/docs-submit-demos.ts. Use Local API demos (serviceURL="/docs-mock-api").\n",
2213
+ "search": "Le composant est automatiquement mis à jour lorsque les données du publisher sont mises à jour.\n",
3184
2214
  "files": {
3185
- "core/components/functional/submit/submit.md": {
3186
- "title": "Submit",
2215
+ "core/components/functional/subscriber/subscriber.md": {
2216
+ "title": "Subscriber",
3187
2217
  "hashes": {
3188
- "submit": {
2218
+ "subscriber": {
3189
2219
  "count": 1,
3190
2220
  "title": "",
3191
2221
  "type": "paragraph"
@@ -3195,14 +2225,14 @@
3195
2225
  }
3196
2226
  },
3197
2227
  {
3198
- "search": "sonic-submit sends the formDataProvider publisher to a REST endpoint (same configuration model as fetch: serviceURL on an ancestor, path via dataProvider or endPoint).\n",
2228
+ "search": "Id of the dataProvider that the component will subscribe to\n",
3199
2229
  "files": {
3200
- "core/components/functional/submit/submit.md": {
3201
- "title": "Submit",
2230
+ "core/components/functional/subscriber/subscriber.md": {
2231
+ "title": "Subscriber",
3202
2232
  "hashes": {
3203
- "overview": {
2233
+ "dataprovider": {
3204
2234
  "count": 1,
3205
- "title": "Overview",
2235
+ "title": "DataProvider",
3206
2236
  "type": "paragraph"
3207
2237
  }
3208
2238
  }
@@ -3210,14 +2240,14 @@
3210
2240
  }
3211
2241
  },
3212
2242
  {
3213
- "search": "While a REST submit runs, the slot is wrapped with data-disabled (faded, no pointer events). With native, validation and loader still run, then the browser performs a normal form submission.\n",
2243
+ "search": "Data object (json) that will be passed to the dataProvider\n",
3214
2244
  "files": {
3215
- "core/components/functional/submit/submit.md": {
3216
- "title": "Submit",
2245
+ "core/components/functional/subscriber/subscriber.md": {
2246
+ "title": "Subscriber",
3217
2247
  "hashes": {
3218
- "overview": {
2248
+ "props": {
3219
2249
  "count": 1,
3220
- "title": "Overview",
2250
+ "title": "Props",
3221
2251
  "type": "paragraph"
3222
2252
  }
3223
2253
  }
@@ -3225,14 +2255,14 @@
3225
2255
  }
3226
2256
  },
3227
2257
  {
3228
- "search": "POST to mock api/register; result publisher submit-example-result.\n",
2258
+ "search": "Helper, display the data held by the dataProvider in a floating div\n",
3229
2259
  "files": {
3230
- "core/components/functional/submit/submit.md": {
3231
- "title": "Submit",
2260
+ "core/components/functional/subscriber/subscriber.md": {
2261
+ "title": "Subscriber",
3232
2262
  "hashes": {
3233
- "form-and-result-handling": {
2263
+ "debug": {
3234
2264
  "count": 1,
3235
- "title": "Form and result handling",
2265
+ "title": "Debug",
3236
2266
  "type": "paragraph"
3237
2267
  }
3238
2268
  }
@@ -3240,14 +2270,39 @@
3240
2270
  }
3241
2271
  },
3242
2272
  {
3243
- "search": "With native, Concorde does not call fetch. After form validation it:\n",
2273
+ "search": "Docs coming soon\n",
3244
2274
  "files": {
3245
- "core/components/functional/submit/submit.md": {
3246
- "title": "Submit",
2275
+ "core/components/functional/subscriber/subscriber.md": {
2276
+ "title": "Subscriber",
3247
2277
  "hashes": {
3248
- "native-html-form": {
2278
+ "noautofill": {
3249
2279
  "count": 1,
3250
- "title": "Native HTML form",
2280
+ "title": "NoAutofill",
2281
+ "type": "paragraph"
2282
+ },
2283
+ "propertymap": {
2284
+ "count": 1,
2285
+ "title": "PropertyMap",
2286
+ "type": "paragraph"
2287
+ },
2288
+ "bindpublisher": {
2289
+ "count": 1,
2290
+ "title": "BindPublisher",
2291
+ "type": "paragraph"
2292
+ },
2293
+ "instancecounter": {
2294
+ "count": 1,
2295
+ "title": "instanceCounter",
2296
+ "type": "paragraph"
2297
+ },
2298
+ "publisher": {
2299
+ "count": 1,
2300
+ "title": "Publisher",
2301
+ "type": "paragraph"
2302
+ },
2303
+ "args": {
2304
+ "count": 1,
2305
+ "title": "Args",
3251
2306
  "type": "paragraph"
3252
2307
  }
3253
2308
  }
@@ -3255,14 +2310,14 @@
3255
2310
  }
3256
2311
  },
3257
2312
  {
3258
- "search": "Use a real <form action="…" method="post"> ancestor. For SPAs, a named target (e.g. iframe) avoids leaving the doc page.\n",
2313
+ "search": "Permet de mapper un nom de propriété de donnée source vers une propriété du subscriber à la volée\n",
3259
2314
  "files": {
3260
- "core/components/functional/submit/submit.md": {
3261
- "title": "Submit",
2315
+ "core/components/functional/subscriber/subscriber.md": {
2316
+ "title": "Subscriber",
3262
2317
  "hashes": {
3263
- "native-html-form": {
2318
+ "propertymap": {
3264
2319
  "count": 1,
3265
- "title": "Native HTML form",
2320
+ "title": "PropertyMap",
3266
2321
  "type": "paragraph"
3267
2322
  }
3268
2323
  }
@@ -3270,14 +2325,14 @@
3270
2325
  }
3271
2326
  },
3272
2327
  {
3273
- "search": "Sends fields as multipart/form-data instead of application/json (response is still parsed as JSON).\n",
2328
+ "search": "On peut utiliser cette fonction pour lier un publisher spécifique au composant si besoin.\n",
3274
2329
  "files": {
3275
- "core/components/functional/submit/submit.md": {
3276
- "title": "Submit",
2330
+ "core/components/functional/subscriber/subscriber.md": {
2331
+ "title": "Subscriber",
3277
2332
  "hashes": {
3278
- "sendasformdata": {
2333
+ "bindpublisher": {
3279
2334
  "count": 1,
3280
- "title": "sendAsFormData",
2335
+ "title": "BindPublisher",
3281
2336
  "type": "paragraph"
3282
2337
  }
3283
2338
  }
@@ -3285,14 +2340,14 @@
3285
2340
  }
3286
2341
  },
3287
2342
  {
3288
- "search": "When the API wraps the payload (e.g. { data: { id, token } }), set submit-result-key="data" on sonic-submit so submitResultDataProvider receives only the inner object.\n",
2343
+ "search": "Par défaut on crée un shadow dom mais on peut demander à ne pas en avoir via cette propriété et un attribut associé.Cela se fait à l'initialisation uniquement et n'est pas modifiable lors de la vie du composant.\n",
3289
2344
  "files": {
3290
- "core/components/functional/submit/submit.md": {
3291
- "title": "Submit",
2345
+ "core/components/functional/subscriber/subscriber.md": {
2346
+ "title": "Subscriber",
3292
2347
  "hashes": {
3293
- "submit-result-key": {
2348
+ "noshadowdom": {
3294
2349
  "count": 1,
3295
- "title": "submit-result-key",
2350
+ "title": "NoShadowDom",
3296
2351
  "type": "paragraph"
3297
2352
  }
3298
2353
  }
@@ -3300,14 +2355,14 @@
3300
2355
  }
3301
2356
  },
3302
2357
  {
3303
- "search": "Mock endpoint: POST /docs-mock-api/api/register/nested.\n",
2358
+ "search": "styles ??title ??_props ??onAssign ??defferedDebug ??\n",
3304
2359
  "files": {
3305
- "core/components/functional/submit/submit.md": {
3306
- "title": "Submit",
2360
+ "core/components/functional/subscriber/subscriber.md": {
2361
+ "title": "Subscriber",
3307
2362
  "hashes": {
3308
- "submit-result-key": {
2363
+ "other-attributes-gathered-from-subscriberstoriests": {
3309
2364
  "count": 1,
3310
- "title": "submit-result-key",
2365
+ "title": "Other attributes gathered from subscriber.stories.ts",
3311
2366
  "type": "paragraph"
3312
2367
  }
3313
2368
  }
@@ -3315,29 +2370,29 @@
3315
2370
  }
3316
2371
  },
3317
2372
  {
3318
- "search": "Lists one or more publisher ids (space-separated). After the API returns a result object, each is set to {} — useful to reset the form publisher.\n",
2373
+ "search": "Value",
3319
2374
  "files": {
3320
- "core/components/functional/submit/submit.md": {
3321
- "title": "Submit",
2375
+ "core/components/functional/value/value.md": {
2376
+ "title": "Value",
3322
2377
  "hashes": {
3323
- "cleareddataonsuccess": {
2378
+ "value": {
3324
2379
  "count": 1,
3325
- "title": "clearedDataOnSuccess",
3326
- "type": "paragraph"
2380
+ "title": "",
2381
+ "type": "page"
3327
2382
  }
3328
2383
  }
3329
2384
  }
3330
2385
  }
3331
2386
  },
3332
2387
  {
3333
- "search": "Listen for the bubbling submit event; event.detail is the same result written to submitResultDataProvider (if configured).\n",
2388
+ "search": "Simply shows a value from a data provider.\nYou can target sub data value using dot syntax.\nThe value reacts to changes.\n",
3334
2389
  "files": {
3335
- "core/components/functional/submit/submit.md": {
3336
- "title": "Submit",
2390
+ "core/components/functional/value/value.md": {
2391
+ "title": "Value",
3337
2392
  "hashes": {
3338
- "custom-submit-event": {
2393
+ "value": {
3339
2394
  "count": 1,
3340
- "title": "Custom `submit` event",
2395
+ "title": "",
3341
2396
  "type": "paragraph"
3342
2397
  }
3343
2398
  }
@@ -3345,29 +2400,29 @@
3345
2400
  }
3346
2401
  },
3347
2402
  {
3348
- "search": "Ancestor dataProvider is the default path; endPoint on sonic-submit overrides it for that button only.\n",
2403
+ "search": "Alert",
3349
2404
  "files": {
3350
- "core/components/functional/submit/submit.md": {
3351
- "title": "Submit",
2405
+ "core/components/ui/alert/alert.md": {
2406
+ "title": "Alert",
3352
2407
  "hashes": {
3353
- "endpoint-vs-dataprovider": {
2408
+ "alert": {
3354
2409
  "count": 1,
3355
- "title": "endPoint vs dataProvider",
3356
- "type": "paragraph"
2410
+ "title": "",
2411
+ "type": "page"
3357
2412
  }
3358
2413
  }
3359
2414
  }
3360
2415
  }
3361
2416
  },
3362
2417
  {
3363
- "search": "Appends publisher fields as a query string on the endpoint, then performs a GET. The mock route api/register/echo returns the query for inspection.\n",
2418
+ "search": "Inline message in the page: title (label), body (text or default slot), icon from status. For HTML or actions, use the slot instead of label / text (plain text only).\n",
3364
2419
  "files": {
3365
- "core/components/functional/submit/submit.md": {
3366
- "title": "Submit",
2420
+ "core/components/ui/alert/alert.md": {
2421
+ "title": "Alert",
3367
2422
  "hashes": {
3368
- "methodget": {
2423
+ "alert": {
3369
2424
  "count": 1,
3370
- "title": "method=\"get\"",
2425
+ "title": "",
3371
2426
  "type": "paragraph"
3372
2427
  }
3373
2428
  }
@@ -3375,14 +2430,14 @@
3375
2430
  }
3376
2431
  },
3377
2432
  {
3378
- "search": "You can use dot notation in name on form controls; the publisher stores nested objects:\n",
2433
+ "search": "Use status: default, info, success, warning, error.\n",
3379
2434
  "files": {
3380
- "core/components/functional/submit/submit.md": {
3381
- "title": "Submit",
2435
+ "core/components/ui/alert/alert.md": {
2436
+ "title": "Alert",
3382
2437
  "hashes": {
3383
- "dot-notation-formdataprovider-shape": {
2438
+ "alert": {
3384
2439
  "count": 1,
3385
- "title": "dot notation (formDataProvider shape)",
2440
+ "title": "",
3386
2441
  "type": "paragraph"
3387
2442
  }
3388
2443
  }
@@ -3390,14 +2445,14 @@
3390
2445
  }
3391
2446
  },
3392
2447
  {
3393
- "search": "Stored shape:\n",
2448
+ "search": "Color and icon follow status. With no status, behavior is default.\n",
3394
2449
  "files": {
3395
- "core/components/functional/submit/submit.md": {
3396
- "title": "Submit",
2450
+ "core/components/ui/alert/alert.md": {
2451
+ "title": "Alert",
3397
2452
  "hashes": {
3398
- "dot-notation-formdataprovider-shape": {
2453
+ "status": {
3399
2454
  "count": 1,
3400
- "title": "dot notation (formDataProvider shape)",
2455
+ "title": "Status",
3401
2456
  "type": "paragraph"
3402
2457
  }
3403
2458
  }
@@ -3405,29 +2460,29 @@
3405
2460
  }
3406
2461
  },
3407
2462
  {
3408
- "search": "Subscriber",
2463
+ "search": "By default, an alert already in the DOM is not announced (no role / aria-live). Set announce when the message appears after user action (API response, validation, etc.): screen readers get role="alert" for error, otherwise role="status" and aria-live="polite".\n",
3409
2464
  "files": {
3410
- "core/components/functional/subscriber/subscriber.md": {
3411
- "title": "Subscriber",
2465
+ "core/components/ui/alert/alert.md": {
2466
+ "title": "Alert",
3412
2467
  "hashes": {
3413
- "subscriber": {
2468
+ "accessibility-announce": {
3414
2469
  "count": 1,
3415
- "title": "",
3416
- "type": "page"
2470
+ "title": "Accessibility (`announce`)",
2471
+ "type": "paragraph"
3417
2472
  }
3418
2473
  }
3419
2474
  }
3420
2475
  }
3421
2476
  },
3422
2477
  {
3423
- "search": "La mixin Subscriber permet lier un composant à un publisher.\nLa liaison à un publisher se fait via l'attribut dataProvider du composant qui représente ce que l'on obtient en appellant PublisherManager.get(dataProvider).\n",
2478
+ "search": "sonic-alert-messages sets announce on every rendered alert.\n",
3424
2479
  "files": {
3425
- "core/components/functional/subscriber/subscriber.md": {
3426
- "title": "Subscriber",
2480
+ "core/components/ui/alert/alert.md": {
2481
+ "title": "Alert",
3427
2482
  "hashes": {
3428
- "subscriber": {
2483
+ "accessibility-announce": {
3429
2484
  "count": 1,
3430
- "title": "",
2485
+ "title": "Accessibility (`announce`)",
3431
2486
  "type": "paragraph"
3432
2487
  }
3433
2488
  }
@@ -3435,14 +2490,14 @@
3435
2490
  }
3436
2491
  },
3437
2492
  {
3438
- "search": "Les propriétés du composant sont automatiquement remplies avec les propriétés du même nom dans les données du publisher.\n",
2493
+ "search": "label and text accept plain text only. The default slot is rendered after text. Use the icon slot to replace the default sonic-icon. noIcon hides the icon.\n",
3439
2494
  "files": {
3440
- "core/components/functional/subscriber/subscriber.md": {
3441
- "title": "Subscriber",
2495
+ "core/components/ui/alert/alert.md": {
2496
+ "title": "Alert",
3442
2497
  "hashes": {
3443
- "subscriber": {
2498
+ "content-and-icon": {
3444
2499
  "count": 1,
3445
- "title": "",
2500
+ "title": "Content and icon",
3446
2501
  "type": "paragraph"
3447
2502
  }
3448
2503
  }
@@ -3450,14 +2505,14 @@
3450
2505
  }
3451
2506
  },
3452
2507
  {
3453
- "search": "Le composant est automatiquement mis à jour lorsque les données du publisher sont mises à jour.\n",
2508
+ "search": "Project any markup into slot="icon" (emoji, image, custom component). Keep it decorative with aria-hidden="true" when the message text already conveys meaning.\n",
3454
2509
  "files": {
3455
- "core/components/functional/subscriber/subscriber.md": {
3456
- "title": "Subscriber",
2510
+ "core/components/ui/alert/alert.md": {
2511
+ "title": "Alert",
3457
2512
  "hashes": {
3458
- "subscriber": {
2513
+ "custom-icon-slot": {
3459
2514
  "count": 1,
3460
- "title": "",
2515
+ "title": "Custom icon slot",
3461
2516
  "type": "paragraph"
3462
2517
  }
3463
2518
  }
@@ -3465,14 +2520,14 @@
3465
2520
  }
3466
2521
  },
3467
2522
  {
3468
- "search": "Id of the dataProvider that the component will subscribe to\n",
2523
+ "search": "Rich content in the slot (buttons, links).\n",
3469
2524
  "files": {
3470
- "core/components/functional/subscriber/subscriber.md": {
3471
- "title": "Subscriber",
2525
+ "core/components/ui/alert/alert.md": {
2526
+ "title": "Alert",
3472
2527
  "hashes": {
3473
- "dataprovider": {
2528
+ "alert-with-link": {
3474
2529
  "count": 1,
3475
- "title": "DataProvider",
2530
+ "title": "Alert with link",
3476
2531
  "type": "paragraph"
3477
2532
  }
3478
2533
  }
@@ -3480,14 +2535,14 @@
3480
2535
  }
3481
2536
  },
3482
2537
  {
3483
- "search": "Data object (json) that will be passed to the dataProvider\n",
2538
+ "search": "Tinted background from the status color (color-mix on currentColor).\n",
3484
2539
  "files": {
3485
- "core/components/functional/subscriber/subscriber.md": {
3486
- "title": "Subscriber",
2540
+ "core/components/ui/alert/alert.md": {
2541
+ "title": "Alert",
3487
2542
  "hashes": {
3488
- "props": {
2543
+ "background": {
3489
2544
  "count": 1,
3490
- "title": "Props",
2545
+ "title": "Background",
3491
2546
  "type": "paragraph"
3492
2547
  }
3493
2548
  }
@@ -3495,14 +2550,14 @@
3495
2550
  }
3496
2551
  },
3497
2552
  {
3498
- "search": "Helper, display the data held by the dataProvider in a floating div\n",
2553
+ "search": "dismissible removes the alert from the DOM when the close control is clicked (i18n aria label). dismissible and background are independent: without background, close sits at the end of the row; with background, top-right.\n",
3499
2554
  "files": {
3500
- "core/components/functional/subscriber/subscriber.md": {
3501
- "title": "Subscriber",
2555
+ "core/components/ui/alert/alert.md": {
2556
+ "title": "Alert",
3502
2557
  "hashes": {
3503
- "debug": {
2558
+ "dismissible": {
3504
2559
  "count": 1,
3505
- "title": "Debug",
2560
+ "title": "Dismissible",
3506
2561
  "type": "paragraph"
3507
2562
  }
3508
2563
  }
@@ -3510,39 +2565,14 @@
3510
2565
  }
3511
2566
  },
3512
2567
  {
3513
- "search": "Docs coming soon\n",
2568
+ "search": "With dismissForever, dismissal is stored in localStorage (key sonic-alert-dismissed). A stable id on the element is required; without id, a warning is logged and nothing is persisted.\n",
3514
2569
  "files": {
3515
- "core/components/functional/subscriber/subscriber.md": {
3516
- "title": "Subscriber",
2570
+ "core/components/ui/alert/alert.md": {
2571
+ "title": "Alert",
3517
2572
  "hashes": {
3518
- "noautofill": {
3519
- "count": 1,
3520
- "title": "NoAutofill",
3521
- "type": "paragraph"
3522
- },
3523
- "propertymap": {
3524
- "count": 1,
3525
- "title": "PropertyMap",
3526
- "type": "paragraph"
3527
- },
3528
- "bindpublisher": {
2573
+ "dismiss-forever": {
3529
2574
  "count": 1,
3530
- "title": "BindPublisher",
3531
- "type": "paragraph"
3532
- },
3533
- "instancecounter": {
3534
- "count": 1,
3535
- "title": "instanceCounter",
3536
- "type": "paragraph"
3537
- },
3538
- "publisher": {
3539
- "count": 1,
3540
- "title": "Publisher",
3541
- "type": "paragraph"
3542
- },
3543
- "args": {
3544
- "count": 1,
3545
- "title": "Args",
2575
+ "title": "Dismiss forever",
3546
2576
  "type": "paragraph"
3547
2577
  }
3548
2578
  }
@@ -3550,29 +2580,29 @@
3550
2580
  }
3551
2581
  },
3552
2582
  {
3553
- "search": "Permet de mapper un nom de propriété de donnée source vers une propriété du subscriber à la volée\n",
2583
+ "search": "Badge",
3554
2584
  "files": {
3555
- "core/components/functional/subscriber/subscriber.md": {
3556
- "title": "Subscriber",
2585
+ "core/components/ui/badge/badge.md": {
2586
+ "title": "Badge",
3557
2587
  "hashes": {
3558
- "propertymap": {
2588
+ "badge": {
3559
2589
  "count": 1,
3560
- "title": "PropertyMap",
3561
- "type": "paragraph"
2590
+ "title": "",
2591
+ "type": "page"
3562
2592
  }
3563
2593
  }
3564
2594
  }
3565
2595
  }
3566
2596
  },
3567
2597
  {
3568
- "search": "On peut utiliser cette fonction pour lier un publisher spécifique au composant si besoin.\n",
2598
+ "search": "A non-interactive pill for labels, counts, or highlights (counter, status, category). The API mirrors sonic-button (type, variant, size) without focus or click states.\n",
3569
2599
  "files": {
3570
- "core/components/functional/subscriber/subscriber.md": {
3571
- "title": "Subscriber",
2600
+ "core/components/ui/badge/badge.md": {
2601
+ "title": "Badge",
3572
2602
  "hashes": {
3573
- "bindpublisher": {
2603
+ "badge": {
3574
2604
  "count": 1,
3575
- "title": "BindPublisher",
2605
+ "title": "",
3576
2606
  "type": "paragraph"
3577
2607
  }
3578
2608
  }
@@ -3580,14 +2610,14 @@
3580
2610
  }
3581
2611
  },
3582
2612
  {
3583
- "search": "Par défaut on crée un shadow dom mais on peut demander à ne pas en avoir via cette propriété et un attribut associé.Cela se fait à l'initialisation uniquement et n'est pas modifiable lors de la vie du composant.\n",
2613
+ "search": "Colors come from theme tokens (--sc-primary, --sc-danger, …) or the semantic type values below. \n",
3584
2614
  "files": {
3585
- "core/components/functional/subscriber/subscriber.md": {
3586
- "title": "Subscriber",
2615
+ "core/components/ui/badge/badge.md": {
2616
+ "title": "Badge",
3587
2617
  "hashes": {
3588
- "noshadowdom": {
2618
+ "badge": {
3589
2619
  "count": 1,
3590
- "title": "NoShadowDom",
2620
+ "title": "",
3591
2621
  "type": "paragraph"
3592
2622
  }
3593
2623
  }
@@ -3595,14 +2625,14 @@
3595
2625
  }
3596
2626
  },
3597
2627
  {
3598
- "search": "styles ??title ??_props ??onAssign ??defferedDebug ??\n",
2628
+ "search": "default — subtle background (base-100). neutral — dark fill (base-content) with light text, useful on light backgrounds.\n",
3599
2629
  "files": {
3600
- "core/components/functional/subscriber/subscriber.md": {
3601
- "title": "Subscriber",
2630
+ "core/components/ui/badge/badge.md": {
2631
+ "title": "Badge",
3602
2632
  "hashes": {
3603
- "other-attributes-gathered-from-subscriberstoriests": {
2633
+ "type": {
3604
2634
  "count": 1,
3605
- "title": "Other attributes gathered from subscriber.stories.ts",
2635
+ "title": "Type",
3606
2636
  "type": "paragraph"
3607
2637
  }
3608
2638
  }
@@ -3610,29 +2640,29 @@
3610
2640
  }
3611
2641
  },
3612
2642
  {
3613
- "search": "Value",
2643
+ "search": "outline — border and text in the type color. ghost — text only, no padding (except in forced-colors mode).\n",
3614
2644
  "files": {
3615
- "core/components/functional/value/value.md": {
3616
- "title": "Value",
2645
+ "core/components/ui/badge/badge.md": {
2646
+ "title": "Badge",
3617
2647
  "hashes": {
3618
- "value": {
2648
+ "variant": {
3619
2649
  "count": 1,
3620
- "title": "",
3621
- "type": "page"
2650
+ "title": "Variant",
2651
+ "type": "paragraph"
3622
2652
  }
3623
2653
  }
3624
2654
  }
3625
2655
  }
3626
2656
  },
3627
2657
  {
3628
- "search": "Simply shows a value from a data provider.\nYou can target sub data value using dot syntax.\nThe value reacts to changes.\n",
2658
+ "search": "Default size is md (omit the size attribute). Typography and padding follow sonic-button.\n",
3629
2659
  "files": {
3630
- "core/components/functional/value/value.md": {
3631
- "title": "Value",
2660
+ "core/components/ui/badge/badge.md": {
2661
+ "title": "Badge",
3632
2662
  "hashes": {
3633
- "value": {
2663
+ "size": {
3634
2664
  "count": 1,
3635
- "title": "",
2665
+ "title": "Size",
3636
2666
  "type": "paragraph"
3637
2667
  }
3638
2668
  }
@@ -3640,29 +2670,29 @@
3640
2670
  }
3641
2671
  },
3642
2672
  {
3643
- "search": "WebGPU",
2673
+ "search": "Icons or short text before / after the main label.\n",
3644
2674
  "files": {
3645
- "core/components/functional/webgpu/webgpu.md": {
3646
- "title": "WebGPU",
2675
+ "core/components/ui/badge/badge.md": {
2676
+ "title": "Badge",
3647
2677
  "hashes": {
3648
- "webgpu": {
2678
+ "prefix-and-suffix-slots": {
3649
2679
  "count": 1,
3650
- "title": "",
3651
- "type": "page"
2680
+ "title": "Prefix and suffix slots",
2681
+ "type": "paragraph"
3652
2682
  }
3653
2683
  }
3654
2684
  }
3655
2685
  }
3656
2686
  },
3657
2687
  {
3658
- "search": "sonic-webgpu — GPU compute / effects (companion to sonic-shader, not a clone).\n",
2688
+ "search": "Badge with no text (visual dot). min-width / min-height keep a readable shape.\n",
3659
2689
  "files": {
3660
- "core/components/functional/webgpu/webgpu.md": {
3661
- "title": "WebGPU",
2690
+ "core/components/ui/badge/badge.md": {
2691
+ "title": "Badge",
3662
2692
  "hashes": {
3663
- "webgpu": {
2693
+ "empty-badges": {
3664
2694
  "count": 1,
3665
- "title": "",
2695
+ "title": "Empty badges",
3666
2696
  "type": "paragraph"
3667
2697
  }
3668
2698
  }
@@ -3670,14 +2700,14 @@
3670
2700
  }
3671
2701
  },
3672
2702
  {
3673
- "search": "Opt-in import:\n",
2703
+ "search": "With ellipsis, long labels truncate. The parent must constrain width (max-width, grid, etc.).\n",
3674
2704
  "files": {
3675
- "core/components/functional/webgpu/webgpu.md": {
3676
- "title": "WebGPU",
2705
+ "core/components/ui/badge/badge.md": {
2706
+ "title": "Badge",
3677
2707
  "hashes": {
3678
- "webgpu": {
2708
+ "ellipsis": {
3679
2709
  "count": 1,
3680
- "title": "",
2710
+ "title": "Ellipsis",
3681
2711
  "type": "paragraph"
3682
2712
  }
3683
2713
  }
@@ -3685,14 +2715,14 @@
3685
2715
  }
3686
2716
  },
3687
2717
  {
3688
- "search": "Harris → patches → WebGPU mosaic: Visual stack.\n",
2718
+ "search": "Count inside a button (slot="suffix") or a badge absolutely positioned on a button / icon.\n",
3689
2719
  "files": {
3690
- "core/components/functional/webgpu/webgpu.md": {
3691
- "title": "WebGPU",
2720
+ "core/components/ui/badge/badge.md": {
2721
+ "title": "Badge",
3692
2722
  "hashes": {
3693
- "webgpu": {
2723
+ "badge-in-button": {
3694
2724
  "count": 1,
3695
- "title": "",
2725
+ "title": "Badge in button",
3696
2726
  "type": "paragraph"
3697
2727
  }
3698
2728
  }
@@ -3700,29 +2730,29 @@
3700
2730
  }
3701
2731
  },
3702
2732
  {
3703
- "search": "Simulation: param0 = speed, param1 = mouse attraction. WebGPU compute when available, otherwise CPU.\n",
2733
+ "search": "Button",
3704
2734
  "files": {
3705
- "core/components/functional/webgpu/webgpu.md": {
3706
- "title": "WebGPU",
2735
+ "core/components/ui/button/button.md": {
2736
+ "title": "Button",
3707
2737
  "hashes": {
3708
- "demo--particles-compute": {
2738
+ "button": {
3709
2739
  "count": 1,
3710
- "title": "Demo — particles (compute)",
3711
- "type": "paragraph"
2740
+ "title": "",
2741
+ "type": "page"
3712
2742
  }
3713
2743
  }
3714
2744
  }
3715
2745
  }
3716
2746
  },
3717
2747
  {
3718
- "search": "Comme sonic-shader : channel0="#plateau" copie le canvas source chaque frameSeq (copyExternalImageToTexture). La texture GPU est réutilisée tant que la taille ne change pas (pas de createTexture / rebuild bind group chaque frame).\n",
2748
+ "search": "The length of the button depends on the size of its content\n\n",
3719
2749
  "files": {
3720
- "core/components/functional/webgpu/webgpu.md": {
3721
- "title": "WebGPU",
2750
+ "core/components/ui/button/button.md": {
2751
+ "title": "Button",
3722
2752
  "hashes": {
3723
- "live-bridge-id": {
2753
+ "loading": {
3724
2754
  "count": 1,
3725
- "title": "Live bridge (`#id`)",
2755
+ "title": "Loading",
3726
2756
  "type": "paragraph"
3727
2757
  }
3728
2758
  }
@@ -3730,44 +2760,44 @@
3730
2760
  }
3731
2761
  },
3732
2762
  {
3733
- "search": "Demo: Visual stack — 3D → WebGPU live.\n",
2763
+ "search": "Captcha",
3734
2764
  "files": {
3735
- "core/components/functional/webgpu/webgpu.md": {
3736
- "title": "WebGPU",
2765
+ "core/components/ui/captcha/captcha.md": {
2766
+ "title": "Captcha",
3737
2767
  "hashes": {
3738
- "live-bridge-id": {
2768
+ "captcha": {
3739
2769
  "count": 1,
3740
- "title": "Live bridge (`#id`)",
3741
- "type": "paragraph"
2770
+ "title": "",
2771
+ "type": "page"
3742
2772
  }
3743
2773
  }
3744
2774
  }
3745
2775
  }
3746
2776
  },
3747
2777
  {
3748
- "search": "Same MediaRef / DP bridge as the rest of the stack. Live textures entre composants : pont #id / { element } (copie canvas), pas de contexte WebGPU partagé avec sonic-shader.\n",
2778
+ "search": "Card",
3749
2779
  "files": {
3750
- "core/components/functional/webgpu/webgpu.md": {
3751
- "title": "WebGPU",
2780
+ "core/components/ui/card/card.md": {
2781
+ "title": "Card",
3752
2782
  "hashes": {
3753
- "chaining": {
2783
+ "card": {
3754
2784
  "count": 1,
3755
- "title": "Chaining",
3756
- "type": "paragraph"
2785
+ "title": "",
2786
+ "type": "page"
3757
2787
  }
3758
2788
  }
3759
2789
  }
3760
2790
  }
3761
2791
  },
3762
2792
  {
3763
- "search": "concorde-webgpu.bundle.js after the core.\n",
2793
+ "search": "A surface for grouped content: padding, radius, shadow, and semantic type colors via shared theme tokens. Compose sonic-card-header, sonic-card-main, and sonic-card-footer inside the card, or put any markup in the default slot.\n",
3764
2794
  "files": {
3765
- "core/components/functional/webgpu/webgpu.md": {
3766
- "title": "WebGPU",
2795
+ "core/components/ui/card/card.md": {
2796
+ "title": "Card",
3767
2797
  "hashes": {
3768
- "cdn": {
2798
+ "card": {
3769
2799
  "count": 1,
3770
- "title": "CDN",
2800
+ "title": "",
3771
2801
  "type": "paragraph"
3772
2802
  }
3773
2803
  }
@@ -3775,59 +2805,59 @@
3775
2805
  }
3776
2806
  },
3777
2807
  {
3778
- "search": "Alert",
2808
+ "search": "Default type is base (page background). Use light for a subtle gray panel, invert / neutral for high-contrast blocks, and primary, info, success, warning, or danger for tinted surfaces (divider tokens apply on colored types).\n",
3779
2809
  "files": {
3780
- "core/components/ui/alert/alert.md": {
3781
- "title": "Alert",
2810
+ "core/components/ui/card/card.md": {
2811
+ "title": "Card",
3782
2812
  "hashes": {
3783
- "alert": {
2813
+ "card": {
3784
2814
  "count": 1,
3785
2815
  "title": "",
3786
- "type": "page"
2816
+ "type": "paragraph"
3787
2817
  }
3788
2818
  }
3789
2819
  }
3790
2820
  }
3791
2821
  },
3792
2822
  {
3793
- "search": "Badge",
2823
+ "search": "Quick titles with label and description attributes, or full control through the default slot. slot="suffix" aligns badges or actions on the right; suffix content does not shrink when the title wraps.\n",
3794
2824
  "files": {
3795
- "core/components/ui/badge/badge.md": {
3796
- "title": "Badge",
2825
+ "core/components/ui/card/card.md": {
2826
+ "title": "Card",
3797
2827
  "hashes": {
3798
- "badge": {
2828
+ "header": {
3799
2829
  "count": 1,
3800
- "title": "",
3801
- "type": "page"
2830
+ "title": "Header",
2831
+ "type": "paragraph"
3802
2832
  }
3803
2833
  }
3804
2834
  }
3805
2835
  }
3806
2836
  },
3807
2837
  {
3808
- "search": "Button",
2838
+ "search": "label and description accept HTML (rendered as markup). Prefer plain text when possible; use the slot for structured content.\n",
3809
2839
  "files": {
3810
- "core/components/ui/button/button.md": {
3811
- "title": "Button",
2840
+ "core/components/ui/card/card.md": {
2841
+ "title": "Card",
3812
2842
  "hashes": {
3813
- "button": {
2843
+ "header": {
3814
2844
  "count": 1,
3815
- "title": "",
3816
- "type": "page"
2845
+ "title": "Header",
2846
+ "type": "paragraph"
3817
2847
  }
3818
2848
  }
3819
2849
  }
3820
2850
  }
3821
2851
  },
3822
2852
  {
3823
- "search": "The length of the button depends on the size of its content\n\n",
2853
+ "search": "Optional wrapper for the primary content area (typography, media, forms).\n",
3824
2854
  "files": {
3825
- "core/components/ui/button/button.md": {
3826
- "title": "Button",
2855
+ "core/components/ui/card/card.md": {
2856
+ "title": "Card",
3827
2857
  "hashes": {
3828
- "loading": {
2858
+ "main": {
3829
2859
  "count": 1,
3830
- "title": "Loading",
2860
+ "title": "Main",
3831
2861
  "type": "paragraph"
3832
2862
  }
3833
2863
  }
@@ -3835,30 +2865,30 @@
3835
2865
  }
3836
2866
  },
3837
2867
  {
3838
- "search": "Captcha",
2868
+ "search": "Optional footer for actions, metadata, or secondary text.\n",
3839
2869
  "files": {
3840
- "core/components/ui/captcha/captcha.md": {
3841
- "title": "Captcha",
2870
+ "core/components/ui/card/card.md": {
2871
+ "title": "Card",
3842
2872
  "hashes": {
3843
- "captcha": {
2873
+ "footer": {
3844
2874
  "count": 1,
3845
- "title": "",
3846
- "type": "page"
2875
+ "title": "Footer",
2876
+ "type": "paragraph"
3847
2877
  }
3848
2878
  }
3849
2879
  }
3850
2880
  }
3851
2881
  },
3852
2882
  {
3853
- "search": "Card",
2883
+ "search": "Header, media, body, and footer together.\n",
3854
2884
  "files": {
3855
2885
  "core/components/ui/card/card.md": {
3856
2886
  "title": "Card",
3857
2887
  "hashes": {
3858
- "card": {
2888
+ "full-example": {
3859
2889
  "count": 1,
3860
- "title": "",
3861
- "type": "page"
2890
+ "title": "Full example",
2891
+ "type": "paragraph"
3862
2892
  }
3863
2893
  }
3864
2894
  }
@@ -4015,7 +3045,7 @@
4015
3045
  }
4016
3046
  },
4017
3047
  {
4018
- "search": "The input-autocomplete component brings input and queue together in order to create a suggest behavior. This is why this component is partially configured as a form input and as a queue.\n",
3048
+ "search": "Champ formulaire + suggestions via queue. Valeur via formDataProvider + name ; la recherche filtre la queue (store interne).\n",
4019
3049
  "files": {
4020
3050
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4021
3051
  "title": "Input-autocomplete",
@@ -4030,7 +3060,7 @@
4030
3060
  }
4031
3061
  },
4032
3062
  {
4033
- "search": "Please note that only basic text input params and methods are implemented at this time. You should also be sure to understand the behavior of a queue in order to take full advantage of the input-autocomplete component.\n",
3063
+ "search": "Rendu des lignes : propriété .items (callback Lit) — voir les démos ci-dessous. Mock : serviceURL="/docs-mock-api/geo/".\n",
4034
3064
  "files": {
4035
3065
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4036
3066
  "title": "Input-autocomplete",
@@ -4045,14 +3075,14 @@
4045
3075
  }
4046
3076
  },
4047
3077
  {
4048
- "search": "Here are some of the features of the input-autocomplete component:\n",
3078
+ "search": "name = paramètre de recherche = valeur formulaire.\n",
4049
3079
  "files": {
4050
3080
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4051
3081
  "title": "Input-autocomplete",
4052
3082
  "hashes": {
4053
- "input-autocomplete": {
3083
+ "simple": {
4054
3084
  "count": 1,
4055
- "title": "",
3085
+ "title": "Simple",
4056
3086
  "type": "paragraph"
4057
3087
  }
4058
3088
  }
@@ -4060,14 +3090,14 @@
4060
3090
  }
4061
3091
  },
4062
3092
  {
4063
- "search": "Doc examples below use HTML binding on suggestion rows. The Lit equivalent uses an items callback with the row object (see docs-queue-geo-demo in src/docs/example/docs-queue-demos.ts). Embedding without Lit: HTML integration.\n",
3093
+ "search": "Recherche sur nom, valeur formulaire = code. Préremplissage via value.\n",
4064
3094
  "files": {
4065
3095
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4066
3096
  "title": "Input-autocomplete",
4067
3097
  "hashes": {
4068
- "input-autocomplete": {
3098
+ "valeur--paramètre-de-recherche": {
4069
3099
  "count": 1,
4070
- "title": "",
3100
+ "title": "Valeur ≠ paramètre de recherche",
4071
3101
  "type": "paragraph"
4072
3102
  }
4073
3103
  }
@@ -4075,14 +3105,14 @@
4075
3105
  }
4076
3106
  },
4077
3107
  {
4078
- "search": "If you are looking for a component to provide a suggest behavior, the input-autocomplete component is a good option. \n",
3108
+ "search": "À la fermeture du pop, seule une valeur de la liste (ou vide) est conservée.\n",
4079
3109
  "files": {
4080
3110
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4081
3111
  "title": "Input-autocomplete",
4082
3112
  "hashes": {
4083
- "input-autocomplete": {
3113
+ "mode-select": {
4084
3114
  "count": 1,
4085
- "title": "",
3115
+ "title": "Mode select",
4086
3116
  "type": "paragraph"
4087
3117
  }
4088
3118
  }
@@ -4090,14 +3120,14 @@
4090
3120
  }
4091
3121
  },
4092
3122
  {
4093
- "search": "In this example, the input will use its name as the search parameter when calling the service responsible for autocompletion.\n",
3123
+ "search": "data-keyboard-nav sur le champ et les items (flèches haut / bas).\n",
4094
3124
  "files": {
4095
3125
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4096
3126
  "title": "Input-autocomplete",
4097
3127
  "hashes": {
4098
- "simple-example": {
3128
+ "navigation-clavier": {
4099
3129
  "count": 1,
4100
- "title": "Simple Example",
3130
+ "title": "Navigation clavier",
4101
3131
  "type": "paragraph"
4102
3132
  }
4103
3133
  }
@@ -4105,29 +3135,29 @@
4105
3135
  }
4106
3136
  },
4107
3137
  {
4108
- "search": "The template is used to render the list items of results.\nThe list items are responsible for making a selection.\n",
3138
+ "search": "Radio",
4109
3139
  "files": {
4110
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4111
- "title": "Input-autocomplete",
3140
+ "core/components/ui/form/radio/radio.md": {
3141
+ "title": "Radio",
4112
3142
  "hashes": {
4113
- "simple-example": {
3143
+ "radio": {
4114
3144
  "count": 1,
4115
- "title": "Simple Example",
4116
- "type": "paragraph"
3145
+ "title": "",
3146
+ "type": "page"
4117
3147
  }
4118
3148
  }
4119
3149
  }
4120
3150
  }
4121
3151
  },
4122
3152
  {
4123
- "search": "This time, we added buttons with the same name as the input while keeping the same data provider.\nThe result is that when you select an item, the input takes the value of the selected item, completing the classic suggest behavior.\n",
3153
+ "search": "Same mock filter as Checkbox (blacklistFlags query param). Radio sends one flag at a time.\n",
4124
3154
  "files": {
4125
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4126
- "title": "Input-autocomplete",
3155
+ "core/components/ui/form/radio/radio.md": {
3156
+ "title": "Radio",
4127
3157
  "hashes": {
4128
- "simple-example": {
3158
+ "example-of-use--blacklist--queue": {
4129
3159
  "count": 1,
4130
- "title": "Simple Example",
3160
+ "title": "Example of use — blacklist + queue",
4131
3161
  "type": "paragraph"
4132
3162
  }
4133
3163
  }
@@ -4135,29 +3165,29 @@
4135
3165
  }
4136
3166
  },
4137
3167
  {
4138
- "search": "In this example, the search parameter is separated from the name of the input. This means that the input will use the name "nom" as the search parameter, but the form data provider will be filled with the data named "siren" from the selected list item.\n",
3168
+ "search": "Select",
4139
3169
  "files": {
4140
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4141
- "title": "Input-autocomplete",
3170
+ "core/components/ui/form/select/select.md": {
3171
+ "title": "Select",
4142
3172
  "hashes": {
4143
- "value-different-from-search-parameter": {
3173
+ "select": {
4144
3174
  "count": 1,
4145
- "title": "Value different from search parameter",
4146
- "type": "paragraph"
3175
+ "title": "",
3176
+ "type": "page"
4147
3177
  }
4148
3178
  }
4149
3179
  }
4150
3180
  }
4151
3181
  },
4152
3182
  {
4153
- "search": "To do this, we need to use the searchParam attribute on the input element. This attribute specifies the name of the search parameter that will be used.\n",
3183
+ "search": "name="lang" is sent as ?lang=fr|en to the doc mock API (filterDocsJokes). Same pattern as Input (contains):\n",
4154
3184
  "files": {
4155
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4156
- "title": "Input-autocomplete",
3185
+ "core/components/ui/form/select/select.md": {
3186
+ "title": "Select",
4157
3187
  "hashes": {
4158
- "value-different-from-search-parameter": {
3188
+ "example-of-use--language-filter--queue": {
4159
3189
  "count": 1,
4160
- "title": "Value different from search parameter",
3190
+ "title": "Example of use — language filter + queue",
4161
3191
  "type": "paragraph"
4162
3192
  }
4163
3193
  }
@@ -4165,29 +3195,29 @@
4165
3195
  }
4166
3196
  },
4167
3197
  {
4168
- "search": "We also need to use the name and value attribute on the list items. This attribute specifies the value of the data provider that will be used for the selected list item.\n",
3198
+ "search": "Switch",
4169
3199
  "files": {
4170
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4171
- "title": "Input-autocomplete",
3200
+ "core/components/ui/form/switch/switch.md": {
3201
+ "title": "Switch",
4172
3202
  "hashes": {
4173
- "value-different-from-search-parameter": {
3203
+ "switch": {
4174
3204
  "count": 1,
4175
- "title": "Value different from search parameter",
4176
- "type": "paragraph"
3205
+ "title": "",
3206
+ "type": "page"
4177
3207
  }
4178
3208
  }
4179
3209
  }
4180
3210
  }
4181
3211
  },
4182
3212
  {
4183
- "search": "By using these attributes, we can separate the search parameter from the name of the input and still fill the form data provider with the data from the selected list item.\n",
3213
+ "search": "Same mock filter as Checkbox; switches can enable several flags (comma-separated in the query).\n",
4184
3214
  "files": {
4185
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4186
- "title": "Input-autocomplete",
3215
+ "core/components/ui/form/switch/switch.md": {
3216
+ "title": "Switch",
4187
3217
  "hashes": {
4188
- "value-different-from-search-parameter": {
3218
+ "example-of-use--blacklist--queue": {
4189
3219
  "count": 1,
4190
- "title": "Value different from search parameter",
3220
+ "title": "Example of use — blacklist + queue",
4191
3221
  "type": "paragraph"
4192
3222
  }
4193
3223
  }
@@ -4195,14 +3225,74 @@
4195
3225
  }
4196
3226
  },
4197
3227
  {
4198
- "search": "This example is the same as the previous one, except that the select attribute is used. This attribute changes the look and feel of the component slightly.\n",
3228
+ "search": "Textarea",
4199
3229
  "files": {
4200
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4201
- "title": "Input-autocomplete",
3230
+ "core/components/ui/form/textarea/textarea.md": {
3231
+ "title": "Textarea",
3232
+ "hashes": {
3233
+ "textarea": {
3234
+ "count": 1,
3235
+ "title": "",
3236
+ "type": "page"
3237
+ }
3238
+ }
3239
+ }
3240
+ }
3241
+ },
3242
+ {
3243
+ "search": "Group",
3244
+ "files": {
3245
+ "core/components/ui/group/group.md": {
3246
+ "title": "Group",
3247
+ "hashes": {
3248
+ "group": {
3249
+ "count": 1,
3250
+ "title": "",
3251
+ "type": "page"
3252
+ }
3253
+ }
3254
+ }
3255
+ }
3256
+ },
3257
+ {
3258
+ "search": "Icon",
3259
+ "files": {
3260
+ "core/components/ui/icon/icon.md": {
3261
+ "title": "Icon",
3262
+ "hashes": {
3263
+ "icon": {
3264
+ "count": 1,
3265
+ "title": "",
3266
+ "type": "page"
3267
+ }
3268
+ }
3269
+ }
3270
+ }
3271
+ },
3272
+ {
3273
+ "search": "Image",
3274
+ "files": {
3275
+ "core/components/ui/image/image.md": {
3276
+ "title": "Image",
3277
+ "hashes": {
3278
+ "image": {
3279
+ "count": 1,
3280
+ "title": "",
3281
+ "type": "page"
3282
+ }
3283
+ }
3284
+ }
3285
+ }
3286
+ },
3287
+ {
3288
+ "search": "Responsive <img> wrapper: aspect ratio, object-fit: cover, rounded corners, and optional fade-in on load. The host uses a light placeholder background (--sc-placeholder-bg) until the file is ready. Default loading is lazy; set loading="eager" for above-the-fold heroes.\n",
3289
+ "files": {
3290
+ "core/components/ui/image/image.md": {
3291
+ "title": "Image",
4202
3292
  "hashes": {
4203
- "select-autocomplete--value-different-from-search-parameter": {
3293
+ "image": {
4204
3294
  "count": 1,
4205
- "title": "Select autocomplete / value different from search parameter",
3295
+ "title": "",
4206
3296
  "type": "paragraph"
4207
3297
  }
4208
3298
  }
@@ -4210,14 +3300,14 @@
4210
3300
  }
4211
3301
  },
4212
3302
  {
4213
- "search": "Now the text is less free because, you must select either something from the list given by the service, or nothing else.\n",
3303
+ "search": "Omit rounded for square corners. Boolean rounded uses the theme token --sc-rounded. Sizes: sm, md, lg, xl, full (circle — pair with ratio="1/1"), none (explicit reset).\n",
4214
3304
  "files": {
4215
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4216
- "title": "Input-autocomplete",
3305
+ "core/components/ui/image/image.md": {
3306
+ "title": "Image",
4217
3307
  "hashes": {
4218
- "select-autocomplete--value-different-from-search-parameter": {
3308
+ "rounded": {
4219
3309
  "count": 1,
4220
- "title": "Select autocomplete / value different from search parameter",
3310
+ "title": "Rounded",
4221
3311
  "type": "paragraph"
4222
3312
  }
4223
3313
  }
@@ -4225,14 +3315,14 @@
4225
3315
  }
4226
3316
  },
4227
3317
  {
4228
- "search": "The following code shows how to use the select attribute in an autocomplete input:\n",
3318
+ "search": "ratio sets CSS aspect-ratio on the image (default auto). The image still fills the host width (width: 100%).\n",
4229
3319
  "files": {
4230
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4231
- "title": "Input-autocomplete",
3320
+ "core/components/ui/image/image.md": {
3321
+ "title": "Image",
4232
3322
  "hashes": {
4233
- "select-autocomplete--value-different-from-search-parameter": {
3323
+ "aspect-ratio": {
4234
3324
  "count": 1,
4235
- "title": "Select autocomplete / value different from search parameter",
3325
+ "title": "Aspect ratio",
4236
3326
  "type": "paragraph"
4237
3327
  }
4238
3328
  }
@@ -4240,14 +3330,14 @@
4240
3330
  }
4241
3331
  },
4242
3332
  {
4243
- "search": "At the moment you can enable keyboard up/down by adding an attribut "data-keyboard-nav" on the component and its listItems\n",
3333
+ "search": "objectPosition maps to CSS object-position (default center center). Useful on wide crops when the subject sits off-center.\n",
4244
3334
  "files": {
4245
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4246
- "title": "Input-autocomplete",
3335
+ "core/components/ui/image/image.md": {
3336
+ "title": "Image",
4247
3337
  "hashes": {
4248
- "keyboard-navigation": {
3338
+ "object-position": {
4249
3339
  "count": 1,
4250
- "title": "keyboard navigation",
3340
+ "title": "Object position",
4251
3341
  "type": "paragraph"
4252
3342
  }
4253
3343
  }
@@ -4255,29 +3345,29 @@
4255
3345
  }
4256
3346
  },
4257
3347
  {
4258
- "search": "Radio",
3348
+ "search": "cover stretches the image to fill a positioned parent (position: relative + fixed height or inset). Aspect ratio on the host is ignored while cover is set.\n",
4259
3349
  "files": {
4260
- "core/components/ui/form/radio/radio.md": {
4261
- "title": "Radio",
3350
+ "core/components/ui/image/image.md": {
3351
+ "title": "Image",
4262
3352
  "hashes": {
4263
- "radio": {
3353
+ "cover": {
4264
3354
  "count": 1,
4265
- "title": "",
4266
- "type": "page"
3355
+ "title": "Cover",
3356
+ "type": "paragraph"
4267
3357
  }
4268
3358
  }
4269
3359
  }
4270
3360
  }
4271
3361
  },
4272
3362
  {
4273
- "search": "Same mock filter as Checkbox (blacklistFlags query param). Radio sends one flag at a time.\n",
3363
+ "search": "Set transition to fade (default when the attribute is present) or fade-scale-out. The image stays at opacity: 0 until the browser fires load, then the loaded class runs the animation. Changing src on an existing element does not replay the effect — mount a new sonic-image when you need another entrance (galleries, infinite scroll).\n",
4274
3364
  "files": {
4275
- "core/components/ui/form/radio/radio.md": {
4276
- "title": "Radio",
3365
+ "core/components/ui/image/image.md": {
3366
+ "title": "Image",
4277
3367
  "hashes": {
4278
- "example-of-use--blacklist--queue": {
3368
+ "load-transition": {
4279
3369
  "count": 1,
4280
- "title": "Example of use — blacklist + queue",
3370
+ "title": "Load transition",
4281
3371
  "type": "paragraph"
4282
3372
  }
4283
3373
  }
@@ -4285,29 +3375,29 @@
4285
3375
  }
4286
3376
  },
4287
3377
  {
4288
- "search": "Select",
3378
+ "search": "Click Add image to append small thumbnails and replay the transition. Clear resets the row.\n",
4289
3379
  "files": {
4290
- "core/components/ui/form/select/select.md": {
4291
- "title": "Select",
3380
+ "core/components/ui/image/image.md": {
3381
+ "title": "Image",
4292
3382
  "hashes": {
4293
- "select": {
3383
+ "load-transition": {
4294
3384
  "count": 1,
4295
- "title": "",
4296
- "type": "page"
3385
+ "title": "Load transition",
3386
+ "type": "paragraph"
4297
3387
  }
4298
3388
  }
4299
3389
  }
4300
3390
  }
4301
3391
  },
4302
3392
  {
4303
- "search": "name="lang" is sent as ?lang=fr|en to the doc mock API (filterDocsJokes). Same pattern as Input (contains):\n",
3393
+ "search": "Always set meaningful alt text (empty string only for decorative images). \n",
4304
3394
  "files": {
4305
- "core/components/ui/form/select/select.md": {
4306
- "title": "Select",
3395
+ "core/components/ui/image/image.md": {
3396
+ "title": "Image",
4307
3397
  "hashes": {
4308
- "example-of-use--language-filter--queue": {
3398
+ "accessibility-and-parts": {
4309
3399
  "count": 1,
4310
- "title": "Example of use — language filter + queue",
3400
+ "title": "Accessibility and parts",
4311
3401
  "type": "paragraph"
4312
3402
  }
4313
3403
  }
@@ -4315,12 +3405,12 @@
4315
3405
  }
4316
3406
  },
4317
3407
  {
4318
- "search": "Switch",
3408
+ "search": "Link",
4319
3409
  "files": {
4320
- "core/components/ui/form/switch/switch.md": {
4321
- "title": "Switch",
3410
+ "core/components/ui/link/link.md": {
3411
+ "title": "Link",
4322
3412
  "hashes": {
4323
- "switch": {
3413
+ "link": {
4324
3414
  "count": 1,
4325
3415
  "title": "",
4326
3416
  "type": "page"
@@ -4330,27 +3420,42 @@
4330
3420
  }
4331
3421
  },
4332
3422
  {
4333
- "search": "Same mock filter as Checkbox; switches can enable several flags (comma-separated in the query).\n",
3423
+ "search": "Loader",
4334
3424
  "files": {
4335
- "core/components/ui/form/switch/switch.md": {
4336
- "title": "Switch",
3425
+ "core/components/ui/loader/loader.md": {
3426
+ "title": "Loader",
4337
3427
  "hashes": {
4338
- "example-of-use--blacklist--queue": {
3428
+ "loader": {
4339
3429
  "count": 1,
4340
- "title": "Example of use — blacklist + queue",
4341
- "type": "paragraph"
3430
+ "title": "",
3431
+ "type": "page"
4342
3432
  }
4343
3433
  }
4344
3434
  }
4345
3435
  }
4346
3436
  },
4347
3437
  {
4348
- "search": "Textarea",
3438
+ "search": "Menu",
4349
3439
  "files": {
4350
- "core/components/ui/form/textarea/textarea.md": {
4351
- "title": "Textarea",
3440
+ "core/components/ui/menu/menu.md": {
3441
+ "title": "Menu",
3442
+ "hashes": {
3443
+ "menu": {
3444
+ "count": 1,
3445
+ "title": "",
3446
+ "type": "page"
3447
+ }
3448
+ }
3449
+ }
3450
+ }
3451
+ },
3452
+ {
3453
+ "search": "Modal",
3454
+ "files": {
3455
+ "core/components/ui/modal/modal.md": {
3456
+ "title": "Modal",
4352
3457
  "hashes": {
4353
- "textarea": {
3458
+ "modal": {
4354
3459
  "count": 1,
4355
3460
  "title": "",
4356
3461
  "type": "page"
@@ -4360,12 +3465,12 @@
4360
3465
  }
4361
3466
  },
4362
3467
  {
4363
- "search": "Group",
3468
+ "search": "Pop",
4364
3469
  "files": {
4365
- "core/components/ui/group/group.md": {
4366
- "title": "Group",
3470
+ "core/components/ui/pop/pop.md": {
3471
+ "title": "Pop",
4367
3472
  "hashes": {
4368
- "group": {
3473
+ "pop": {
4369
3474
  "count": 1,
4370
3475
  "title": "",
4371
3476
  "type": "page"
@@ -4375,105 +3480,105 @@
4375
3480
  }
4376
3481
  },
4377
3482
  {
4378
- "search": "Icon",
3483
+ "search": "Default placement is bottom. Placement is written side-align, like sonic-tooltip: side is top, right, bottom or left, align is start, center or end. Without align, content is aligned on the start of the trigger. If there is not enough room, content flips to the opposite side and stays inside the viewport.\n",
4379
3484
  "files": {
4380
- "core/components/ui/icon/icon.md": {
4381
- "title": "Icon",
3485
+ "core/components/ui/pop/pop.md": {
3486
+ "title": "Pop",
4382
3487
  "hashes": {
4383
- "icon": {
3488
+ "placement": {
4384
3489
  "count": 1,
4385
- "title": "",
4386
- "type": "page"
3490
+ "title": "Placement",
3491
+ "type": "paragraph"
4387
3492
  }
4388
3493
  }
4389
3494
  }
4390
3495
  }
4391
3496
  },
4392
3497
  {
4393
- "search": "Image",
3498
+ "search": "The former space syntax (placement="bottom center") still works but is deprecated.\n",
4394
3499
  "files": {
4395
- "core/components/ui/image/image.md": {
4396
- "title": "Image",
3500
+ "core/components/ui/pop/pop.md": {
3501
+ "title": "Pop",
4397
3502
  "hashes": {
4398
- "image": {
3503
+ "placement": {
4399
3504
  "count": 1,
4400
- "title": "",
4401
- "type": "page"
3505
+ "title": "Placement",
3506
+ "type": "paragraph"
4402
3507
  }
4403
3508
  }
4404
3509
  }
4405
3510
  }
4406
3511
  },
4407
3512
  {
4408
- "search": "Link",
3513
+ "search": "Default shadow is lg.\n",
4409
3514
  "files": {
4410
- "core/components/ui/link/link.md": {
4411
- "title": "Link",
3515
+ "core/components/ui/pop/pop.md": {
3516
+ "title": "Pop",
4412
3517
  "hashes": {
4413
- "link": {
3518
+ "shadow": {
4414
3519
  "count": 1,
4415
- "title": "",
4416
- "type": "page"
3520
+ "title": "Shadow",
3521
+ "type": "paragraph"
4417
3522
  }
4418
3523
  }
4419
3524
  }
4420
3525
  }
4421
3526
  },
4422
3527
  {
4423
- "search": "Loader",
3528
+ "search": "By default, pop is vertically aligned to the middle. Use inline to align it on the text baseline, e.g. inside a sentence.\n",
4424
3529
  "files": {
4425
- "core/components/ui/loader/loader.md": {
4426
- "title": "Loader",
3530
+ "core/components/ui/pop/pop.md": {
3531
+ "title": "Pop",
4427
3532
  "hashes": {
4428
- "loader": {
3533
+ "inline": {
4429
3534
  "count": 1,
4430
- "title": "",
4431
- "type": "page"
3535
+ "title": "Inline",
3536
+ "type": "paragraph"
4432
3537
  }
4433
3538
  }
4434
3539
  }
4435
3540
  }
4436
3541
  },
4437
3542
  {
4438
- "search": "Menu",
3543
+ "search": "By default, a click inside the content closes the pop, as well as a click outside. Add data-on-select="keep" on the content, or on any of its elements, to keep the pop open when interacting with it.\n",
4439
3544
  "files": {
4440
- "core/components/ui/menu/menu.md": {
4441
- "title": "Menu",
3545
+ "core/components/ui/pop/pop.md": {
3546
+ "title": "Pop",
4442
3547
  "hashes": {
4443
- "menu": {
3548
+ "keep-open-on-select": {
4444
3549
  "count": 1,
4445
- "title": "",
4446
- "type": "page"
3550
+ "title": "Keep open on select",
3551
+ "type": "paragraph"
4447
3552
  }
4448
3553
  }
4449
3554
  }
4450
3555
  }
4451
3556
  },
4452
3557
  {
4453
- "search": "Modal",
3558
+ "search": "show() and hide() open and close the pop programmatically (see manual above). The pop dispatches a show event when it opens and a hide event when it closes.\n",
4454
3559
  "files": {
4455
- "core/components/ui/modal/modal.md": {
4456
- "title": "Modal",
3560
+ "core/components/ui/pop/pop.md": {
3561
+ "title": "Pop",
4457
3562
  "hashes": {
4458
- "modal": {
3563
+ "methods-and-events": {
4459
3564
  "count": 1,
4460
- "title": "",
4461
- "type": "page"
3565
+ "title": "Methods and events",
3566
+ "type": "paragraph"
4462
3567
  }
4463
3568
  }
4464
3569
  }
4465
3570
  }
4466
3571
  },
4467
3572
  {
4468
- "search": "Pop",
3573
+ "search": "The content can be styled from outside with ::part(content).\n",
4469
3574
  "files": {
4470
3575
  "core/components/ui/pop/pop.md": {
4471
3576
  "title": "Pop",
4472
3577
  "hashes": {
4473
- "pop": {
3578
+ "styling": {
4474
3579
  "count": 1,
4475
- "title": "",
4476
- "type": "page"
3580
+ "title": "Styling",
3581
+ "type": "paragraph"
4477
3582
  }
4478
3583
  }
4479
3584
  }
@@ -4764,21 +3869,6 @@
4764
3869
  }
4765
3870
  }
4766
3871
  },
4767
- {
4768
- "search": "Opt-in addons (HF / shader / WebGPU): Visual stack.\n",
4769
- "files": {
4770
- "docs/_core-concept/dataFlow.md": {
4771
- "title": "Data flow",
4772
- "hashes": {
4773
- "quick-map": {
4774
- "count": 1,
4775
- "title": "Quick map",
4776
- "type": "paragraph"
4777
- }
4778
- }
4779
- }
4780
- }
4781
- },
4782
3872
  {
4783
3873
  "search": "Skill: concorde-get-set-dp in the package ai/ folder.\n",
4784
3874
  "files": {
@@ -8669,96 +7759,6 @@
8669
7759
  }
8670
7760
  }
8671
7761
  },
8672
- {
8673
- "search": "CDN addons",
8674
- "files": {
8675
- "docs/_getting-started/cdn-addons.md": {
8676
- "title": "CDN addons",
8677
- "hashes": {
8678
- "cdn-addons": {
8679
- "count": 1,
8680
- "title": "",
8681
- "type": "page"
8682
- }
8683
- }
8684
- }
8685
- }
8686
- },
8687
- {
8688
- "search": "Heavy opt-in features stay out of concorde-core.bundle.js. Load the core bundle first, then the addon you need.\n",
8689
- "files": {
8690
- "docs/_getting-started/cdn-addons.md": {
8691
- "title": "CDN addons",
8692
- "hashes": {
8693
- "cdn-addons": {
8694
- "count": 1,
8695
- "title": "",
8696
- "type": "paragraph"
8697
- }
8698
- }
8699
- }
8700
- }
8701
- },
8702
- {
8703
- "search": "npm: @supersoniks/concorde/bundle/3d, …/bundle/shader, …/bundle/webgpu, …/bundle/hugging-face-infer (IIFE). ESM twins: …/bundle/3d/es, etc.\n",
8704
- "files": {
8705
- "docs/_getting-started/cdn-addons.md": {
8706
- "title": "CDN addons",
8707
- "hashes": {
8708
- "cdn-addons": {
8709
- "count": 1,
8710
- "title": "",
8711
- "type": "paragraph"
8712
- }
8713
- }
8714
- }
8715
- }
8716
- },
8717
- {
8718
- "search": "Scripts in the descriptor are awaited before nodes are created. A failed loadJS throws (no UI parse without deps). Prefer the IIFE .bundle.js files. Descriptors (js[], markup, innerHTML) must be trusted.\n",
8719
- "files": {
8720
- "docs/_getting-started/cdn-addons.md": {
8721
- "title": "CDN addons",
8722
- "hashes": {
8723
- "sdui-js": {
8724
- "count": 1,
8725
- "title": "SDUI (`js[]`)",
8726
- "type": "paragraph"
8727
- }
8728
- }
8729
- }
8730
- }
8731
- },
8732
- {
8733
- "search": "The CE alone is not enough: configure runtime + allowlist once (page script or app entry). The IIFE exposes window.ConcordeHF.\n",
8734
- "files": {
8735
- "docs/_getting-started/cdn-addons.md": {
8736
- "title": "CDN addons",
8737
- "hashes": {
8738
- "hugging-face--minimal-bootstrap": {
8739
- "count": 1,
8740
- "title": "Hugging Face — minimal bootstrap",
8741
- "type": "paragraph"
8742
- }
8743
- }
8744
- }
8745
- }
8746
- },
8747
- {
8748
- "search": "Peer deps (npm, optional): three@0.180.0, @huggingface/transformers@4.3.0. Not needed when using the CDN IIFE addons (Three is inlined in concorde-3d; Transformers.js stays on its own CDN via configureHuggingFace).\n",
8749
- "files": {
8750
- "docs/_getting-started/cdn-addons.md": {
8751
- "title": "CDN addons",
8752
- "hashes": {
8753
- "hugging-face--minimal-bootstrap": {
8754
- "count": 1,
8755
- "title": "Hugging Face — minimal bootstrap",
8756
- "type": "paragraph"
8757
- }
8758
- }
8759
- }
8760
- }
8761
- },
8762
7762
  {
8763
7763
  "search": "Manual installation (Vite)",
8764
7764
  "files": {
@@ -9285,7 +8285,7 @@
9285
8285
  }
9286
8286
  },
9287
8287
  {
9288
- "search": "In the case where it can be directly used in a page, it should also be globally referenced. Heavy / optional features (3d, shader, webgpu, hugging-face) use CDN addon bundles — see CDN addons — and must not be added to functional.ts / ui.ts.\n",
8288
+ "search": "In the case where it can be directly used in a page, it should also be globally referenced, especially considering the creation of specific bundles in the future.\n",
9289
8289
  "files": {
9290
8290
  "docs/_getting-started/create-a-component.md": {
9291
8291
  "title": "Creating components",
@@ -10955,72 +9955,12 @@
10955
9955
  }
10956
9956
  },
10957
9957
  {
10958
- "search": "HTML integration (no Lit)",
10959
- "files": {
10960
- "docs/_misc/html-integration.md": {
10961
- "title": "HTML integration (no Lit)",
10962
- "hashes": {
10963
- "html-integration-no-lit": {
10964
- "count": 1,
10965
- "title": "",
10966
- "type": "page"
10967
- }
10968
- }
10969
- }
10970
- }
10971
- },
10972
- {
10973
- "search": "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.\n",
10974
- "files": {
10975
- "docs/_misc/html-integration.md": {
10976
- "title": "HTML integration (no Lit)",
10977
- "hashes": {
10978
- "html-integration-no-lit": {
10979
- "count": 1,
10980
- "title": "",
10981
- "type": "paragraph"
10982
- }
10983
- }
10984
- }
10985
- }
10986
- },
10987
- {
10988
- "search": "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>.\n",
10989
- "files": {
10990
- "docs/_misc/html-integration.md": {
10991
- "title": "HTML integration (no Lit)",
10992
- "hashes": {
10993
- "html-integration-no-lit": {
10994
- "count": 1,
10995
- "title": "",
10996
- "type": "paragraph"
10997
- }
10998
- }
10999
- }
11000
- }
11001
- },
11002
- {
11003
- "search": "New application code in TypeScript should use @subscribe, formDataProvider + name, and Lit templates — not HTML data-bind.\n",
11004
- "files": {
11005
- "docs/_misc/html-integration.md": {
11006
- "title": "HTML integration (no Lit)",
11007
- "hashes": {
11008
- "html-integration-no-lit": {
11009
- "count": 1,
11010
- "title": "",
11011
- "type": "paragraph"
11012
- }
11013
- }
11014
- }
11015
- }
11016
- },
11017
- {
11018
- "search": "Visual stack",
9958
+ "search": "FormElement without Subscriber (REDMINE-79569)",
11019
9959
  "files": {
11020
- "docs/_misc/visual-stack.md": {
11021
- "title": "Visual stack",
9960
+ "docs/_misc/formelement-subscriber-removal.md": {
9961
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11022
9962
  "hashes": {
11023
- "visual-stack": {
9963
+ "formelement-without-subscriber-redmine-79569": {
11024
9964
  "count": 1,
11025
9965
  "title": "",
11026
9966
  "type": "page"
@@ -11030,12 +9970,12 @@
11030
9970
  }
11031
9971
  },
11032
9972
  {
11033
- "search": "Examples of chaining opt-in addons (HF, shader, WebGPU, 3D). Outside the main “functional” flow.\n",
9973
+ "search": "Form fields (sonic-input, textarea, select, checkbox, radio, switch, button, input-autocomplete) no longer inherit the Subscriber mixin.\n",
11034
9974
  "files": {
11035
- "docs/_misc/visual-stack.md": {
11036
- "title": "Visual stack",
9975
+ "docs/_misc/formelement-subscriber-removal.md": {
9976
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11037
9977
  "hashes": {
11038
- "visual-stack": {
9978
+ "formelement-without-subscriber-redmine-79569": {
11039
9979
  "count": 1,
11040
9980
  "title": "",
11041
9981
  "type": "paragraph"
@@ -11045,44 +9985,14 @@
11045
9985
  }
11046
9986
  },
11047
9987
  {
11048
- "search": "Photo → sonic-hugging-face-infer (depth) → sonic-shader (parallax) → extract → sonic-jsonata (stats / thresholds).\n",
11049
- "files": {
11050
- "docs/_misc/visual-stack.md": {
11051
- "title": "Visual stack",
11052
- "hashes": {
11053
- "hf-depth--parallax": {
11054
- "count": 1,
11055
- "title": "HF depth → parallax",
11056
- "type": "paragraph"
11057
- }
11058
- }
11059
- }
11060
- }
11061
- },
11062
- {
11063
- "search": "Do not pipe texture channels through jsonata on every frame / slider: that forces rebuilds. JSONata is for scalar derivatives, not the media bus.\n",
11064
- "files": {
11065
- "docs/_misc/visual-stack.md": {
11066
- "title": "Visual stack",
11067
- "hashes": {
11068
- "golden-rule": {
11069
- "count": 1,
11070
- "title": "Golden rule",
11071
- "type": "paragraph"
11072
- }
11073
- }
11074
- }
11075
- }
11076
- },
11077
- {
11078
- "search": "sonic-3d and sonic-shader keep separate WebGL contexts. For realtime post, point a channel at the 3D host with #id — the shader copies the canvas each frame (texImage2D), no JPEG.\n",
9988
+ "search": "Preview pattern still valid: form writes via formDataProvider, display card reads via dataProvider on a Subscriber (or @subscribe) sibling — not on the fields themselves.\n",
11079
9989
  "files": {
11080
- "docs/_misc/visual-stack.md": {
11081
- "title": "Visual stack",
9990
+ "docs/_misc/formelement-subscriber-removal.md": {
9991
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11082
9992
  "hashes": {
11083
- "3d--shader-live-gpu-bridge": {
9993
+ "behaviour-now": {
11084
9994
  "count": 1,
11085
- "title": "3D → shader live (GPU bridge)",
9995
+ "title": "Behaviour now",
11086
9996
  "type": "paragraph"
11087
9997
  }
11088
9998
  }
@@ -11090,14 +10000,14 @@
11090
10000
  }
11091
10001
  },
11092
10002
  {
11093
- "search": "Also accepted: <img>, <video>, <canvas>, or another Concorde host that implements SonicFrameSource (getFrameCanvas + frameSeq). DP form: { element: "#plateau" } or { element: el }.\n",
10003
+ "search": "Files under la-billetterie/concorde that mention both formDataProvider and dataProvider= (review; many are filter+queue, not field autofill):\n",
11094
10004
  "files": {
11095
- "docs/_misc/visual-stack.md": {
11096
- "title": "Visual stack",
10005
+ "docs/_misc/formelement-subscriber-removal.md": {
10006
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11097
10007
  "hashes": {
11098
- "3d--shader-live-gpu-bridge": {
10008
+ "billetterie-collect--dual-channel-risk": {
11099
10009
  "count": 1,
11100
- "title": "3D → shader live (GPU bridge)",
10010
+ "title": "Billetterie collect — dual-channel risk",
11101
10011
  "type": "paragraph"
11102
10012
  }
11103
10013
  }
@@ -11105,14 +10015,14 @@
11105
10015
  }
11106
10016
  },
11107
10017
  {
11108
- "search": "frame-out (JPEG ObjectURL) remains for export / HF / freeze — not for live post.\n",
10018
+ "search": "formDataProvider on filter bar, dataProvider on sonic-queue / list — no field autofill dependency:\n",
11109
10019
  "files": {
11110
- "docs/_misc/visual-stack.md": {
11111
- "title": "Visual stack",
10020
+ "docs/_misc/formelement-subscriber-removal.md": {
10021
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11112
10022
  "hashes": {
11113
- "3d--shader-live-gpu-bridge": {
10023
+ "filters--queue-usually-ok": {
11114
10024
  "count": 1,
11115
- "title": "3D → shader live (GPU bridge)",
10025
+ "title": "Filters + queue (usually OK)",
11116
10026
  "type": "paragraph"
11117
10027
  }
11118
10028
  }
@@ -11120,14 +10030,14 @@
11120
10030
  }
11121
10031
  },
11122
10032
  {
11123
- "search": "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).\n",
10033
+ "search": "Re-run audit:\n",
11124
10034
  "files": {
11125
- "docs/_misc/visual-stack.md": {
11126
- "title": "Visual stack",
10035
+ "docs/_misc/formelement-subscriber-removal.md": {
10036
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11127
10037
  "hashes": {
11128
- "3d--webgpu-live": {
10038
+ "full-dual-channel-file-list-55": {
11129
10039
  "count": 1,
11130
- "title": "3D → WebGPU live",
10040
+ "title": "Full dual-channel file list (55)",
11131
10041
  "type": "paragraph"
11132
10042
  }
11133
10043
  }
@@ -11135,14 +10045,14 @@
11135
10045
  }
11136
10046
  },
11137
10047
  {
11138
- "search": "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.\n",
10048
+ "search": "Smoke form demos: input, textarea, select, checkbox (incl. check-all), radio, switch, button form modes, queue + dataFilterProvider, submit, validation / sameValueAs, input-autocomplete.\n",
11139
10049
  "files": {
11140
- "docs/_misc/visual-stack.md": {
11141
- "title": "Visual stack",
10050
+ "docs/_misc/formelement-subscriber-removal.md": {
10051
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11142
10052
  "hashes": {
11143
- "post-fx--depth-in-sonic-3d": {
10053
+ "non-regression-concorde-docs": {
11144
10054
  "count": 1,
11145
- "title": "Post FX + depth (in sonic-3d)",
10055
+ "title": "Non-regression (Concorde docs)",
11146
10056
  "type": "paragraph"
11147
10057
  }
11148
10058
  }
@@ -11150,29 +10060,29 @@
11150
10060
  }
11151
10061
  },
11152
10062
  {
11153
- "search": "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.\n",
10063
+ "search": "HTML integration (no Lit)",
11154
10064
  "files": {
11155
- "docs/_misc/visual-stack.md": {
11156
- "title": "Visual stack",
10065
+ "docs/_misc/html-integration.md": {
10066
+ "title": "HTML integration (no Lit)",
11157
10067
  "hashes": {
11158
- "harris--patches--webgpu": {
10068
+ "html-integration-no-lit": {
11159
10069
  "count": 1,
11160
- "title": "Harris → patches → WebGPU",
11161
- "type": "paragraph"
10070
+ "title": "",
10071
+ "type": "page"
11162
10072
  }
11163
10073
  }
11164
10074
  }
11165
10075
  }
11166
10076
  },
11167
10077
  {
11168
- "search": "Use buffer-format="rgba16f" so signed IxIy / non-clamped Ix² survive the buffer (RGBA8 zeros negatives and saturates). See Shader — buffer precision.\n",
10078
+ "search": "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.\n",
11169
10079
  "files": {
11170
- "docs/_misc/visual-stack.md": {
11171
- "title": "Visual stack",
10080
+ "docs/_misc/html-integration.md": {
10081
+ "title": "HTML integration (no Lit)",
11172
10082
  "hashes": {
11173
- "harris--patches--webgpu": {
10083
+ "html-integration-no-lit": {
11174
10084
  "count": 1,
11175
- "title": "Harris → patches → WebGPU",
10085
+ "title": "",
11176
10086
  "type": "paragraph"
11177
10087
  }
11178
10088
  }
@@ -11180,14 +10090,14 @@
11180
10090
  }
11181
10091
  },
11182
10092
  {
11183
- "search": "Channel rebinds and release-offscreen="auto" (keep FBO state when a pass uses self) : Shader — état et visibilité.\n",
10093
+ "search": "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).\n",
11184
10094
  "files": {
11185
- "docs/_misc/visual-stack.md": {
11186
- "title": "Visual stack",
10095
+ "docs/_misc/html-integration.md": {
10096
+ "title": "HTML integration (no Lit)",
11187
10097
  "hashes": {
11188
- "harris--patches--webgpu": {
10098
+ "html-integration-no-lit": {
11189
10099
  "count": 1,
11190
- "title": "Harris → patches → WebGPU",
10100
+ "title": "",
11191
10101
  "type": "paragraph"
11192
10102
  }
11193
10103
  }
@@ -11195,14 +10105,14 @@
11195
10105
  }
11196
10106
  },
11197
10107
  {
11198
- "search": "sonic-3d live sources keep playing off-screen when a #id consumer is registered (or play-offscreen) — see 3D — bridging.\n",
10108
+ "search": "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>.\n",
11199
10109
  "files": {
11200
- "docs/_misc/visual-stack.md": {
11201
- "title": "Visual stack",
10110
+ "docs/_misc/html-integration.md": {
10111
+ "title": "HTML integration (no Lit)",
11202
10112
  "hashes": {
11203
- "harris--patches--webgpu": {
10113
+ "html-integration-no-lit": {
11204
10114
  "count": 1,
11205
- "title": "Harris → patches → WebGPU",
10115
+ "title": "",
11206
10116
  "type": "paragraph"
11207
10117
  }
11208
10118
  }
@@ -11210,14 +10120,14 @@
11210
10120
  }
11211
10121
  },
11212
10122
  {
11213
- "search": "SonicMediaRef / SonicFrameSource / toMediaUrl / cloneMediaRef — @supersoniks/concorde/core/utils/mediaRef.\n",
10123
+ "search": "New application code in TypeScript should use @subscribe, formDataProvider + name, and Lit templates — not HTML data-bind.\n",
11214
10124
  "files": {
11215
- "docs/_misc/visual-stack.md": {
11216
- "title": "Visual stack",
10125
+ "docs/_misc/html-integration.md": {
10126
+ "title": "HTML integration (no Lit)",
11217
10127
  "hashes": {
11218
- "media-contract": {
10128
+ "html-integration-no-lit": {
11219
10129
  "count": 1,
11220
- "title": "Media contract",
10130
+ "title": "",
11221
10131
  "type": "paragraph"
11222
10132
  }
11223
10133
  }