@supersoniks/concorde 5.1.1 → 5.1.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 (438) 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/.tmp-cem/custom-elements.json +503 -503
  6. package/PLAN-DOCS-AGENTS.md +80 -0
  7. package/README.md +3 -3
  8. package/ai/skills/concorde/SKILL.md +1 -1
  9. package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
  10. package/ai/skills/concorde-theme/SKILL.md +1 -1
  11. package/build-infos.json +1 -1
  12. package/concorde-core.bundle.js +1 -1
  13. package/concorde-core.es.js +1 -1
  14. package/dist/concorde-core.bundle.js +1 -1
  15. package/dist/concorde-core.es.js +1 -1
  16. package/docs/.htaccess +75 -0
  17. package/docs/404.html +15 -0
  18. package/docs/404.md +5 -0
  19. package/docs/assets/{index-Bb-_LRyY.js → index-BgG6FFPt.js} +2582 -3097
  20. package/docs/assets/index-x89XINSG.css +1 -0
  21. package/docs/core/components/functional/date/date.html +211 -0
  22. package/docs/core/components/functional/date/date.md +150 -0
  23. package/docs/core/components/functional/fetch/fetch.html +180 -0
  24. package/docs/core/components/functional/fetch/fetch.md +108 -0
  25. package/docs/core/components/functional/if/if.html +65 -0
  26. package/docs/core/components/functional/if/if.md +34 -0
  27. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  28. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  29. package/docs/core/components/functional/list/list.html +198 -0
  30. package/docs/core/components/functional/list/list.md +121 -0
  31. package/docs/core/components/functional/mix/mix.html +78 -0
  32. package/docs/core/components/functional/mix/mix.md +46 -0
  33. package/docs/core/components/functional/queue/queue.html +155 -0
  34. package/docs/core/components/functional/queue/queue.md +51 -0
  35. package/docs/core/components/functional/router/router.html +154 -0
  36. package/docs/core/components/functional/router/router.md +93 -0
  37. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  38. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  39. package/docs/core/components/functional/sdui/sdui.html +397 -0
  40. package/docs/core/components/functional/sdui/sdui.md +307 -0
  41. package/docs/core/components/functional/states/states.html +141 -0
  42. package/docs/core/components/functional/states/states.md +112 -0
  43. package/docs/core/components/functional/submit/submit.html +178 -0
  44. package/docs/core/components/functional/submit/submit.md +106 -0
  45. package/docs/core/components/functional/subscriber/subscriber.html +68 -0
  46. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  47. package/docs/core/components/functional/translation/translation.html +60 -0
  48. package/docs/core/components/functional/translation/translation.md +38 -0
  49. package/docs/core/components/functional/value/value.html +81 -0
  50. package/docs/core/components/functional/value/value.md +47 -0
  51. package/docs/core/components/ui/alert/alert.html +201 -0
  52. package/docs/core/components/ui/alert/alert.md +186 -0
  53. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  54. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  55. package/docs/core/components/ui/badge/badge.html +197 -0
  56. package/docs/core/components/ui/badge/badge.md +181 -0
  57. package/docs/core/components/ui/button/button.html +309 -0
  58. package/docs/core/components/ui/button/button.md +216 -0
  59. package/docs/core/components/ui/captcha/captcha.html +80 -0
  60. package/docs/core/components/ui/captcha/captcha.md +56 -0
  61. package/docs/core/components/ui/card/card.html +254 -0
  62. package/docs/core/components/ui/card/card.md +215 -0
  63. package/docs/core/components/ui/divider/divider.html +144 -0
  64. package/docs/core/components/ui/divider/divider.md +126 -0
  65. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  66. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  67. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  68. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  69. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  70. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  71. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  72. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  73. package/docs/core/components/ui/form/input/input.html +235 -0
  74. package/docs/core/components/ui/form/input/input.md +142 -0
  75. package/docs/core/components/ui/form/radio/radio.html +144 -0
  76. package/docs/core/components/ui/form/radio/radio.md +78 -0
  77. package/docs/core/components/ui/form/select/select.html +178 -0
  78. package/docs/core/components/ui/form/select/select.md +86 -0
  79. package/docs/core/components/ui/form/switch/switch.html +146 -0
  80. package/docs/core/components/ui/form/switch/switch.md +80 -0
  81. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  82. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  83. package/docs/core/components/ui/group/group.html +113 -0
  84. package/docs/core/components/ui/group/group.md +77 -0
  85. package/docs/core/components/ui/icon/icon.html +223 -0
  86. package/docs/core/components/ui/icon/icon.md +214 -0
  87. package/docs/core/components/ui/image/image.html +194 -0
  88. package/docs/core/components/ui/image/image.md +167 -0
  89. package/docs/core/components/ui/link/link.html +101 -0
  90. package/docs/core/components/ui/link/link.md +81 -0
  91. package/docs/core/components/ui/loader/loader.html +114 -0
  92. package/docs/core/components/ui/loader/loader.md +87 -0
  93. package/docs/core/components/ui/menu/menu.html +395 -0
  94. package/docs/core/components/ui/menu/menu.md +370 -0
  95. package/docs/core/components/ui/modal/modal.html +324 -0
  96. package/docs/core/components/ui/modal/modal.md +211 -0
  97. package/docs/core/components/ui/pop/pop.html +250 -0
  98. package/docs/core/components/ui/pop/pop.md +216 -0
  99. package/docs/core/components/ui/progress/progress.html +132 -0
  100. package/docs/core/components/ui/progress/progress.md +109 -0
  101. package/docs/core/components/ui/table/table.html +333 -0
  102. package/docs/core/components/ui/table/table.md +267 -0
  103. package/docs/core/components/ui/theme/theme.html +116 -0
  104. package/docs/core/components/ui/theme/theme.md +97 -0
  105. package/docs/core/components/ui/toast/toast.html +185 -0
  106. package/docs/core/components/ui/toast/toast.md +147 -0
  107. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  108. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  109. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  110. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  111. package/docs/docs/decorators/auto-subscribe.html +61 -0
  112. package/docs/docs/decorators/auto-subscribe.md +40 -0
  113. package/docs/docs/decorators/bind.html +86 -0
  114. package/docs/docs/decorators/bind.md +77 -0
  115. package/docs/docs/decorators/get.html +166 -0
  116. package/docs/docs/decorators/get.md +160 -0
  117. package/docs/docs/decorators/handle.html +139 -0
  118. package/docs/docs/decorators/handle.md +119 -0
  119. package/docs/docs/decorators/on-assign.html +72 -0
  120. package/docs/docs/decorators/on-assign.md +63 -0
  121. package/docs/docs/decorators/patch.html +76 -0
  122. package/docs/docs/decorators/patch.md +44 -0
  123. package/docs/docs/decorators/post.html +150 -0
  124. package/docs/docs/decorators/post.md +134 -0
  125. package/docs/docs/decorators/publish.html +74 -0
  126. package/docs/docs/decorators/publish.md +56 -0
  127. package/docs/docs/decorators/put.html +83 -0
  128. package/docs/docs/decorators/put.md +51 -0
  129. package/docs/docs/decorators/subscribe.html +91 -0
  130. package/docs/docs/decorators/subscribe.md +87 -0
  131. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  132. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  133. package/docs/docs/directives/sub.html +79 -0
  134. package/docs/docs/directives/sub.md +75 -0
  135. package/docs/docs/directives/t.html +91 -0
  136. package/docs/docs/directives/t.md +73 -0
  137. package/docs/docs/getting-started/ai-agents.html +174 -0
  138. package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
  139. package/docs/docs/getting-started/components.html +27 -0
  140. package/docs/docs/getting-started/create-a-component.html +108 -0
  141. package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
  142. package/docs/docs/getting-started/dataFlow.html +174 -0
  143. package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +17 -18
  144. package/docs/docs/getting-started/installation.html +69 -0
  145. package/docs/docs/getting-started/installation.md +36 -0
  146. package/docs/docs/getting-started/my-first-component.html +180 -0
  147. package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
  148. package/docs/docs/getting-started/start.html +47 -0
  149. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  150. package/docs/docs/getting-started/theming.html +334 -0
  151. package/docs/docs/index.html +99 -0
  152. package/docs/docs/misc/api-configuration.html +149 -0
  153. package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
  154. package/docs/docs/misc/dataProviderKey.html +136 -0
  155. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  156. package/docs/docs/misc/docs-mock-api.html +155 -0
  157. package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
  158. package/docs/docs/misc/dynamic-path.html +181 -0
  159. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  160. package/docs/docs/misc/endpoint.html +51 -0
  161. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  162. package/docs/docs/misc/html-integration.html +45 -0
  163. package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
  164. package/docs/docs-mock-api-sw.js +58 -223
  165. package/docs/docs-mock-api-sw.js.map +4 -4
  166. package/docs/hubs/decorators.html +443 -0
  167. package/docs/hubs/form-components.html +404 -0
  168. package/docs/hubs/remote-data.html +371 -0
  169. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  170. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  171. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  172. package/docs/img/archive/credits.json +28 -0
  173. package/docs/img/concorde/plane_01.jpg +0 -0
  174. package/docs/img/concorde/plane_02.jpg +0 -0
  175. package/docs/img/concorde/plane_03.jpg +0 -0
  176. package/docs/img/concorde/plane_04.jpg +0 -0
  177. package/docs/img/concorde/plane_05.jpg +0 -0
  178. package/docs/img/concorde/plane_06.jpg +0 -0
  179. package/docs/img/concorde/plane_07.jpg +0 -0
  180. package/docs/img/concorde/plane_08.jpg +0 -0
  181. package/docs/img/concorde/plane_09.jpg +0 -0
  182. package/docs/img/concorde/plane_10.jpg +0 -0
  183. package/docs/img/concorde/plane_11.jpg +0 -0
  184. package/docs/img/concorde/plane_12.jpg +0 -0
  185. package/docs/img/concorde/plane_13.jpg +0 -0
  186. package/docs/index.html +95 -68
  187. package/docs/index.md +22 -0
  188. package/docs/llms-full.txt +5795 -0
  189. package/docs/llms.txt +106 -0
  190. package/docs/robots.txt +11 -10
  191. package/docs/sitemap.xml +237 -0
  192. package/docs/src/core/components/functional/date/date.md +150 -0
  193. package/docs/src/core/components/functional/fetch/fetch.md +108 -0
  194. package/docs/src/core/components/functional/if/if.md +34 -0
  195. package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
  196. package/docs/src/core/components/functional/list/list.md +121 -0
  197. package/docs/src/core/components/functional/mix/mix.md +46 -0
  198. package/docs/src/core/components/functional/queue/queue.md +51 -0
  199. package/docs/src/core/components/functional/router/router.md +93 -0
  200. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  201. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  202. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  203. package/docs/src/core/components/functional/sdui/example.json +32 -0
  204. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  205. package/docs/src/core/components/functional/sdui/sdui.md +307 -0
  206. package/docs/src/core/components/functional/states/states.md +112 -0
  207. package/docs/src/core/components/functional/submit/submit.md +106 -0
  208. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  209. package/docs/src/core/components/functional/translation/translation.md +38 -0
  210. package/docs/src/core/components/functional/value/value.md +47 -0
  211. package/docs/src/core/components/ui/alert/alert.md +186 -0
  212. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  213. package/docs/src/core/components/ui/badge/badge.md +181 -0
  214. package/docs/src/core/components/ui/button/button.md +216 -0
  215. package/docs/src/core/components/ui/captcha/captcha.md +56 -0
  216. package/docs/src/core/components/ui/card/card.md +215 -0
  217. package/docs/src/core/components/ui/divider/divider.md +126 -0
  218. package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
  219. package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
  220. package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
  221. package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
  222. package/docs/src/core/components/ui/form/input/input.md +142 -0
  223. package/docs/src/core/components/ui/form/radio/radio.md +78 -0
  224. package/docs/src/core/components/ui/form/select/select.md +86 -0
  225. package/docs/src/core/components/ui/form/switch/switch.md +80 -0
  226. package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
  227. package/docs/src/core/components/ui/group/group.md +77 -0
  228. package/docs/src/core/components/ui/icon/icon.md +214 -0
  229. package/docs/src/core/components/ui/icon/icons.json +1 -0
  230. package/docs/src/core/components/ui/image/image.md +167 -0
  231. package/docs/src/core/components/ui/link/link.md +81 -0
  232. package/docs/src/core/components/ui/loader/loader.md +87 -0
  233. package/docs/src/core/components/ui/menu/menu.md +370 -0
  234. package/docs/src/core/components/ui/modal/modal.md +211 -0
  235. package/docs/src/core/components/ui/pop/pop.md +216 -0
  236. package/docs/src/core/components/ui/progress/progress.md +109 -0
  237. package/docs/src/core/components/ui/table/table.md +267 -0
  238. package/docs/src/core/components/ui/theme/theme.md +97 -0
  239. package/docs/src/core/components/ui/toast/toast.md +147 -0
  240. package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
  241. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  242. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  243. package/docs/src/docs/decorators/bind.md +77 -0
  244. package/docs/src/docs/decorators/get.md +160 -0
  245. package/docs/src/docs/decorators/handle.md +119 -0
  246. package/docs/src/docs/decorators/on-assign.md +63 -0
  247. package/docs/src/docs/decorators/patch.md +44 -0
  248. package/docs/src/docs/decorators/post.md +134 -0
  249. package/docs/src/docs/decorators/publish.md +56 -0
  250. package/docs/src/docs/decorators/put.md +51 -0
  251. package/docs/src/docs/decorators/subscribe.md +87 -0
  252. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  253. package/docs/src/docs/directives/sub.md +75 -0
  254. package/docs/src/docs/directives/t.md +73 -0
  255. package/docs/src/docs/getting-started/ai-agents.md +76 -0
  256. package/docs/src/docs/getting-started/components.md +5 -0
  257. package/docs/src/docs/getting-started/create-a-component.md +136 -0
  258. package/docs/src/docs/getting-started/dataFlow.md +87 -0
  259. package/docs/src/docs/getting-started/installation.md +36 -0
  260. package/docs/src/docs/getting-started/my-first-component.md +227 -0
  261. package/docs/src/docs/getting-started/start.md +35 -0
  262. package/docs/src/docs/getting-started/theming.md +253 -0
  263. package/docs/src/docs/misc/api-configuration.md +79 -0
  264. package/docs/src/docs/misc/dataProviderKey.md +168 -0
  265. package/docs/src/docs/misc/docs-mock-api.md +62 -0
  266. package/docs/src/docs/misc/dynamic-path.md +71 -0
  267. package/docs/src/docs/misc/endpoint.md +45 -0
  268. package/docs/src/docs/misc/html-integration.md +14 -0
  269. package/docs/src/docs/search/docs-search.json +10287 -0
  270. package/docs/src/tag-list.json +1 -0
  271. package/docs/src/tsconfig-model.json +23 -0
  272. package/docs/src/tsconfig.json +1353 -0
  273. package/index.html +68 -5
  274. package/package.json +1 -1
  275. package/public/docs-mock-api-sw.js +58 -223
  276. package/public/docs-mock-api-sw.js.map +4 -4
  277. package/public/img/concorde/plane_01.jpg +0 -0
  278. package/public/img/concorde/plane_02.jpg +0 -0
  279. package/public/img/concorde/plane_03.jpg +0 -0
  280. package/public/img/concorde/plane_04.jpg +0 -0
  281. package/public/img/concorde/plane_05.jpg +0 -0
  282. package/public/img/concorde/plane_06.jpg +0 -0
  283. package/public/img/concorde/plane_07.jpg +0 -0
  284. package/public/img/concorde/plane_08.jpg +0 -0
  285. package/public/img/concorde/plane_09.jpg +0 -0
  286. package/public/img/concorde/plane_10.jpg +0 -0
  287. package/public/img/concorde/plane_11.jpg +0 -0
  288. package/public/img/concorde/plane_12.jpg +0 -0
  289. package/public/img/concorde/plane_13.jpg +0 -0
  290. package/public/robots.txt +11 -10
  291. package/scripts/docs-markdown-vite-plugin.ts +37 -0
  292. package/scripts/docs-public-url.mjs +50 -0
  293. package/scripts/docs.htaccess +75 -0
  294. package/scripts/generate-crawl-docs.mjs +207 -116
  295. package/scripts/generate-crawl-docs.test.mjs +124 -0
  296. package/scripts/post-build-docs.js +34 -50
  297. package/src/core/components/functional/date/date.md +91 -231
  298. package/src/core/components/functional/fetch/fetch.md +66 -83
  299. package/src/core/components/functional/if/if.md +28 -3
  300. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  301. package/src/core/components/functional/list/list.md +99 -43
  302. package/src/core/components/functional/mix/mix.md +31 -26
  303. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  304. package/src/core/components/functional/queue/queue.md +40 -61
  305. package/src/core/components/functional/router/router.demo.ts +16 -16
  306. package/src/core/components/functional/router/router.md +64 -65
  307. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  308. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  309. package/src/core/components/functional/sdui/example.json +19 -86
  310. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  311. package/src/core/components/functional/sdui/sdui.md +187 -358
  312. package/src/core/components/functional/states/states.demo.ts +21 -22
  313. package/src/core/components/functional/states/states.md +86 -61
  314. package/src/core/components/functional/states/states.ts +1 -1
  315. package/src/core/components/functional/submit/submit.md +64 -72
  316. package/src/core/components/functional/translation/translation.md +38 -0
  317. package/src/core/components/functional/value/value.md +34 -22
  318. package/src/core/components/ui/alert/alert.md +48 -58
  319. package/src/core/components/ui/badge/badge.md +27 -34
  320. package/src/core/components/ui/button/button.md +139 -106
  321. package/src/core/components/ui/captcha/captcha.md +17 -32
  322. package/src/core/components/ui/card/card.md +6 -6
  323. package/src/core/components/ui/divider/divider.md +8 -11
  324. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  325. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  326. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  327. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  328. package/src/core/components/ui/form/input/input.md +95 -95
  329. package/src/core/components/ui/form/radio/radio.md +55 -34
  330. package/src/core/components/ui/form/select/select.md +60 -45
  331. package/src/core/components/ui/form/switch/switch.md +57 -34
  332. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  333. package/src/core/components/ui/group/group.md +35 -33
  334. package/src/core/components/ui/icon/icon.md +4 -4
  335. package/src/core/components/ui/image/image.md +41 -107
  336. package/src/core/components/ui/link/link.md +6 -6
  337. package/src/core/components/ui/loader/loader.md +30 -55
  338. package/src/core/components/ui/menu/menu.md +27 -27
  339. package/src/core/components/ui/modal/modal.md +72 -96
  340. package/src/core/components/ui/pop/pop.md +80 -158
  341. package/src/core/components/ui/progress/progress.md +2 -2
  342. package/src/core/components/ui/table/table.md +91 -255
  343. package/src/core/components/ui/theme/theme.md +11 -36
  344. package/src/core/components/ui/toast/toast.md +48 -117
  345. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  346. package/src/core/utils/LocationHandler.spec.ts +80 -0
  347. package/src/core/utils/LocationHandler.ts +5 -9
  348. package/src/docs/components/docs-demo-sources.ts +55 -140
  349. package/src/docs/components/docs-lit-demo.ts +1 -3
  350. package/src/docs/components/docs-source-link.ts +0 -82
  351. package/src/docs/decorators/ancestor-attribute.md +59 -0
  352. package/src/docs/decorators/auto-subscribe.md +40 -0
  353. package/src/docs/decorators/bind.md +77 -0
  354. package/src/docs/decorators/get.md +160 -0
  355. package/src/docs/decorators/handle.md +119 -0
  356. package/src/docs/decorators/on-assign.md +63 -0
  357. package/src/docs/decorators/patch.md +44 -0
  358. package/src/docs/decorators/post.md +134 -0
  359. package/src/docs/decorators/publish.md +56 -0
  360. package/src/docs/decorators/put.md +51 -0
  361. package/src/docs/decorators/subscribe.md +87 -0
  362. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  363. package/src/docs/directives/sub.md +75 -0
  364. package/src/docs/directives/t.md +73 -0
  365. package/src/docs/docs-location.spec.ts +46 -0
  366. package/src/docs/docs-location.ts +123 -32
  367. package/src/docs/docs.ts +1 -2
  368. package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
  369. package/src/docs/example/decorators-demo-geo.ts +30 -19
  370. package/src/docs/example/decorators-demo-post.ts +88 -186
  371. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  372. package/src/docs/example/decorators-demo.ts +85 -98
  373. package/src/docs/example/docs-api-config-demos.ts +19 -20
  374. package/src/docs/example/docs-flight-demos.ts +147 -0
  375. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  376. package/src/docs/example/docs-list-demos.ts +43 -123
  377. package/src/docs/example/docs-provider-keys.ts +21 -28
  378. package/src/docs/example/docs-queue-demos.ts +37 -77
  379. package/src/docs/example/docs-router-demos.ts +20 -25
  380. package/src/docs/example/docs-submit-demos.ts +48 -48
  381. package/src/docs/example/docs-toggle-demos.ts +4 -3
  382. package/src/docs/getting-started/ai-agents.md +76 -0
  383. package/src/docs/getting-started/components.md +5 -0
  384. package/src/docs/getting-started/create-a-component.md +136 -0
  385. package/src/docs/getting-started/dataFlow.md +87 -0
  386. package/src/docs/getting-started/installation.md +36 -0
  387. package/src/docs/getting-started/my-first-component.md +227 -0
  388. package/src/docs/getting-started/start.md +35 -0
  389. package/src/docs/getting-started/theming.md +253 -0
  390. package/src/docs/header/header.ts +11 -6
  391. package/src/docs/home/catalog.ts +1 -1
  392. package/src/docs/home/home.ts +17 -10
  393. package/src/docs/layout.ts +12 -13
  394. package/src/docs/misc/api-configuration.md +79 -0
  395. package/src/docs/misc/dataProviderKey.md +168 -0
  396. package/src/docs/misc/docs-mock-api.md +62 -0
  397. package/src/docs/misc/dynamic-path.md +71 -0
  398. package/src/docs/misc/endpoint.md +45 -0
  399. package/src/docs/misc/html-integration.md +14 -0
  400. package/src/docs/mock-api/api-config-mock.ts +5 -0
  401. package/src/docs/mock-api/fixtures.ts +0 -278
  402. package/src/docs/mock-api/flights.ts +89 -0
  403. package/src/docs/mock-api/router.ts +3 -4
  404. package/src/docs/mock-api/urls.ts +1 -2
  405. package/src/docs/navigation/navigation.ts +82 -103
  406. package/src/docs/navigation/toc.ts +7 -4
  407. package/src/docs/search/docs-search.json +2845 -5110
  408. package/src/docs/search/markdown-renderer.ts +25 -7
  409. package/src/docs/search/page.ts +9 -6
  410. package/src/docs/search/search.ts +154 -122
  411. package/vite.config.mts +11 -2
  412. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  413. package/docs/assets/index-CD4WyL6o.css +0 -1
  414. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  415. package/src/docs/_core-concept/overview.md +0 -57
  416. package/src/docs/_core-concept/subscriber.md +0 -75
  417. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  418. package/src/docs/_decorators/auto-subscribe.md +0 -202
  419. package/src/docs/_decorators/bind.md +0 -167
  420. package/src/docs/_decorators/get.md +0 -162
  421. package/src/docs/_decorators/handle.md +0 -175
  422. package/src/docs/_decorators/on-assign.md +0 -390
  423. package/src/docs/_decorators/patch.md +0 -70
  424. package/src/docs/_decorators/post.md +0 -146
  425. package/src/docs/_decorators/publish.md +0 -55
  426. package/src/docs/_decorators/put.md +0 -70
  427. package/src/docs/_decorators/subscribe.md +0 -100
  428. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  429. package/src/docs/_directives/sub.md +0 -91
  430. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  431. package/src/docs/_getting-started/concorde-outside.md +0 -33
  432. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  433. package/src/docs/_getting-started/pubsub.md +0 -37
  434. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  435. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  436. package/src/docs/example/docs-joke-demos.ts +0 -297
  437. /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
  438. /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
