@supersoniks/concorde 4.9.98-visual-stack.1 → 4.9.98-visual-stack.3

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 (340) 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 +182 -10
  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 +270 -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 +5 -1
  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/cdn-addons.md +1 -0
  323. package/src/docs/_getting-started/concorde-outside.md +3 -3
  324. package/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  325. package/src/docs/_misc/html-integration.md +2 -0
  326. package/src/docs/code.ts +3 -1
  327. package/src/docs/components/docs-demo-sources.ts +60 -0
  328. package/src/docs/docs.ts +1 -0
  329. package/src/docs/example/docs-input-autocomplete-demos.ts +110 -0
  330. package/src/docs/mock-api/router.ts +17 -1
  331. package/src/docs/navigation/navigation.ts +8 -0
  332. package/src/docs/search/docs-search.json +956 -243
  333. package/src/docs/tailwind/css/tailwind.css +13 -6
  334. package/src/tsconfig.json +135 -6
  335. package/src/tsconfig.tsbuildinfo +1 -1
  336. package/tailwind.config.js +50 -3
  337. package/vite/config.js +23 -35
  338. package/vite.config.mts +5 -0
  339. package/vitest.setup.ts +49 -13
  340. package/docs/assets/index-BZiZXMU-.css +0 -1
@@ -132,6 +132,10 @@
132
132
  }
133
133
  }
134
134
  },
135
+ "core/components/functional/interactive/interactive.md": {
136
+ "title": "Interactive (SDUI)",
137
+ "hashes": {}
138
+ },
135
139
  "core/components/functional/jsonata/jsonata.md": {
136
140
  "title": "Jsonata",
137
141
  "hashes": {
@@ -307,6 +311,31 @@
307
311
  }
308
312
  }
309
313
  },
314
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
315
+ "title": "Input-autocomplete",
316
+ "hashes": {
317
+ "simple": {
318
+ "count": 1,
319
+ "title": "Simple",
320
+ "type": "paragraph"
321
+ },
322
+ "valeur--paramètre-de-recherche": {
323
+ "count": 1,
324
+ "title": "Valeur ≠ paramètre de recherche",
325
+ "type": "paragraph"
326
+ },
327
+ "mode-select": {
328
+ "count": 1,
329
+ "title": "Mode select",
330
+ "type": "paragraph"
331
+ },
332
+ "navigation-clavier": {
333
+ "count": 1,
334
+ "title": "Navigation clavier",
335
+ "type": "paragraph"
336
+ }
337
+ }
338
+ },
310
339
  "core/components/ui/form/radio/radio.md": {
311
340
  "title": "Radio",
312
341
  "hashes": {
@@ -1364,6 +1393,90 @@
1364
1393
  }
1365
1394
  }
1366
1395
  },
1396
+ {
1397
+ "search": "Interactive (SDUI)",
1398
+ "files": {
1399
+ "core/components/functional/interactive/interactive.md": {
1400
+ "title": "Interactive (SDUI)",
1401
+ "hashes": {
1402
+ "interactive-sdui": {
1403
+ "count": 1,
1404
+ "title": "",
1405
+ "type": "page"
1406
+ }
1407
+ }
1408
+ }
1409
+ }
1410
+ },
1411
+ {
1412
+ "search": "Addon opt-in @supersoniks/concorde/interactive for declarative playable UIs under a strict CSP (no eval, no inline script, no on* handlers).\n",
1413
+ "files": {
1414
+ "core/components/functional/interactive/interactive.md": {
1415
+ "title": "Interactive (SDUI)",
1416
+ "hashes": {
1417
+ "interactive-sdui": {
1418
+ "count": 1,
1419
+ "title": "",
1420
+ "type": "paragraph"
1421
+ }
1422
+ }
1423
+ }
1424
+ }
1425
+ },
1426
+ {
1427
+ "search": "",
1428
+ "files": {
1429
+ "core/components/functional/interactive/interactive.md": {
1430
+ "title": "Interactive (SDUI)",
1431
+ "hashes": {}
1432
+ }
1433
+ }
1434
+ },
1435
+ {
1436
+ "search": "Also: sonic-if accepts dataProvider + key + equals/not/truthy/gt/lt for SDUI. sonic-value accepts format="00000" or format="intl:fr-FR".\n",
1437
+ "files": {
1438
+ "core/components/functional/interactive/interactive.md": {
1439
+ "title": "Interactive (SDUI)",
1440
+ "hashes": {
1441
+ "components": {
1442
+ "count": 1,
1443
+ "title": "Components",
1444
+ "type": "paragraph"
1445
+ }
1446
+ }
1447
+ }
1448
+ }
1449
+ },
1450
+ {
1451
+ "search": "Injected: $rand, $randInt, $clamp, $range, $set, $matrix, $rotate.$random and $now throw — use $rand(seed) and $action.t.\n",
1452
+ "files": {
1453
+ "core/components/functional/interactive/interactive.md": {
1454
+ "title": "Interactive (SDUI)",
1455
+ "hashes": {
1456
+ "reducer-purity": {
1457
+ "count": 1,
1458
+ "title": "Reducer purity",
1459
+ "type": "paragraph"
1460
+ }
1461
+ }
1462
+ }
1463
+ }
1464
+ },
1465
+ {
1466
+ "search": "Declarative sound, multiplayer, persistence.\n",
1467
+ "files": {
1468
+ "core/components/functional/interactive/interactive.md": {
1469
+ "title": "Interactive (SDUI)",
1470
+ "hashes": {
1471
+ "out-of-scope-this-pass": {
1472
+ "count": 1,
1473
+ "title": "Out of scope (this pass)",
1474
+ "type": "paragraph"
1475
+ }
1476
+ }
1477
+ }
1478
+ }
1479
+ },
1367
1480
  {
1368
1481
  "search": "Jsonata",
1369
1482
  "files": {
@@ -3790,44 +3903,44 @@
3790
3903
  }
3791
3904
  },
