@supersoniks/concorde 5.1.0 → 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 (628) 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/launch.json +15 -0
  6. package/.claude/vite.http.config.mjs +7 -0
  7. package/.taste-skill/after/desktop-fold.jpg +0 -0
  8. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  9. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  10. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  11. package/.taste-skill/after/mobile-fold.jpg +0 -0
  12. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  13. package/.taste-skill/after/report.json +4103 -0
  14. package/.taste-skill/after/tablet-fold.jpg +0 -0
  15. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  16. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  17. package/.taste-skill/before/desktop-fold.jpg +0 -0
  18. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  19. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  20. package/.taste-skill/before/mobile-fold.jpg +0 -0
  21. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  22. package/.taste-skill/before/report.json +2556 -0
  23. package/.taste-skill/before/tablet-fold.jpg +0 -0
  24. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  25. package/.taste-skill/direction.json +510 -0
  26. package/.taste-skill/notes.md +84 -0
  27. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  28. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  29. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  30. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  31. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  32. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  33. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  34. package/.taste-skill/prod/report.json +1973 -0
  35. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  36. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  37. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  38. package/.tmp-cem/custom-elements.json +2013 -2013
  39. package/AUDIT.md +228 -0
  40. package/PLAN-AMELIORATION.md +220 -0
  41. package/PLAN-DOCS-AGENTS.md +80 -0
  42. package/README.md +3 -3
  43. package/ai/skills/concorde/SKILL.md +1 -1
  44. package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
  45. package/ai/skills/concorde-theme/SKILL.md +1 -1
  46. package/build-infos.json +1 -1
  47. package/concorde-core.bundle.js +16 -16
  48. package/concorde-core.es.js +235 -233
  49. package/dist/concorde-core.bundle.js +16 -16
  50. package/dist/concorde-core.es.js +235 -233
  51. package/dist/img/archive/concorde-001-2cv.webp +0 -0
  52. package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  53. package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
  54. package/dist/img/archive/credits.json +28 -0
  55. package/docs/.htaccess +75 -0
  56. package/docs/404.html +15 -0
  57. package/docs/404.md +5 -0
  58. package/docs/assets/index-BgG6FFPt.js +11765 -0
  59. package/docs/assets/index-x89XINSG.css +1 -0
  60. package/docs/core/components/functional/date/date.html +211 -0
  61. package/docs/core/components/functional/date/date.md +150 -0
  62. package/docs/core/components/functional/fetch/fetch.html +180 -0
  63. package/docs/core/components/functional/fetch/fetch.md +108 -0
  64. package/docs/core/components/functional/if/if.html +65 -0
  65. package/docs/core/components/functional/if/if.md +34 -0
  66. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  67. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  68. package/docs/core/components/functional/list/list.html +198 -0
  69. package/docs/core/components/functional/list/list.md +121 -0
  70. package/docs/core/components/functional/mix/mix.html +78 -0
  71. package/docs/core/components/functional/mix/mix.md +46 -0
  72. package/docs/core/components/functional/queue/queue.html +155 -0
  73. package/docs/core/components/functional/queue/queue.md +51 -0
  74. package/docs/core/components/functional/router/router.html +154 -0
  75. package/docs/core/components/functional/router/router.md +93 -0
  76. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  77. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  78. package/docs/core/components/functional/sdui/sdui.html +397 -0
  79. package/docs/core/components/functional/sdui/sdui.md +307 -0
  80. package/docs/core/components/functional/states/states.html +141 -0
  81. package/docs/core/components/functional/states/states.md +112 -0
  82. package/docs/core/components/functional/submit/submit.html +178 -0
  83. package/docs/core/components/functional/submit/submit.md +106 -0
  84. package/docs/{crawl/core → core}/components/functional/subscriber/subscriber.html +6 -5
  85. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  86. package/docs/core/components/functional/translation/translation.html +60 -0
  87. package/docs/core/components/functional/translation/translation.md +38 -0
  88. package/docs/core/components/functional/value/value.html +81 -0
  89. package/docs/core/components/functional/value/value.md +47 -0
  90. package/docs/core/components/ui/alert/alert.html +201 -0
  91. package/docs/core/components/ui/alert/alert.md +186 -0
  92. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  93. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  94. package/docs/core/components/ui/badge/badge.html +197 -0
  95. package/docs/core/components/ui/badge/badge.md +181 -0
  96. package/docs/core/components/ui/button/button.html +309 -0
  97. package/docs/core/components/ui/button/button.md +216 -0
  98. package/docs/core/components/ui/captcha/captcha.html +80 -0
  99. package/docs/core/components/ui/captcha/captcha.md +56 -0
  100. package/docs/core/components/ui/card/card.html +254 -0
  101. package/docs/core/components/ui/card/card.md +215 -0
  102. package/docs/core/components/ui/divider/divider.html +144 -0
  103. package/docs/core/components/ui/divider/divider.md +126 -0
  104. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  105. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  106. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  107. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  108. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  109. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  110. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  111. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  112. package/docs/core/components/ui/form/input/input.html +235 -0
  113. package/docs/core/components/ui/form/input/input.md +142 -0
  114. package/docs/core/components/ui/form/radio/radio.html +144 -0
  115. package/docs/core/components/ui/form/radio/radio.md +78 -0
  116. package/docs/core/components/ui/form/select/select.html +178 -0
  117. package/docs/core/components/ui/form/select/select.md +86 -0
  118. package/docs/core/components/ui/form/switch/switch.html +146 -0
  119. package/docs/core/components/ui/form/switch/switch.md +80 -0
  120. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  121. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  122. package/docs/core/components/ui/group/group.html +113 -0
  123. package/docs/core/components/ui/group/group.md +77 -0
  124. package/docs/core/components/ui/icon/icon.html +223 -0
  125. package/docs/core/components/ui/icon/icon.md +214 -0
  126. package/docs/core/components/ui/image/image.html +194 -0
  127. package/docs/core/components/ui/image/image.md +167 -0
  128. package/docs/core/components/ui/link/link.html +101 -0
  129. package/docs/core/components/ui/link/link.md +81 -0
  130. package/docs/core/components/ui/loader/loader.html +114 -0
  131. package/docs/core/components/ui/loader/loader.md +87 -0
  132. package/docs/{crawl/core → core}/components/ui/menu/menu.html +189 -116
  133. package/docs/core/components/ui/menu/menu.md +370 -0
  134. package/docs/core/components/ui/modal/modal.html +324 -0
  135. package/docs/core/components/ui/modal/modal.md +211 -0
  136. package/docs/core/components/ui/pop/pop.html +250 -0
  137. package/docs/core/components/ui/pop/pop.md +216 -0
  138. package/docs/core/components/ui/progress/progress.html +132 -0
  139. package/docs/core/components/ui/progress/progress.md +109 -0
  140. package/docs/core/components/ui/table/table.html +333 -0
  141. package/docs/core/components/ui/table/table.md +267 -0
  142. package/docs/core/components/ui/theme/theme.html +116 -0
  143. package/docs/core/components/ui/theme/theme.md +97 -0
  144. package/docs/core/components/ui/toast/toast.html +185 -0
  145. package/docs/core/components/ui/toast/toast.md +147 -0
  146. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  147. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  148. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  149. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  150. package/docs/docs/decorators/auto-subscribe.html +61 -0
  151. package/docs/docs/decorators/auto-subscribe.md +40 -0
  152. package/docs/docs/decorators/bind.html +86 -0
  153. package/docs/docs/decorators/bind.md +77 -0
  154. package/docs/docs/decorators/get.html +166 -0
  155. package/docs/docs/decorators/get.md +160 -0
  156. package/docs/docs/decorators/handle.html +139 -0
  157. package/docs/docs/decorators/handle.md +119 -0
  158. package/docs/docs/decorators/on-assign.html +72 -0
  159. package/docs/docs/decorators/on-assign.md +63 -0
  160. package/docs/docs/decorators/patch.html +76 -0
  161. package/docs/docs/decorators/patch.md +44 -0
  162. package/docs/docs/decorators/post.html +150 -0
  163. package/docs/docs/decorators/post.md +134 -0
  164. package/docs/docs/decorators/publish.html +74 -0
  165. package/docs/docs/decorators/publish.md +56 -0
  166. package/docs/docs/decorators/put.html +83 -0
  167. package/docs/docs/decorators/put.md +51 -0
  168. package/docs/docs/decorators/subscribe.html +91 -0
  169. package/docs/docs/decorators/subscribe.md +87 -0
  170. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  171. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  172. package/docs/docs/directives/sub.html +79 -0
  173. package/docs/docs/directives/sub.md +75 -0
  174. package/docs/docs/directives/t.html +91 -0
  175. package/docs/docs/directives/t.md +73 -0
  176. package/docs/{crawl/docs/_getting-started → docs/getting-started}/ai-agents.html +12 -11
  177. package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
  178. package/docs/docs/getting-started/components.html +27 -0
  179. package/docs/docs/getting-started/components.md +5 -0
  180. package/docs/{crawl/docs/_getting-started → docs/getting-started}/create-a-component.html +11 -14
  181. package/docs/{src/docs/_getting-started → docs/getting-started}/create-a-component.md +3 -6
  182. package/docs/{crawl/docs/_core-concept → docs/getting-started}/dataFlow.html +26 -29
  183. package/docs/{src/docs/_core-concept → docs/getting-started}/dataFlow.md +17 -18
  184. package/docs/docs/getting-started/installation.html +69 -0
  185. package/docs/docs/getting-started/installation.md +36 -0
  186. package/docs/{crawl/docs/_getting-started → docs/getting-started}/my-first-component.html +13 -22
  187. package/docs/{src/docs/_getting-started → docs/getting-started}/my-first-component.md +5 -14
  188. package/docs/docs/getting-started/start.html +47 -0
  189. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  190. package/docs/docs/getting-started/theming.html +334 -0
  191. package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +2 -2
  192. package/docs/docs/index.html +99 -0
  193. package/docs/{crawl/docs/_misc → docs/misc}/api-configuration.html +18 -18
  194. package/docs/{src/docs/_misc → docs/misc}/api-configuration.md +10 -12
  195. package/docs/{crawl/docs/_misc → docs/misc}/dataProviderKey.html +12 -11
  196. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  197. package/docs/{crawl/docs/_misc → docs/misc}/docs-mock-api.html +25 -28
  198. package/docs/{src/docs/_misc → docs/misc}/docs-mock-api.md +12 -13
  199. package/docs/{crawl/docs/_misc → docs/misc}/dynamic-path.html +16 -15
  200. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  201. package/docs/{crawl/docs/_misc → docs/misc}/endpoint.html +16 -15
  202. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  203. package/docs/{crawl/docs/_misc → docs/misc}/html-integration.html +12 -15
  204. package/docs/{src/docs/_misc → docs/misc}/html-integration.md +4 -5
  205. package/docs/docs-mock-api-sw.js +60 -223
  206. package/docs/docs-mock-api-sw.js.map +4 -4
  207. package/docs/hubs/decorators.html +443 -0
  208. package/docs/hubs/form-components.html +404 -0
  209. package/docs/hubs/remote-data.html +371 -0
  210. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  211. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  212. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  213. package/docs/img/archive/credits.json +28 -0
  214. package/docs/img/concorde/plane_01.jpg +0 -0
  215. package/docs/img/concorde/plane_02.jpg +0 -0
  216. package/docs/img/concorde/plane_03.jpg +0 -0
  217. package/docs/img/concorde/plane_04.jpg +0 -0
  218. package/docs/img/concorde/plane_05.jpg +0 -0
  219. package/docs/img/concorde/plane_06.jpg +0 -0
  220. package/docs/img/concorde/plane_07.jpg +0 -0
  221. package/docs/img/concorde/plane_08.jpg +0 -0
  222. package/docs/img/concorde/plane_09.jpg +0 -0
  223. package/docs/img/concorde/plane_10.jpg +0 -0
  224. package/docs/img/concorde/plane_11.jpg +0 -0
  225. package/docs/img/concorde/plane_12.jpg +0 -0
  226. package/docs/img/concorde/plane_13.jpg +0 -0
  227. package/docs/index.html +96 -67
  228. package/docs/index.md +22 -0
  229. package/docs/llms-full.txt +3329 -3295
  230. package/docs/llms.txt +94 -92
  231. package/docs/robots.txt +11 -10
  232. package/docs/sitemap.xml +78 -78
  233. package/docs/src/core/components/functional/date/date.md +91 -231
  234. package/docs/src/core/components/functional/fetch/fetch.md +66 -83
  235. package/docs/src/core/components/functional/if/if.md +28 -3
  236. package/docs/src/core/components/functional/jsonata/jsonata.md +42 -37
  237. package/docs/src/core/components/functional/list/list.md +99 -43
  238. package/docs/src/core/components/functional/mix/mix.md +31 -26
  239. package/docs/src/core/components/functional/queue/queue.md +40 -61
  240. package/docs/src/core/components/functional/router/router.md +64 -65
  241. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  242. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  243. package/docs/src/core/components/functional/sdui/example.json +19 -86
  244. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  245. package/docs/src/core/components/functional/sdui/sdui.md +196 -245
  246. package/docs/src/core/components/functional/states/states.md +86 -61
  247. package/docs/src/core/components/functional/submit/submit.md +64 -72
  248. package/docs/src/core/components/functional/translation/translation.md +38 -0
  249. package/docs/src/core/components/functional/value/value.md +34 -22
  250. package/docs/src/core/components/ui/alert/alert.md +139 -74
  251. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  252. package/docs/src/core/components/ui/badge/badge.md +137 -83
  253. package/docs/src/core/components/ui/button/button.md +139 -105
  254. package/docs/src/core/components/ui/captcha/captcha.md +50 -6
  255. package/docs/src/core/components/ui/card/card.md +183 -65
  256. package/docs/src/core/components/ui/divider/divider.md +104 -13
  257. package/docs/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  258. package/docs/src/core/components/ui/form/fieldset/fieldset.md +135 -103
  259. package/docs/src/core/components/ui/form/form-actions/form-actions.md +71 -50
  260. package/docs/src/core/components/ui/form/form-layout/form-layout.md +99 -34
  261. package/docs/src/core/components/ui/form/input/input.md +95 -95
  262. package/docs/src/core/components/ui/form/radio/radio.md +55 -34
  263. package/docs/src/core/components/ui/form/select/select.md +60 -45
  264. package/docs/src/core/components/ui/form/switch/switch.md +57 -34
  265. package/docs/src/core/components/ui/form/textarea/textarea.md +55 -38
  266. package/docs/src/core/components/ui/group/group.md +49 -47
  267. package/docs/src/core/components/ui/icon/icon.md +132 -43
  268. package/docs/src/core/components/ui/image/image.md +132 -72
  269. package/docs/src/core/components/ui/link/link.md +46 -8
  270. package/docs/src/core/components/ui/loader/loader.md +55 -23
  271. package/docs/src/core/components/ui/menu/menu.md +155 -114
  272. package/docs/src/core/components/ui/modal/modal.md +154 -62
  273. package/docs/src/core/components/ui/pop/pop.md +185 -65
  274. package/docs/src/core/components/ui/progress/progress.md +76 -30
  275. package/docs/src/core/components/ui/table/table.md +146 -334
  276. package/docs/src/core/components/ui/theme/theme.md +97 -0
  277. package/docs/src/core/components/ui/toast/toast.md +80 -99
  278. package/docs/src/core/components/ui/tooltip/tooltip.md +52 -45
  279. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  280. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  281. package/docs/src/docs/decorators/bind.md +77 -0
  282. package/docs/src/docs/decorators/get.md +160 -0
  283. package/docs/src/docs/decorators/handle.md +119 -0
  284. package/docs/src/docs/decorators/on-assign.md +63 -0
  285. package/docs/src/docs/decorators/patch.md +44 -0
  286. package/docs/src/docs/decorators/post.md +134 -0
  287. package/docs/src/docs/decorators/publish.md +56 -0
  288. package/docs/src/docs/decorators/put.md +51 -0
  289. package/docs/src/docs/decorators/subscribe.md +87 -0
  290. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  291. package/docs/src/docs/directives/sub.md +75 -0
  292. package/docs/src/docs/directives/t.md +73 -0
  293. package/docs/src/docs/{_getting-started → getting-started}/ai-agents.md +3 -3
  294. package/docs/src/docs/getting-started/components.md +5 -0
  295. package/{src/docs/_getting-started → docs/src/docs/getting-started}/create-a-component.md +3 -6
  296. package/{src/docs/_core-concept → docs/src/docs/getting-started}/dataFlow.md +17 -18
  297. package/docs/src/docs/getting-started/installation.md +36 -0
  298. package/{src/docs/_getting-started → docs/src/docs/getting-started}/my-first-component.md +5 -14
  299. package/docs/src/docs/getting-started/start.md +35 -0
  300. package/docs/src/docs/getting-started/theming.md +253 -0
  301. package/{src/docs/_misc → docs/src/docs/misc}/api-configuration.md +10 -12
  302. package/docs/src/docs/{_misc → misc}/dataProviderKey.md +4 -4
  303. package/{src/docs/_misc → docs/src/docs/misc}/docs-mock-api.md +12 -13
  304. package/docs/src/docs/{_misc → misc}/dynamic-path.md +8 -8
  305. package/docs/src/docs/{_misc → misc}/endpoint.md +8 -8
  306. package/{src/docs/_misc → docs/src/docs/misc}/html-integration.md +4 -5
  307. package/docs/src/docs/search/docs-search.json +3729 -2949
  308. package/docs/src/tsconfig.json +176 -5
  309. package/index.html +94 -67
  310. package/package.json +11 -4
  311. package/public/docs-mock-api-sw.js +58 -223
  312. package/public/docs-mock-api-sw.js.map +4 -4
  313. package/public/img/archive/concorde-001-2cv.webp +0 -0
  314. package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  315. package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
  316. package/public/img/archive/credits.json +28 -0
  317. package/public/img/concorde/plane_01.jpg +0 -0
  318. package/public/img/concorde/plane_02.jpg +0 -0
  319. package/public/img/concorde/plane_03.jpg +0 -0
  320. package/public/img/concorde/plane_04.jpg +0 -0
  321. package/public/img/concorde/plane_05.jpg +0 -0
  322. package/public/img/concorde/plane_06.jpg +0 -0
  323. package/public/img/concorde/plane_07.jpg +0 -0
  324. package/public/img/concorde/plane_08.jpg +0 -0
  325. package/public/img/concorde/plane_09.jpg +0 -0
  326. package/public/img/concorde/plane_10.jpg +0 -0
  327. package/public/img/concorde/plane_11.jpg +0 -0
  328. package/public/img/concorde/plane_12.jpg +0 -0
  329. package/public/img/concorde/plane_13.jpg +0 -0
  330. package/public/robots.txt +11 -10
  331. package/scripts/docs-markdown-vite-plugin.ts +37 -0
  332. package/scripts/docs-public-url.mjs +50 -0
  333. package/scripts/docs.htaccess +75 -0
  334. package/scripts/generate-crawl-docs.mjs +207 -116
  335. package/scripts/generate-crawl-docs.test.mjs +124 -0
  336. package/scripts/post-build-docs.js +34 -50
  337. package/scripts/post-build.mjs +0 -0
  338. package/src/core/components/functional/date/date.md +91 -231
  339. package/src/core/components/functional/fetch/fetch.md +66 -83
  340. package/src/core/components/functional/if/if.md +28 -3
  341. package/src/core/components/functional/if/if.ts +0 -0
  342. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  343. package/src/core/components/functional/list/list.demo.ts +0 -0
  344. package/src/core/components/functional/list/list.md +99 -43
  345. package/src/core/components/functional/mix/mix.md +31 -26
  346. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  347. package/src/core/components/functional/queue/queue.md +40 -61
  348. package/src/core/components/functional/router/router.demo.ts +16 -16
  349. package/src/core/components/functional/router/router.md +64 -65
  350. package/src/core/components/functional/router/router.ts +0 -0
  351. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  352. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  353. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  354. package/src/core/components/functional/sdui/example.json +19 -86
  355. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  356. package/src/core/components/functional/sdui/sdui.md +187 -358
  357. package/src/core/components/functional/sdui/types.ts +0 -0
  358. package/src/core/components/functional/states/states.demo.ts +21 -22
  359. package/src/core/components/functional/states/states.md +86 -61
  360. package/src/core/components/functional/states/states.ts +1 -1
  361. package/src/core/components/functional/submit/submit.md +64 -72
  362. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  363. package/src/core/components/functional/translation/translation.md +38 -0
  364. package/src/core/components/functional/value/value.md +34 -22
  365. package/src/core/components/functional/value/value.ts +0 -0
  366. package/src/core/components/ui/_css/size.ts +0 -0
  367. package/src/core/components/ui/alert/alert.md +48 -58
  368. package/src/core/components/ui/badge/badge.md +27 -34
  369. package/src/core/components/ui/button/button.md +139 -106
  370. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  371. package/src/core/components/ui/captcha/captcha.md +17 -32
  372. package/src/core/components/ui/card/card.md +6 -6
  373. package/src/core/components/ui/divider/divider.md +8 -11
  374. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  375. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  376. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  377. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  378. package/src/core/components/ui/form/input/input.md +95 -95
  379. package/src/core/components/ui/form/radio/radio.md +55 -34
  380. package/src/core/components/ui/form/select/select.md +60 -45
  381. package/src/core/components/ui/form/switch/switch.md +57 -34
  382. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  383. package/src/core/components/ui/group/group.md +35 -33
  384. package/src/core/components/ui/icon/icon.md +4 -4
  385. package/src/core/components/ui/image/image.md +41 -107
  386. package/src/core/components/ui/link/link.md +6 -6
  387. package/src/core/components/ui/loader/loader.md +30 -55
  388. package/src/core/components/ui/menu/menu.md +27 -27
  389. package/src/core/components/ui/modal/modal.md +72 -96
  390. package/src/core/components/ui/modal/modal.ts +14 -11
  391. package/src/core/components/ui/pop/pop.md +80 -158
  392. package/src/core/components/ui/progress/progress.md +2 -2
  393. package/src/core/components/ui/table/table.md +91 -255
  394. package/src/core/components/ui/theme/theme.md +11 -36
  395. package/src/core/components/ui/toast/toast.md +48 -117
  396. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  397. package/src/core/mixins/Subscriber.ts +0 -0
  398. package/src/core/utils/DataBindObserver.ts +0 -0
  399. package/src/core/utils/LocationHandler.spec.ts +80 -0
  400. package/src/core/utils/LocationHandler.ts +5 -9
  401. package/src/core/utils/Objects.ts +0 -0
  402. package/src/core/utils/route.ts +0 -0
  403. package/src/docs/code.ts +88 -75
  404. package/src/docs/components/docs-demo-sources.ts +70 -147
  405. package/src/docs/components/docs-lit-demo.ts +20 -40
  406. package/src/docs/components/docs-source-link.ts +0 -82
  407. package/src/docs/decorators/ancestor-attribute.md +59 -0
  408. package/src/docs/decorators/auto-subscribe.md +40 -0
  409. package/src/docs/decorators/bind.md +77 -0
  410. package/src/docs/decorators/get.md +160 -0
  411. package/src/docs/decorators/handle.md +119 -0
  412. package/src/docs/decorators/on-assign.md +63 -0
  413. package/src/docs/decorators/patch.md +44 -0
  414. package/src/docs/decorators/post.md +134 -0
  415. package/src/docs/decorators/publish.md +56 -0
  416. package/src/docs/decorators/put.md +51 -0
  417. package/src/docs/decorators/subscribe.md +87 -0
  418. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  419. package/src/docs/directives/sub.md +75 -0
  420. package/src/docs/directives/t.md +73 -0
  421. package/src/docs/docs-location.spec.ts +46 -0
  422. package/src/docs/docs-location.ts +123 -32
  423. package/src/docs/docs.ts +6 -2
  424. package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
  425. package/src/docs/example/decorators-demo-geo.ts +30 -19
  426. package/src/docs/example/decorators-demo-post.ts +88 -186
  427. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  428. package/src/docs/example/decorators-demo.ts +85 -98
  429. package/src/docs/example/docs-api-config-demos.ts +19 -20
  430. package/src/docs/example/docs-boarding-pass-demo.ts +134 -0
  431. package/src/docs/example/docs-flight-demos.ts +147 -0
  432. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  433. package/src/docs/example/docs-list-demos.ts +43 -123
  434. package/src/docs/example/docs-provider-keys.ts +33 -28
  435. package/src/docs/example/docs-queue-demos.ts +37 -77
  436. package/src/docs/example/docs-router-demos.ts +20 -25
  437. package/src/docs/example/docs-submit-demos.ts +48 -48
  438. package/src/docs/example/docs-toggle-demos.ts +4 -3
  439. package/src/docs/example/users.ts +0 -0
  440. package/src/docs/getting-started/ai-agents.md +76 -0
  441. package/src/docs/getting-started/components.md +5 -0
  442. package/src/docs/getting-started/create-a-component.md +136 -0
  443. package/src/docs/getting-started/dataFlow.md +87 -0
  444. package/src/docs/getting-started/installation.md +36 -0
  445. package/src/docs/getting-started/my-first-component.md +227 -0
  446. package/src/docs/getting-started/start.md +35 -0
  447. package/src/docs/getting-started/theming.md +253 -0
  448. package/src/docs/header/header.ts +240 -71
  449. package/src/docs/home/catalog.ts +44 -0
  450. package/src/docs/home/home.ts +520 -0
  451. package/src/docs/home/mach-stage.ts +389 -0
  452. package/src/docs/layout.ts +12 -11
  453. package/src/docs/misc/api-configuration.md +79 -0
  454. package/src/docs/misc/dataProviderKey.md +168 -0
  455. package/src/docs/misc/docs-mock-api.md +62 -0
  456. package/src/docs/misc/dynamic-path.md +71 -0
  457. package/src/docs/misc/endpoint.md +45 -0
  458. package/src/docs/misc/html-integration.md +14 -0
  459. package/src/docs/mock-api/api-config-mock.ts +5 -0
  460. package/src/docs/mock-api/fixtures.ts +0 -278
  461. package/src/docs/mock-api/flights.ts +89 -0
  462. package/src/docs/mock-api/router.ts +3 -4
  463. package/src/docs/mock-api/urls.ts +1 -2
  464. package/src/docs/navigation/components-index.ts +56 -0
  465. package/src/docs/navigation/navigation.ts +219 -232
  466. package/src/docs/navigation/pager.ts +67 -0
  467. package/src/docs/navigation/toc.ts +101 -0
  468. package/src/docs/search/docs-search.json +2419 -4374
  469. package/src/docs/search/markdown-renderer.ts +33 -7
  470. package/src/docs/search/page.ts +9 -6
  471. package/src/docs/search/search.ts +154 -122
  472. package/src/docs/shiki/index.ts +109 -0
  473. package/src/docs/tailwind/css/base/scrollbar.css +22 -0
  474. package/src/docs/tailwind/css/base/theme.css +96 -0
  475. package/src/docs/tailwind/css/base/typography.css +4 -0
  476. package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
  477. package/src/docs/tailwind/css/docs/content.css +32 -0
  478. package/src/docs/tailwind/css/docs/page.css +10 -0
  479. package/src/docs/tailwind/css/docs.css +9 -0
  480. package/src/docs/tailwind/css/home/hero.css +210 -0
  481. package/src/docs/tailwind/css/home/motion.css +84 -0
  482. package/src/docs/tailwind/css/home/sections.css +416 -0
  483. package/src/docs/tailwind/css/tailwind.css +7 -185
  484. package/src/tsconfig.json +23 -2
  485. package/src/tsconfig.tsbuildinfo +1 -1
  486. package/tailwind.config.js +8 -4
  487. package/vite.config.mts +11 -2
  488. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  489. package/.github/workflows/ci.yml +0 -21
  490. package/.github-export-ignore +0 -30
  491. package/CONTRIBUTING.md +0 -59
  492. package/DEV.md +0 -54
  493. package/LICENSE +0 -21
  494. package/OPEN_SOURCE_CHECKPOINT.md +0 -133
  495. package/concorde-3d.bundle.js +0 -3960
  496. package/concorde-3d.es.js +0 -33433
  497. package/concorde-hugging-face-infer.bundle.js +0 -32
  498. package/concorde-hugging-face-infer.es.js +0 -2952
  499. package/concorde-interactive.bundle.js +0 -1157
  500. package/concorde-interactive.es.js +0 -10734
  501. package/concorde-shader.bundle.js +0 -116
  502. package/concorde-shader.es.js +0 -8353
  503. package/concorde-webgpu.bundle.js +0 -307
  504. package/concorde-webgpu.es.js +0 -8627
  505. package/docs/assets/index-D8MVWqY6.js +0 -12251
  506. package/docs/assets/index-DiD0qYvE.css +0 -1
  507. package/docs/crawl/core/components/functional/date/date.html +0 -190
  508. package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
  509. package/docs/crawl/core/components/functional/if/if.html +0 -27
  510. package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
  511. package/docs/crawl/core/components/functional/list/list.html +0 -70
  512. package/docs/crawl/core/components/functional/mix/mix.html +0 -45
  513. package/docs/crawl/core/components/functional/queue/queue.html +0 -96
  514. package/docs/crawl/core/components/functional/router/router.html +0 -106
  515. package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
  516. package/docs/crawl/core/components/functional/states/states.html +0 -66
  517. package/docs/crawl/core/components/functional/submit/submit.html +0 -160
  518. package/docs/crawl/core/components/functional/value/value.html +0 -51
  519. package/docs/crawl/core/components/ui/alert/alert.html +0 -110
  520. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -23
  521. package/docs/crawl/core/components/ui/badge/badge.html +0 -119
  522. package/docs/crawl/core/components/ui/button/button.html +0 -149
  523. package/docs/crawl/core/components/ui/captcha/captcha.html +0 -30
  524. package/docs/crawl/core/components/ui/card/card.html +0 -99
  525. package/docs/crawl/core/components/ui/divider/divider.html +0 -58
  526. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
  527. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -135
  528. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -79
  529. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -62
  530. package/docs/crawl/core/components/ui/form/input/input.html +0 -109
  531. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
  532. package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
  533. package/docs/crawl/core/components/ui/form/select/select.html +0 -73
  534. package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
  535. package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
  536. package/docs/crawl/core/components/ui/group/group.html +0 -82
  537. package/docs/crawl/core/components/ui/icon/icon.html +0 -133
  538. package/docs/crawl/core/components/ui/image/image.html +0 -110
  539. package/docs/crawl/core/components/ui/link/link.html +0 -42
  540. package/docs/crawl/core/components/ui/loader/loader.html +0 -50
  541. package/docs/crawl/core/components/ui/modal/modal.html +0 -117
  542. package/docs/crawl/core/components/ui/pop/pop.html +0 -102
  543. package/docs/crawl/core/components/ui/progress/progress.html +0 -58
  544. package/docs/crawl/core/components/ui/table/table.html +0 -413
  545. package/docs/crawl/core/components/ui/toast/toast.html +0 -122
  546. package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -79
  547. package/docs/crawl/docs/_core-concept/overview.html +0 -66
  548. package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
  549. package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -116
  550. package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
  551. package/docs/crawl/docs/_decorators/bind.html +0 -141
  552. package/docs/crawl/docs/_decorators/get.html +0 -149
  553. package/docs/crawl/docs/_decorators/handle.html +0 -165
  554. package/docs/crawl/docs/_decorators/on-assign.html +0 -355
  555. package/docs/crawl/docs/_decorators/patch.html +0 -78
  556. package/docs/crawl/docs/_decorators/post.html +0 -139
  557. package/docs/crawl/docs/_decorators/publish.html +0 -61
  558. package/docs/crawl/docs/_decorators/put.html +0 -78
  559. package/docs/crawl/docs/_decorators/subscribe.html +0 -109
  560. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
  561. package/docs/crawl/docs/_directives/sub.html +0 -93
  562. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
  563. package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
  564. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
  565. package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
  566. package/docs/crawl/docs/_getting-started/start.html +0 -76
  567. package/docs/crawl/docs/_getting-started/theming.html +0 -85
  568. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
  569. package/docs/crawl/hubs/decorators.html +0 -547
  570. package/docs/crawl/hubs/form-components.html +0 -359
  571. package/docs/crawl/hubs/remote-data.html +0 -452
  572. package/docs/crawl/index.html +0 -101
  573. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  574. package/docs/src/docs/_core-concept/overview.md +0 -57
  575. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  576. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -127
  577. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  578. package/docs/src/docs/_decorators/bind.md +0 -167
  579. package/docs/src/docs/_decorators/get.md +0 -162
  580. package/docs/src/docs/_decorators/handle.md +0 -175
  581. package/docs/src/docs/_decorators/on-assign.md +0 -390
  582. package/docs/src/docs/_decorators/patch.md +0 -70
  583. package/docs/src/docs/_decorators/post.md +0 -146
  584. package/docs/src/docs/_decorators/publish.md +0 -55
  585. package/docs/src/docs/_decorators/put.md +0 -70
  586. package/docs/src/docs/_decorators/subscribe.md +0 -100
  587. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  588. package/docs/src/docs/_directives/sub.md +0 -91
  589. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  590. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  591. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  592. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  593. package/docs/src/docs/_getting-started/start.md +0 -47
  594. package/docs/src/docs/_getting-started/theming.md +0 -91
  595. package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  596. package/docs/src/tsconfig.declarations.json +0 -22
  597. package/docs/src/tsconfig.emit.json +0 -23
  598. package/gitlab/job_github_mirror.sh +0 -39
  599. package/scripts/github-export.mjs +0 -150
  600. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  601. package/src/css.d.ts +0 -19
  602. package/src/docs/_core-concept/overview.md +0 -57
  603. package/src/docs/_core-concept/subscriber.md +0 -75
  604. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  605. package/src/docs/_decorators/auto-subscribe.md +0 -202
  606. package/src/docs/_decorators/bind.md +0 -167
  607. package/src/docs/_decorators/get.md +0 -162
  608. package/src/docs/_decorators/handle.md +0 -175
  609. package/src/docs/_decorators/on-assign.md +0 -390
  610. package/src/docs/_decorators/patch.md +0 -70
  611. package/src/docs/_decorators/post.md +0 -146
  612. package/src/docs/_decorators/publish.md +0 -55
  613. package/src/docs/_decorators/put.md +0 -70
  614. package/src/docs/_decorators/subscribe.md +0 -100
  615. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  616. package/src/docs/_directives/sub.md +0 -91
  617. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  618. package/src/docs/_getting-started/concorde-outside.md +0 -33
  619. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  620. package/src/docs/_getting-started/pubsub.md +0 -37
  621. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  622. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  623. package/src/docs/example/docs-joke-demos.ts +0 -297
  624. package/src/docs/prism/index.ts +0 -6
  625. package/src/docs/prism/prism.css +0 -158
  626. package/src/docs/prism/prism.js +0 -1022
  627. package/src/tsconfig.declarations.json +0 -22
  628. package/src/tsconfig.emit.json +0 -23
