@supersoniks/concorde 5.1.1 → 5.1.3-immutable.1

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 (459) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +153 -0
  2. package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
  3. package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
  4. package/.agents/skills/concorde-docs/templates/guide.md +25 -0
  5. package/.claude/skills +1 -0
  6. package/.github/workflows/ci.yml +21 -0
  7. package/.github-export-ignore +30 -0
  8. package/CONTRIBUTING.md +59 -0
  9. package/DEV.md +54 -0
  10. package/LICENSE +21 -0
  11. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  12. package/README.md +4 -4
  13. package/ai/README.md +29 -41
  14. package/ai/skills/concorde/SKILL.md +54 -324
  15. package/ai/skills/concorde/rules/composition.md +32 -0
  16. package/ai/skills/concorde/rules/data.md +47 -0
  17. package/ai/skills/concorde/rules/http.md +25 -0
  18. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  19. package/ai/skills/concorde/rules/styling.md +46 -0
  20. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  21. package/build-infos.json +1 -1
  22. package/concorde-core.bundle.js +177 -177
  23. package/concorde-core.es.js +4993 -4833
  24. package/custom-elements-manifest.public.config.mjs +8 -0
  25. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11758 -8904
  26. package/dist/concorde-core.bundle.js +177 -177
  27. package/dist/concorde-core.es.js +4993 -4833
  28. package/dist/docs-mock-api-sw.js +58 -223
  29. package/dist/docs-mock-api-sw.js.map +4 -4
  30. package/dist/img/concorde/plane_01.jpg +0 -0
  31. package/dist/img/concorde/plane_02.jpg +0 -0
  32. package/dist/img/concorde/plane_03.jpg +0 -0
  33. package/dist/img/concorde/plane_04.jpg +0 -0
  34. package/dist/img/concorde/plane_05.jpg +0 -0
  35. package/dist/img/concorde/plane_06.jpg +0 -0
  36. package/dist/img/concorde/plane_07.jpg +0 -0
  37. package/dist/img/concorde/plane_08.jpg +0 -0
  38. package/dist/img/concorde/plane_09.jpg +0 -0
  39. package/dist/img/concorde/plane_10.jpg +0 -0
  40. package/dist/img/concorde/plane_11.jpg +0 -0
  41. package/dist/img/concorde/plane_12.jpg +0 -0
  42. package/dist/img/concorde/plane_13.jpg +0 -0
  43. package/dist/img/og-concorde.jpg +0 -0
  44. package/dist/robots.txt +11 -10
  45. package/docs/assets/index-D_alEsng.js +12122 -0
  46. package/docs/crawl/core/components/functional/date/date.html +190 -0
  47. package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
  48. package/docs/crawl/core/components/functional/if/if.html +27 -0
  49. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  50. package/docs/crawl/core/components/functional/list/list.html +70 -0
  51. package/docs/crawl/core/components/functional/mix/mix.html +45 -0
  52. package/docs/crawl/core/components/functional/queue/queue.html +96 -0
  53. package/docs/crawl/core/components/functional/router/router.html +106 -0
  54. package/docs/crawl/core/components/functional/sdui/sdui-extension-points.html +126 -0
  55. package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
  56. package/docs/crawl/core/components/functional/states/states.html +66 -0
  57. package/docs/crawl/core/components/functional/submit/submit.html +160 -0
  58. package/docs/crawl/core/components/functional/subscriber/subscriber.html +67 -0
  59. package/docs/crawl/core/components/functional/value/value.html +51 -0
  60. package/docs/crawl/core/components/ui/alert/alert.html +211 -0
  61. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +131 -0
  62. package/docs/crawl/core/components/ui/badge/badge.html +197 -0
  63. package/docs/crawl/core/components/ui/button/button.html +150 -0
  64. package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
  65. package/docs/crawl/core/components/ui/card/card.html +253 -0
  66. package/docs/crawl/core/components/ui/divider/divider.html +144 -0
  67. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
  68. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
  69. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +122 -0
  70. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
  71. package/docs/crawl/core/components/ui/form/input/input.html +109 -0
  72. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
  73. package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
  74. package/docs/crawl/core/components/ui/form/select/select.html +73 -0
  75. package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
  76. package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
  77. package/docs/crawl/core/components/ui/group/group.html +104 -0
  78. package/docs/crawl/core/components/ui/icon/icon.html +222 -0
  79. package/docs/crawl/core/components/ui/image/image.html +298 -0
  80. package/docs/crawl/core/components/ui/link/link.html +100 -0
  81. package/docs/crawl/core/components/ui/loader/loader.html +124 -0
  82. package/docs/crawl/core/components/ui/menu/menu.html +394 -0
  83. package/docs/crawl/core/components/ui/modal/modal.html +342 -0
  84. package/docs/crawl/core/components/ui/pop/pop.html +296 -0
  85. package/docs/crawl/core/components/ui/progress/progress.html +131 -0
  86. package/docs/crawl/core/components/ui/table/table.html +545 -0
  87. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  88. package/docs/crawl/core/components/ui/toast/toast.html +233 -0
  89. package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
  90. package/docs/crawl/docs/_core-concept/dataFlow.html +177 -0
  91. package/docs/crawl/docs/_core-concept/overview.html +66 -0
  92. package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
  93. package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
  94. package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
  95. package/docs/crawl/docs/_decorators/bind.html +141 -0
  96. package/docs/crawl/docs/_decorators/get.html +149 -0
  97. package/docs/crawl/docs/_decorators/handle.html +165 -0
  98. package/docs/crawl/docs/_decorators/on-assign.html +355 -0
  99. package/docs/crawl/docs/_decorators/patch.html +78 -0
  100. package/docs/crawl/docs/_decorators/post.html +139 -0
  101. package/docs/crawl/docs/_decorators/publish.html +61 -0
  102. package/docs/crawl/docs/_decorators/put.html +78 -0
  103. package/docs/crawl/docs/_decorators/subscribe.html +109 -0
  104. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
  105. package/docs/crawl/docs/_directives/sub.html +93 -0
  106. package/docs/crawl/docs/_getting-started/ai-agents.html +173 -0
  107. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
  108. package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
  109. package/docs/crawl/docs/_getting-started/create-a-component.html +111 -0
  110. package/docs/crawl/docs/_getting-started/my-first-component.html +189 -0
  111. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
  112. package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
  113. package/docs/crawl/docs/_getting-started/start.html +76 -0
  114. package/docs/crawl/docs/_getting-started/theming.html +333 -0
  115. package/docs/crawl/docs/_misc/api-configuration.html +149 -0
  116. package/docs/crawl/docs/_misc/dataProviderKey.html +135 -0
  117. package/docs/crawl/docs/_misc/docs-mock-api.html +158 -0
  118. package/docs/crawl/docs/_misc/dynamic-path.html +180 -0
  119. package/docs/crawl/docs/_misc/endpoint.html +50 -0
  120. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  121. package/docs/crawl/docs/_misc/html-integration.html +48 -0
  122. package/docs/crawl/hubs/decorators.html +547 -0
  123. package/docs/crawl/hubs/form-components.html +381 -0
  124. package/docs/crawl/hubs/remote-data.html +452 -0
  125. package/docs/crawl/index.html +103 -0
  126. package/docs/index.html +1 -1
  127. package/docs/llms-full.txt +7174 -0
  128. package/docs/llms.txt +98 -0
  129. package/docs/sitemap.xml +243 -0
  130. package/docs/src/core/components/functional/date/date.md +290 -0
  131. package/docs/src/core/components/functional/fetch/fetch.md +125 -0
  132. package/docs/src/core/components/functional/if/if.md +9 -0
  133. package/docs/src/core/components/functional/jsonata/jsonata.md +56 -0
  134. package/docs/src/core/components/functional/list/list.md +65 -0
  135. package/docs/src/core/components/functional/mix/mix.md +41 -0
  136. package/docs/src/core/components/functional/queue/queue.md +72 -0
  137. package/docs/src/core/components/functional/router/router.md +94 -0
  138. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  139. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  140. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  141. package/docs/src/core/components/functional/sdui/example.json +99 -0
  142. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  143. package/docs/src/core/components/functional/sdui/sdui.md +478 -0
  144. package/docs/src/core/components/functional/states/states.md +87 -0
  145. package/docs/src/core/components/functional/submit/submit.md +114 -0
  146. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  147. package/docs/src/core/components/functional/value/value.md +35 -0
  148. package/docs/src/core/components/ui/alert/alert.md +196 -0
  149. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  150. package/docs/src/core/components/ui/badge/badge.md +188 -0
  151. package/docs/src/core/components/ui/button/button.md +183 -0
  152. package/docs/src/core/components/ui/captcha/captcha.md +71 -0
  153. package/docs/src/core/components/ui/card/card.md +215 -0
  154. package/docs/src/core/components/ui/divider/divider.md +129 -0
  155. package/docs/src/core/components/ui/form/checkbox/checkbox.md +77 -0
  156. package/docs/src/core/components/ui/form/fieldset/fieldset.md +205 -0
  157. package/docs/src/core/components/ui/form/form-actions/form-actions.md +100 -0
  158. package/docs/src/core/components/ui/form/form-layout/form-layout.md +119 -0
  159. package/docs/src/core/components/ui/form/input/input.md +142 -0
  160. package/docs/src/core/components/ui/form/radio/radio.md +57 -0
  161. package/docs/src/core/components/ui/form/select/select.md +71 -0
  162. package/docs/src/core/components/ui/form/switch/switch.md +57 -0
  163. package/docs/src/core/components/ui/form/textarea/textarea.md +65 -0
  164. package/docs/src/core/components/ui/group/group.md +75 -0
  165. package/docs/src/core/components/ui/icon/icon.md +214 -0
  166. package/docs/src/core/components/ui/icon/icons.json +1 -0
  167. package/docs/src/core/components/ui/image/image.md +233 -0
  168. package/docs/src/core/components/ui/link/link.md +81 -0
  169. package/docs/src/core/components/ui/loader/loader.md +112 -0
  170. package/docs/src/core/components/ui/menu/menu.md +370 -0
  171. package/docs/src/core/components/ui/modal/modal.md +235 -0
  172. package/docs/src/core/components/ui/pop/pop.md +294 -0
  173. package/docs/src/core/components/ui/progress/progress.md +109 -0
  174. package/docs/src/core/components/ui/table/table.md +431 -0
  175. package/docs/src/core/components/ui/theme/theme.md +122 -0
  176. package/docs/src/core/components/ui/toast/toast.md +216 -0
  177. package/docs/src/core/components/ui/tooltip/tooltip.md +124 -0
  178. package/{src → docs/src}/docs/_core-concept/subscriber.md +0 -0
  179. package/{src → docs/src}/docs/_getting-started/my-first-subscriber.md +0 -0
  180. package/{src → docs/src}/docs/_getting-started/pubsub.md +0 -0
  181. package/docs/src/docs/_getting-started/theming.md +253 -0
  182. package/docs/src/docs/search/docs-search.json +12242 -0
  183. package/docs/src/tag-list.json +1 -0
  184. package/docs/src/tsconfig-model.json +23 -0
  185. package/docs/src/tsconfig.declarations.json +22 -0
  186. package/docs/src/tsconfig.emit.json +23 -0
  187. package/docs/src/tsconfig.json +1332 -0
  188. package/gitlab/job_github_mirror.sh +39 -0
  189. package/index.html +157 -5
  190. package/package.json +22 -4
  191. package/public/docs-mock-api-sw.js +58 -223
  192. package/public/docs-mock-api-sw.js.map +4 -4
  193. package/public/img/concorde/plane_01.jpg +0 -0
  194. package/public/img/concorde/plane_02.jpg +0 -0
  195. package/public/img/concorde/plane_03.jpg +0 -0
  196. package/public/img/concorde/plane_04.jpg +0 -0
  197. package/public/img/concorde/plane_05.jpg +0 -0
  198. package/public/img/concorde/plane_06.jpg +0 -0
  199. package/public/img/concorde/plane_07.jpg +0 -0
  200. package/public/img/concorde/plane_08.jpg +0 -0
  201. package/public/img/concorde/plane_09.jpg +0 -0
  202. package/public/img/concorde/plane_10.jpg +0 -0
  203. package/public/img/concorde/plane_11.jpg +0 -0
  204. package/public/img/concorde/plane_12.jpg +0 -0
  205. package/public/img/concorde/plane_13.jpg +0 -0
  206. package/public/img/og-concorde.jpg +0 -0
  207. package/public/robots.txt +11 -10
  208. package/scripts/ai-init.mjs +104 -379
  209. package/scripts/ai-init.test.mjs +81 -239
  210. package/scripts/docs-markdown-vite-plugin.ts +43 -0
  211. package/scripts/docs-public-url.mjs +56 -0
  212. package/scripts/docs.htaccess +82 -0
  213. package/scripts/generate-cem.mjs +244 -0
  214. package/scripts/generate-cem.test.mjs +122 -0
  215. package/scripts/generate-crawl-docs.mjs +233 -118
  216. package/scripts/generate-crawl-docs.test.mjs +124 -0
  217. package/scripts/generate-sdui-catalog.mjs +11 -10
  218. package/scripts/github-export.mjs +150 -0
  219. package/scripts/post-build-docs.js +37 -50
  220. package/scripts/post-build.mjs +0 -0
  221. package/scripts/pre-publish.mjs +2 -1
  222. package/scripts/site-pages.mjs +212 -0
  223. package/scripts/site-pages.test.mjs +116 -0
  224. package/site-pages/about.md +22 -0
  225. package/site-pages/privacy.md +32 -0
  226. package/src/core/components/functional/date/date.md +91 -231
  227. package/src/core/components/functional/example/example.ts +3 -1
  228. package/src/core/components/functional/fetch/fetch.md +66 -83
  229. package/src/core/components/functional/if/if.md +28 -3
  230. package/src/core/components/functional/if/if.ts +0 -0
  231. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  232. package/src/core/components/functional/list/list.demo.ts +0 -0
  233. package/src/core/components/functional/list/list.md +103 -43
  234. package/src/core/components/functional/list/list.ts +17 -4
  235. package/src/core/components/functional/mix/mix.md +31 -26
  236. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  237. package/src/core/components/functional/queue/queue.md +40 -61
  238. package/src/core/components/functional/router/router.demo.ts +16 -16
  239. package/src/core/components/functional/router/router.md +64 -65
  240. package/src/core/components/functional/router/router.ts +0 -0
  241. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  242. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  243. package/src/core/components/functional/sdui/component-catalog.json +2 -2
  244. package/src/core/components/functional/sdui/example.json +19 -86
  245. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  246. package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
  247. package/src/core/components/functional/sdui/sdui.md +187 -358
  248. package/src/core/components/functional/sdui/sdui.ts +33 -8
  249. package/src/core/components/functional/sdui/types.ts +0 -0
  250. package/src/core/components/functional/states/states.demo.ts +21 -22
  251. package/src/core/components/functional/states/states.md +86 -61
  252. package/src/core/components/functional/states/states.ts +1 -1
  253. package/src/core/components/functional/submit/submit.md +64 -72
  254. package/src/core/components/functional/submit/submit.spec.ts +60 -0
  255. package/src/core/components/functional/submit/submit.ts +6 -3
  256. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  257. package/src/core/components/functional/translation/translation.md +38 -0
  258. package/src/core/components/functional/value/value.md +34 -22
  259. package/src/core/components/functional/value/value.ts +0 -0
  260. package/src/core/components/ui/_css/size.ts +0 -0
  261. package/src/core/components/ui/alert/alert.md +48 -58
  262. package/src/core/components/ui/badge/badge.md +27 -34
  263. package/src/core/components/ui/button/button.md +139 -106
  264. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  265. package/src/core/components/ui/captcha/captcha.md +17 -32
  266. package/src/core/components/ui/card/card.md +6 -6
  267. package/src/core/components/ui/divider/divider.md +8 -11
  268. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  269. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  270. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  271. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  272. package/src/core/components/ui/form/input/input.md +108 -90
  273. package/src/core/components/ui/form/input/input.ts +8 -2
  274. package/src/core/components/ui/form/radio/radio.md +65 -30
  275. package/src/core/components/ui/form/select/select.md +60 -45
  276. package/src/core/components/ui/form/switch/switch.md +57 -34
  277. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  278. package/src/core/components/ui/group/group.md +35 -33
  279. package/src/core/components/ui/icon/icon.md +4 -4
  280. package/src/core/components/ui/image/image.md +41 -107
  281. package/src/core/components/ui/link/link.md +6 -6
  282. package/src/core/components/ui/loader/loader.md +30 -55
  283. package/src/core/components/ui/menu/menu.md +27 -27
  284. package/src/core/components/ui/modal/modal.md +72 -96
  285. package/src/core/components/ui/pop/pop.md +80 -158
  286. package/src/core/components/ui/progress/progress.md +2 -2
  287. package/src/core/components/ui/table/table.md +91 -255
  288. package/src/core/components/ui/theme/theme.md +11 -36
  289. package/src/core/components/ui/toast/toast.md +48 -117
  290. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  291. package/src/core/decorators/subscriber/bind.ts +9 -14
  292. package/src/core/decorators/subscriber/subscribe.ts +15 -9
  293. package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
  294. package/src/core/mixins/Subscriber.ts +0 -0
  295. package/src/core/utils/DataBindObserver.ts +0 -0
  296. package/src/core/utils/LocationHandler.spec.ts +80 -0
  297. package/src/core/utils/LocationHandler.ts +5 -9
  298. package/src/core/utils/Objects.ts +0 -0
  299. package/src/core/utils/PublisherProxy.ts +166 -125
  300. package/src/core/utils/deepReadonly.spec.ts +66 -0
  301. package/src/core/utils/deepReadonly.ts +71 -0
  302. package/src/core/utils/immutableValue.spec.ts +54 -0
  303. package/src/core/utils/immutableValue.ts +102 -0
  304. package/src/core/utils/nestedDotForm.spec.ts +88 -0
  305. package/src/core/utils/publisherImmutable.spec.ts +76 -0
  306. package/src/core/utils/route.ts +0 -0
  307. package/src/core/utils/strictGet.spec.ts +61 -0
  308. package/src/core/utils/strictGet.ts +102 -0
  309. package/src/css.d.ts +19 -0
  310. package/src/docs/components/docs-demo-sources.ts +55 -140
  311. package/src/docs/components/docs-lit-demo.ts +1 -3
  312. package/src/docs/components/docs-source-link.ts +0 -82
  313. package/src/docs/decorators/ancestor-attribute.md +59 -0
  314. package/src/docs/decorators/auto-subscribe.md +40 -0
  315. package/src/docs/decorators/bind.md +76 -0
  316. package/src/docs/decorators/get.md +160 -0
  317. package/src/docs/decorators/handle.md +119 -0
  318. package/src/docs/decorators/on-assign.md +63 -0
  319. package/src/docs/decorators/patch.md +44 -0
  320. package/src/docs/decorators/post.md +134 -0
  321. package/src/docs/decorators/publish.md +56 -0
  322. package/src/docs/decorators/put.md +51 -0
  323. package/src/docs/decorators/subscribe.md +87 -0
  324. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  325. package/src/docs/directives/sub.md +75 -0
  326. package/src/docs/directives/t.md +73 -0
  327. package/src/docs/docs-location.spec.ts +56 -0
  328. package/src/docs/docs-location.ts +133 -32
  329. package/src/docs/docs.ts +1 -2
  330. package/src/docs/example/decorators-demo-bind-demos.ts +83 -135
  331. package/src/docs/example/decorators-demo-geo.ts +30 -19
  332. package/src/docs/example/decorators-demo-post.ts +88 -186
  333. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  334. package/src/docs/example/decorators-demo.ts +85 -98
  335. package/src/docs/example/docs-api-config-demos.ts +19 -20
  336. package/src/docs/example/docs-flight-demos.ts +147 -0
  337. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  338. package/src/docs/example/docs-list-demos.ts +43 -123
  339. package/src/docs/example/docs-provider-keys.ts +21 -28
  340. package/src/docs/example/docs-queue-demos.ts +37 -77
  341. package/src/docs/example/docs-router-demos.ts +20 -25
  342. package/src/docs/example/docs-submit-demos.ts +48 -48
  343. package/src/docs/example/docs-toggle-demos.ts +4 -3
  344. package/src/docs/example/users.ts +0 -0
  345. package/src/docs/getting-started/ai-agents.md +50 -0
  346. package/src/docs/getting-started/create-a-component.md +136 -0
  347. package/src/docs/getting-started/dataFlow.md +87 -0
  348. package/src/docs/getting-started/installation.md +36 -0
  349. package/src/docs/getting-started/my-first-component.md +227 -0
  350. package/src/docs/getting-started/start.md +35 -0
  351. package/src/docs/header/header.ts +11 -6
  352. package/src/docs/home/catalog.ts +1 -1
  353. package/src/docs/home/home.ts +20 -11
  354. package/src/docs/layout.ts +12 -13
  355. package/src/docs/misc/api-configuration.md +79 -0
  356. package/src/docs/misc/dataProviderKey.md +168 -0
  357. package/src/docs/misc/docs-mock-api.md +62 -0
  358. package/src/docs/misc/dynamic-path.md +71 -0
  359. package/src/docs/misc/endpoint.md +45 -0
  360. package/src/docs/misc/html-integration.md +14 -0
  361. package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
  362. package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
  363. package/src/docs/misc/publisher-get-immutability-study.md +229 -0
  364. package/src/docs/mock-api/api-config-mock.ts +5 -0
  365. package/src/docs/mock-api/fixtures.ts +0 -278
  366. package/src/docs/mock-api/flights.ts +89 -0
  367. package/src/docs/mock-api/router.ts +3 -4
  368. package/src/docs/mock-api/urls.ts +1 -2
  369. package/src/docs/navigation/navigation.ts +84 -101
  370. package/src/docs/navigation/toc.ts +7 -4
  371. package/src/docs/search/docs-search.json +3188 -5153
  372. package/src/docs/search/markdown-renderer.ts +31 -8
  373. package/src/docs/search/page.ts +9 -6
  374. package/src/docs/search/search.ts +154 -122
  375. package/src/docs/tailwind/css/docs/content.css +4 -5
  376. package/src/tsconfig.declarations.json +22 -0
  377. package/src/tsconfig.emit.json +23 -0
  378. package/src/tsconfig.json +53 -5
  379. package/src/tsconfig.tsbuildinfo +1 -1
  380. package/vite.config.mts +11 -2
  381. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  382. package/.taste-skill/after/desktop-fold.jpg +0 -0
  383. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  384. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  385. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  386. package/.taste-skill/after/mobile-fold.jpg +0 -0
  387. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  388. package/.taste-skill/after/report.json +0 -4103
  389. package/.taste-skill/after/tablet-fold.jpg +0 -0
  390. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  391. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  392. package/.taste-skill/before/desktop-fold.jpg +0 -0
  393. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  394. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  395. package/.taste-skill/before/mobile-fold.jpg +0 -0
  396. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  397. package/.taste-skill/before/report.json +0 -2556
  398. package/.taste-skill/before/tablet-fold.jpg +0 -0
  399. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  400. package/.taste-skill/direction.json +0 -510
  401. package/.taste-skill/notes.md +0 -84
  402. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  403. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  404. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  405. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  406. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  407. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  408. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  409. package/.taste-skill/prod/report.json +0 -1973
  410. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  411. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  412. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  413. package/AUDIT.md +0 -228
  414. package/PLAN-AMELIORATION.md +0 -220
  415. package/ai/AGENTS.md +0 -56
  416. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  417. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  418. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  419. package/ai/cursor/rules/concorde.mdc +0 -66
  420. package/ai/jetbrains/rules/concorde.md +0 -53
  421. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  422. package/ai/skills/concorde-imports/SKILL.md +0 -78
  423. package/ai/skills/concorde-menu/SKILL.md +0 -74
  424. package/ai/skills/concorde-scope/SKILL.md +0 -70
  425. package/ai/skills/concorde-theme/SKILL.md +0 -57
  426. package/docs/assets/index-Bb-_LRyY.js +0 -12280
  427. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  428. package/src/docs/example/docs-joke-demos.ts +0 -297
  429. /package/{src → docs/src}/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -0
  430. /package/{src → docs/src}/docs/_core-concept/dataFlow.md +0 -0
  431. /package/{src → docs/src}/docs/_core-concept/overview.md +0 -0
  432. /package/{src → docs/src}/docs/_decorators/ancestor-attribute.md +0 -0
  433. /package/{src → docs/src}/docs/_decorators/auto-subscribe.md +0 -0
  434. /package/{src → docs/src}/docs/_decorators/bind.md +0 -0
  435. /package/{src → docs/src}/docs/_decorators/get.md +0 -0
  436. /package/{src → docs/src}/docs/_decorators/handle.md +0 -0
  437. /package/{src → docs/src}/docs/_decorators/on-assign.md +0 -0
  438. /package/{src → docs/src}/docs/_decorators/patch.md +0 -0
  439. /package/{src → docs/src}/docs/_decorators/post.md +0 -0
  440. /package/{src → docs/src}/docs/_decorators/publish.md +0 -0
  441. /package/{src → docs/src}/docs/_decorators/put.md +0 -0
  442. /package/{src → docs/src}/docs/_decorators/subscribe.md +0 -0
  443. /package/{src → docs/src}/docs/_decorators/wait-for-ancestors.md +0 -0
  444. /package/{src → docs/src}/docs/_directives/sub.md +0 -0
  445. /package/{src → docs/src}/docs/_getting-started/ai-agents.md +0 -0
  446. /package/{src → docs/src}/docs/_getting-started/concorde-manual-install.md +0 -0
  447. /package/{src → docs/src}/docs/_getting-started/concorde-outside.md +0 -0
  448. /package/{src → docs/src}/docs/_getting-started/create-a-component.md +0 -0
  449. /package/{src → docs/src}/docs/_getting-started/my-first-component.md +0 -0
  450. /package/{src → docs/src}/docs/_getting-started/start.md +0 -0
  451. /package/{src → docs/src}/docs/_misc/api-configuration.md +0 -0
  452. /package/{src → docs/src}/docs/_misc/dataProviderKey.md +0 -0
  453. /package/{src → docs/src}/docs/_misc/docs-mock-api.md +0 -0
  454. /package/{src → docs/src}/docs/_misc/dynamic-path.md +0 -0
  455. /package/{src → docs/src}/docs/_misc/endpoint.md +0 -0
  456. /package/{src → docs/src}/docs/_misc/formelement-subscriber-removal.md +0 -0
  457. /package/{src → docs/src}/docs/_misc/html-integration.md +0 -0
  458. /package/src/docs/{_getting-started → getting-started}/components.md +0 -0
  459. /package/src/docs/{_getting-started → getting-started}/theming.md +0 -0
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+ <html lang="fr" data-crawl-url="https://concorde.supersoniks.org/crawl/core/components/functional/queue/queue.html" data-doc-id="core/components/functional/queue/queue">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Queue — Concorde</title>
7
+ <meta name="description" content="&gt; Try offline: serviceURL=&quot;/docs-mock-api&quot; — see Local API demos. Row rendering: Data flow (.items property binding).">
8
+ <meta name="keywords" content="Concorde, supersoniks, core/components/functional/queue/queue, queue, Queue, functional component, sonic-queue, web component, serviceURL=&quot;/docs-mock-api&quot;, .items, dataProvider, …/list-item/0, …/1, dataProviderExpression, $offset, $limit, lazyload, dataFilterProvider">
9
+ <meta name="concorde-doc-id" content="core/components/functional/queue/queue">
10
+ <link rel="canonical" href="https://concorde.supersoniks.org/crawl/core/components/functional/queue/queue.html">
11
+ </head>
12
+ <body>
13
+ <header>
14
+ <p><a href="../../../../index.html">Concorde documentation (crawl)</a> · <a href="https://concorde.supersoniks.org/#core/components/functional/queue/queue.md/queue" rel="nofollow">interactive version</a></p>
15
+ </header>
16
+ <main>
17
+ <article>
18
+ <p class="doc-lead" id="doc-summary"><strong>Concorde functional component — Queue</strong>. &gt; Try offline: serviceURL=&quot;/docs-mock-api&quot; — see Local API demos. Row rendering: Data flow (.items property binding). <span>Doc ID: <code>core/components/functional/queue/queue</code>. Keywords: Concorde, supersoniks, core/components/functional/queue/queue, queue, Queue, functional component, sonic-queue, web component, serviceURL=&quot;/docs-mock-api&quot;, .items, dataProvider, …/list-item/0, …/1, dataProviderExpression, $offset, $limit, lazyload, dataFilterProvider. URL: <a href="https://concorde.supersoniks.org/crawl/core/components/functional/queue/queue.html">https://concorde.supersoniks.org/crawl/core/components/functional/queue/queue.html</a>.</span></p>
19
+ <h1 id="queue">Queue</h1>
20
+ <blockquote>
21
+ <p><strong>Try offline:</strong> <code>serviceURL=&quot;/docs-mock-api&quot;</code> — see <a href="../../../../docs/_misc/docs-mock-api.html#docs-mock-api">Local API demos</a>. Row rendering: <a href="../../../../docs/_core-concept/dataFlow.html#dataFlow">Data flow</a> (<code>.items</code> property binding).</p>
22
+ </blockquote>
23
+ <p><strong>sonic-queue</strong> loads data in <strong>batches</strong>. Each batch is an internal <a href="../list/list.html#list">List</a> with its own <code>dataProvider</code> (<code>…/list-item/0</code>, <code>…/1</code>, …).</p>
24
+ <table>
25
+ <thead>
26
+ <tr>
27
+ <th>Mechanism</th>
28
+ <th>Role</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody><tr>
32
+ <td><strong><code>dataProviderExpression</code></strong></td>
33
+ <td>API path template; <code>$offset</code> and <code>$limit</code> are replaced per batch</td>
34
+ </tr>
35
+ <tr>
36
+ <td><strong><code>lazyload</code></strong></td>
37
+ <td>Load the next batch when the user scrolls near the end</td>
38
+ </tr>
39
+ <tr>
40
+ <td><strong><code>dataFilterProvider</code></strong></td>
41
+ <td>Publisher id of a form (<code>formDataProvider</code>); field values are merged into the request query string</td>
42
+ </tr>
43
+ <tr>
44
+ <td><strong><code>filteredFields</code></strong></td>
45
+ <td>Optional list of form field names to <strong>exclude</strong> from the query (space-separated) — omit when every field should be sent</td>
46
+ </tr>
47
+ <tr>
48
+ <td><strong><code>.items</code></strong>, <strong><code>.noItems</code></strong>, <strong><code>.separator</code></strong>, <strong><code>.skeleton</code></strong></td>
49
+ <td>Lit callbacks forwarded to each batch list (use the <strong>dot</strong> — functions are properties, not attributes)</td>
50
+ </tr>
51
+ </tbody></table>
52
+ <h2 id="lazy-load--offset-and-limit">Lazy load — <code>$offset</code> and <code>$limit</code></h2>
53
+ <p>When the expression contains <strong><code>$offset</code></strong> and <strong><code>$limit</code></strong>, the queue:</p>
54
+ <ol>
55
+ <li>Fetches the first batch with <code>offset=0</code> (or the initial <code>offset</code> attribute) and <code>per_page=$limit</code>.</li>
56
+ <li>On scroll, appends a batch with <code>offset</code> increased by the previous batch size.</li>
57
+ <li>Stops when a batch returns fewer rows than <code>limit</code> (or none).</li>
58
+ </ol>
59
+ <p>The doc mock implements this on <code>GET /docs-mock-api/api/users?offset=…&amp;per_page=…</code> (<code>paginateUsers</code> in <code>src/docs/mock-api/router.ts</code>).</p>
60
+ <p><docs-lit-demo for="docs-queue-users-demo"></docs-lit-demo></p>
61
+ <p>Wrap the queue in a <strong>fixed height</strong> with <strong><code>overflow-y-auto</code></strong> so lazy load triggers when scrolling inside the box (same layout as the <a href="https://github.com/supersoniks/create-concorde-ts-starter">TS starter</a> <code>demo-queue-templates</code>).</p>
62
+ <p>Try scrolling after load — batches of 4 users. Search e.g. <code>George</code>, <code>Bluth</code>, or <code>zzz</code> for empty results.</p>
63
+ <h3 id="expression-example">Expression example</h3>
64
+ <pre><code class="language-typescript">html`&lt;sonic-queue
65
+ lazyload
66
+ serviceURL=&quot;/docs-mock-api&quot;
67
+ dataProviderExpression=&quot;api/users?offset=$offset&amp;limit=$limit&quot;
68
+ key=&quot;data&quot;
69
+ limit=&quot;4&quot;
70
+ class=&quot;grid max-h-96 overflow-y-auto&quot;
71
+ .items=${this.renderUser}
72
+ &gt;&lt;/sonic-queue&gt;`;
73
+ </code></pre>
74
+ <p>Without <strong><code>$offset</code></strong> in the expression, the queue behaves like a single list (one batch), e.g. geo communes below.</p>
75
+ <h2 id="filter--datafilterprovider--q">Filter — <code>dataFilterProvider</code> + <code>q</code></h2>
76
+ <p>One search field (<code>name=&quot;q&quot;</code>) on <code>formDataProvider=&quot;filter&quot;</code>. The queue listens via <strong><code>dataFilterProvider=&quot;filter&quot;</code></strong> and, on change:</p>
77
+ <ol>
78
+ <li>Resets loaded batches.</li>
79
+ <li>Appends each non-empty form field to the query (here only <strong><code>q</code></strong> — no <code>filteredFields</code> needed).</li>
80
+ <li>Fetches again from offset <code>0</code>.</li>
81
+ </ol>
82
+ <p>Use <strong><code>filteredFields</code></strong> only when the form has extra fields that must <strong>not</strong> be sent to the API (e.g. <code>filteredFields=&quot;rememberMe internalId&quot;</code>).</p>
83
+ <p>The mock API filters before pagination — same haystack logic as the starter (<code>filterDocsUsers</code> in <code>src/docs/mock-api/fixtures.ts</code>, used by <code>paginateUsers</code> in <code>router.ts</code> / Service Worker):</p>
84
+ <pre><code class="language-typescript">const haystack = `${first_name} ${last_name} ${email}`.toLowerCase();
85
+ return haystack.includes(q);
86
+ </code></pre>
87
+ <h2 id="simple-batch-no-lazy-scroll">Simple batch (no lazy scroll)</h2>
88
+ <p>Geo communes: expression uses <strong><code>$limit</code> only</strong> (no <code>$offset</code>) — one request, one batch.</p>
89
+ <p><docs-lit-demo for="docs-queue-geo-demo"></docs-lit-demo></p>
90
+ <h2 id="html-template-children">HTML <code>&lt;template&gt;</code> children</h2>
91
+ <p>Optional for hosts without Lit — see <a href="../../../../docs/_misc/html-integration.html#html-integration">HTML integration</a>.</p>
92
+
93
+ </article>
94
+ </main>
95
+ </body>
96
+ </html>
@@ -0,0 +1,106 @@
1
+ <!DOCTYPE html>
2
+ <html lang="fr" data-crawl-url="https://concorde.supersoniks.org/crawl/core/components/functional/router/router.html" data-doc-id="core/components/functional/router/router">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Router — Concorde</title>
7
+ <meta name="description" content="sonic-router watches document.location (pathname + hash) and renders the matching view.">
8
+ <meta name="keywords" content="Concorde, supersoniks, core/components/functional/router/router, router, Router, functional component, sonic-router, web component, document.location, .routes, .items, fallback, , pathname + hash, #home, #…/router.md/router, #…/router#home, href">
9
+ <meta name="concorde-doc-id" content="core/components/functional/router/router">
10
+ <link rel="canonical" href="https://concorde.supersoniks.org/crawl/core/components/functional/router/router.html">
11
+ </head>
12
+ <body>
13
+ <header>
14
+ <p><a href="../../../../index.html">Concorde documentation (crawl)</a> · <a href="https://concorde.supersoniks.org/#core/components/functional/router/router.md/router" rel="nofollow">interactive version</a></p>
15
+ </header>
16
+ <main>
17
+ <article>
18
+ <p class="doc-lead" id="doc-summary"><strong>Concorde functional component — Router</strong>. sonic-router watches document.location (pathname + hash) and renders the matching view. <span>Doc ID: <code>core/components/functional/router/router</code>. Keywords: Concorde, supersoniks, core/components/functional/router/router, router, Router, functional component, sonic-router, web component, document.location, .routes, .items, fallback, , pathname + hash, #home, #…/router.md/router, #…/router#home, href. URL: <a href="https://concorde.supersoniks.org/crawl/core/components/functional/router/router.html">https://concorde.supersoniks.org/crawl/core/components/functional/router/router.html</a>.</span></p>
19
+ <h1 id="router">Router</h1>
20
+ <p><strong>sonic-router</strong> watches <code>document.location</code> (pathname + hash) and renders the matching view.</p>
21
+ <p>From a <strong>Lit</strong> parent, pass a <strong><code>.routes</code></strong> map (property binding — same rule as <a href="../list/list.html#list"><code>.items</code> on list</a>): keys are path patterns, values are render functions. Use <strong><code>fallback</code></strong> when nothing matches.</p>
22
+ <p>Legacy HTML <strong><code>&lt;template data-route=&quot;…&quot;&gt;</code></strong> remains for hosts without Lit — <a href="../../../../docs/_misc/html-integration.html#html-integration">HTML integration</a>.</p>
23
+ <h2 id="static-routes-no-parameters">Static routes (no parameters)</h2>
24
+ <p>Route keys are matched against <code>pathname + hash</code>. A simple hash route <code>#home</code> matches when the location contains that segment.</p>
25
+ <p>On the <strong>doc site</strong>, the page URL is already a hash (<code>../../../../…/router.html#router</code>). Demos append a <strong>second</strong> hash for in-page routes (<code>#…/router#home</code>), use <strong><code>href</code> + <code>autoActive=&quot;strict&quot;</code></strong> on <code>sonic-button</code> for the active state, and <code>history.replaceState</code> on click so markdown is not reloaded (<code>setDocsDemoSubHash</code> in <code>src/docs/docs-location.ts</code>).</p>
26
+ <p><docs-lit-demo for="docs-router-basic-demo"></docs-lit-demo></p>
27
+ <pre><code class="language-typescript">@state()
28
+ private routes = {
29
+ &quot;#home&quot;: () =&gt; html`&lt;div&gt;Home&lt;/div&gt;`,
30
+ &quot;#about&quot;: () =&gt; html`&lt;div&gt;About&lt;/div&gt;`,
31
+ fallback: () =&gt; html`&lt;div&gt;Not found&lt;/div&gt;`,
32
+ };
33
+
34
+ html`
35
+ &lt;sonic-button href=&quot;#home&quot;&gt;Home&lt;/sonic-button&gt;
36
+ &lt;sonic-router .routes=${this.routes}&gt;&lt;/sonic-router&gt;
37
+ `;
38
+ </code></pre>
39
+ <table>
40
+ <thead>
41
+ <tr>
42
+ <th>Key</th>
43
+ <th>When it runs</th>
44
+ </tr>
45
+ </thead>
46
+ <tbody><tr>
47
+ <td><code>&quot;#home&quot;</code>, <code>&quot;#about&quot;</code>, …</td>
48
+ <td><code>RegExp</code> or <a href="https://www.npmjs.com/package/url-pattern">url-pattern</a> test succeeds on current location</td>
49
+ </tr>
50
+ <tr>
51
+ <td><strong><code>fallback</code></strong></td>
52
+ <td>No other route matched (not an attribute — a key on the same object)</td>
53
+ </tr>
54
+ </tbody></table>
55
+ <h2 id="routes-with-parameters">Routes with parameters</h2>
56
+ <p>Two styles (see <code>router.demo.ts</code> and <code>docs-router-params-demo</code>):</p>
57
+ <h3 id="url-pattern-name">Url-pattern (<code>:name</code>)</h3>
58
+ <p>Key uses <strong><code>:param</code></strong> segments. The render function receives an <strong>object</strong> <code>{ param: string }</code>.</p>
59
+ <p><docs-lit-demo for="docs-router-params-demo"></docs-lit-demo></p>
60
+ <pre><code class="language-typescript">&quot;#couleur/:id&quot;: ({ id }) =&gt; html`&lt;p&gt;Colour id: ${id}&lt;/p&gt;`,
61
+ </code></pre>
62
+ <h3 id="regexp-capturing-groups">RegExp (capturing groups)</h3>
63
+ <p>Key is a <strong>RegExp</strong> string with <code>(\d+)</code> / <code>(\w+)</code> groups. The render function receives an <strong>array</strong> of captured strings (in order).</p>
64
+ <pre><code class="language-typescript">&quot;#products/(\\d+)/(\\w+)&quot;: ([productId, slug]) =&gt;
65
+ html`&lt;p&gt;Product ${productId}, slug ${slug}&lt;/p&gt;`,
66
+ </code></pre>
67
+ <p>With parameters you usually render data directly in Lit (<code>${id}</code>). The old <strong><code>&lt;template data-route&gt;</code> + <code>dataProviderExpression</code></strong> pattern scoped a <code>dataProvider</code> for <code>data-bind</code> / fetch children — prefer <strong><code>@subscribe</code></strong> or explicit props when using <code>.routes</code>.</p>
68
+ <h2 id="routes-binding"><code>.routes</code> binding</h2>
69
+ <p>Always use <strong><code>.routes=${…}</code></strong> in Lit templates: route handlers are functions and must be set as <strong>properties</strong>, not HTML attributes.</p>
70
+ <h2 id="optional-attributes">Optional attributes</h2>
71
+ <table>
72
+ <thead>
73
+ <tr>
74
+ <th>Attribute</th>
75
+ <th>Role</th>
76
+ </tr>
77
+ </thead>
78
+ <tbody><tr>
79
+ <td><strong><code>basePath</code></strong></td>
80
+ <td>Prefix for pattern matching (default allows optional leading segments)</td>
81
+ </tr>
82
+ <tr>
83
+ <td><strong><code>fallBackRoute</code></strong></td>
84
+ <td>If set and no template/route matches, navigates to this URL (redirect). Distinct from <strong><code>routes.fallback</code></strong> which only renders content</td>
85
+ </tr>
86
+ </tbody></table>
87
+ <h2 id="sonic-redirect"><code>sonic-redirect</code></h2>
88
+ <p>Separate component: redirect when data appears on a publisher (login steps, wizards). Not part of the <code>.routes</code> map.</p>
89
+ <pre><code>&lt;sonic-redirect to=&quot;./router.html#router#data-is-set&quot; dataProvider=&quot;stupid-data-set-id&quot; onData=&quot;theData&quot;&gt;&lt;/sonic-redirect&gt;
90
+ &lt;div class=&quot;flex gap-2 mb-4&quot; formDataProvider=&quot;stupid-data-set-id&quot;&gt;
91
+ &lt;sonic-button radio name=&quot;theData&quot; value=&quot;Some Data&quot; size=&quot;xs&quot;&gt;
92
+ Enter data
93
+ &lt;/sonic-button&gt;
94
+ &lt;sonic-button radio name=&quot;theData&quot; value=&quot;&quot; href=&quot;javascript:history.back();&quot; size=&quot;xs&quot;&gt;
95
+ Delete the data and do a history.back()
96
+ &lt;/sonic-button&gt;
97
+ &lt;/div&gt;
98
+ </code></pre>
99
+ <p>Example: combine with <strong><code>.routes</code></strong> and <strong>submit</strong> for login / logout / profile steps.</p>
100
+ <h2 id="package-demo">Package demo</h2>
101
+ <p><code>sonic-router-demo</code> (<code>router.demo.ts</code>) — home, user profile (<code>#user/:id/:slug</code>), products RegExp, <strong>fallback</strong> 404.</p>
102
+
103
+ </article>
104
+ </main>
105
+ </body>
106
+ </html>
@@ -0,0 +1,126 @@
1
+ <!DOCTYPE html>
2
+ <html lang="fr" data-crawl-url="https://concorde.supersoniks.org/crawl/core/components/functional/sdui/sdui-extension-points.html" data-doc-id="core/components/functional/sdui/sdui-extension-points">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>SDUI — points d’extension publics — Concorde</title>
7
+ <meta name="description" content="Aide-mémoire pour les dépôts externes (adaptateurs, shells).">
8
+ <meta name="keywords" content="Concorde, supersoniks, core/components/functional/sdui/sdui-extension-points, sdui-extension-points, SDUI — points d’extension publics, functional component, sonic-sdui-extension-points, web component, ).
9
+ La doc utilisateur / crawl reste , safe, html
10
+
11
+ , js, markup, innerHTML, prefix, suffix, textContent, action">
12
+ <meta name="concorde-doc-id" content="core/components/functional/sdui/sdui-extension-points">
13
+ <link rel="canonical" href="https://concorde.supersoniks.org/crawl/core/components/functional/sdui/sdui-extension-points.html">
14
+ </head>
15
+ <body>
16
+ <header>
17
+ <p><a href="../../../../index.html">Concorde documentation (crawl)</a> · <a href="https://concorde.supersoniks.org/#core/components/functional/sdui/sdui-extension-points.md/sdui-extension-points" rel="nofollow">interactive version</a></p>
18
+ </header>
19
+ <main>
20
+ <article>
21
+ <p class="doc-lead" id="doc-summary"><strong>Concorde functional component — SDUI — points d’extension publics</strong>. Aide-mémoire pour les dépôts externes (adaptateurs, shells). <span>Doc ID: <code>core/components/functional/sdui/sdui-extension-points</code>. Keywords: Concorde, supersoniks, core/components/functional/sdui/sdui-extension-points, sdui-extension-points, SDUI — points d’extension publics, functional component, sonic-sdui-extension-points, web component, ).
22
+ La doc utilisateur / crawl reste , safe, html
23
+
24
+ , js, markup, innerHTML, prefix, suffix, textContent, action. URL: <a href="https://concorde.supersoniks.org/crawl/core/components/functional/sdui/sdui-extension-points.html">https://concorde.supersoniks.org/crawl/core/components/functional/sdui/sdui-extension-points.html</a>.</span></p>
25
+ <h1 id="sdui--points-dextension-publics">SDUI — points d’extension publics</h1>
26
+ <p>Aide-mémoire pour les dépôts externes (adaptateurs, shells).<br><strong>Pas une page de la doc site</strong> — à lire dans le package npm<br>(<code>node_modules/@supersoniks/concorde/src/core/components/functional/sdui/sdui-extension-points.md</code>).<br>La doc utilisateur / crawl reste <code>sdui.md</code> (auto-suffisante).</p>
27
+ <p><strong>Aucune mention de protocoles tiers ici</strong> : uniquement les API génériques Concorde.</p>
28
+ <h2 id="1-profil-safe-opt-in">1. Profil <code>safe</code> (opt-in)</h2>
29
+ <pre><code class="language-html">&lt;sonic-sdui profile=&quot;safe&quot; …&gt;
30
+ </code></pre>
31
+ <table>
32
+ <thead>
33
+ <tr>
34
+ <th>Refusé</th>
35
+ <th>Autorisé</th>
36
+ </tr>
37
+ </thead>
38
+ <tbody><tr>
39
+ <td><code>js</code>, <code>markup</code>, <code>innerHTML</code>, <code>prefix</code>, <code>suffix</code></td>
40
+ <td><code>textContent</code>, structure, attributs, <code>action</code>, <code>childNodeIds</code></td>
41
+ </tr>
42
+ </tbody></table>
43
+ <ul>
44
+ <li>Nœud refusé → ignoré + <code>console.warn</code> (pas de crash)</li>
45
+ <li>Helper pur : <code>validateSafeDescriptor(descriptor)</code> depuis <code>sdui-safe</code></li>
46
+ </ul>
47
+ <h2 id="2-événement-sdui-action">2. Événement <code>sdui-action</code></h2>
48
+ <p>Sur un nœud :</p>
49
+ <pre><code class="language-json">{
50
+ &quot;tagName&quot;: &quot;sonic-button&quot;,
51
+ &quot;nodeId&quot;: &quot;confirm&quot;,
52
+ &quot;textContent&quot;: &quot;OK&quot;,
53
+ &quot;action&quot;: { &quot;name&quot;: &quot;confirm&quot;, &quot;context&quot;: { &quot;step&quot;: 1 } }
54
+ }
55
+ </code></pre>
56
+ <p>Au clic, <code>sonic-sdui</code> émet :</p>
57
+ <ul>
58
+ <li>type : <code>sdui-action</code></li>
59
+ <li><code>detail</code> : <code>{ name, context, sourceNodeId? }</code></li>
60
+ <li><code>bubbles: true</code>, <code>composed: true</code></li>
61
+ </ul>
62
+ <p>Ne remplace pas <code>sonic-submit</code> / POST / <code>messagesKey</code>.</p>
63
+ <h2 id="3-catalogue-de-composants-build-only">3. Catalogue de composants (build only)</h2>
64
+ <ul>
65
+ <li>Fichier publié : <code>component-catalog.json</code></li>
66
+ <li>Import : <code>@supersoniks/concorde/sdui/component-catalog.json</code></li>
67
+ <li>Régénération : <code>yarn generate:sdui-catalog</code> (aussi <code>prebuild</code>)</li>
68
+ <li>Gaps d’annotations : <code>component-catalog.gaps.json</code></li>
69
+ <li><strong>Aucun impact runtime</strong></li>
70
+ </ul>
71
+ <h2 id="4-rendu-partiel-opt-in">4. Rendu partiel (opt-in)</h2>
72
+ <pre><code class="language-html">&lt;sonic-sdui partial …&gt;
73
+ </code></pre>
74
+ <ul>
75
+ <li>Registre plat : <code>nodeById</code></li>
76
+ <li>Enfants par id : <code>childNodeIds</code></li>
77
+ <li>Id manquant + <code>partial</code> → placeholder (<code>data-sdui-placeholder</code>, <code>data-sdui-node-id</code>, <code>display: contents</code>)</li>
78
+ <li>Sans <code>partial</code> → warning + skip</li>
79
+ </ul>
80
+ <h2 id="5-ops-incrémentales-opt-in-chemin-à-côté">5. Ops incrémentales (opt-in, chemin à côté)</h2>
81
+ <p>Le descripteur entier + rebuild reste le chemin par défaut. Les ops mutent un descripteur local et mettent à jour le DOM <strong>chirurgicalement</strong> (frères préservés : focus, valeurs d’input, état composants).</p>
82
+ <h3 id="méthodes-publiques-sur-sonic-sdui">Méthodes publiques sur <code>sonic-sdui</code></h3>
83
+ <pre><code class="language-ts">upsertNode(node, parentId?, index?) // node.nodeId requis
84
+ removeNode(nodeId)
85
+ setData(path, value) // chemin publisher, ex. &quot;form.email&quot;
86
+ applyOp(op) // { op: &quot;upsertNode&quot;|&quot;removeNode&quot;|&quot;setData&quot;, … }
87
+ endIncremental() // revient au mode props → rebuild
88
+ </code></pre>
89
+ <h3 id="flux-optionnel">Flux optionnel</h3>
90
+ <p>Attribut <code>opsDataProvider</code> : chaque valeur assignée (<code>SDUIOp</code> ou <code>SDUIOp[]</code>) est passée à <code>applyOp</code>.</p>
91
+ <h3 id="comportement">Comportement</h3>
92
+ <ul>
93
+ <li>Première op → clone local du descripteur + mode partial automatique</li>
94
+ <li><code>data-sdui-node-id</code> marque les nœuds rendus</li>
95
+ <li>Remplacement d’un placeholder / nœud existant via <code>replaceWith</code> (pas de <code>removeChildren</code> global)</li>
96
+ </ul>
97
+ <h2 id="imports-utiles">Imports utiles</h2>
98
+ <table>
99
+ <thead>
100
+ <tr>
101
+ <th>Artefact</th>
102
+ <th>Chemin</th>
103
+ </tr>
104
+ </thead>
105
+ <tbody><tr>
106
+ <td>Composant</td>
107
+ <td><code>@supersoniks/concorde/sdui</code></td>
108
+ </tr>
109
+ <tr>
110
+ <td>Types</td>
111
+ <td><code>…/sdui/types</code> (via package exports / short path)</td>
112
+ </tr>
113
+ <tr>
114
+ <td>Safe</td>
115
+ <td><code>@supersoniks/concorde/sdui-safe</code></td>
116
+ </tr>
117
+ <tr>
118
+ <td>Catalogue</td>
119
+ <td><code>@supersoniks/concorde/sdui/component-catalog.json</code></td>
120
+ </tr>
121
+ </tbody></table>
122
+
123
+ </article>
124
+ </main>
125
+ </body>
126
+ </html>