3792
3905
  {
3793
- "search": "Badge",
3906
+ "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",
3794
3907
  "files": {
3795
- "core/components/ui/badge/badge.md": {
3796
- "title": "Badge",
3908
+ "core/components/ui/alert/alert.md": {
3909
+ "title": "Alert",
3797
3910
  "hashes": {
3798
- "badge": {
3911
+ "alert": {
3799
3912
  "count": 1,
3800
3913
  "title": "",
3801
- "type": "page"
3914
+ "type": "paragraph"
3802
3915
  }
3803
3916
  }
3804
3917
  }
3805
3918
  }
3806
3919
  },
3807
3920
  {
3808
- "search": "Button",
3921
+ "search": "Use status: default, info, success, warning, error.\n",
3809
3922
  "files": {
3810
- "core/components/ui/button/button.md": {
3811
- "title": "Button",
3923
+ "core/components/ui/alert/alert.md": {
3924
+ "title": "Alert",
3812
3925
  "hashes": {
3813
- "button": {
3926
+ "alert": {
3814
3927
  "count": 1,
3815
3928
  "title": "",
3816
- "type": "page"
3929
+ "type": "paragraph"
3817
3930
  }
3818
3931
  }
3819
3932
  }
3820
3933
  }
3821
3934
  },
3822
3935
  {
3823
- "search": "The length of the button depends on the size of its content\n\n",
3936
+ "search": "Color and icon follow status. With no status, behavior is default.\n",
3824
3937
  "files": {
3825
- "core/components/ui/button/button.md": {
3826
- "title": "Button",
3938
+ "core/components/ui/alert/alert.md": {
3939
+ "title": "Alert",
3827
3940
  "hashes": {
3828
- "loading": {
3941
+ "status": {
3829
3942
  "count": 1,
3830
- "title": "Loading",
3943
+ "title": "Status",
3831
3944
  "type": "paragraph"
3832
3945
  }
3833
3946
  }
@@ -3835,74 +3948,74 @@
3835
3948
  }
3836
3949
  },
3837
3950
  {
3838
- "search": "Captcha",
3951
+ "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",
3839
3952
  "files": {
3840
- "core/components/ui/captcha/captcha.md": {
3841
- "title": "Captcha",
3953
+ "core/components/ui/alert/alert.md": {
3954
+ "title": "Alert",
3842
3955
  "hashes": {
3843
- "captcha": {
3956
+ "accessibility-announce": {
3844
3957
  "count": 1,
3845
- "title": "",
3846
- "type": "page"
3958
+ "title": "Accessibility (`announce`)",
3959
+ "type": "paragraph"
3847
3960
  }
3848
3961
  }
3849
3962
  }
3850
3963
  }
3851
3964
  },
3852
3965
  {
3853
- "search": "Card",
3966
+ "search": "sonic-alert-messages sets announce on every rendered alert.\n",
3854
3967
  "files": {
3855
- "core/components/ui/card/card.md": {
3856
- "title": "Card",
3968
+ "core/components/ui/alert/alert.md": {
3969
+ "title": "Alert",
3857
3970
  "hashes": {
3858
- "card": {
3971
+ "accessibility-announce": {
3859
3972
  "count": 1,
3860
- "title": "",
3861
- "type": "page"
3973
+ "title": "Accessibility (`announce`)",
3974
+ "type": "paragraph"
3862
3975
  }
3863
3976
  }
3864
3977
  }
3865
3978
  }
3866
3979
  },
3867
3980
  {
3868
- "search": "Divider",
3981
+ "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",
3869
3982
  "files": {
3870
- "core/components/ui/divider/divider.md": {
3871
- "title": "Divider",
3983
+ "core/components/ui/alert/alert.md": {
3984
+ "title": "Alert",
3872
3985
  "hashes": {
3873
- "divider": {
3986
+ "content-and-icon": {
3874
3987
  "count": 1,
3875
- "title": "",
3876
- "type": "page"
3988
+ "title": "Content and icon",
3989
+ "type": "paragraph"
3877
3990
  }
3878
3991
  }
3879
3992
  }
3880
3993
  }
3881
3994
  },
3882
3995
  {
3883
- "search": "Checkbox",
3996
+ "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",
3884
3997
  "files": {
3885
- "core/components/ui/form/checkbox/checkbox.md": {
3886
- "title": "Checkbox",
3998
+ "core/components/ui/alert/alert.md": {
3999
+ "title": "Alert",
3887
4000
  "hashes": {
3888
- "checkbox": {
4001
+ "custom-icon-slot": {
3889
4002
  "count": 1,
3890
- "title": "",
3891
- "type": "page"
4003
+ "title": "Custom icon slot",
4004
+ "type": "paragraph"
3892
4005
  }
3893
4006
  }
3894
4007
  }
3895
4008
  }
3896
4009
  },
3897
4010
  {
3898
- "search": "Checked blacklistFlags values are sent to the mock API (?blacklistFlags=racist,sexist,…), which excludes jokes whose flags match (see filterDocsJokes in src/docs/mock-api/fixtures.ts).\n",
4011
+ "search": "Rich content in the slot (buttons, links).\n",
3899
4012
  "files": {
3900
- "core/components/ui/form/checkbox/checkbox.md": {
3901
- "title": "Checkbox",
4013
+ "core/components/ui/alert/alert.md": {
4014
+ "title": "Alert",
3902
4015
  "hashes": {
3903
- "example-of-use--blacklist--queue": {
4016
+ "alert-with-link": {
3904
4017
  "count": 1,
3905
- "title": "Example of use — blacklist + queue",
4018
+ "title": "Alert with link",
3906
4019
  "type": "paragraph"
3907
4020
  }
3908
4021
  }
@@ -3910,57 +4023,57 @@
3910
4023
  }
3911
4024
  },
3912
4025
  {
3913
- "search": "Fieldset",
4026
+ "search": "Tinted background from the status color (color-mix on currentColor).\n",
3914
4027
  "files": {
3915
- "core/components/ui/form/fieldset/fieldset.md": {
3916
- "title": "Fieldset",
4028
+ "core/components/ui/alert/alert.md": {
4029
+ "title": "Alert",
3917
4030
  "hashes": {
3918
- "fieldset": {
4031
+ "background": {
3919
4032
  "count": 1,
3920
- "title": "",
3921
- "type": "page"
4033
+ "title": "Background",
4034
+ "type": "paragraph"
3922
4035
  }
3923
4036
  }
3924
4037
  }
3925
4038
  }
3926
4039
  },
3927
4040
  {
3928
- "search": "Form-actions",
4041
+ "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",
3929
4042
  "files": {
3930
- "core/components/ui/form/form-actions/form-actions.md": {
3931
- "title": "Form-actions",
4043
+ "core/components/ui/alert/alert.md": {
4044
+ "title": "Alert",
3932
4045
  "hashes": {
3933
- "form-actions": {
4046
+ "dismissible": {
3934
4047
  "count": 1,
3935
- "title": "",
3936
- "type": "page"
4048
+ "title": "Dismissible",
4049
+ "type": "paragraph"
3937
4050
  }
3938
4051
  }
3939
4052
  }
3940
4053
  }
3941
4054
  },
3942
4055
  {
3943
- "search": "Form-layout",
4056
+ "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",
3944
4057
  "files": {
3945
- "core/components/ui/form/form-layout/form-layout.md": {
3946
- "title": "Form-layout",
4058
+ "core/components/ui/alert/alert.md": {
4059
+ "title": "Alert",
3947
4060
  "hashes": {
3948
- "form-layout": {
4061
+ "dismiss-forever": {
3949
4062
  "count": 1,
3950
- "title": "",
3951
- "type": "page"
4063
+ "title": "Dismiss forever",
4064
+ "type": "paragraph"
3952
4065
  }
3953
4066
  }
3954
4067
  }
3955
4068
  }
3956
4069
  },
3957
4070
  {
3958
- "search": "Input",
4071
+ "search": "Badge",
3959
4072
  "files": {
3960
- "core/components/ui/form/input/input.md": {
3961
- "title": "Input",
4073
+ "core/components/ui/badge/badge.md": {
4074
+ "title": "Badge",
3962
4075
  "hashes": {
3963
- "input": {
4076
+ "badge": {
3964
4077
  "count": 1,
3965
4078
  "title": "",
3966
4079
  "type": "page"
@@ -3970,14 +4083,14 @@
3970
4083
  }
3971
4084
  },
3972
4085
  {
3973
- "search": "Liste des types\n",
4086
+ "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",
3974
4087
  "files": {
3975
- "core/components/ui/form/input/input.md": {
3976
- "title": "Input",
4088
+ "core/components/ui/badge/badge.md": {
4089
+ "title": "Badge",
3977
4090
  "hashes": {
3978
- "type": {
4091
+ "badge": {
3979
4092
  "count": 1,
3980
- "title": "Type",
4093
+ "title": "",
3981
4094
  "type": "paragraph"
3982
4095
  }
3983
4096
  }
@@ -3985,14 +4098,14 @@
3985
4098
  }
3986
4099
  },
3987
4100
  {
3988
- "search": "Filter with formDataProvider + name="contains" (mock API: substring on joke text). Caption and rows via Lit (@subscribe, .items on sonic-queue):\n",
4101
+ "search": "Colors come from theme tokens (--sc-primary, --sc-danger, …) or the semantic type values below. \n",
3989
4102
  "files": {
3990
- "core/components/ui/form/input/input.md": {
3991
- "title": "Input",
4103
+ "core/components/ui/badge/badge.md": {
4104
+ "title": "Badge",
3992
4105
  "hashes": {
3993
- "example-of-use--search--queue": {
4106
+ "badge": {
3994
4107
  "count": 1,
3995
- "title": "Example of use — search + queue",
4108
+ "title": "",
3996
4109
  "type": "paragraph"
3997
4110
  }
3998
4111
  }
@@ -4000,29 +4113,29 @@
4000
4113
  }
4001
4114
  },
4002
4115
  {
4003
- "search": "Input-autocomplete",
4116
+ "search": "default — subtle background (base-100). neutral — dark fill (base-content) with light text, useful on light backgrounds.\n",
4004
4117
  "files": {
4005
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4006
- "title": "Input-autocomplete",
4118
+ "core/components/ui/badge/badge.md": {
4119
+ "title": "Badge",
4007
4120
  "hashes": {
4008
- "input-autocomplete": {
4121
+ "type": {
4009
4122
  "count": 1,
4010
- "title": "",
4011
- "type": "page"
4123
+ "title": "Type",
4124
+ "type": "paragraph"
4012
4125
  }
4013
4126
  }
4014
4127
  }
4015
4128
  }
4016
4129
  },
4017
4130
  {
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",
4131
+ "search": "outline — border and text in the type color. ghost — text only, no padding (except in forced-colors mode).\n",
4019
4132
  "files": {
4020
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4021
- "title": "Input-autocomplete",
4133
+ "core/components/ui/badge/badge.md": {
4134
+ "title": "Badge",
4022
4135
  "hashes": {
4023
- "input-autocomplete": {
4136
+ "variant": {
4024
4137
  "count": 1,
4025
- "title": "",
4138
+ "title": "Variant",
4026
4139
  "type": "paragraph"
4027
4140
  }
4028
4141
  }
@@ -4030,14 +4143,14 @@
4030
4143
  }
4031
4144
  },
4032
4145
  {
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",
4146
+ "search": "Default size is md (omit the size attribute). Typography and padding follow sonic-button.\n",
4034
4147
  "files": {
4035
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4036
- "title": "Input-autocomplete",
4148
+ "core/components/ui/badge/badge.md": {
4149
+ "title": "Badge",
4037
4150
  "hashes": {
4038
- "input-autocomplete": {
4151
+ "size": {
4039
4152
  "count": 1,
4040
- "title": "",
4153
+ "title": "Size",
4041
4154
  "type": "paragraph"
4042
4155
  }
4043
4156
  }
@@ -4045,14 +4158,14 @@
4045
4158
  }
4046
4159
  },
4047
4160
  {
4048
- "search": "Here are some of the features of the input-autocomplete component:\n",
4161
+ "search": "Icons or short text before / after the main label.\n",
4049
4162
  "files": {
4050
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4051
- "title": "Input-autocomplete",
4163
+ "core/components/ui/badge/badge.md": {
4164
+ "title": "Badge",
4052
4165
  "hashes": {
4053
- "input-autocomplete": {
4166
+ "prefix-and-suffix-slots": {
4054
4167
  "count": 1,
4055
- "title": "",
4168
+ "title": "Prefix and suffix slots",
4056
4169
  "type": "paragraph"
4057
4170
  }
4058
4171
  }
@@ -4060,14 +4173,14 @@
4060
4173
  }
4061
4174
  },
4062
4175
  {
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",
4176
+ "search": "Badge with no text (visual dot). min-width / min-height keep a readable shape.\n",
4064
4177
  "files": {
4065
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4066
- "title": "Input-autocomplete",
4178
+ "core/components/ui/badge/badge.md": {
4179
+ "title": "Badge",
4067
4180
  "hashes": {
4068
- "input-autocomplete": {
4181
+ "empty-badges": {
4069
4182
  "count": 1,
4070
- "title": "",
4183
+ "title": "Empty badges",
4071
4184
  "type": "paragraph"
4072
4185
  }
4073
4186
  }
@@ -4075,14 +4188,14 @@
4075
4188
  }
4076
4189
  },
4077
4190
  {
4078
- "search": "If you are looking for a component to provide a suggest behavior, the input-autocomplete component is a good option. \n",
4191
+ "search": "With ellipsis, long labels truncate. The parent must constrain width (max-width, grid, etc.).\n",
4079
4192
  "files": {
4080
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4081
- "title": "Input-autocomplete",
4193
+ "core/components/ui/badge/badge.md": {
4194
+ "title": "Badge",
4082
4195
  "hashes": {
4083
- "input-autocomplete": {
4196
+ "ellipsis": {
4084
4197
  "count": 1,
4085
- "title": "",
4198
+ "title": "Ellipsis",
4086
4199
  "type": "paragraph"
4087
4200
  }
4088
4201
  }
@@ -4090,14 +4203,14 @@
4090
4203
  }
4091
4204
  },
4092
4205
  {
4093
- "search": "In this example, the input will use its name as the search parameter when calling the service responsible for autocompletion.\n",
4206
+ "search": "Count inside a button (slot="suffix") or a badge absolutely positioned on a button / icon.\n",
4094
4207
  "files": {
4095
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4096
- "title": "Input-autocomplete",
4208
+ "core/components/ui/badge/badge.md": {
4209
+ "title": "Badge",
4097
4210
  "hashes": {
4098
- "simple-example": {
4211
+ "badge-in-button": {
4099
4212
  "count": 1,
4100
- "title": "Simple Example",
4213
+ "title": "Badge in button",
4101
4214
  "type": "paragraph"
4102
4215
  }
4103
4216
  }
@@ -4105,29 +4218,164 @@
4105
4218
  }
4106
4219
  },
4107
4220
  {
4108
- "search": "The template is used to render the list items of results.\nThe list items are responsible for making a selection.\n",
4221
+ "search": "Button",
4109
4222
  "files": {
4110
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4111
- "title": "Input-autocomplete",
4223
+ "core/components/ui/button/button.md": {
4224
+ "title": "Button",
4112
4225
  "hashes": {
4113
- "simple-example": {
4226
+ "button": {
4114
4227
  "count": 1,
4115
- "title": "Simple Example",
4116
- "type": "paragraph"
4228
+ "title": "",
4229
+ "type": "page"
4117
4230
  }
4118
4231
  }
4119
4232
  }
4120
4233
  }
4121
4234
  },
4122
4235
  {
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",
4236
+ "search": "The length of the button depends on the size of its content\n\n",
4124
4237
  "files": {
4125
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4126
- "title": "Input-autocomplete",
4238
+ "core/components/ui/button/button.md": {
4239
+ "title": "Button",
4127
4240
  "hashes": {
4128
- "simple-example": {
4241
+ "loading": {
4129
4242
  "count": 1,
4130
- "title": "Simple Example",
4243
+ "title": "Loading",
4244
+ "type": "paragraph"
4245
+ }
4246
+ }
4247
+ }
4248
+ }
4249
+ },
4250
+ {
4251
+ "search": "Captcha",
4252
+ "files": {
4253
+ "core/components/ui/captcha/captcha.md": {
4254
+ "title": "Captcha",
4255
+ "hashes": {
4256
+ "captcha": {
4257
+ "count": 1,
4258
+ "title": "",
4259
+ "type": "page"
4260
+ }
4261
+ }
4262
+ }
4263
+ }
4264
+ },
4265
+ {
4266
+ "search": "Card",
4267
+ "files": {
4268
+ "core/components/ui/card/card.md": {
4269
+ "title": "Card",
4270
+ "hashes": {
4271
+ "card": {
4272
+ "count": 1,
4273
+ "title": "",
4274
+ "type": "page"
4275
+ }
4276
+ }
4277
+ }
4278
+ }
4279
+ },
4280
+ {
4281
+ "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",
4282
+ "files": {
4283
+ "core/components/ui/card/card.md": {
4284
+ "title": "Card",
4285
+ "hashes": {
4286
+ "card": {
4287
+ "count": 1,
4288
+ "title": "",
4289
+ "type": "paragraph"
4290
+ }
4291
+ }
4292
+ }
4293
+ }
4294
+ },
4295
+ {
4296
+ "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",
4297
+ "files": {
4298
+ "core/components/ui/card/card.md": {
4299
+ "title": "Card",
4300
+ "hashes": {
4301
+ "card": {
4302
+ "count": 1,
4303
+ "title": "",
4304
+ "type": "paragraph"
4305
+ }
4306
+ }
4307
+ }
4308
+ }
4309
+ },
4310
+ {
4311
+ "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",
4312
+ "files": {
4313
+ "core/components/ui/card/card.md": {
4314
+ "title": "Card",
4315
+ "hashes": {
4316
+ "header": {
4317
+ "count": 1,
4318
+ "title": "Header",
4319
+ "type": "paragraph"
4320
+ }
4321
+ }
4322
+ }
4323
+ }
4324
+ },
4325
+ {
4326
+ "search": "label and description accept HTML (rendered as markup). Prefer plain text when possible; use the slot for structured content.\n",
4327
+ "files": {
4328
+ "core/components/ui/card/card.md": {
4329
+ "title": "Card",
4330
+ "hashes": {
4331
+ "header": {
4332
+ "count": 1,
4333
+ "title": "Header",
4334
+ "type": "paragraph"
4335
+ }
4336
+ }
4337
+ }
4338
+ }
4339
+ },
4340
+ {
4341
+ "search": "Optional wrapper for the primary content area (typography, media, forms).\n",
4342
+ "files": {
4343
+ "core/components/ui/card/card.md": {
4344
+ "title": "Card",
4345
+ "hashes": {
4346
+ "main": {
4347
+ "count": 1,
4348
+ "title": "Main",
4349
+ "type": "paragraph"
4350
+ }
4351
+ }
4352
+ }
4353
+ }
4354
+ },
4355
+ {
4356
+ "search": "Optional footer for actions, metadata, or secondary text.\n",
4357
+ "files": {
4358
+ "core/components/ui/card/card.md": {
4359
+ "title": "Card",
4360
+ "hashes": {
4361
+ "footer": {
4362
+ "count": 1,
4363
+ "title": "Footer",
4364
+ "type": "paragraph"
4365
+ }
4366
+ }
4367
+ }
4368
+ }
4369
+ },
4370
+ {
4371
+ "search": "Header, media, body, and footer together.\n",
4372
+ "files": {
4373
+ "core/components/ui/card/card.md": {
4374
+ "title": "Card",
4375
+ "hashes": {
4376
+ "full-example": {
4377
+ "count": 1,
4378
+ "title": "Full example",
4131
4379
  "type": "paragraph"
4132
4380
  }
4133
4381
  }
@@ -4135,14 +4383,194 @@
4135
4383
  }
4136
4384
  },
4137
4385
  {
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",
4386
+ "search": "Divider",
4387
+ "files": {
4388
+ "core/components/ui/divider/divider.md": {
4389
+ "title": "Divider",
4390
+ "hashes": {
4391
+ "divider": {
4392
+ "count": 1,
4393
+ "title": "",
4394
+ "type": "page"
4395
+ }
4396
+ }
4397
+ }
4398
+ }
4399
+ },
4400
+ {
4401
+ "search": "Checkbox",
4402
+ "files": {
4403
+ "core/components/ui/form/checkbox/checkbox.md": {
4404
+ "title": "Checkbox",
4405
+ "hashes": {
4406
+ "checkbox": {
4407
+ "count": 1,
4408
+ "title": "",
4409
+ "type": "page"
4410
+ }
4411
+ }
4412
+ }
4413
+ }
4414
+ },
4415
+ {
4416
+ "search": "Checked blacklistFlags values are sent to the mock API (?blacklistFlags=racist,sexist,…), which excludes jokes whose flags match (see filterDocsJokes in src/docs/mock-api/fixtures.ts).\n",
4417
+ "files": {
4418
+ "core/components/ui/form/checkbox/checkbox.md": {
4419
+ "title": "Checkbox",
4420
+ "hashes": {
4421
+ "example-of-use--blacklist--queue": {
4422
+ "count": 1,
4423
+ "title": "Example of use — blacklist + queue",
4424
+ "type": "paragraph"
4425
+ }
4426
+ }
4427
+ }
4428
+ }
4429
+ },
4430
+ {
4431
+ "search": "Fieldset",
4432
+ "files": {
4433
+ "core/components/ui/form/fieldset/fieldset.md": {
4434
+ "title": "Fieldset",
4435
+ "hashes": {
4436
+ "fieldset": {
4437
+ "count": 1,
4438
+ "title": "",
4439
+ "type": "page"
4440
+ }
4441
+ }
4442
+ }
4443
+ }
4444
+ },
4445
+ {
4446
+ "search": "Form-actions",
4447
+ "files": {
4448
+ "core/components/ui/form/form-actions/form-actions.md": {
4449
+ "title": "Form-actions",
4450
+ "hashes": {
4451
+ "form-actions": {
4452
+ "count": 1,
4453
+ "title": "",
4454
+ "type": "page"
4455
+ }
4456
+ }
4457
+ }
4458
+ }
4459
+ },
4460
+ {
4461
+ "search": "Form-layout",
4462
+ "files": {
4463
+ "core/components/ui/form/form-layout/form-layout.md": {
4464
+ "title": "Form-layout",
4465
+ "hashes": {
4466
+ "form-layout": {
4467
+ "count": 1,
4468
+ "title": "",
4469
+ "type": "page"
4470
+ }
4471
+ }
4472
+ }
4473
+ }
4474
+ },
4475
+ {
4476
+ "search": "Input",
4477
+ "files": {
4478
+ "core/components/ui/form/input/input.md": {
4479
+ "title": "Input",
4480
+ "hashes": {
4481
+ "input": {
4482
+ "count": 1,
4483
+ "title": "",
4484
+ "type": "page"
4485
+ }
4486
+ }
4487
+ }
4488
+ }
4489
+ },
4490
+ {
4491
+ "search": "Liste des types\n",
4492
+ "files": {
4493
+ "core/components/ui/form/input/input.md": {
4494
+ "title": "Input",
4495
+ "hashes": {
4496
+ "type": {
4497
+ "count": 1,
4498
+ "title": "Type",
4499
+ "type": "paragraph"
4500
+ }
4501
+ }
4502
+ }
4503
+ }
4504
+ },
4505
+ {
4506
+ "search": "Filter with formDataProvider + name="contains" (mock API: substring on joke text). Caption and rows via Lit (@subscribe, .items on sonic-queue):\n",
4507
+ "files": {
4508
+ "core/components/ui/form/input/input.md": {
4509
+ "title": "Input",
4510
+ "hashes": {
4511
+ "example-of-use--search--queue": {
4512
+ "count": 1,
4513
+ "title": "Example of use — search + queue",
4514
+ "type": "paragraph"
4515
+ }
4516
+ }
4517
+ }
4518
+ }
4519
+ },
4520
+ {
4521
+ "search": "Input-autocomplete",
4522
+ "files": {
4523
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4524
+ "title": "Input-autocomplete",
4525
+ "hashes": {
4526
+ "input-autocomplete": {
4527
+ "count": 1,
4528
+ "title": "",
4529
+ "type": "page"
4530
+ }
4531
+ }
4532
+ }
4533
+ }
4534
+ },
4535
+ {
4536
+ "search": "Champ formulaire + suggestions via queue. Valeur via formDataProvider + name ; la recherche filtre la queue (store interne).\n",
4537
+ "files": {
4538
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4539
+ "title": "Input-autocomplete",
4540
+ "hashes": {
4541
+ "input-autocomplete": {
4542
+ "count": 1,
4543
+ "title": "",
4544
+ "type": "paragraph"
4545
+ }
4546
+ }
4547
+ }
4548
+ }
4549
+ },
4550
+ {
4551
+ "search": "Rendu des lignes : propriété .items (callback Lit) — voir les démos ci-dessous. Mock : serviceURL="/docs-mock-api/geo/".\n",
4552
+ "files": {
4553
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4554
+ "title": "Input-autocomplete",
4555
+ "hashes": {
4556
+ "input-autocomplete": {
4557
+ "count": 1,
4558
+ "title": "",
4559
+ "type": "paragraph"
4560
+ }
4561
+ }
4562
+ }
4563
+ }
4564
+ },
4565
+ {
4566
+ "search": "name = paramètre de recherche = valeur formulaire.\n",
4139
4567
  "files": {
4140
4568
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4141
4569
  "title": "Input-autocomplete",
4142
4570
  "hashes": {
4143
- "value-different-from-search-parameter": {
4571
+ "simple": {
4144
4572
  "count": 1,
4145
- "title": "Value different from search parameter",
4573
+ "title": "Simple",
4146
4574
  "type": "paragraph"
4147
4575
  }
4148
4576
  }
@@ -4150,44 +4578,209 @@
4150
4578
  }
4151
4579
  },
4152
4580
  {
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",
4581
+ "search": "Recherche sur nom, valeur formulaire = code. Préremplissage via value.\n",
4154
4582
  "files": {
4155
4583
  "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4156
4584
  "title": "Input-autocomplete",
4157
4585
  "hashes": {
4158
- "value-different-from-search-parameter": {
4586
+ "valeur--paramètre-de-recherche": {
4587
+ "count": 1,
4588
+ "title": "Valeur ≠ paramètre de recherche",
4589
+ "type": "paragraph"
4590
+ }
4591
+ }
4592
+ }
4593
+ }
4594
+ },
4595
+ {
4596
+ "search": "À la fermeture du pop, seule une valeur de la liste (ou vide) est conservée.\n",
4597
+ "files": {
4598
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4599
+ "title": "Input-autocomplete",
4600
+ "hashes": {
4601
+ "mode-select": {
4602
+ "count": 1,
4603
+ "title": "Mode select",
4604
+ "type": "paragraph"
4605
+ }
4606
+ }
4607
+ }
4608
+ }
4609
+ },
4610
+ {
4611
+ "search": "data-keyboard-nav sur le champ et les items (flèches haut / bas).\n",
4612
+ "files": {
4613
+ "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4614
+ "title": "Input-autocomplete",
4615
+ "hashes": {
4616
+ "navigation-clavier": {
4617
+ "count": 1,
4618
+ "title": "Navigation clavier",
4619
+ "type": "paragraph"
4620
+ }
4621
+ }
4622
+ }
4623
+ }
4624
+ },
4625
+ {
4626
+ "search": "Radio",
4627
+ "files": {
4628
+ "core/components/ui/form/radio/radio.md": {
4629
+ "title": "Radio",
4630
+ "hashes": {
4631
+ "radio": {
4632
+ "count": 1,
4633
+ "title": "",
4634
+ "type": "page"
4635
+ }
4636
+ }
4637
+ }
4638
+ }
4639
+ },
4640
+ {
4641
+ "search": "Same mock filter as Checkbox (blacklistFlags query param). Radio sends one flag at a time.\n",
4642
+ "files": {
4643
+ "core/components/ui/form/radio/radio.md": {
4644
+ "title": "Radio",
4645
+ "hashes": {
4646
+ "example-of-use--blacklist--queue": {
4647
+ "count": 1,
4648
+ "title": "Example of use — blacklist + queue",
4649
+ "type": "paragraph"
4650
+ }
4651
+ }
4652
+ }
4653
+ }
4654
+ },
4655
+ {
4656
+ "search": "Select",
4657
+ "files": {
4658
+ "core/components/ui/form/select/select.md": {
4659
+ "title": "Select",
4660
+ "hashes": {
4661
+ "select": {
4662
+ "count": 1,
4663
+ "title": "",
4664
+ "type": "page"
4665
+ }
4666
+ }
4667
+ }
4668
+ }
4669
+ },
4670
+ {
4671
+ "search": "name="lang" is sent as ?lang=fr|en to the doc mock API (filterDocsJokes). Same pattern as Input (contains):\n",
4672
+ "files": {
4673
+ "core/components/ui/form/select/select.md": {
4674
+ "title": "Select",
4675
+ "hashes": {
4676
+ "example-of-use--language-filter--queue": {
4677
+ "count": 1,
4678
+ "title": "Example of use — language filter + queue",
4679
+ "type": "paragraph"
4680
+ }
4681
+ }
4682
+ }
4683
+ }
4684
+ },
4685
+ {
4686
+ "search": "Switch",
4687
+ "files": {
4688
+ "core/components/ui/form/switch/switch.md": {
4689
+ "title": "Switch",
4690
+ "hashes": {
4691
+ "switch": {
4692
+ "count": 1,
4693
+ "title": "",
4694
+ "type": "page"
4695
+ }
4696
+ }
4697
+ }
4698
+ }
4699
+ },
4700
+ {
4701
+ "search": "Same mock filter as Checkbox; switches can enable several flags (comma-separated in the query).\n",
4702
+ "files": {
4703
+ "core/components/ui/form/switch/switch.md": {
4704
+ "title": "Switch",
4705
+ "hashes": {
4706
+ "example-of-use--blacklist--queue": {
4707
+ "count": 1,
4708
+ "title": "Example of use — blacklist + queue",
4709
+ "type": "paragraph"
4710
+ }
4711
+ }
4712
+ }
4713
+ }
4714
+ },
4715
+ {
4716
+ "search": "Textarea",
4717
+ "files": {
4718
+ "core/components/ui/form/textarea/textarea.md": {
4719
+ "title": "Textarea",
4720
+ "hashes": {
4721
+ "textarea": {
4722
+ "count": 1,
4723
+ "title": "",
4724
+ "type": "page"
4725
+ }
4726
+ }
4727
+ }
4728
+ }
4729
+ },
4730
+ {
4731
+ "search": "Group",
4732
+ "files": {
4733
+ "core/components/ui/group/group.md": {
4734
+ "title": "Group",
4735
+ "hashes": {
4736
+ "group": {
4737
+ "count": 1,
4738
+ "title": "",
4739
+ "type": "page"
4740
+ }
4741
+ }
4742
+ }
4743
+ }
4744
+ },
4745
+ {
4746
+ "search": "Icon",
4747
+ "files": {
4748
+ "core/components/ui/icon/icon.md": {
4749
+ "title": "Icon",
4750
+ "hashes": {
4751
+ "icon": {
4159
4752
  "count": 1,
4160
- "title": "Value different from search parameter",
4161
- "type": "paragraph"
4753
+ "title": "",
4754
+ "type": "page"
4162
4755
  }
4163
4756
  }
4164
4757
  }
4165
4758
  }
4166
4759
  },
4167
4760
  {
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",
4761
+ "search": "Image",
4169
4762
  "files": {
4170
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4171
- "title": "Input-autocomplete",
4763
+ "core/components/ui/image/image.md": {
4764
+ "title": "Image",
4172
4765
  "hashes": {
4173
- "value-different-from-search-parameter": {
4766
+ "image": {
4174
4767
  "count": 1,
4175
- "title": "Value different from search parameter",
4176
- "type": "paragraph"
4768
+ "title": "",
4769
+ "type": "page"
4177
4770
  }
4178
4771
  }
4179
4772
  }
4180
4773
  }
4181
4774
  },
4182
4775
  {
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",
4776
+ "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",
4184
4777
  "files": {
4185
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4186
- "title": "Input-autocomplete",
4778
+ "core/components/ui/image/image.md": {
4779
+ "title": "Image",
4187
4780
  "hashes": {
4188
- "value-different-from-search-parameter": {
4781
+ "image": {
4189
4782
  "count": 1,
4190
- "title": "Value different from search parameter",
4783
+ "title": "",
4191
4784
  "type": "paragraph"
4192
4785
  }
4193
4786
  }
@@ -4195,14 +4788,14 @@
4195
4788
  }
4196
4789
  },
4197
4790
  {
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",
4791
+ "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",
4199
4792
  "files": {
4200
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4201
- "title": "Input-autocomplete",
4793
+ "core/components/ui/image/image.md": {
4794
+ "title": "Image",
4202
4795
  "hashes": {
4203
- "select-autocomplete--value-different-from-search-parameter": {
4796
+ "rounded": {
4204
4797
  "count": 1,
4205
- "title": "Select autocomplete / value different from search parameter",
4798
+ "title": "Rounded",
4206
4799
  "type": "paragraph"
4207
4800
  }
4208
4801
  }
@@ -4210,14 +4803,14 @@
4210
4803
  }
4211
4804
  },
4212
4805
  {
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",
4806
+ "search": "ratio sets CSS aspect-ratio on the image (default auto). The image still fills the host width (width: 100%).\n",
4214
4807
  "files": {
4215
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4216
- "title": "Input-autocomplete",
4808
+ "core/components/ui/image/image.md": {
4809
+ "title": "Image",
4217
4810
  "hashes": {
4218
- "select-autocomplete--value-different-from-search-parameter": {
4811
+ "aspect-ratio": {
4219
4812
  "count": 1,
4220
- "title": "Select autocomplete / value different from search parameter",
4813
+ "title": "Aspect ratio",
4221
4814
  "type": "paragraph"
4222
4815
  }
4223
4816
  }
@@ -4225,14 +4818,14 @@
4225
4818
  }
4226
4819
  },
4227
4820
  {
4228
- "search": "The following code shows how to use the select attribute in an autocomplete input:\n",
4821
+ "search": "objectPosition maps to CSS object-position (default center center). Useful on wide crops when the subject sits off-center.\n",
4229
4822
  "files": {
4230
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4231
- "title": "Input-autocomplete",
4823
+ "core/components/ui/image/image.md": {
4824
+ "title": "Image",
4232
4825
  "hashes": {
4233
- "select-autocomplete--value-different-from-search-parameter": {
4826
+ "object-position": {
4234
4827
  "count": 1,
4235
- "title": "Select autocomplete / value different from search parameter",
4828
+ "title": "Object position",
4236
4829
  "type": "paragraph"
4237
4830
  }
4238
4831
  }
@@ -4240,14 +4833,14 @@
4240
4833
  }
4241
4834
  },
4242
4835
  {
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",
4836
+ "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",
4244
4837
  "files": {
4245
- "core/components/ui/form/input-autocomplete/input-autocomplete.md": {
4246
- "title": "Input-autocomplete",
4838
+ "core/components/ui/image/image.md": {
4839
+ "title": "Image",
4247
4840
  "hashes": {
4248
- "keyboard-navigation": {
4841
+ "cover": {
4249
4842
  "count": 1,
4250
- "title": "keyboard navigation",
4843
+ "title": "Cover",
4251
4844
  "type": "paragraph"
4252
4845
  }
4253
4846
  }
@@ -4255,29 +4848,29 @@
4255
4848
  }
4256
4849
  },
4257
4850
  {
4258
- "search": "Radio",
4851
+ "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",
4259
4852
  "files": {
4260
- "core/components/ui/form/radio/radio.md": {
4261
- "title": "Radio",
4853
+ "core/components/ui/image/image.md": {
4854
+ "title": "Image",
4262
4855
  "hashes": {
4263
- "radio": {
4856
+ "load-transition": {
4264
4857
  "count": 1,
4265
- "title": "",
4266
- "type": "page"
4858
+ "title": "Load transition",
4859
+ "type": "paragraph"
4267
4860
  }
4268
4861
  }
4269
4862
  }
4270
4863
  }
4271
4864
  },
4272
4865
  {
4273
- "search": "Same mock filter as Checkbox (blacklistFlags query param). Radio sends one flag at a time.\n",
4866
+ "search": "Click Add image to append small thumbnails and replay the transition. Clear resets the row.\n",
4274
4867
  "files": {
4275
- "core/components/ui/form/radio/radio.md": {
4276
- "title": "Radio",
4868
+ "core/components/ui/image/image.md": {
4869
+ "title": "Image",
4277
4870
  "hashes": {
4278
- "example-of-use--blacklist--queue": {
4871
+ "load-transition": {
4279
4872
  "count": 1,
4280
- "title": "Example of use — blacklist + queue",
4873
+ "title": "Load transition",
4281
4874
  "type": "paragraph"
4282
4875
  }
4283
4876
  }
@@ -4285,42 +4878,42 @@
4285
4878
  }
4286
4879
  },
4287
4880
  {
4288
- "search": "Select",
4881
+ "search": "Always set meaningful alt text (empty string only for decorative images). \n",
4289
4882
  "files": {
4290
- "core/components/ui/form/select/select.md": {
4291
- "title": "Select",
4883
+ "core/components/ui/image/image.md": {
4884
+ "title": "Image",
4292
4885
  "hashes": {
4293
- "select": {
4886
+ "accessibility-and-parts": {
4294
4887
  "count": 1,
4295
- "title": "",
4296
- "type": "page"
4888
+ "title": "Accessibility and parts",
4889
+ "type": "paragraph"
4297
4890
  }
4298
4891
  }
4299
4892
  }
4300
4893
  }
4301
4894
  },
4302
4895
  {
4303
- "search": "name="lang" is sent as ?lang=fr|en to the doc mock API (filterDocsJokes). Same pattern as Input (contains):\n",
4896
+ "search": "Link",
4304
4897
  "files": {
4305
- "core/components/ui/form/select/select.md": {
4306
- "title": "Select",
4898
+ "core/components/ui/link/link.md": {
4899
+ "title": "Link",
4307
4900
  "hashes": {
4308
- "example-of-use--language-filter--queue": {
4901
+ "link": {
4309
4902
  "count": 1,
4310
- "title": "Example of use — language filter + queue",
4311
- "type": "paragraph"
4903
+ "title": "",
4904
+ "type": "page"
4312
4905
  }
4313
4906
  }
4314
4907
  }
4315
4908
  }
4316
4909
  },
4317
4910
  {
4318
- "search": "Switch",
4911
+ "search": "Loader",
4319
4912
  "files": {
4320
- "core/components/ui/form/switch/switch.md": {
4321
- "title": "Switch",
4913
+ "core/components/ui/loader/loader.md": {
4914
+ "title": "Loader",
4322
4915
  "hashes": {
4323
- "switch": {
4916
+ "loader": {
4324
4917
  "count": 1,
4325
4918
  "title": "",
4326
4919
  "type": "page"
@@ -4330,27 +4923,27 @@
4330
4923
  }
4331
4924
  },
4332
4925
  {
4333
- "search": "Same mock filter as Checkbox; switches can enable several flags (comma-separated in the query).\n",
4926
+ "search": "Menu",
4334
4927
  "files": {
4335
- "core/components/ui/form/switch/switch.md": {
4336
- "title": "Switch",
4928
+ "core/components/ui/menu/menu.md": {
4929
+ "title": "Menu",
4337
4930
  "hashes": {
4338
- "example-of-use--blacklist--queue": {
4931
+ "menu": {
4339
4932
  "count": 1,
4340
- "title": "Example of use — blacklist + queue",
4341
- "type": "paragraph"
4933
+ "title": "",
4934
+ "type": "page"
4342
4935
  }
4343
4936
  }
4344
4937
  }
4345
4938
  }
4346
4939
  },
4347
4940
  {
4348
- "search": "Textarea",
4941
+ "search": "Modal",
4349
4942
  "files": {
4350
- "core/components/ui/form/textarea/textarea.md": {
4351
- "title": "Textarea",
4943
+ "core/components/ui/modal/modal.md": {
4944
+ "title": "Modal",
4352
4945
  "hashes": {
4353
- "textarea": {
4946
+ "modal": {
4354
4947
  "count": 1,
4355
4948
  "title": "",
4356
4949
  "type": "page"
@@ -4360,12 +4953,12 @@
4360
4953
  }
4361
4954
  },
4362
4955
  {
4363
- "search": "Group",
4956
+ "search": "Pop",
4364
4957
  "files": {
4365
- "core/components/ui/group/group.md": {
4366
- "title": "Group",
4958
+ "core/components/ui/pop/pop.md": {
4959
+ "title": "Pop",
4367
4960
  "hashes": {
4368
- "group": {
4961
+ "pop": {
4369
4962
  "count": 1,
4370
4963
  "title": "",
4371
4964
  "type": "page"
@@ -4375,105 +4968,105 @@
4375
4968
  }
4376
4969
  },
4377
4970
  {
4378
- "search": "Icon",
4971
+ "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
4972
  "files": {
4380
- "core/components/ui/icon/icon.md": {
4381
- "title": "Icon",
4973
+ "core/components/ui/pop/pop.md": {
4974
+ "title": "Pop",
4382
4975
  "hashes": {
4383
- "icon": {
4976
+ "placement": {
4384
4977
  "count": 1,
4385
- "title": "",
4386
- "type": "page"
4978
+ "title": "Placement",
4979
+ "type": "paragraph"
4387
4980
  }
4388
4981
  }
4389
4982
  }
4390
4983
  }
4391
4984
  },
4392
4985
  {
4393
- "search": "Image",
4986
+ "search": "The former space syntax (placement="bottom center") still works but is deprecated.\n",
4394
4987
  "files": {
4395
- "core/components/ui/image/image.md": {
4396
- "title": "Image",
4988
+ "core/components/ui/pop/pop.md": {
4989
+ "title": "Pop",
4397
4990
  "hashes": {
4398
- "image": {
4991
+ "placement": {
4399
4992
  "count": 1,
4400
- "title": "",
4401
- "type": "page"
4993
+ "title": "Placement",
4994
+ "type": "paragraph"
4402
4995
  }
4403
4996
  }
4404
4997
  }
4405
4998
  }
4406
4999
  },
4407
5000
  {
4408
- "search": "Link",
5001
+ "search": "Default shadow is lg.\n",
4409
5002
  "files": {
4410
- "core/components/ui/link/link.md": {
4411
- "title": "Link",
5003
+ "core/components/ui/pop/pop.md": {
5004
+ "title": "Pop",
4412
5005
  "hashes": {
4413
- "link": {
5006
+ "shadow": {
4414
5007
  "count": 1,
4415
- "title": "",
4416
- "type": "page"
5008
+ "title": "Shadow",
5009
+ "type": "paragraph"
4417
5010
  }
4418
5011
  }
4419
5012
  }
4420
5013
  }
4421
5014
  },
4422
5015
  {
4423
- "search": "Loader",
5016
+ "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
5017
  "files": {
4425
- "core/components/ui/loader/loader.md": {
4426
- "title": "Loader",
5018
+ "core/components/ui/pop/pop.md": {
5019
+ "title": "Pop",
4427
5020
  "hashes": {
4428
- "loader": {
5021
+ "inline": {
4429
5022
  "count": 1,
4430
- "title": "",
4431
- "type": "page"
5023
+ "title": "Inline",
5024
+ "type": "paragraph"
4432
5025
  }
4433
5026
  }
4434
5027
  }
4435
5028
  }
4436
5029
  },
4437
5030
  {
4438
- "search": "Menu",
5031
+ "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
5032
  "files": {
4440
- "core/components/ui/menu/menu.md": {
4441
- "title": "Menu",
5033
+ "core/components/ui/pop/pop.md": {
5034
+ "title": "Pop",
4442
5035
  "hashes": {
4443
- "menu": {
5036
+ "keep-open-on-select": {
4444
5037
  "count": 1,
4445
- "title": "",
4446
- "type": "page"
5038
+ "title": "Keep open on select",
5039
+ "type": "paragraph"
4447
5040
  }
4448
5041
  }
4449
5042
  }
4450
5043
  }
4451
5044
  },
4452
5045
  {
4453
- "search": "Modal",
5046
+ "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
5047
  "files": {
4455
- "core/components/ui/modal/modal.md": {
4456
- "title": "Modal",
5048
+ "core/components/ui/pop/pop.md": {
5049
+ "title": "Pop",
4457
5050
  "hashes": {
4458
- "modal": {
5051
+ "methods-and-events": {
4459
5052
  "count": 1,
4460
- "title": "",
4461
- "type": "page"
5053
+ "title": "Methods and events",
5054
+ "type": "paragraph"
4462
5055
  }
4463
5056
  }
4464
5057
  }
4465
5058
  }
4466
5059
  },
4467
5060
  {
4468
- "search": "Pop",
5061
+ "search": "The content can be styled from outside with ::part(content).\n",
4469
5062
  "files": {
4470
5063
  "core/components/ui/pop/pop.md": {
4471
5064
  "title": "Pop",
4472
5065
  "hashes": {
4473
- "pop": {
5066
+ "styling": {
4474
5067
  "count": 1,
4475
- "title": "",
4476
- "type": "page"
5068
+ "title": "Styling",
5069
+ "type": "paragraph"
4477
5070
  }
4478
5071
  }
4479
5072
  }
@@ -10954,6 +11547,111 @@
10954
11547
  }
10955
11548
  }
10956
11549
  },
11550
+ {
11551
+ "search": "FormElement without Subscriber (REDMINE-79569)",
11552
+ "files": {
11553
+ "docs/_misc/formelement-subscriber-removal.md": {
11554
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11555
+ "hashes": {
11556
+ "formelement-without-subscriber-redmine-79569": {
11557
+ "count": 1,
11558
+ "title": "",
11559
+ "type": "page"
11560
+ }
11561
+ }
11562
+ }
11563
+ }
11564
+ },
11565
+ {
11566
+ "search": "Form fields (sonic-input, textarea, select, checkbox, radio, switch, button, input-autocomplete) no longer inherit the Subscriber mixin.\n",
11567
+ "files": {
11568
+ "docs/_misc/formelement-subscriber-removal.md": {
11569
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11570
+ "hashes": {
11571
+ "formelement-without-subscriber-redmine-79569": {
11572
+ "count": 1,
11573
+ "title": "",
11574
+ "type": "paragraph"
11575
+ }
11576
+ }
11577
+ }
11578
+ }
11579
+ },
11580
+ {
11581
+ "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",
11582
+ "files": {
11583
+ "docs/_misc/formelement-subscriber-removal.md": {
11584
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11585
+ "hashes": {
11586
+ "behaviour-now": {
11587
+ "count": 1,
11588
+ "title": "Behaviour now",
11589
+ "type": "paragraph"
11590
+ }
11591
+ }
11592
+ }
11593
+ }
11594
+ },
11595
+ {
11596
+ "search": "Files under la-billetterie/concorde that mention both formDataProvider and dataProvider= (review; many are filter+queue, not field autofill):\n",
11597
+ "files": {
11598
+ "docs/_misc/formelement-subscriber-removal.md": {
11599
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11600
+ "hashes": {
11601
+ "billetterie-collect--dual-channel-risk": {
11602
+ "count": 1,
11603
+ "title": "Billetterie collect — dual-channel risk",
11604
+ "type": "paragraph"
11605
+ }
11606
+ }
11607
+ }
11608
+ }
11609
+ },
11610
+ {
11611
+ "search": "formDataProvider on filter bar, dataProvider on sonic-queue / list — no field autofill dependency:\n",
11612
+ "files": {
11613
+ "docs/_misc/formelement-subscriber-removal.md": {
11614
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11615
+ "hashes": {
11616
+ "filters--queue-usually-ok": {
11617
+ "count": 1,
11618
+ "title": "Filters + queue (usually OK)",
11619
+ "type": "paragraph"
11620
+ }
11621
+ }
11622
+ }
11623
+ }
11624
+ },
11625
+ {
11626
+ "search": "Re-run audit:\n",
11627
+ "files": {
11628
+ "docs/_misc/formelement-subscriber-removal.md": {
11629
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11630
+ "hashes": {
11631
+ "full-dual-channel-file-list-55": {
11632
+ "count": 1,
11633
+ "title": "Full dual-channel file list (55)",
11634
+ "type": "paragraph"
11635
+ }
11636
+ }
11637
+ }
11638
+ }
11639
+ },
11640
+ {
11641
+ "search": "Smoke form demos: input, textarea, select, checkbox (incl. check-all), radio, switch, button form modes, queue + dataFilterProvider, submit, validation / sameValueAs, input-autocomplete.\n",
11642
+ "files": {
11643
+ "docs/_misc/formelement-subscriber-removal.md": {
11644
+ "title": "FormElement without Subscriber (REDMINE-79569)",
11645
+ "hashes": {
11646
+ "non-regression-concorde-docs": {
11647
+ "count": 1,
11648
+ "title": "Non-regression (Concorde docs)",
11649
+ "type": "paragraph"
11650
+ }
11651
+ }
11652
+ }
11653
+ }
11654
+ },
10957
11655
  {
10958
11656
  "search": "HTML integration (no Lit)",
10959
11657
  "files": {
@@ -10984,6 +11682,21 @@
10984
11682
  }
10985
11683
  }
10986
11684
  },
11685
+ {
11686
+ "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",
11687
+ "files": {
11688
+ "docs/_misc/html-integration.md": {
11689
+ "title": "HTML integration (no Lit)",
11690
+ "hashes": {
11691
+ "html-integration-no-lit": {
11692
+ "count": 1,
11693
+ "title": "",
11694
+ "type": "paragraph"
11695
+ }
11696
+ }
11697
+ }
11698
+ }
11699
+ },
10987
11700
  {
10988
11701
  "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
11702
  "files": {
@@ -11224,4 +11937,4 @@
11224
11937
  }
11225
11938
  }
11226
11939
  }
11227
- ]
11940
+ ]