@@ -0,0 +1,44 @@
1
+ /** One-line notes for the home index, keyed by sidebar label (taken from each component page). */
2
+ export const COMPONENT_NOTES: Record<string, { tag: string; note: string }> = {
3
+ Alert: { tag: "sonic-alert", note: "Inline feedback: errors, confirmations, contextual help." },
4
+ Badge: { tag: "sonic-badge", note: "Compact label for a status, a count or a category." },
5
+ Button: { tag: "sonic-button", note: "Action or link, with types, variants, sizes and loading." },
6
+ Captcha: { tag: "sonic-captcha", note: "ALTCHA widget wired to the surrounding form data." },
7
+ Card: { tag: "sonic-card", note: "Groups related content on a padded, themed surface." },
8
+ Checkbox: { tag: "sonic-checkbox", note: "Boolean or multi-value field that publishes to a form." },
9
+ Divider: { tag: "sonic-divider", note: "Horizontal or vertical separator, with an optional label." },
10
+ Fieldset: { tag: "sonic-fieldset", note: "Groups related controls under a legend." },
11
+ "Form actions": { tag: "sonic-form-actions", note: "Lays out submit, cancel and other form footer controls." },
12
+ "Form layout": { tag: "sonic-form-layout", note: "Responsive grid for form fields with steady spacing." },
13
+ Group: { tag: "sonic-group", note: "Joins buttons, inputs and selects into one row." },
14
+ Icon: { tag: "sonic-icon", note: "Inline SVG icons from the core set or a CDN library." },
15
+ Image: { tag: "sonic-image", note: "Responsive image with ratio, cover fit and load transition." },
16
+ Input: { tag: "sonic-input", note: "Text field that publishes its value to a form provider." },
17
+ Link: { tag: "sonic-link", note: "Navigation for routes, anchors and external URLs." },
18
+ Loader: { tag: "sonic-loader", note: "Loading animation, inline or as an overlay." },
19
+ Menu: { tag: "sonic-menu", note: "Row or column of menu items for navigation or actions." },
20
+ Modal: { tag: "sonic-modal", note: "Dialog overlay with title, content and actions." },
21
+ Pop: { tag: "sonic-pop", note: "Floating panel anchored to a trigger." },
22
+ Progress: { tag: "sonic-progress", note: "Completion bar on a value and max scale, or indeterminate." },
23
+ Radio: { tag: "sonic-radio", note: "One choice among several, published to a form." },
24
+ Select: { tag: "sonic-select", note: "Drop-down choice that publishes to a form." },
25
+ Switch: { tag: "sonic-switch", note: "On and off toggle that publishes to a form." },
26
+ Table: { tag: "sonic-table", note: "Tabular data from composable rows and cells." },
27
+ Textarea: { tag: "sonic-textarea", note: "Multi-line text field for forms." },
28
+ Theme: { tag: "sonic-theme", note: "Registers the design tokens and wraps the app." },
29
+ Toast: { tag: "sonic-toast", note: "Short-lived feedback in a fixed stack." },
30
+ Tooltip: { tag: "sonic-tooltip", note: "Short label on hover and focus." },
31
+ Date: { tag: "sonic-date", note: "Formats dates and durations, localised." },
32
+ Fetch: { tag: "sonic-fetch", note: "Loads an endpoint into a data provider." },
33
+ If: { tag: "sonic-if", note: "Shows its content while a condition holds." },
34
+ List: { tag: "sonic-list", note: "Renders a fetched collection with a template." },
35
+ Mix: { tag: "sonic-mix", note: "Merges several data providers into one." },
36
+ Jsonata: { tag: "sonic-jsonata", note: "Transforms data with a JSONata expression." },
37
+ Queue: { tag: "sonic-queue", note: "Paginated, lazy-loaded lists, page after page." },
38
+ Router: { tag: "sonic-router", note: "Renders the view that matches the location." },
39
+ SDUI: { tag: "sonic-sdui", note: "Builds an interface from a JSON descriptor." },
40
+ States: { tag: "sonic-states", note: "Switches content on a data value or a pattern." },
41
+ Submit: { tag: "sonic-submit", note: "Sends a form provider to an API endpoint." },
42
+ Translation: { tag: "sonic-t", note: "Renders a translated label in plain HTML, by key." },
43
+ Value: { tag: "sonic-value", note: "Prints a live value from a data provider." },
44
+ };
@@ -0,0 +1,520 @@
1
+ import { html, LitElement } from "lit";
2
+ import { customElement, state } from "lit/decorators.js";
3
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
4
+ import { sectionPages } from "../navigation/components-index";
5
+ import { COMPONENT_NOTES } from "./catalog";
6
+ import "./mach-stage";
7
+
8
+ const GET_STARTED = "/docs/getting-started/start";
9
+ const COMPONENTS_PAGE = "/docs/getting-started/components";
10
+
11
+ /**
12
+ * Presets for the theming instrument: palette, typeface and radius all come from tokens.
13
+ * `--sc-btn-rounded` is derived once on <sonic-theme>, so it is set explicitly.
14
+ */
15
+ const themes = [
16
+ { name: "Manual", vars: "" },
17
+ {
18
+ name: "Dracula",
19
+ vars: [
20
+ "--sc-base:#282a36;--sc-base-content:#f8f8f2",
21
+ "--sc-base-50:#343746;--sc-base-100:#44475a;--sc-base-200:#6272a4",
22
+ "--sc-primary:#bd93f9;--sc-primary-content:#282a36",
23
+ "--sc-info:#8be9fd;--sc-info-content:#282a36",
24
+ "--sc-success:#50fa7b;--sc-success-content:#282a36",
25
+ "--sc-warning:#ffb86c;--sc-danger:#ff5555",
26
+ "--sc-rounded:1rem;--sc-btn-rounded:9999px",
27
+ ].join(";"),
28
+ },
29
+ {
30
+ name: "Classic",
31
+ vars: [
32
+ "--sc-base:#fbf5e6;--sc-base-content:#3b2f2f",
33
+ "--sc-base-50:#f3e9d2;--sc-base-100:#e9dcbd;--sc-base-200:#d6c49a",
34
+ "--sc-primary:#7f1d1d;--sc-primary-content:#fbf5e6",
35
+ "--sc-info:#1e3a8a;--sc-success:#166534;--sc-warning:#b45309",
36
+ '--sc-font-family-base:Georgia,"Times New Roman",serif',
37
+ '--sc-headings-font-family:Georgia,"Times New Roman",serif',
38
+ "--sc-rounded:0;--sc-btn-rounded:0",
39
+ ].join(";"),
40
+ },
41
+ {
42
+ name: "Terminal",
43
+ vars: [
44
+ "--sc-base:#0b0f0b;--sc-base-content:#b8f7c4",
45
+ "--sc-base-50:#111a12;--sc-base-100:#16231a;--sc-base-200:#1f3a26",
46
+ "--sc-primary:#22c55e;--sc-primary-content:#0b0f0b",
47
+ "--sc-info:#22d3ee;--sc-info-content:#0b0f0b",
48
+ "--sc-success:#4ade80;--sc-success-content:#0b0f0b",
49
+ // the Terminal preset only ever restyles the data-ui fragment
50
+ "--sc-font-family-base:ui-monospace,SFMono-Regular,Menlo,monospace", // taste-skill-ignore
51
+ "--sc-headings-font-family:ui-monospace,SFMono-Regular,Menlo,monospace", // taste-skill-ignore
52
+ "--sc-rounded:2px;--sc-btn-rounded:2px",
53
+ ].join(";"),
54
+ },
55
+ ];
56
+
57
+ /** The same <sonic-button>, dropped in different stacks (strings: formatters leave them alone). */
58
+ const hosts = [
59
+ {
60
+ name: "HTML",
61
+ language: "html",
62
+ code: `<script type="module" src="concorde.js"></script>
63
+
64
+ <sonic-button type="primary">Book</sonic-button>`,
65
+ },
66
+ {
67
+ name: "React",
68
+ language: "javascript",
69
+ code: `import "@supersoniks/concorde/button";
70
+
71
+ export const Book = () => (
72
+ <sonic-button type="primary">Book</sonic-button>
73
+ );`,
74
+ },
75
+ {
76
+ name: "Vue",
77
+ language: "html",
78
+ code: `<script setup>
79
+ import "@supersoniks/concorde/button";
80
+ </script>
81
+ <template><sonic-button type="primary">Book</sonic-button></template>`,
82
+ },
83
+ {
84
+ name: "PHP",
85
+ language: "html",
86
+ code: `<?php foreach ($flights as $f): ?>
87
+ <sonic-button type="primary"><?= $f->label ?></sonic-button>
88
+ <?php endforeach ?>`,
89
+ },
90
+ ];
91
+
92
+ const bindSnippet = `<div formDataProvider="flight">
93
+ <sonic-input name="captain"></sonic-input>
94
+ </div>
95
+ <sonic-value dataProvider="flight" key="captain"></sonic-value>`;
96
+
97
+ /** What the server pushes when the gate changes (rendered by the real <sonic-sdui>). */
98
+ const gateJson = `{
99
+ "nodes": [
100
+ {
101
+ "tagName": "sonic-alert",
102
+ "attributes": {
103
+ "status": "warning",
104
+ "background": "",
105
+ "label": "Gate change: AF 002 now boards at C4"
106
+ }
107
+ }
108
+ ]
109
+ }`;
110
+ const gateChange = JSON.parse(gateJson);
111
+
112
+ const INSTALL = `npx @supersoniks/create-concorde-ts-starter "MyProject"`;
113
+
114
+ const escapeCode = (code: string) =>
115
+ code.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
116
+
117
+ /** A read-only code block built from a string, so whitespace survives formatters. */
118
+ const codeBlock = (code: string, language: string, className = "") =>
119
+ unsafeHTML(
120
+ `<sonic-code language="${language}" noEdit noPreview class="${className}"><template>${escapeCode(code)}</template></sonic-code>`,
121
+ );
122
+
123
+ const INDEX_TABS = [
124
+ { title: "UI components", label: "Interface" },
125
+ { title: "Functional components", label: "Functional" },
126
+ ];
127
+
128
+ /** Components listed in the sidebar, so the count follows the menu (hidden pages excluded). */
129
+ const COMPONENT_COUNT = INDEX_TABS.reduce(
130
+ (total, tab) => total + sectionPages(tab.title).length,
131
+ 0,
132
+ );
133
+
134
+ const ARCHIVE = "./img/archive/";
135
+
136
+ /** Credit lines for the archive pictures (CC BY / CC BY-SA, from assets.mjs --credits). */
137
+ const CREDITS = `Film: <a href="https://commons.wikimedia.org/wiki/File:Concorde_%26_Red_Arrows_2002.webm">“Concorde &amp; Red Arrows 2002”</a> by Steve Elliott, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a>, via Wikimedia Commons.`;
138
+
139
+ const tagName = "docs-home";
140
+ /**
141
+ * Landing page of the documentation, set like an old technical manual.
142
+ * Light DOM so the global sheet and the docs helpers (sonic-code) apply.
143
+ */
144
+ @customElement(tagName)
145
+ export class DocsHome extends LitElement {
146
+ private observer?: IntersectionObserver;
147
+ private settleObserver?: IntersectionObserver;
148
+
149
+ @state() private theme = 0;
150
+ @state() private host = 0;
151
+ @state() private gate = false;
152
+ @state() private families = new Set([0, 1]);
153
+ @state() private focus = "Button";
154
+
155
+ createRenderRoot() {
156
+ return this;
157
+ }
158
+
159
+ firstUpdated() {
160
+ this.observer = new IntersectionObserver(
161
+ (records) => {
162
+ records.forEach((r) => {
163
+ if (!r.isIntersecting) return;
164
+ r.target.classList.add("is-visible");
165
+ this.observer?.unobserve(r.target);
166
+ });
167
+ },
168
+ { threshold: 0.12 },
169
+ );
170
+ this.querySelectorAll("[data-reveal]").forEach((el) =>
171
+ this.observer?.observe(el),
172
+ );
173
+ // the archive photograph settles from a slight zoom as it comes in (always visible)
174
+ this.settleObserver = new IntersectionObserver(
175
+ (records) => {
176
+ records.forEach((r) => {
177
+ if (!r.isIntersecting) return;
178
+ r.target.classList.add("is-visible");
179
+ this.settleObserver?.unobserve(r.target);
180
+ });
181
+ },
182
+ { rootMargin: "0px 0px 25% 0px" },
183
+ );
184
+ this.querySelectorAll(".settle").forEach((el) =>
185
+ this.settleObserver?.observe(el),
186
+ );
187
+ }
188
+
189
+ disconnectedCallback() {
190
+ this.observer?.disconnect();
191
+ this.settleObserver?.disconnect();
192
+ super.disconnectedCallback();
193
+ }
194
+
195
+ /** The departures shown on the board; the gate switch reroutes the passenger's flight. */
196
+ private get flights() {
197
+ return [
198
+ { time: "10:30", flight: "AF 002", to: "New York", gate: this.gate ? "C4" : "B12", status: this.gate ? "Gate change" : "Boarding", type: this.gate ? "warning" : "success", mine: true },
199
+ { time: "11:15", flight: "BA 001", to: "London", gate: "A7", status: "On time", type: "default", mine: false },
200
+ { time: "13:40", flight: "AF 054", to: "Rio", gate: "D2", status: "Delayed", type: "danger", mine: false },
201
+ ];
202
+ }
203
+
204
+ /** Reads the switch after its own toggle (a label click fires two click events). */
205
+ private syncGate(e: Event) {
206
+ const sw = e.currentTarget as HTMLElement & { checked?: boolean };
207
+ window.setTimeout(() => (this.gate = !!sw.checked));
208
+ }
209
+
210
+
211
+ private renderHero() {
212
+ return html`<section class="hero" aria-labelledby="home-title">
213
+ <div class="hero-copy">
214
+ <h1 id="home-title" class="hero-title hero-in">
215
+ Web components<br />for every stack.
216
+ </h1>
217
+ <div class="hero-actions hero-in" style="--d:180ms">
218
+ <sonic-button size="lg" type="primary" class="signal-button" pushState href=${GET_STARTED}
219
+ >Open the manual</sonic-button
220
+ >
221
+ <sonic-link pushState href=${COMPONENTS_PAGE} class="text-link"
222
+ >Browse the components</sonic-link
223
+ >
224
+ </div>
225
+ <div class="hero-install hero-in" style="--d:270ms">
226
+ ${codeBlock(INSTALL, "bash", "hero-install-code")}
227
+ </div>
228
+ </div>
229
+ <div class="hero-stage">
230
+ <docs-mach-stage class="hero-mach"></docs-mach-stage>
231
+ </div>
232
+ </section>`;
233
+ }
234
+
235
+ private renderManifesto() {
236
+ return html`<section class="manifesto" aria-label="What Concorde is">
237
+ <p class="manifesto-text" data-reveal>
238
+ Concorde is a Lit library of ${COMPONENT_COUNT} web components. They bind data, call
239
+ APIs and theme themselves from plain HTML, in React, Vue, PHP or a
240
+ static page.
241
+ </p>
242
+ </section>`;
243
+ }
244
+
245
+ /** Families shown in the wall; at least one stays on. */
246
+ private toggleFamily(i: number) {
247
+ const next = new Set(this.families);
248
+ if (next.has(i) && next.size > 1) next.delete(i);
249
+ else next.add(i);
250
+ this.families = next;
251
+ }
252
+
253
+ private renderIndex() {
254
+ const pages = INDEX_TABS.flatMap((t, i) =>
255
+ this.families.has(i) ? sectionPages(t.title) : [],
256
+ );
257
+ const focus = COMPONENT_NOTES[this.focus] ?? COMPONENT_NOTES[pages[0]?.label];
258
+ return html`<section class="index" aria-labelledby="index-title">
259
+ <div class="index-head" data-reveal>
260
+ <h2 id="index-title" class="section-title">${COMPONENT_COUNT} components,<br />one tag each.</h2>
261
+ <div class="index-filters" role="group" aria-label="Component families" data-ui>
262
+ ${INDEX_TABS.map((t, i) => {
263
+ const on = this.families.has(i);
264
+ return html`<sonic-button
265
+ variant="unstyled"
266
+ size="lg"
267
+ class="index-filter"
268
+ aria-pressed=${on ? "true" : "false"}
269
+ @click=${() => this.toggleFamily(i)}
270
+ >[<span class="index-filter-mark">×</span>] ${t.label}
271
+ (${sectionPages(t.title).length})</sonic-button
272
+ >`;
273
+ })}
274
+ </div>
275
+ </div>
276
+ <p class="index-wall">
277
+ ${pages.map(
278
+ (page) => html`<span class="wall-item"
279
+ ><sonic-link
280
+ pushState
281
+ href=${page.href}
282
+ class="wall-name ${page.label === this.focus ? "is-focus" : ""}"
283
+ @mouseenter=${() => (this.focus = page.label)}
284
+ @focusin=${() => (this.focus = page.label)}
285
+ >${page.label}</sonic-link
286
+ ></span
287
+ > `,
288
+ )}
289
+ </p>
290
+ <div class="index-caption" aria-live="polite">
291
+ <code class="index-caption-tag">&lt;${focus?.tag ?? ""}&gt;</code>
292
+ <span class="index-caption-note">${focus?.note ?? ""}</span>
293
+ <sonic-link pushState href=${COMPONENTS_PAGE} class="text-link index-caption-all"
294
+ >All components</sonic-link
295
+ >
296
+ </div>
297
+ </section>`;
298
+ }
299
+
300
+ private renderInstruments() {
301
+ return html`<section class="instruments" aria-labelledby="instruments-title">
302
+ <h2 id="instruments-title" class="section-title instr-title" data-reveal>
303
+ Plumbing in attributes.
304
+ </h2>
305
+ <div class="instr-field">
306
+ <div class="instr-output board" data-ui style=${themes[this.theme].vars}>
307
+ <div class="board-head">
308
+ <span class="board-title">Departures</span>
309
+ <span class="board-airport">Paris CDG</span>
310
+ </div>
311
+ <div class="board-passenger">
312
+ <span class="board-label">Captain</span>
313
+ <span class="board-name"
314
+ ><sonic-value dataProvider="homeFlight" key="captain"></sonic-value
315
+ ></span>
316
+ </div>
317
+ <sonic-table class="board-table">
318
+ <sonic-thead>
319
+ <sonic-tr>
320
+ <sonic-th>Time</sonic-th>
321
+ <sonic-th>Flight</sonic-th>
322
+ <sonic-th>To</sonic-th>
323
+ <sonic-th>Gate</sonic-th>
324
+ <sonic-th>Status</sonic-th>
325
+ </sonic-tr>
326
+ </sonic-thead>
327
+ <sonic-tbody>
328
+ ${this.flights.map(
329
+ (f) => html`<sonic-tr class=${f.mine ? "board-mine" : ""}>
330
+ <sonic-td>${f.time}</sonic-td>
331
+ <sonic-td>${f.flight}</sonic-td>
332
+ <sonic-td>${f.to}</sonic-td>
333
+ <sonic-td>${f.gate}</sonic-td>
334
+ <sonic-td
335
+ ><sonic-badge size="sm" type=${f.type}>${f.status}</sonic-badge></sonic-td
336
+ >
337
+ </sonic-tr>`,
338
+ )}
339
+ </sonic-tbody>
340
+ </sonic-table>
341
+ ${this.gate
342
+ ? html`<sonic-sdui dataProvider="homeGate" .props=${gateChange}></sonic-sdui>`
343
+ : ""}
344
+ <div class="board-foot">
345
+ <sonic-button type="primary">
346
+ <sonic-icon slot="prefix" name="airplane" library="iconoir"></sonic-icon>
347
+ Board AF 002
348
+ </sonic-button>
349
+ <span class="board-note">Rendered in ${hosts[this.host].name}</span>
350
+ </div>
351
+ </div>
352
+ </div>
353
+ <div class="instr-blocks">
354
+ <div class="instr-block" data-reveal>
355
+ <p class="instr-claim">Bind state without glue.</p>
356
+ <p class="instr-text">
357
+ The field publishes into a formDataProvider and the panel
358
+ subscribes. No store to set up, no event to wire.
359
+ </p>
360
+ <div formDataProvider="homeFlight">
361
+ <sonic-input name="captain" label="Captain" value="André Turcat"></sonic-input>
362
+ </div>
363
+ ${codeBlock(bindSnippet, "html", "instr-code")}
364
+ </div>
365
+ <div class="instr-block" data-reveal>
366
+ <p class="instr-claim">Restyle with a handful of tokens.</p>
367
+ <p class="instr-text">
368
+ Palette, typeface and radius are CSS custom properties. Swap them
369
+ and every component in the panel follows.
370
+ </p>
371
+ <sonic-group size="sm">
372
+ ${themes.map(
373
+ (t, i) => html`<sonic-button
374
+ type=${i === this.theme ? "primary" : "default"}
375
+ aria-pressed=${i === this.theme ? "true" : "false"}
376
+ @click=${() => (this.theme = i)}
377
+ >${t.name}</sonic-button
378
+ >`,
379
+ )}
380
+ </sonic-group>
381
+ </div>
382
+ <div class="instr-block" data-reveal>
383
+ <p class="instr-claim">Render screens from JSON.</p>
384
+ <p class="instr-text">
385
+ The server sends the JSON below; sonic-sdui draws it with the same components. Flip the switch to push it to the board.
386
+ </p>
387
+ <sonic-switch @click=${this.syncGate}
388
+ >Push a gate change from the server</sonic-switch
389
+ >
390
+ ${codeBlock(gateJson, "json", "instr-code")}
391
+ </div>
392
+ <div class="instr-block" data-reveal>
393
+ <p class="instr-claim">Drop the same tag in any stack.</p>
394
+ <p class="instr-text">
395
+ Standard custom elements: no wrapper per framework, no bundler
396
+ required on a legacy page.
397
+ </p>
398
+ <sonic-group size="sm">
399
+ ${hosts.map(
400
+ (h, i) => html`<sonic-button
401
+ type=${i === this.host ? "primary" : "default"}
402
+ aria-pressed=${i === this.host ? "true" : "false"}
403
+ @click=${() => (this.host = i)}
404
+ >${h.name}</sonic-button
405
+ >`,
406
+ )}
407
+ </sonic-group>
408
+ <div class="host-snippets">
409
+ ${hosts.map(
410
+ (h, i) => html`<div
411
+ class="host-snippet ${i === this.host ? "is-active" : ""}"
412
+ ?inert=${i !== this.host}
413
+ >
414
+ ${codeBlock(h.code, h.language, "instr-code")}
415
+ </div>`,
416
+ )}
417
+ </div>
418
+ </div>
419
+ </div>
420
+ </section>`;
421
+ }
422
+
423
+ private renderStory() {
424
+ return html`<section class="story" aria-labelledby="story-title">
425
+ <div class="letter">
426
+ <h2 id="story-title" class="section-title" data-reveal>Why we built it.</h2>
427
+ <div class="letter-body" data-reveal style="--d:90ms">
428
+ <p>
429
+ In 2022 we needed one ticketing stack for nearly a hundred sites:
430
+ mobile apps, modern front ends, and PHP pages that will never see a
431
+ bundler.
432
+ </p>
433
+ <p>
434
+ Writing the same booking form five times was not an option. We
435
+ wanted components that any of those pages could load and that
436
+ would still share their data with each other.
437
+ </p>
438
+ <p>
439
+ We chose Lit for its reach and web components for their
440
+ longevity, then moved the plumbing into attributes: data
441
+ providers, fetchers, forms and themes.
442
+ </p>
443
+ <p>
444
+ We named it after the aircraft that flew Paris to New York in
445
+ three and a half hours. Concorde is the library we run in
446
+ production every day, now open to you.
447
+ </p>
448
+ <p class="letter-sign">The Supersoniks team</p>
449
+ </div>
450
+ </div>
451
+ <figure class="story-figure settle">
452
+ <img
453
+ src="${ARCHIVE}concorde-001-2cv.webp"
454
+ width="3000"
455
+ height="1934"
456
+ alt="Concorde 001 on the apron, a yellow 2CV parked under its wing, photographers walking past"
457
+ loading="lazy"
458
+ decoding="async"
459
+ />
460
+ </figure>
461
+ </section>`;
462
+ }
463
+
464
+ private renderTakeoff() {
465
+ return html`<section class="takeoff" aria-labelledby="takeoff-title">
466
+ <div class="takeoff-copy">
467
+ <h2 id="takeoff-title" class="takeoff-title" data-reveal>
468
+ Take your project<br />supersonic.
469
+ </h2>
470
+ <p class="takeoff-lead" data-reveal style="--d:60ms">
471
+ One command scaffolds a Vite project with Concorde, Tailwind and
472
+ the agent skills, ready to build.
473
+ </p>
474
+ <div class="takeoff-code" data-reveal style="--d:120ms">
475
+ ${codeBlock(INSTALL, "bash", "takeoff-command")}
476
+ </div>
477
+ </div>
478
+ <figure class="takeoff-figure">
479
+ <video
480
+ src="${ARCHIVE}concorde-red-arrows-2002.webm"
481
+ poster="${ARCHIVE}concorde-red-arrows-2002-poster.jpg"
482
+ width="640"
483
+ height="360"
484
+ autoplay
485
+ muted
486
+ loop
487
+ playsinline
488
+ aria-label="Concorde flying in formation with the Red Arrows, 2002"
489
+ ></video>
490
+ </figure>
491
+ </section>`;
492
+ }
493
+
494
+ private renderFooter() {
495
+ return html`<footer class="home-footer">
496
+ <div class="footer-line">
497
+ <span>Concorde, web components by Supersoniks</span>
498
+ <nav class="footer-links" aria-label="Footer">
499
+ <sonic-link pushState href=${GET_STARTED}>Docs</sonic-link>
500
+ <sonic-link pushState href=${COMPONENTS_PAGE}>Components</sonic-link>
501
+ <sonic-link href="https://www.npmjs.com/package/@supersoniks/concorde" target="_blank"
502
+ >npm</sonic-link
503
+ >
504
+ </nav>
505
+ <span class="footer-end">MIT licence · ${new Date().getFullYear()}</span>
506
+ </div>
507
+ <p class="credits">${unsafeHTML(CREDITS)}</p>
508
+ </footer>`;
509
+ }
510
+
511
+ render() {
512
+ return html`<div class="docs-home">
513
+ ${this.renderHero()} ${this.renderManifesto()} ${this.renderIndex()}
514
+ ${this.renderInstruments()}
515
+ ${this.renderStory()} ${this.renderTakeoff()}
516
+ ${this.renderFooter()}
517
+ </div>`;
518
+ }
519
+ }
520
+