@@ -1,7 +1,7 @@
1
1
  import { html, LitElement } from "lit";
2
2
  import { customElement, state } from "lit/decorators.js";
3
3
  import { tailwind } from "../tailwind";
4
- import { DOC_ROUTER_PAGE_HASH, setDocsDemoSubHash } from "../docs-location";
4
+ import { DOC_ROUTER_PAGE_PATH, setDocsDemoSubHash } from "../docs-location";
5
5
 
6
6
  import "../../core/components/functional/router/router";
7
7
  import "../../core/components/ui/button/button";
@@ -16,7 +16,7 @@ const panel = (title: string, body?: string) => html`
16
16
  `;
17
17
 
18
18
  function navButton(label: string, subRoute: string, variant?: string) {
19
- const href = `${DOC_ROUTER_PAGE_HASH}#${subRoute.replace(/^#/, "")}`;
19
+ const href = `${DOC_ROUTER_PAGE_PATH}#${subRoute.replace(/^#/, "")}`;
20
20
  return html`<sonic-button
21
21
  size="xs"
22
22
  variant=${variant ?? "default"}
@@ -24,7 +24,7 @@ function navButton(label: string, subRoute: string, variant?: string) {
24
24
  href=${href}
25
25
  @click=${(e: Event) => {
26
26
  e.preventDefault();
27
- setDocsDemoSubHash(subRoute, DOC_ROUTER_PAGE_HASH);
27
+ setDocsDemoSubHash(subRoute, DOC_ROUTER_PAGE_PATH);
28
28
  }}
29
29
  >${label}</sonic-button
30
30
  >`;
@@ -36,21 +36,21 @@ export class DocsRouterBasicDemo extends LitElement {
36
36
 
37
37
  @state()
38
38
  private routes = {
39
- "#home": () => panel("Home"),
40
- "#about": () => panel("About"),
41
- "#work": () => panel("Work"),
42
- "#contact": () => panel("Contact"),
39
+ "#departures": () => panel("Departures", "CN 001 to New York boards at B12."),
40
+ "#arrivals": () => panel("Arrivals", "CN 002 from New York has landed."),
41
+ "#fleet": () => panel("Fleet", "Seven aircraft, cruising at Mach 2.04."),
42
+ "#crew": () => panel("Crew", "Captain Leo Marchand is on duty."),
43
43
  fallback: () =>
44
- panel("404", "No route matched — `routes.fallback` is rendered."),
44
+ panel("404", "No route matched: routes.fallback is rendered."),
45
45
  };
46
46
 
47
47
  render() {
48
48
  return html`
49
49
  <div class="mb-4 flex flex-wrap gap-2">
50
- ${navButton("Home", "home")}
51
- ${navButton("About", "about")}
52
- ${navButton("Work", "work")}
53
- ${navButton("Contact", "contact")}
50
+ ${navButton("Departures", "departures")}
51
+ ${navButton("Arrivals", "arrivals")}
52
+ ${navButton("Fleet", "fleet")}
53
+ ${navButton("Crew", "crew")}
54
54
  ${navButton("Unknown", "unknown", "outline")}
55
55
  </div>
56
56
  <sonic-router .routes=${this.routes}></sonic-router>
@@ -64,24 +64,19 @@ export class DocsRouterParamsDemo extends LitElement {
64
64
 
65
65
  @state()
66
66
  private routes = {
67
- "#couleur/:id": ({ id }: { id: string }) =>
68
- panel("Url-pattern", `Param :id = ${id}`),
69
- "#products/(\\d+)/(\\w+)": ([productId, slug]: [string, string]) =>
70
- panel("RegExp", `productId = ${productId}, slug = ${slug}`),
71
- fallback: () => panel("No match", "Try a link below."),
67
+ "#flights/:code": ({ code }: { code: string }) =>
68
+ panel(`Flight ${code}`, "url-pattern: params is { code }"),
69
+ "#gates/([A-Z])(\\d+)": ([terminal, gate]: [string, string]) =>
70
+ panel(`Terminal ${terminal}, gate ${gate}`, "RegExp: params is [terminal, gate]"),
71
+ fallback: () => panel("No flight selected", "Pick a link above."),
72
72
  };
73
73
 
74
74
  render() {
75
75
  return html`
76
- <p class="mb-3 text-sm text-neutral-500">
77
- Dynamic segments are passed to the route function (object for
78
- <code>url-pattern</code>, array for capturing groups). Navigation uses
79
- <code>history.replaceState</code> with a second hash segment so the doc
80
- page does not reload.
81
- </p>
82
76
  <div class="mb-4 flex flex-wrap gap-2">
83
- ${navButton("#couleur/3", "couleur/3")}
84
- ${navButton("#products/42/widget", "products/42/widget")}
77
+ ${navButton("#flights/CN001", "flights/CN001")}
78
+ ${navButton("#flights/CN102", "flights/CN102")}
79
+ ${navButton("#gates/B12", "gates/B12")}
85
80
  </div>
86
81
  <sonic-router .routes=${this.routes}></sonic-router>
87
82
  `;
@@ -96,7 +96,7 @@ export class DocsSubmitDemo extends LitElement {
96
96
  if (!r || (!r.id && !r.token && !r.error && !r.messages?.length)) {
97
97
  return html`
98
98
  <p class="mt-4 text-sm text-neutral-500">
99
- Submit the form to see <code>id</code> and <code>token</code> here.
99
+ Sign up to see the crew <code>id</code> and <code>token</code> here.
100
100
  </p>
101
101
  `;
102
102
  }
@@ -120,19 +120,19 @@ export class DocsSubmitDemo extends LitElement {
120
120
  <sonic-input
121
121
  required
122
122
  name="email"
123
- type="email"
124
- value="eve.holt@reqres.in"
123
+ type="email" label="Email"
124
+ value="ada.lindqvist@example.com"
125
125
  ></sonic-input>
126
126
  <sonic-input
127
127
  required
128
- type="password"
128
+ type="password" label="Password"
129
129
  name="password"
130
- value="pistol"
130
+ value="concorde"
131
131
  ></sonic-input>
132
132
  </div>
133
133
  </sonic-submit>
134
134
  <sonic-submit onClick>
135
- <sonic-button type="success" class="w-full">Submit</sonic-button>
135
+ <sonic-button type="success" class="w-full">Join the crew</sonic-button>
136
136
  </sonic-submit>
137
137
  </sonic-scope>
138
138
  ${this.resultBlock()}
@@ -159,28 +159,28 @@ export class DocsSubmitClearDemo extends LitElement {
159
159
  <sonic-input
160
160
  required
161
161
  name="email"
162
- type="email"
163
- value="eve.holt@reqres.in"
162
+ type="email" label="Email"
163
+ value="ada.lindqvist@example.com"
164
164
  ></sonic-input>
165
165
  <sonic-input
166
166
  required
167
- type="password"
167
+ type="password" label="Password"
168
168
  name="password"
169
- value="pistol"
169
+ value="concorde"
170
170
  ></sonic-input>
171
171
  </div>
172
- <sonic-button type="success" class="w-full">Submit and clear form</sonic-button>
172
+ <sonic-button type="success" class="w-full">Check in and clear form</sonic-button>
173
173
  </sonic-submit>
174
174
  </sonic-scope>
175
175
  <p class="mt-3 text-sm text-neutral-500">
176
- After submit, <code>clearedDataOnSuccess="submit-clear-form"</code> resets
177
- the publisher (inputs should empty).
176
+ After check-in, <code>clearedDataOnSuccess="submit-clear-form"</code> resets
177
+ the publisher and empties the fields.
178
178
  </p>
179
179
  `;
180
180
  }
181
181
  }
182
182
 
183
- /** `submit-result-key` keeps only a nested part of the JSON before writing the result publisher. */
183
+ /** `submitResultKey` keeps only a nested part of the JSON before writing the result publisher. */
184
184
  @customElement("docs-submit-result-key-demo")
185
185
  export class DocsSubmitResultKeyDemo extends LitElement {
186
186
  static styles = [tailwind];
@@ -199,29 +199,29 @@ export class DocsSubmitResultKeyDemo extends LitElement {
199
199
  submitResultDataProvider=${submitNestedResultKey.path}
200
200
  class="max-w-lg block"
201
201
  >
202
- <sonic-submit onClick submit-result-key="data">
202
+ <sonic-submit onClick submitResultKey="data">
203
203
  <div class="mb-4 grid grid-cols-2 gap-4">
204
204
  <sonic-input
205
205
  required
206
206
  name="email"
207
- type="email"
208
- value="eve.holt@reqres.in"
207
+ type="email" label="Email"
208
+ value="ada.lindqvist@example.com"
209
209
  ></sonic-input>
210
210
  <sonic-input
211
211
  required
212
- type="password"
212
+ type="password" label="Password"
213
213
  name="password"
214
- value="pistol"
214
+ value="concorde"
215
215
  ></sonic-input>
216
216
  </div>
217
- <sonic-button type="primary" class="w-full">Submit (nested JSON)</sonic-button>
217
+ <sonic-button type="primary" class="w-full">Check in (nested JSON)</sonic-button>
218
218
  </sonic-submit>
219
219
  </sonic-scope>
220
220
  <sonic-divider align="left" class="mt-4">Stored in publisher</sonic-divider>
221
221
  <div class="mt-2 text-sm">
222
222
  ${r?.id != null
223
223
  ? html`<div>id from <code>data</code> : ${r.id}</div>`
224
- : html`<p class="text-neutral-500">Submit to extract <code>data.id</code> / <code>data.token</code>.</p>`}
224
+ : html`<p class="text-neutral-500">Check in to extract <code>data.id</code> and <code>data.token</code>.</p>`}
225
225
  </div>
226
226
  `;
227
227
  }
@@ -250,23 +250,23 @@ export class DocsSubmitFormDataDemo extends LitElement {
250
250
  <sonic-input
251
251
  required
252
252
  name="email"
253
- type="email"
254
- value="eve.holt@reqres.in"
253
+ type="email" label="Email"
254
+ value="ada.lindqvist@example.com"
255
255
  ></sonic-input>
256
256
  <sonic-input
257
257
  required
258
- type="password"
258
+ type="password" label="Password"
259
259
  name="password"
260
- value="pistol"
260
+ value="concorde"
261
261
  ></sonic-input>
262
262
  </div>
263
- <sonic-button type="primary" class="w-full">Submit as FormData</sonic-button>
263
+ <sonic-button type="primary" class="w-full">Send passenger details as FormData</sonic-button>
264
264
  </sonic-submit>
265
265
  </sonic-scope>
266
266
  <div class="mt-3 text-sm">
267
267
  ${this.result?.token
268
268
  ? html`Token received: <span class="font-mono">${this.result.token}</span>`
269
- : html`<p class="text-neutral-500">Mock accepts JSON and multipart for <code>/api/register</code>.</p>`}
269
+ : html`<p class="text-neutral-500">The mock accepts JSON and multipart on <code>/api/register</code>.</p>`}
270
270
  </div>
271
271
  `;
272
272
  }
@@ -292,10 +292,10 @@ export class DocsSubmitGetDemo extends LitElement {
292
292
  >
293
293
  <sonic-submit onClick method="get">
294
294
  <div class="mb-4 grid grid-cols-2 gap-4">
295
- <sonic-input name="email" type="email" value="demo@example.com"></sonic-input>
296
- <sonic-input name="password" type="password" value="secret"></sonic-input>
295
+ <sonic-input name="email" type="email" label="Crew email" value="leo.marchand@example.com"></sonic-input>
296
+ <sonic-input name="password" type="password" label="Crew code" value="mach2"></sonic-input>
297
297
  </div>
298
- <sonic-button type="neutral" class="w-full">GET with query string</sonic-button>
298
+ <sonic-button type="neutral" class="w-full">Look up crew member (GET)</sonic-button>
299
299
  </sonic-submit>
300
300
  </sonic-scope>
301
301
  <div class="mt-3 space-y-1 text-sm">${resultLines(this.result)}</div>
@@ -324,25 +324,25 @@ export class DocsSubmitNativeDemo extends LitElement {
324
324
  <sonic-input
325
325
  required
326
326
  name="email"
327
- type="email"
328
- value="eve.holt@reqres.in"
327
+ type="email" label="Email"
328
+ value="ada.lindqvist@example.com"
329
329
  ></sonic-input>
330
330
  <sonic-input
331
331
  required
332
- type="password"
332
+ type="password" label="Password"
333
333
  name="password"
334
- value="pistol"
334
+ value="concorde"
335
335
  ></sonic-input>
336
336
  </div>
337
337
  <sonic-button type="success" class="w-full"
338
- >Native form POST</sonic-button
338
+ >Check in (native form POST)</sonic-button
339
339
  >
340
340
  </sonic-submit>
341
341
  </sonic-scope>
342
342
  </form>
343
343
  <p class="mt-2 text-sm text-neutral-500">
344
- Response loads in the iframe below (full page navigation is avoided via
345
- <code>target</code>).
344
+ The response loads in the iframe below: <code>target</code> avoids a
345
+ full page navigation.
346
346
  </p>
347
347
  <iframe
348
348
  name="docs-submit-native-frame"
@@ -381,23 +381,23 @@ export class DocsSubmitEventDemo extends LitElement {
381
381
  <sonic-input
382
382
  required
383
383
  name="email"
384
- type="email"
385
- value="eve.holt@reqres.in"
384
+ type="email" label="Email"
385
+ value="ada.lindqvist@example.com"
386
386
  ></sonic-input>
387
387
  <sonic-input
388
388
  required
389
- type="password"
389
+ type="password" label="Password"
390
390
  name="password"
391
- value="pistol"
391
+ value="concorde"
392
392
  ></sonic-input>
393
393
  </div>
394
- <sonic-button type="primary" class="w-full">Submit (listen event)</sonic-button>
394
+ <sonic-button type="primary" class="w-full">Board (listen to event)</sonic-button>
395
395
  </sonic-submit>
396
396
  </sonic-scope>
397
397
  <p class="mt-3 text-sm">
398
398
  ${this.lastEvent
399
399
  ? html`Last <code>submit</code> event: <span class="font-mono">${this.lastEvent}</span>`
400
- : html`<span class="text-neutral-500">Click submit — handler reads <code>event.detail</code>.</span>`}
400
+ : html`<span class="text-neutral-500">Click Board: the handler reads <code>event.detail</code>.</span>`}
401
401
  </p>
402
402
  `;
403
403
  }
@@ -426,14 +426,14 @@ export class DocsSubmitEndpointDemo extends LitElement {
426
426
  <sonic-input
427
427
  required
428
428
  name="email"
429
- type="email"
430
- value="eve.holt@reqres.in"
429
+ type="email" label="Email"
430
+ value="ada.lindqvist@example.com"
431
431
  ></sonic-input>
432
432
  <sonic-input
433
433
  required
434
- type="password"
434
+ type="password" label="Password"
435
435
  name="password"
436
- value="pistol"
436
+ value="concorde"
437
437
  ></sonic-input>
438
438
  </div>
439
439
  <sonic-button type="primary" class="w-full"
@@ -443,7 +443,7 @@ export class DocsSubmitEndpointDemo extends LitElement {
443
443
  </sonic-scope>
444
444
  <div class="mt-3 text-sm">
445
445
  ${this.result?.token
446
- ? html`Registered (scope <code>dataProvider</code> is <code>api/users</code>, request went to <code>api/register</code>).`
446
+ ? html`Signed up: the scope <code>dataProvider</code> is <code>api/users</code> but the request went to <code>api/register</code>.`
447
447
  : html`<p class="text-neutral-500">
448
448
  <code>dataProvider=${usersListEndpoint.path}</code> but
449
449
  <code>endPoint=${registerEndpoint.path}</code> on
@@ -28,7 +28,7 @@ export class DocsToggleIfDemo extends LitElement {
28
28
  return html`
29
29
  <div formDataProvider=${docsToggleVisibilityKey.path}>
30
30
  <sonic-checkbox
31
- label="Show evacuation plan"
31
+ label="Show aircraft"
32
32
  name="togglePlan"
33
33
  unique
34
34
  checked
@@ -36,9 +36,10 @@ export class DocsToggleIfDemo extends LitElement {
36
36
  ></sonic-checkbox>
37
37
  <sonic-if .condition=${show} class="mt-4 block">
38
38
  <sonic-image
39
- src="https://www.thebaron.info/assets/mail/concorde-evacuation.jpg"
39
+ src="img/concorde/plane_07.jpg"
40
+ alt="Crowd gathered around Concorde at night"
40
41
  rounded="md"
41
- ratio="654/463"
42
+ ratio="3/2"
42
43
  ></sonic-image>
43
44
  </sonic-if>
44
45
  </div>
@@ -0,0 +1,76 @@
1
+ # AI agents (skills & AGENTS.md)
2
+
3
+ Concorde ships **skills**, **rules**, and a root **`AGENTS.md`** so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migrations).
4
+
5
+ On a [starter](/docs/getting-started/installation) project, run `yarn ai:sync` after install. On an existing project, install Concorde first, then use `ai-init` below.
6
+
7
+ ## Dedicated commands
8
+
9
+ | Context | Command |
10
+ |---------|---------|
11
+ | [create-concorde-ts-starter](https://www.npmjs.com/package/@supersoniks/create-concorde-ts-starter) project | `yarn ai:sync` |
12
+ | Any consumer app (after `yarn add @supersoniks/concorde`) | `node node_modules/@supersoniks/concorde/scripts/ai-init.mjs` |
13
+ | Concorde repo (contributors) | `yarn ai-init` |
14
+
15
+ <sonic-code language="shell">
16
+ <template>
17
+ # Starter (from project root)
18
+ yarn ai:sync
19
+
20
+ # Manual / existing project
21
+ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
22
+ </template>
23
+ </sonic-code>
24
+
25
+ ## Useful flags
26
+
27
+ | Flag | Effect |
28
+ |------|--------|
29
+ | `--skip-agents` | Never write `AGENTS.md` (skills / rules only) |
30
+ | `--merge-agents` | Opt-in: keep the project preamble and append / refresh the Concorde block |
31
+ | `--force-agents` | Opt-in: **replace** the whole `AGENTS.md` (destructive) |
32
+ | `--overlay <dir>` | Extra rules/skills + optional `AGENTS.concorde.md` for project-only Concorde agent notes |
33
+ | `--cursor-only` | Install only `.cursor/skills` and `.cursor/rules` |
34
+ | `--jetbrains-only` | Install only `.aiassistant/rules/` |
35
+
36
+ ## `AGENTS.md` policy (non-invasive)
37
+
38
+ | Situation | Default |
39
+ |-----------|---------|
40
+ | No `AGENTS.md` | Create the Concorde guide |
41
+ | File with `<!-- concorde-ai -->` | Refresh the managed zone only |
42
+ | File **without** marker (project notes) | **Left untouched** — skills / rules are enough |
43
+ | `--merge-agents` / `--force-agents` / `--skip-agents` | See flags above |
44
+
45
+ ```text
46
+ [optional project preamble — short, project-only]
47
+ <!-- concorde-ai -->
48
+ <package ai/AGENTS.md>
49
+ [--- + overlay AGENTS.concorde.md]
50
+ ```
51
+
52
+ Everything **after** `<!-- concorde-ai -->` is replaced on each `ai-init` run (idempotent). Do not paste a full copy of the Concorde guide above the marker — put project-specific notes in `AGENTS.concorde.md` (overlay). If the preamble duplicates package `AGENTS.md`, `ai-init` slims or drops it and prints a warning. Legacy filenames `AGENTS.overlay.md` / `AGENTS.starter.md` are still accepted with a deprecation warning.
53
+
54
+ ## What gets installed
55
+
56
+ | Path | Role |
57
+ |------|------|
58
+ | `AGENTS.md` | Created only if missing; existing project-owned files are left alone unless `--merge-agents` / `--force-agents` |
59
+ | `.cursor/skills/concorde/` | Core Lit + DataProvider patterns |
60
+ | `.cursor/skills/concorde-imports/` | Short `@supersoniks/concorde/…` import paths |
61
+ | `.cursor/skills/concorde-scope/` | `serviceURL`, `formDataProvider`, API configuration |
62
+ | `.cursor/skills/concorde-theme/` | `sonic-theme` and `--sc-*` tokens |
63
+ | `.cursor/skills/concorde-menu/` | `sonic-menu` navigation |
64
+ | `.cursor/skills/concorde-get-set-dp/` | `get` / `set` / `dp` and `DataProviderKey` migration |
65
+ | `.cursor/rules/concorde.mdc` | Cursor rules (always-on patterns) |
66
+ | `.aiassistant/rules/concorde.md` | JetBrains AI Assistant rules |
67
+
68
+ ## Workflow
69
+
70
+ 1. **Starter project:** [Installation](/docs/getting-started/installation) — `yarn ai:sync` is wired in the kit.
71
+ 2. **Existing project:** run **`ai-init`** after `yarn add @supersoniks/concorde`.
72
+ 3. Commit `.cursor/` and `.aiassistant/` (and `AGENTS.md` only if you opted in / it was created) if your team shares agent settings.
73
+ 4. Re-run the same command when you bump `@supersoniks/concorde` to refresh skills from `node_modules/@supersoniks/concorde/ai/`.
74
+ 5. In Cursor, skills under `.cursor/skills/` are picked up automatically; mention a skill in chat for focused tasks (e.g. migration → `concorde-get-set-dp`).
75
+
76
+ Source files in the npm package: `node_modules/@supersoniks/concorde/ai/` (see also `ai/README.md` in the [Concorde repository](https://github.com/supersoniks/concorde)).
@@ -0,0 +1,5 @@
1
+ # Components
2
+
3
+ Every Concorde web component, grouped like the sidebar. Pick one to see its live demos, attributes and import path.
4
+
5
+ <docs-components-index></docs-components-index>
@@ -0,0 +1,136 @@
1
+ # Creating components
2
+
3
+ > **New app components:** start with [My first component](/docs/getting-started/my-first-component) and [Data flow](/docs/getting-started/dataFlow). The `Subscriber` mixin below is legacy.
4
+
5
+ ## Where to put it?
6
+
7
+ In this document, we consider the src directory of the project as the root.<br>
8
+ We describe how we organize our components as an example, however it depends on your project.
9
+
10
+ In concorde each component is currently organized in the following directory structure (at least we try):
11
+
12
+ - **/core/components/functional/component-name/component-name.ts**
13
+ Generic/functional/generally unstyled component.
14
+ The component usually doesn't use any other concrete components.
15
+ - **/core/components/ui/component-name/component-name.ts**
16
+ Generic but UI-oriented component.
17
+ The component usually only uses generic components and other UI components.
18
+ - **la-billetterie/components/atoms/component-name/component-name.ts**
19
+ The component is intended to have a concrete usage within our ticketing system **"la-billetterie"**.
20
+ It usually only uses generic components from `core` and possibly other atoms.
21
+ - **la-billetterie/components/concrete-destination/component-name/component-name.ts**
22
+ The component has a specific destination: (event / cart / gift card): `/components/destination/`
23
+ The component uses various components, usually from the `/components/atoms` directory.
24
+ It does not use components at the same level in the file hierarchy.
25
+
26
+ ## Starting from a Simple Model
27
+
28
+ You can copy `example.ts` from the source to the desired destination to start with.
29
+ This file contains a web component in the form of a class that extends the `Subscriber` mixin, with a reactive property and a render function.
30
+
31
+ <sonic-code language="javascript">
32
+ <template>
33
+ import { html, LitElement } from "lit";
34
+ import { customElement, property } from "lit/decorators.js";
35
+ import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
36
+
37
+ @customElement("sonic-example")
38
+ export class SonicComponent extends Subscriber(LitElement) {
39
+ @property() text = "Example";
40
+ render() {
41
+ return html`${this.text}`;
42
+ }
43
+ }
44
+ </template>
45
+ </sonic-code>
46
+
47
+ **You can remove the dependency on `Subscriber`** if automatic population of the component with external data is not required.
48
+ For example, for a UI component:
49
+
50
+
51
+ <sonic-code language="javascript">
52
+ <template>
53
+ import { html, LitElement } from "lit";
54
+ import { customElement, property } from "lit/decorators.js";
55
+
56
+ @customElement("sonic-example")
57
+ export class SonicComponent extends LitElement {
58
+ @property() text = "Example";
59
+ render() {
60
+ return html`${this.text}`;
61
+ }
62
+ }
63
+ </template>
64
+ </sonic-code>
65
+
66
+ Regarding data sharing, see [Data flow](/docs/getting-started/dataFlow).
67
+
68
+ ### Naming the Component
69
+
70
+ The class name is not necessarily important. However, it is important to **give it a component name prefixed with "sonic"** (or a prefix of your own) using the dedicated metadata already present in the copied document. For example, a button component would be named as follows:
71
+
72
+
73
+ <sonic-code language="typescript">
74
+ <template>
75
+ @customElement("sonic-button")
76
+ </template>
77
+ </sonic-code>
78
+
79
+ For less generic components with a specific destination, we advise to include the destination in the name.
80
+ For example, for a "title" component in the "event" destination, the name would be simply:
81
+
82
+
83
+ <sonic-code language="typescript">
84
+ <template>
85
+ @customElement("sonic-event-title")
86
+ </template>
87
+ </sonic-code>
88
+
89
+
90
+ ## Modifying It
91
+
92
+ #### Creating Reactive Properties and Modifying the Render Function
93
+
94
+ To do this, study the functioning of https://lit.dev and also refer to [Data flow](/docs/getting-started/dataFlow).
95
+
96
+ #### HTML Structure of a Component
97
+
98
+ The HTML structure of a component should remain as simple as possible.
99
+
100
+ Ideally, there should be only one additional level of elements in addition to slots.
101
+
102
+ - **The main component is already a wrapper**.
103
+ It receives classes to manage its layout, but it should not style internal elements.
104
+ - **Slots handle the visual organization** of elements.
105
+ - **The specificity of the component is expressed in this additional level** by adding a list, a functional native element (e.g., button), or another component.
106
+
107
+ This leads to the creation of more components and thus raises questions about the hierarchical organization of files. However, this tends to atomize their roles.
108
+
109
+ ## Referencing It
110
+
111
+ To compile the component, it needs to be referenced somewhere through an import statement. In particular, it is important to reference it in any component that uses it.
112
+
113
+ In the case where it can be directly used in a page, it should also be globally referenced, especially considering the creation of **specific bundles** in the future.
114
+
115
+ Here's where we add imports based on the component's location inside concorde as an example
116
+
117
+ - **/core/components/functional/component-name/component-name.ts**
118
+ In `/core/components/functional/functional.ts`, which is referenced in core.ts and imported in `index.ts`.
119
+ - **/core/components/ui/component-name/component-name.ts**
120
+ In `/core/components/ui/ui.ts`, which is referenced in core.ts and imported in `index.ts`.
121
+ - **la-billetterie/components/atoms/component-name/component-name.ts**
122
+ Nowhere else but where it will be used, except for possible **temporary** tests, for example, in `index.ts`.
123
+ - **la-billetterie/components/concrete-destination/component-name/component-name.ts**
124
+ In `la-billetterie/components/concrete-destination/destination-concrete.ts`.
125
+ If it's a new destination, you'll need to create the corresponding import .ts file and import it in `la-billetterie.ts`.
126
+
127
+ ## Using It
128
+
129
+ As a reminder, the component is simply integrated into the context by adding a tag with the component's name, for example:
130
+
131
+
132
+ <sonic-code language="html">
133
+ <template>
134
+ <sonic-event-title></sonic-event-title>
135
+ </template>
136
+ </sonic-code>