@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
@@ -0,0 +1,22 @@
1
+ function readDismissed(storageKey: string): Record<string, boolean> {
2
+ try {
3
+ const parsed = JSON.parse(localStorage.getItem(storageKey) || "{}");
4
+ return parsed && typeof parsed === "object" ? parsed : {};
5
+ } catch {
6
+ return {};
7
+ }
8
+ }
9
+
10
+ export function isDismissed(storageKey: string, id: string | number): boolean {
11
+ return !!readDismissed(storageKey)[id];
12
+ }
13
+
14
+ export function markDismissed(storageKey: string, id: string | number): void {
15
+ const dismissed = readDismissed(storageKey);
16
+ dismissed[id] = true;
17
+ try {
18
+ localStorage.setItem(storageKey, JSON.stringify(dismissed));
19
+ } catch {
20
+ // stockage indisponible (mode privé, quota)
21
+ }
22
+ }
@@ -0,0 +1,208 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import {
3
+ computeFloatingPosition,
4
+ FloatingBounds,
5
+ FloatingSide,
6
+ parsePlacement,
7
+ } from "./positioning";
8
+
9
+ type Rect = {
10
+ left: number;
11
+ top: number;
12
+ right: number;
13
+ bottom: number;
14
+ width: number;
15
+ height: number;
16
+ };
17
+ type Size = { width: number; height: number };
18
+
19
+ const rect = (left: number, top: number, width: number, height: number) => ({
20
+ left,
21
+ top,
22
+ width,
23
+ height,
24
+ right: left + width,
25
+ bottom: top + height,
26
+ });
27
+
28
+ /**
29
+ * Ancien Pop.computePosition, étape par étape, sur un contenu simulé dont
30
+ * chaque déplacement appliqué se retrouve tel quel dans la mesure suivante.
31
+ */
32
+ function legacyPopPosition(
33
+ thisRect: Rect,
34
+ size: Size,
35
+ placement: string,
36
+ { minX, minY, maxX, maxY }: FloatingBounds,
37
+ ) {
38
+ const [placementBase, placementSec] = placement.split(" ");
39
+ const x0 = thisRect.left;
40
+ const y0 = thisRect.top;
41
+ let x = x0,
42
+ y = y0;
43
+ const yTop = y0 - size.height;
44
+ const xLeft = x0 - size.width;
45
+ const xRight = x0 + thisRect.width;
46
+ const yBottom = y0 + thisRect.height;
47
+ const xCenter = x0 + (thisRect.width - size.width) * 0.5;
48
+ const yCenter = y0 + (thisRect.height - size.height) * 0.5;
49
+ switch (placementBase) {
50
+ case "bottom":
51
+ y = yBottom;
52
+ if (placementSec == "center") x = xCenter;
53
+ break;
54
+ case "top":
55
+ y = yTop;
56
+ if (placementSec == "center") x = xCenter;
57
+ break;
58
+ case "left":
59
+ x = xLeft;
60
+ if (placementSec == "center") y = yCenter;
61
+ break;
62
+ case "right":
63
+ x = xRight;
64
+ if (placementSec == "center") y = yCenter;
65
+ break;
66
+ }
67
+
68
+ let contentX = x;
69
+ let contentY = y;
70
+ if (contentX < minX && placementBase == "left") x = xRight;
71
+ if (contentY < minY && placementBase == "top") y = yBottom;
72
+ if (contentX + size.width > maxX && placementBase == "right") x = xLeft;
73
+ if (contentY + size.height > maxY && placementBase == "bottom") y = yTop;
74
+
75
+ contentX = x;
76
+ contentY = y;
77
+ if (contentX < minX) contentX = minX;
78
+ if (contentY < minY) contentY = minY;
79
+ if (contentX + size.width > maxX) contentX = maxX - size.width;
80
+ if (contentY + size.height > maxY) contentY = maxY - size.height;
81
+
82
+ return { x: contentX, y: contentY };
83
+ }
84
+
85
+ function popPosition(
86
+ anchor: Rect,
87
+ floating: Size,
88
+ placement: string,
89
+ bounds: FloatingBounds,
90
+ ) {
91
+ const [side, secondary] = placement.split(" ");
92
+ const { x, y } = computeFloatingPosition({
93
+ anchor,
94
+ floating,
95
+ side: side as FloatingSide,
96
+ align: secondary == "center" ? "center" : "start",
97
+ bounds,
98
+ });
99
+ return { x, y };
100
+ }
101
+
102
+ const bounds: FloatingBounds = { minX: 5, minY: 5, maxX: 795, maxY: 595 };
103
+
104
+ describe("computeFloatingPosition", () => {
105
+ describe("reproduit l'ancien positionnement de sonic-pop", () => {
106
+ const placements = [
107
+ "bottom",
108
+ "top",
109
+ "right",
110
+ "left",
111
+ "bottom center",
112
+ "top center",
113
+ "right center",
114
+ "left center",
115
+ "unknown",
116
+ ];
117
+ const anchors = {
118
+ "au centre": rect(380, 280, 40, 30),
119
+ "coin haut gauche": rect(0, 0, 40, 30),
120
+ "coin bas droit": rect(760, 570, 40, 30),
121
+ "bord gauche": rect(2, 300, 40, 30),
122
+ "bord droit": rect(780, 300, 40, 30),
123
+ "bord haut": rect(400, 2, 40, 30),
124
+ "bord bas": rect(400, 590, 40, 30),
125
+ };
126
+ const sizes = {
127
+ petit: { width: 120, height: 80 },
128
+ "plus grand que la zone": { width: 900, height: 700 },
129
+ };
130
+
131
+ for (const placement of placements) {
132
+ for (const [anchorName, anchor] of Object.entries(anchors)) {
133
+ for (const [sizeName, size] of Object.entries(sizes)) {
134
+ it(`${placement} / ${anchorName} / contenu ${sizeName}`, () => {
135
+ expect(popPosition(anchor, size, placement, bounds)).toEqual(
136
+ legacyPopPosition(anchor, size, placement, bounds),
137
+ );
138
+ });
139
+ }
140
+ }
141
+ }
142
+ });
143
+
144
+ describe("placements du tooltip", () => {
145
+ const anchor = rect(380, 280, 40, 30);
146
+ const floating = { width: 100, height: 20 };
147
+ const place = (side: FloatingSide, align?: "start" | "center" | "end") =>
148
+ computeFloatingPosition({
149
+ anchor,
150
+ floating,
151
+ side,
152
+ align,
153
+ gap: 4,
154
+ bounds,
155
+ });
156
+
157
+ it("centre par défaut", () => {
158
+ expect(place("top")).toEqual({ side: "top", x: 350, y: 256 });
159
+ expect(place("right")).toEqual({ side: "right", x: 424, y: 285 });
160
+ });
161
+
162
+ it("aligne start / end", () => {
163
+ expect(place("bottom", "start")).toMatchObject({ x: 380, y: 314 });
164
+ expect(place("bottom", "end")).toMatchObject({ x: 320, y: 314 });
165
+ expect(place("left", "end")).toMatchObject({ x: 276, y: 290 });
166
+ });
167
+
168
+ it("bascule sur le côté opposé quand il déborde", () => {
169
+ const nearTop = rect(380, 10, 40, 30);
170
+ expect(
171
+ computeFloatingPosition({
172
+ anchor: nearTop,
173
+ floating,
174
+ side: "top",
175
+ gap: 4,
176
+ bounds,
177
+ }),
178
+ ).toEqual({ side: "bottom", x: 350, y: 44 });
179
+ });
180
+ });
181
+ });
182
+
183
+ describe("parsePlacement", () => {
184
+ it("lit côté et alignement", () => {
185
+ expect(parsePlacement("left-end", "bottom", "start")).toEqual({
186
+ side: "left",
187
+ align: "end",
188
+ });
189
+ });
190
+
191
+ it("applique l'alignement par défaut quand il est absent", () => {
192
+ expect(parsePlacement("top", "bottom", "start")).toEqual({
193
+ side: "top",
194
+ align: "start",
195
+ });
196
+ });
197
+
198
+ it("retombe sur les défauts pour une valeur inconnue", () => {
199
+ expect(parsePlacement("foo-bar", "top", "center")).toEqual({
200
+ side: "top",
201
+ align: "center",
202
+ });
203
+ expect(parsePlacement(undefined, "top", "center")).toEqual({
204
+ side: "top",
205
+ align: "center",
206
+ });
207
+ });
208
+ });
@@ -0,0 +1,183 @@
1
+ import HTML, { SearchableDomElement } from "./HTML";
2
+
3
+ export type FloatingSide = "top" | "right" | "bottom" | "left";
4
+ export type FloatingAlign = "start" | "center" | "end";
5
+ export type FloatingPlacement =
6
+ | FloatingSide
7
+ | `${FloatingSide}-${FloatingAlign}`;
8
+
9
+ const SIDES: readonly string[] = ["top", "right", "bottom", "left"];
10
+ const ALIGNS: readonly string[] = ["start", "center", "end"];
11
+
12
+ /** Découpe `"côté-alignement"` ; une valeur inconnue retombe sur le défaut. */
13
+ export function parsePlacement(
14
+ placement: string | undefined,
15
+ defaultSide: FloatingSide,
16
+ defaultAlign: FloatingAlign,
17
+ ): { side: FloatingSide; align: FloatingAlign } {
18
+ const [side, align] = (placement ?? "").split("-");
19
+ return {
20
+ side: SIDES.includes(side) ? (side as FloatingSide) : defaultSide,
21
+ align: ALIGNS.includes(align) ? (align as FloatingAlign) : defaultAlign,
22
+ };
23
+ }
24
+
25
+ export type FloatingBounds = {
26
+ minX: number;
27
+ minY: number;
28
+ maxX: number;
29
+ maxY: number;
30
+ };
31
+
32
+ type Rect = Pick<DOMRect, "left" | "top" | "right" | "bottom" | "width" | "height">;
33
+ type Size = Pick<DOMRect, "width" | "height">;
34
+
35
+ export const supportsPopover = "popover" in HTMLElement.prototype;
36
+
37
+ const OPPOSITE_SIDE: Record<FloatingSide, FloatingSide> = {
38
+ top: "bottom",
39
+ bottom: "top",
40
+ left: "right",
41
+ right: "left",
42
+ };
43
+
44
+ /**
45
+ * Zone dans laquelle un élément flottant doit rester visible :
46
+ * le viewport, restreint par le premier ancêtre qui scrolle ou clippe `node`.
47
+ */
48
+ export function getFloatingBounds(
49
+ node: SearchableDomElement,
50
+ padding = 0,
51
+ ): FloatingBounds {
52
+ const clipRect = (
53
+ HTML.getScrollableAncestor(node) as HTMLElement | null
54
+ )?.getBoundingClientRect();
55
+
56
+ // `||` et non `??` : un bord à 0 (ancêtre non rendu) retombe sur le viewport, comme historiquement dans sonic-pop.
57
+ return {
58
+ minX: Math.max(0, clipRect?.left || 0) + padding,
59
+ minY: Math.max(0, clipRect?.top || 0) + padding,
60
+ maxX:
61
+ Math.min(window.innerWidth, clipRect?.right || window.innerWidth) -
62
+ padding,
63
+ maxY:
64
+ Math.min(window.innerHeight, clipRect?.bottom || window.innerHeight) -
65
+ padding,
66
+ };
67
+ }
68
+
69
+ function alignOnAxis(
70
+ start: number,
71
+ length: number,
72
+ floatingLength: number,
73
+ align: FloatingAlign,
74
+ ) {
75
+ if (align === "start") return start;
76
+ if (align === "end") return start + length - floatingLength;
77
+ return start + (length - floatingLength) / 2;
78
+ }
79
+
80
+ function placeOnSide(
81
+ anchor: Rect,
82
+ floating: Size,
83
+ side: FloatingSide,
84
+ align: FloatingAlign,
85
+ gap: number,
86
+ ) {
87
+ switch (side) {
88
+ case "top":
89
+ return {
90
+ x: alignOnAxis(anchor.left, anchor.width, floating.width, align),
91
+ y: anchor.top - floating.height - gap,
92
+ };
93
+ case "bottom":
94
+ return {
95
+ x: alignOnAxis(anchor.left, anchor.width, floating.width, align),
96
+ y: anchor.bottom + gap,
97
+ };
98
+ case "left":
99
+ return {
100
+ x: anchor.left - floating.width - gap,
101
+ y: alignOnAxis(anchor.top, anchor.height, floating.height, align),
102
+ };
103
+ case "right":
104
+ return {
105
+ x: anchor.right + gap,
106
+ y: alignOnAxis(anchor.top, anchor.height, floating.height, align),
107
+ };
108
+ default:
109
+ return { x: anchor.left, y: anchor.top };
110
+ }
111
+ }
112
+
113
+ function overflowsSide(
114
+ position: { x: number; y: number },
115
+ floating: Size,
116
+ side: FloatingSide,
117
+ bounds: FloatingBounds,
118
+ ) {
119
+ switch (side) {
120
+ case "top":
121
+ return position.y < bounds.minY;
122
+ case "bottom":
123
+ return position.y + floating.height > bounds.maxY;
124
+ case "left":
125
+ return position.x < bounds.minX;
126
+ case "right":
127
+ return position.x + floating.width > bounds.maxX;
128
+ default:
129
+ return false;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Position (coordonnées viewport) d'un élément flottant accolé à `anchor` :
135
+ * bascule sur le côté opposé s'il déborde, puis le contraint dans `bounds`.
136
+ * S'il est plus grand que `bounds`, c'est le bord bas / droit qui l'emporte.
137
+ */
138
+ export function computeFloatingPosition({
139
+ anchor,
140
+ floating,
141
+ side,
142
+ align = "center",
143
+ gap = 0,
144
+ bounds,
145
+ }: {
146
+ anchor: Rect;
147
+ floating: Size;
148
+ side: FloatingSide;
149
+ align?: FloatingAlign;
150
+ gap?: number;
151
+ bounds: FloatingBounds;
152
+ }) {
153
+ let placedSide = side;
154
+ let position = placeOnSide(anchor, floating, placedSide, align, gap);
155
+
156
+ if (overflowsSide(position, floating, placedSide, bounds)) {
157
+ placedSide = OPPOSITE_SIDE[placedSide];
158
+ position = placeOnSide(anchor, floating, placedSide, align, gap);
159
+ }
160
+
161
+ return {
162
+ side: placedSide,
163
+ x: Math.min(
164
+ Math.max(position.x, bounds.minX),
165
+ bounds.maxX - floating.width,
166
+ ),
167
+ y: Math.min(
168
+ Math.max(position.y, bounds.minY),
169
+ bounds.maxY - floating.height,
170
+ ),
171
+ };
172
+ }
173
+
174
+ /** Appelle `callback` à chaque frame ; renvoie la fonction d'arrêt. */
175
+ export function startFrameLoop(callback: () => void) {
176
+ let frame = 0;
177
+ const tick = () => {
178
+ callback();
179
+ frame = requestAnimationFrame(tick);
180
+ };
181
+ tick();
182
+ return () => cancelAnimationFrame(frame);
183
+ }
package/src/directives.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import * as directives from "@supersoniks/concorde/core/directives/DataProvider";
2
2
  import {dp as pubDp, dataProvider as pubDataProvider, get as pubGet, set as pubSet} from "@supersoniks/concorde/core/utils/PublisherProxy";
3
- import type {DirectiveResult} from "lit/async-directive.js";
4
3
 
5
4
  import {ConcordeWindow} from "./core/_types/types";
6
5
  /**
@@ -11,8 +10,7 @@ export const dp = pubDp;
11
10
  * @deprecated @see pubDataProvider
12
11
  */
13
12
  export const dataProvider = pubDataProvider;
14
- export const subscribe = directives.subscribe as DirectiveResult;
15
- export const sub = directives.sub as DirectiveResult;
13
+ export { subscribe, sub } from "@supersoniks/concorde/core/directives/DataProvider";
16
14
 
17
15
  /**
18
16
  * @deprecated @see pubGet
@@ -15,7 +15,7 @@ Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, d
15
15
  | HTTP GET | `@get` + `Endpoint`, or `sonic-list` / `sonic-queue` with `fetch` |
16
16
  | HTTP POST (body from store) | `@post` + `Endpoint` + body `DataProviderKey` |
17
17
  | HTTP PUT / PATCH (body from store) | `@put` / `@patch` — same model as `@post` |
18
- | Forms | `formDataProvider` + `name` on fields |
18
+ | Forms | `formDataProvider` + `name` on fields (no Subscriber on form elements) |
19
19
  | Derived / aggregate (JSONata) | `derive()` or `sonic-jsonata` — [Jsonata](#core/components/functional/jsonata/jsonata.md/jsonata) |
20
20
  | Offline doc demos | `serviceURL="/docs-mock-api"` — [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) |
21
21
 
@@ -69,8 +69,9 @@ This decorator is particularly useful for:
69
69
  - By default (`dynamic: false`), the value is read once at connect time and is not updated afterward
70
70
  - With `{ dynamic: true }`, the property stays in sync when:
71
71
  - an ancestor **changes** the attribute value
72
- - a **closer** ancestor **gains** the attribute (that value wins)
73
- - the **nearest** ancestor **loses** the attribute (falls back to the next one up, or `null`)
72
+ - a **closer** ancestor **gains** / **loses** the attribute (fallback / `null`)
73
+ - the component is **reparented** (no extra opt-in) — parent `childList` only reacts if *this* node moves
74
+ - Observers are **shared** (one per ancestor attribute / one per parent) so large lists of `sonic-icon` stay cheap on Firefox.
74
75
  - When `dynamic` is enabled, updates also propagate to `@subscribe` / `@bind` paths that depend on the decorated property (e.g. `${dataProvider}`)
75
76
 
76
77
  ### Dynamic mode
@@ -1,8 +1,8 @@
1
1
  # Installation
2
2
 
3
- <sonic-alert status="success" label="Recommended — use the starter" size="xl" background>
4
- <p><strong>For almost all new projects, use <a href="https://www.npmjs.com/package/@supersoniks/create-concorde-ts-starter">create-concorde-ts-starter</a>.</strong></p>
5
- <p>You get Vite + TypeScript + Lit + Tailwind, an example component, <code>npx concorde enable-short-paths</code> ready to run, and <code>yarn ai:sync</code> for <a href="#docs/_getting-started/ai-agents.md/ai-agents">AI agent skills</a> (<code>AGENTS.md</code>, Cursor / JetBrains rules) without extra setup.</p>
3
+ <sonic-alert status="info" label="Recommended — use the starter" background>
4
+ <p>For almost all new projects, use <a href="https://www.npmjs.com/package/@supersoniks/create-concorde-ts-starter">create-concorde-ts-starter</a></p>
5
+ <p>You get Vite + TypeScript + Lit + Tailwind, an example component, <code>npx concorde enable-short-paths</code> ready to run, and <code>yarn ai:sync</code> for <a href="#docs/_getting-started/ai-agents.md/ai-agents">AI agent skills</a> (<code>AGENTS.md</code>, Cursor / JetBrains rules) without extra setup.</p>
6
6
  </sonic-alert>
7
7
 
8
8
  ## Starter
@@ -0,0 +1,115 @@
1
+ # FormElement without Subscriber (REDMINE-79569)
2
+
3
+ Form fields (`sonic-input`, `textarea`, `select`, `checkbox`, `radio`, `switch`, `button`, `input-autocomplete`) no longer inherit the **Subscriber** mixin.
4
+
5
+ ## Behaviour now
6
+
7
+ | Before | After |
8
+ |--------|--------|
9
+ | Dual channel `dataProvider` (autofill) + `formDataProvider` | **`formDataProvider` + `name` only** |
10
+ | Ancestor `dataProvider` auto-filled field props | Ignored by form fields |
11
+ | `noAutoFill` on fields/buttons inside a `dataProvider` tree | Dead on form fields (attribute harmless; can be cleaned in apps) |
12
+
13
+ Preview pattern still valid: form writes via `formDataProvider`, display card reads via `dataProvider` on a **Subscriber** (or `@subscribe`) sibling — not on the fields themselves.
14
+
15
+ ## Migration checklist (apps)
16
+
17
+ 1. Prefer `formDataProvider` alone on forms / fieldsets.
18
+ 2. Drop redundant `dataProvider={sameKey}` on form containers when it only existed for field autofill.
19
+ 3. Prefill edit forms with `set(formKey, row)` / `dp(formKey.field).set(...)` before mount — not field `dataProvider`.
20
+ 4. Remove `noAutoFill` on `sonic-button` / fields when it only blocked Subscriber autofill.
21
+ 5. `initFromPublisher` still works (form publisher only).
22
+
23
+ ## Billetterie collect — dual-channel risk
24
+
25
+ Files under `la-billetterie/concorde` that mention both `formDataProvider` and `dataProvider=` (review; many are filter+queue, not field autofill):
26
+
27
+ ### High priority (same key on form container)
28
+
29
+ - `la-billetterie/components/reservation-request/atoms/request-event-form.ts` — `form` / `fieldset` with both attrs equal
30
+ - `la-billetterie/components/reservation/atoms/new-quote-form.ts`
31
+ - `la-billetterie/components/stats/sales-summary/sales-summary.ts`
32
+ - `la-billetterie/components/product/price-selection-form/price-selection-form.ts` — `formDataProvider` + `dataProvider="cart/editForm"`
33
+ - `la-billetterie/components/user/account/link-ticket/link-ticket.ts` — distinct keys (API vs form) — keep `dataProvider` only if used by fetch/submit siblings
34
+
35
+ ### Filters + queue (usually OK)
36
+
37
+ `formDataProvider` on filter bar, `dataProvider` on `sonic-queue` / list — no field autofill dependency:
38
+
39
+ - `access-control/components/event/list/index.ts`
40
+ - `access-control/components/control/search/views/list.ts`
41
+ - `la-billetterie/components/event/form-event-filter/form-event-filter.ts`
42
+ - `la-billetterie/components/counter/*` (agenda, store, reservation-request-treatment, …)
43
+ - `widgets/agenda/agenda.ts`
44
+ - … see full dual list in ticket notes / grep below
45
+
46
+ ### Full dual-channel file list (55)
47
+
48
+ ```
49
+ concorde/src/access-control/components/control/search/views/list.ts
50
+ concorde/src/access-control/components/event/list/index.ts
51
+ concorde/src/la-billetterie/components/access-control-mobile/access-controller-picker.ts
52
+ concorde/src/la-billetterie/components/accreditations-directory/accreditations-directory.ts
53
+ concorde/src/la-billetterie/components/address/address-suggestion.ts
54
+ concorde/src/la-billetterie/components/bulk/bulk.ts
55
+ concorde/src/la-billetterie/components/campaign/campaign-content.ts
56
+ concorde/src/la-billetterie/components/counter/agenda/agenda.ts
57
+ concorde/src/la-billetterie/components/counter/event-selector/event-selector.ts
58
+ concorde/src/la-billetterie/components/counter/order-validation/order-validation-settings.ts
59
+ concorde/src/la-billetterie/components/counter/print/format-menu.ts
60
+ concorde/src/la-billetterie/components/counter/reservation-request-treatment/reservation-request-treatment.ts
61
+ concorde/src/la-billetterie/components/counter/store/counter-store.ts
62
+ concorde/src/la-billetterie/components/counter/widgets-settings/widgets-settings-page.ts
63
+ concorde/src/la-billetterie/components/custom-list/custom-list.ts
64
+ concorde/src/la-billetterie/components/event/agenda/agenda.ts
65
+ concorde/src/la-billetterie/components/event/atoms/buy-event-block/buy-event-block.ts
66
+ concorde/src/la-billetterie/components/event/atoms/categorizedPrices/categorizedPrices.ts
67
+ concorde/src/la-billetterie/components/event/event-store/event-store-content.ts
68
+ concorde/src/la-billetterie/components/event/form-event-filter/form-event-filter.ts
69
+ concorde/src/la-billetterie/components/form/event-selection/event-selection-filters.ts
70
+ concorde/src/la-billetterie/components/form/event-selection/event-selection.ts
71
+ concorde/src/la-billetterie/components/giftcards/giftcard-link.ts
72
+ concorde/src/la-billetterie/components/layout/header.ts
73
+ concorde/src/la-billetterie/components/orders/recover/recover.ts
74
+ concorde/src/la-billetterie/components/placing/atoms/placement-choice/placement-choice.ts
75
+ concorde/src/la-billetterie/components/placing/seatmap-view/seatmap-view.ts
76
+ concorde/src/la-billetterie/components/product/price-selection-form/price-selection-form.ts
77
+ concorde/src/la-billetterie/components/product/prices-form/price-button/price-button.ts
78
+ concorde/src/la-billetterie/components/purchase/purchase-summary/complementary-info/complementary-info.ts
79
+ concorde/src/la-billetterie/components/reservation-request/atoms/request-event-form.ts
80
+ concorde/src/la-billetterie/components/reservation/atoms/new-quote-form.ts
81
+ concorde/src/la-billetterie/components/reservation/reservation-content.ts
82
+ concorde/src/la-billetterie/components/seatmap/seatmap.ts
83
+ concorde/src/la-billetterie/components/shop/shop.ts
84
+ concorde/src/la-billetterie/components/stats/dashboard/dashboard.ts
85
+ concorde/src/la-billetterie/components/stats/event/event-stats-check.ts
86
+ concorde/src/la-billetterie/components/stats/sales-summary/sales-summary.ts
87
+ concorde/src/la-billetterie/components/subscription/atoms/quick-select-display-toggle/quick-select-display-toggle.ts
88
+ concorde/src/la-billetterie/components/subscription/cart-quick-select.ts
89
+ concorde/src/la-billetterie/components/subscription/edit/subscription-renew-form.ts
90
+ concorde/src/la-billetterie/components/ticket/ticket-freeup.ts
91
+ concorde/src/la-billetterie/components/tickets-app/default-router.ts
92
+ concorde/src/la-billetterie/components/user/account/account-purchases.ts
93
+ concorde/src/la-billetterie/components/user/account/account-tickets.ts
94
+ concorde/src/la-billetterie/components/user/account/link-ticket/link-ticket.ts
95
+ concorde/src/la-billetterie/components/user/form/login.ts
96
+ concorde/src/la-billetterie/components/user/user-attach/buyer-attach-form.ts
97
+ concorde/src/la-billetterie/components/user/user-attach/buyer-attach.ts
98
+ concorde/src/la-billetterie/components/user/user-attach/owner-attach-form.ts
99
+ concorde/src/la-billetterie/components/user/user-attach/subscription-attach-form.ts
100
+ concorde/src/la-billetterie/components/user/user-attach/subscription-selector.ts
101
+ concorde/src/la-billetterie/components/user/user-selector/user-selector.ts
102
+ concorde/src/la-billetterie/components/user/user-suggest/user-suggest.ts
103
+ concorde/src/widgets/agenda/agenda.ts
104
+ ```
105
+
106
+ Re-run audit:
107
+
108
+ ```bash
109
+ # from la-billetterie
110
+ rg -l 'formDataProvider' concorde/src | while read f; do rg -q 'dataProvider\s*=' "$f" && echo "$f"; done
111
+ ```
112
+
113
+ ## Non-regression (Concorde docs)
114
+
115
+ Smoke form demos: input, textarea, select, checkbox (incl. check-all), radio, switch, button form modes, queue + `dataFilterProvider`, submit, validation / sameValueAs, input-autocomplete.
@@ -2,6 +2,8 @@
2
2
 
3
3
  Some hosts (legacy PHP pages, static HTML) embed Concorde components **without** a Lit build step. They can use HTML attributes such as **`data-bind`**, **`dataProvider`**, and **`formDataProvider`** on tags directly in the page.
4
4
 
5
+ **Form fields** (`sonic-input`, checkbox, select, …) bind only via **`formDataProvider` + `name`**. They do not autofill from ancestor `dataProvider` (Subscriber was removed from FormElement — see [FormElement without Subscriber](#docs/_misc/formelement-subscriber-removal.md/formelement-subscriber-removal)).
6
+
5
7
  That style is **not** what we demonstrate in this doc site: live examples are **Lit components** under `src/docs/example/`, registered once and reused from Markdown via tags like `<docs-joke-search-demo>`.
6
8
 
7
9
  | Goal | Use |
package/src/docs/code.ts CHANGED
@@ -36,6 +36,8 @@ export class DocsCode extends LitElement {
36
36
  pre {
37
37
  font-size: 13px !important;
38
38
  padding-right: 5rem !important;
39
+ border: 1px solid var(--sc-base-200);
40
+ border-radius: var(--sc-rounded);
39
41
  }
40
42
  .custom-scroll {
41
43
  overflow: auto !important;
@@ -239,7 +241,7 @@ export class DocsCode extends LitElement {
239
241
  return html`
240
242
  <div
241
243
  class="relative ${this.language === "markup"
242
- ? "border border-neutral-100 p-4 rounded-md"
244
+ ? "rounded-md border border-neutral-200 bg-neutral-50/80 dark:border-neutral-700/80 dark:bg-neutral-900/40 p-4"
243
245
  : ""}"
244
246
  >
245
247
  ${this.language === "markup" && !this.noOutput