@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,124 @@
1
+ import assert from "node:assert/strict";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "path";
5
+ import test from "node:test";
6
+ import {
7
+ generateHomepageMarkdown,
8
+ generateHtaccess,
9
+ generateNotFoundHtml,
10
+ generateNotFoundMarkdown,
11
+ pagePath,
12
+ writeAgentSiteArtifacts,
13
+ } from "./generate-crawl-docs.mjs";
14
+
15
+ function stripTags(html) {
16
+ return html
17
+ .replace(/<script[\s\S]*?<\/script>/gi, " ")
18
+ .replace(/<style[\s\S]*?<\/style>/gi, " ")
19
+ .replace(/<[^>]+>/g, " ")
20
+ .replace(/\s+/g, " ")
21
+ .trim();
22
+ }
23
+
24
+ test("pagePath builds pretty public pathnames", () => {
25
+ assert.equal(
26
+ pagePath("docs/getting-started/start.md"),
27
+ "/docs/getting-started/start",
28
+ );
29
+ assert.equal(
30
+ pagePath("core/components/ui/button/button.md"),
31
+ "/core/components/ui/button",
32
+ );
33
+ assert.equal(
34
+ pagePath("core/components/functional/sdui/sdui-extension-points.md"),
35
+ "/core/components/functional/sdui/sdui-extension-points",
36
+ );
37
+ });
38
+
39
+ test("homepage Markdown meets Accept negotiation body requirements", () => {
40
+ const md = generateHomepageMarkdown();
41
+ assert.match(md, /^# Concorde by Supersoniks/m);
42
+ assert.match(md, /@supersoniks\/concorde/);
43
+ assert.match(md, /llms\.txt/);
44
+ assert.match(md, /Accept: text\/markdown/);
45
+ assert.match(md, /docs\/getting-started\/start/);
46
+ assert.doesNotMatch(md, /\/crawl\//);
47
+ assert.doesNotMatch(md, /\/docs\/_getting-started\//);
48
+ assert.ok(md.length >= 500, `expected ≥500 chars, got ${md.length}`);
49
+ });
50
+
51
+ test("404 Markdown explains the error and links agent entry points", () => {
52
+ const md = generateNotFoundMarkdown();
53
+ assert.ok(md.length >= 20);
54
+ assert.match(md, /not found/i);
55
+ assert.match(md, /llms\.txt|sitemap\.xml|docs\/index/);
56
+ assert.doesNotMatch(md, /\/crawl\//);
57
+ assert.match(md, /https:\/\/concorde\.supersoniks\.org/);
58
+ });
59
+
60
+ test("404 HTML keeps a human-readable fallback", () => {
61
+ const html = generateNotFoundHtml();
62
+ assert.match(html, /<h1>Page not found<\/h1>/);
63
+ assert.match(html, /llms\.txt/);
64
+ assert.doesNotMatch(html, /\/crawl\//);
65
+ });
66
+
67
+ test("htaccess maps components and negotiates Markdown/HTML", () => {
68
+ const conf = generateHtaccess();
69
+ assert.match(conf, /RewriteEngine On/);
70
+ assert.match(conf, /text\/markdown/);
71
+ assert.match(conf, /index\.md/);
72
+ assert.match(conf, /ErrorDocument 404 \/404\.md/);
73
+ assert.match(conf, /\$1\/\$2\/\$2\.md/);
74
+ assert.match(conf, /Googlebot/);
75
+ assert.match(conf, /index\.html \[END\]/);
76
+ assert.match(conf, /DirectorySlash Off/);
77
+ assert.doesNotMatch(conf, /docs\/_/);
78
+ assert.doesNotMatch(conf, /THE_REQUEST/);
79
+ assert.doesNotMatch(conf, /\^crawl\//);
80
+ });
81
+
82
+ test("writeAgentSiteArtifacts emits negotiation files", () => {
83
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "concorde-agent-"));
84
+ try {
85
+ writeAgentSiteArtifacts(dir);
86
+ for (const name of ["index.md", "404.md", "404.html", ".htaccess"]) {
87
+ const filePath = path.join(dir, name);
88
+ assert.ok(fs.existsSync(filePath), `missing ${name}`);
89
+ assert.ok(fs.statSync(filePath).size > 20, `${name} too small`);
90
+ }
91
+ } finally {
92
+ fs.rmSync(dir, { recursive: true, force: true });
93
+ }
94
+ });
95
+
96
+ test("source index.html ships ≥500 chars of meaningful agent content with H1", () => {
97
+ const indexPath = path.resolve("index.html");
98
+ const html = fs.readFileSync(indexPath, "utf8");
99
+ assert.match(html, /id="docs-agent-content"/);
100
+ assert.match(html, /<h1>Concorde by Supersoniks<\/h1>/);
101
+ assert.match(html, /href="\/docs\/getting-started\/start"/);
102
+ assert.doesNotMatch(html, /\/docs\/_getting-started\//);
103
+ assert.doesNotMatch(html, /\/crawl\//);
104
+
105
+ const section = html.match(
106
+ /<section id="docs-agent-content"[^>]*>([\s\S]*?)<\/section>/,
107
+ );
108
+ assert.ok(section, "docs-agent-content section missing");
109
+ const text = stripTags(section[1]);
110
+ assert.ok(
111
+ text.length >= 500,
112
+ `agent section text expected ≥500 chars, got ${text.length}`,
113
+ );
114
+ });
115
+
116
+ test("public robots.txt allows pathnames and drops /crawl/", () => {
117
+ const robots = fs.readFileSync(path.resolve("public/robots.txt"), "utf8");
118
+ assert.match(robots, /Allow: \//);
119
+ assert.match(robots, /Allow: \/docs\//);
120
+ assert.match(robots, /Allow: \/core\//);
121
+ assert.match(robots, /Allow: \/llms\.txt/);
122
+ assert.doesNotMatch(robots, /Allow: \/crawl\//);
123
+ assert.doesNotMatch(robots, /Googlebot[\s\S]*Disallow: \//);
124
+ });
@@ -4,54 +4,56 @@ import { generateCrawlDocs } from "./generate-crawl-docs.mjs";
4
4
 
5
5
  const src = path.resolve("src");
6
6
  const docs = path.resolve("docs");
7
- /**
8
- * lister les fichiers d'un répertoire de manière récursive
9
- */
7
+
10
8
  function listFiles(dir) {
11
9
  let files = [];
12
10
  let list = fs.readdirSync(dir);
13
11
  list.forEach((file) => {
14
- const path = dir + "/" + file;
15
- let stat = fs.statSync(path);
12
+ const filePath = dir + "/" + file;
13
+ let stat = fs.statSync(filePath);
16
14
  if (stat && stat.isDirectory()) {
17
- files = files.concat(listFiles(path));
15
+ files = files.concat(listFiles(filePath));
18
16
  } else {
19
- files.push(path);
17
+ files.push(filePath);
20
18
  }
21
19
  });
22
20
  return files;
23
21
  }
24
22
 
23
+ function ensureCopy(absSrc, absDest) {
24
+ fs.mkdirSync(path.dirname(absDest), { recursive: true });
25
+ fs.copyFileSync(absSrc, absDest);
26
+ }
27
+
25
28
  /**
26
- * copier toues les fichiers .md présents dans le répertpoire src et ses sous dossiers de manière récurcive vers dossier docs en respectant l'arborescence qu'il y avait dans le dossier src
27
- * il faut creer le chemin si il n'existe pas avant de copier le fichier
29
+ * Publish markdown at the public pathname (`/docs/…/page.md`, `/core/…/page.md`)
30
+ * and keep a `/src/…` copy for non-md assets (and legacy MD until 301).
28
31
  */
29
32
  function copyDocs() {
30
- let files = listFiles(src);
33
+ const files = listFiles(src);
31
34
  for (const file of files) {
32
- if (file.indexOf(".md") != -1 || file.indexOf(".json") != -1) {
33
- let idx = file.indexOf("src/");
34
- let dest = file.substring(idx);
35
- let split = dest.split("/");
36
- let dir = path.resolve(docs);
37
- for (let i = 0; i < split.length - 1; i++) {
38
- dir += "/" + split[i];
39
- if (!fs.existsSync(dir)) {
40
- fs.mkdirSync(dir);
41
- }
42
- }
43
- dir += "/" + split[split.length - 1];
44
- fs.copyFileSync(file, dir);
35
+ const isMd = /\.mdx?$/i.test(file);
36
+ const isJson = file.endsWith(".json");
37
+ if (!isMd && !isJson) continue;
38
+
39
+ const idx = file.indexOf("src/");
40
+ if (idx === -1) continue;
41
+ const underSrc = file.substring(idx); // src/docs/…/x.md
42
+ const withoutSrc = underSrc.replace(/^src\//, ""); // docs/…/x.md
43
+
44
+ // Always keep under docs/src/… (json + legacy md paths)
45
+ ensureCopy(file, path.join(docs, underSrc));
46
+
47
+ // Public MD URLs: /docs/… and /core/… (+ .md)
48
+ if (isMd && /^(docs|core)\//.test(withoutSrc)) {
49
+ ensureCopy(file, path.join(docs, withoutSrc));
45
50
  }
46
51
  }
47
52
  }
53
+
48
54
  copyDocs();
49
55
  generateCrawlDocs();
50
56
 
51
- /**
52
- * Par rapport au projet, regarder si ../concorde_doc existe et si oui, remplacer le contenu de /concorde_doc par celui de contenu dans docs/ en dehors des fichiers spécifiques à git .git .gitignore .gitattributes)
53
- */
54
-
55
57
  function copyToConcordeDoc() {
56
58
  let concordeDoc = path.resolve("../concorde_doc");
57
59
 
@@ -60,15 +62,17 @@ function copyToConcordeDoc() {
60
62
  }
61
63
 
62
64
  try {
63
- /* first remove all files/foilders in concorde_doc except .git folder and .gitignore file */
64
65
  let files = listFiles(concordeDoc);
65
66
  for (const file of files) {
66
67
  if (file.indexOf(".git") == -1) {
67
68
  fs.unlinkSync(file);
68
69
  }
69
70
  }
71
+ const legacyCrawl = path.join(concordeDoc, "crawl");
72
+ if (fs.existsSync(legacyCrawl)) {
73
+ fs.rmSync(legacyCrawl, { recursive: true, force: true });
74
+ }
70
75
 
71
- /*then copy the new files*/
72
76
  files = listFiles(docs);
73
77
  for (const file of files) {
74
78
  let idx = file.indexOf("docs/") + 5;
@@ -95,29 +99,9 @@ function copyToConcordeDoc() {
95
99
  console.warn(
96
100
  "copyToConcordeDoc: skipped (",
97
101
  err.code || err.message,
98
- ") — docs/ and docs/crawl/ were still generated.",
102
+ ") — docs/ pathnames (HTML + MD + hubs) were still generated.",
99
103
  );
100
104
  }
101
105
  }
102
106
 
103
107
  copyToConcordeDoc();
104
-
105
- /**
106
- * dans ../concorde_doc, faire un git add, commit et push
107
- */
108
- /*
109
- function gitConcordeDoc() {
110
- let concordeDoc = path.resolve("../concorde_doc");
111
- if (fs.existsSync(concordeDoc)) {
112
- exec("cd " + concordeDoc + " && git add . && git commit -m 'update doc' && git push", (error, stdout, stderr) => {
113
- if (error) {
114
- console.error(`exec error: ${error}`);
115
- return;
116
- }
117
- console.log(`stdout: ${stdout}`);
118
- console.error(`stderr: ${stderr}`);
119
- });
120
- }
121
- }
122
-
123
- gitConcordeDoc(); */
File without changes
@@ -1,290 +1,150 @@
1
1
  # Date
2
2
 
3
- ## No attribute
3
+ **`sonic-date`** formats a date or a date range with `Intl.DateTimeFormat`. Pass a Unix timestamp in seconds (`date`) or a parsable string (`date_string`), add `end_date` for a range, and tune each part (`weekday` · `month` · `hour` …) with attributes. With no date and no `now`, it renders nothing.
4
4
 
5
- **Nothing** is displayed.
5
+ ## Basic example
6
6
 
7
- <sonic-code>
8
- <template>
9
- <sonic-date></sonic-date>
10
- </template>
11
- </sonic-code>
12
-
13
- ## Now
14
-
15
- Displays the **current date**.
7
+ `date` is in **seconds**, not milliseconds. `date_string` accepts anything `new Date()` parses: prefer ISO 8601 with an explicit offset. `now` shows the current date.
16
8
 
17
9
  <sonic-code>
18
10
  <template>
19
- <sonic-date now></sonic-date>
20
- </template>
21
- </sonic-code>
22
-
23
-
24
- ## Date
25
-
26
- Displays a date from a **timestamp**.
27
-
28
- <sonic-code>
29
- <template>
30
- <sonic-date date= "1640265629"></sonic-date>
31
- </template>
32
- </sonic-code>
33
-
34
- ## Date_string
35
-
36
- Displays a date from a **string**.
37
-
38
- <sonic-code>
39
- <template>
40
- <sonic-date date_string="July 20, 69 20:17:40 GMT+00:00"></sonic-date>
41
- </template>
42
- </sonic-code>
43
-
44
- ## Start_date / end_date
45
-
46
- Displays a period of time **from start_date to end_date**.
47
- When by itself **start_date** will act as **date**
48
- if a **start_date is not specified** it will be set by the **current date**.
49
- if the **end_date is anterior** to start date date it will be **used as the start_date**.
50
-
51
- <sonic-code>
52
- <template>
53
- <!-- from start_date to end_date -->
54
- <sonic-date start_date="1640265629" end_date= "1640365629"></sonic-date>
55
- <br>
56
- <!-- start_date is not specified -->
57
- <sonic-date end_date= "2640365629"></sonic-date>
58
- <br>
59
- <!-- end_date is anterior -->
60
- <sonic-date end_date= "640365629"></sonic-date>
61
- </template>
62
- </sonic-code>
63
-
64
-
65
- ## Start_date_string / end_date_string
66
-
67
- <sonic-code>
68
- <template>
69
- <!-- from start_date to end_date -->
70
- <sonic-date date_string="July 20, 90 20:17:40 GMT+00:00" end_date_string= "June 20, 94 20:17:40 GMT+00:00"></sonic-date>
71
- <br>
72
- <!-- start_date is not specified -->
73
- <sonic-date end_date_string= "May 20, 34 20:17:40 GMT+00:00"></sonic-date>
74
- <br>
75
- <!-- end_date is anterior -->
76
- <sonic-date end_date_string= "April 20, 06 20:17:40 GMT+00:00"></sonic-date>
77
- </template>
78
- </sonic-code>
79
-
80
- ## Wording_billet_periode_validite
81
-
82
- <sonic-code>
83
- <template>
84
- <sonic-date wording_billet_periode_validite= "À partir du %s jusqu'au %s" start_date="1640265629" end_date= "1640365629"></sonic-date>
11
+ <div class="grid gap-2">
12
+ <div>Departure: <sonic-date date="1781514000" language="en"></sonic-date></div>
13
+ <div>Arrival: <sonic-date date_string="2026-06-15T12:45:00Z" language="en"></sonic-date></div>
14
+ <div>Now: <sonic-date now language="en"></sonic-date></div>
15
+ </div>
85
16
  </template>
86
17
  </sonic-code>
87
18
 
19
+ ## Date range
88
20
 
89
- ## Weekday
90
-
91
- <sonic-code>
92
- <template>
93
- <b>narrow : </b>
94
- <sonic-date weekday="narrow" now></sonic-date>
95
- <br>
96
- <b>short (default) : </b>
97
- <sonic-date weekday="short" now></sonic-date>
98
- <br>
99
- <b>long : </b>
100
- <sonic-date weekday="long" now></sonic-date>
101
- <br>
102
- <b>hidden : </b>
103
- <sonic-date weekday="hidden" now></sonic-date>
104
- </template>
105
- </sonic-code>
21
+ Set `start_date` and `end_date` (or their `_string` variants). On two different days, only the dates are shown, with the "from … to …" wording. On the same day, the hours are kept. `hide_hours` drops them anyway.
106
22
 
107
- ## Day
23
+ Without a start, the range starts now. If the end is before the start, the two are swapped.
108
24
 
109
25
  <sonic-code>
110
26
  <template>
111
- <b>numeric : </b>
112
- <sonic-date day="numeric" date_string="July 01, 69"></sonic-date>
113
- <br>
114
- <b>2-digit (default) : </b>
115
- <sonic-date day="2-digit" date_string="July 01, 69"></sonic-date>
27
+ <div class="grid gap-2">
28
+ <sonic-date start_date_string="2026-06-15T09:00:00Z" end_date_string="2026-06-22T18:00:00Z" language="en" wording_billet_periode_validite="From %s to %s"></sonic-date>
29
+ <sonic-date start_date_string="2026-06-15T09:00:00Z" end_date_string="2026-06-15T12:45:00Z" language="en"></sonic-date>
30
+ <sonic-date start_date_string="2026-06-15T09:00:00Z" end_date_string="2026-06-15T12:45:00Z" language="en" hide_hours></sonic-date>
31
+ </div>
116
32
  </template>
117
33
  </sonic-code>
118
34
 
119
- ## Month
35
+ ## Range wording
120
36
 
121
- <sonic-code>
122
- <template>
123
- <b>numeric : </b>
124
- <sonic-date month="numeric" now></sonic-date>
125
- <br>
126
- <b>2-digit : </b>
127
- <sonic-date month="2-digit" now></sonic-date>
128
- <br>
129
- <b>narrow : </b>
130
- <sonic-date month="narrow" now></sonic-date>
131
- <br>
132
- <b>short (default) : </b>
133
- <sonic-date month="short" now></sonic-date>
134
- <br>
135
- <b>long : </b>
136
- <sonic-date month="long" now></sonic-date>
137
- </template>
138
- </sonic-code>
139
-
140
- ## Year
37
+ `wording_billet_periode_validite` holds the range wording, with one `%s` per date. It defaults to the French `Du %s au %s`, whatever the language: **set it for every non-French page**.
141
38
 
142
39
  <sonic-code>
143
40
  <template>
144
- <b>numeric (default) : </b>
145
- <sonic-date year="numeric" now></sonic-date>
146
- <br>
147
- <b>2-digit : </b>
148
- <sonic-date year="2-digit" now></sonic-date>
41
+ <sonic-date start_date_string="2026-06-15" end_date_string="2026-06-22" language="en" wording_billet_periode_validite="Valid from %s until %s"></sonic-date>
149
42
  </template>
150
43
  </sonic-code>
151
44
 
152
- ## Hour
153
-
154
- <sonic-code>
155
- <template>
156
- <b>numeric : </b>
157
- <sonic-date hour="numeric" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
158
- <br>
159
- <b>2-digit (default) : </b>
160
- <sonic-date hour="2-digit" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
161
- <br>
162
- <b>hidden : </b>
163
- <sonic-date hour="hidden" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
164
- </template>
165
- </sonic-code>
45
+ ## Format options
166
46
 
167
- ## Minute
47
+ Defaults: `weekday="short"` · `day="2-digit"` · `month="short"` · `year="numeric"` · `hour="2-digit"` · `minute="2-digit"`, 24-hour clock, no era. `hidden` removes a part.
168
48
 
169
49
  <sonic-code>
170
50
  <template>
171
- <b>numeric : </b>
172
- <sonic-date minute="numeric" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
173
- <br>
174
- <b>2-digit (default) : </b>
175
- <sonic-date minute="2-digit" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
176
- <br>
177
- <b>hidden : </b>
178
- <sonic-date minute="hidden" date_string= "June 20, 04 02:06:02 GMT+00:00"></sonic-date>
51
+ <div class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm">
52
+ <code>default</code><sonic-date date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
53
+ <code>weekday="long"</code><sonic-date weekday="long" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
54
+ <code>weekday="narrow"</code><sonic-date weekday="narrow" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
55
+ <code>weekday="hidden"</code><sonic-date weekday="hidden" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
56
+ <code>day="numeric"</code><sonic-date day="numeric" date_string="2026-06-05T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
57
+ <code>month="long"</code><sonic-date month="long" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
58
+ <code>month="narrow"</code><sonic-date month="narrow" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
59
+ <code>month="numeric"</code><sonic-date month="numeric" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
60
+ <code>month="2-digit"</code><sonic-date month="2-digit" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
61
+ <code>year="2-digit"</code><sonic-date year="2-digit" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
62
+ <code>hour="numeric"</code><sonic-date hour="numeric" date_string="2026-06-15T07:05:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
63
+ <code>hour12</code><sonic-date hour12 date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
64
+ <code>hour="hidden" minute="hidden"</code><sonic-date hour="hidden" minute="hidden" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
65
+ <code>era="short"</code><sonic-date era="short" date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" language="en"></sonic-date>
66
+ </div>
179
67
  </template>
180
68
  </sonic-code>
181
69
 
182
- ## Language
70
+ ## Language
183
71
 
184
- <sonic-button href="https://www.w3schools.com/tags/ref_language_codes.asp" target="_blank" type="info" size="sm">ISO 639-1 Language Codes</sonic-button>
72
+ With no `language`, the component follows `<html lang>` and updates when it changes. Pass a BCP 47 tag to force one.
185
73
 
186
74
  <sonic-code>
187
75
  <template>
188
- <b>fr : </b>
189
- <sonic-date language="fr" now></sonic-date>
190
- <br>
191
- <b>en : </b>
192
- <sonic-date language="en" now></sonic-date>
193
- <br>
194
- <b>zh : </b>
195
- <sonic-date language="zh" now></sonic-date>
196
- <br>
197
- <b>ja : </b>
198
- <sonic-date language="ja" now></sonic-date>
76
+ <div class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm">
77
+ <code>en</code><sonic-date language="en" date_string="2026-06-15T09:00:00Z"></sonic-date>
78
+ <code>fr</code><sonic-date language="fr" date_string="2026-06-15T09:00:00Z"></sonic-date>
79
+ <code>ja</code><sonic-date language="ja" date_string="2026-06-15T09:00:00Z"></sonic-date>
80
+ </div>
199
81
  </template>
200
82
  </sonic-code>
201
83
 
202
- ## Time_zone
203
-
204
- For the list of supported timeZones, run <b class="text-info">Intl.supportedValuesOf('timeZone')</b> in the console
205
-
206
- <sonic-code>
207
- <template>
208
- <b>Europe/London : </b>
209
- <sonic-date time_zone="Europe/London" now></sonic-date>
210
- <br>
211
- <b>Europe/Paris : </b>
212
- <sonic-date time_zone="Europe/Paris" now></sonic-date>
213
- <br>
214
- <b>America/Tijuana : </b>
215
- <sonic-date time_zone="America/Tijuana" now></sonic-date>
216
- </template>
217
- </sonic-code>
84
+ ## Time zone
218
85
 
219
- ## Era
86
+ With no `time_zone`, dates use the browser time zone. Pass an IANA name (`Intl.supportedValuesOf("timeZone")` lists them) to show local airport time.
220
87
 
221
88
  <sonic-code>
222
89
  <template>
223
- <b>narrow : </b>
224
- <sonic-date era="narrow" now></sonic-date>
225
- <br>
226
- <b>short : </b>
227
- <sonic-date era="short" now></sonic-date>
228
- <br>
229
- <b>long : </b>
230
- <sonic-date era="long" now></sonic-date>
90
+ <div class="grid gap-2">
91
+ <div>CN 001 departs CDG at <sonic-date date_string="2026-06-15T09:00:00Z" time_zone="Europe/Paris" weekday="hidden" language="en"></sonic-date> (Paris)</div>
92
+ <div>and lands at JFK at <sonic-date date_string="2026-06-15T12:45:00Z" time_zone="America/New_York" weekday="hidden" language="en"></sonic-date> (New York)</div>
93
+ </div>
231
94
  </template>
232
95
  </sonic-code>
233
96
 
234
- ## .renderIf
235
-
236
- <sonic-alert status="error" background>Deprecated</sonic-alert>
237
-
238
- <sonic-code>
239
- <template>
240
- <b>True statement : </b>
241
- <sonic-date data-bind ::render-if="|10>2" now></sonic-date>
242
- <br>
243
- <b>False statement : </b>
244
- <sonic-date data-bind ::render-if="|10<2" now></sonic-date>
245
- </template>
246
- </sonic-code>
97
+ ## Custom parts
247
98
 
248
- ## DesignMode
99
+ A child `<template data-value="<part>">` wraps a part in your own markup: `weekday` · `day` · `month` · `year` · `hour` · `minute` · `literal`, plus `from` and `to` in ranges. An empty element receives the part value; a non-empty one replaces it. `designMode` drops the leading "from" word and the commas, for stacked layouts. Add `noShadowDom` so page styles reach the parts.
249
100
 
250
101
  <sonic-code>
251
102
  <template>
252
- <div class="relative max-w-lg rounded-lg overflow-hidden">
253
- <div class="absolute top-0 h-1/2 w-full bg-gradient-to-b from-[rgba(0,0,10,.2)] z-10 "></div>
103
+ <div class="relative max-w-sm rounded-lg overflow-hidden">
254
104
  <sonic-date
255
105
  designMode
256
106
  noShadowDom
257
- start_date= "1640265629"
258
- end_date= "1640365629"
259
- language= "fr"
260
- wording_billet_periode_validite= "Du %s au %s"
261
- year= "numeric"
262
- month= "short"
263
- weekday= "short"
264
- hour= "2-digit"
265
- minute= "2-digit"
266
- class="py-4 drop-shadow-lg text-contrast-content p-4 inline-block text-center absolute left-0 z-20 text-sm"
107
+ start_date_string="2026-06-15"
108
+ end_date_string="2026-06-22"
109
+ language="en"
110
+ wording_billet_periode_validite="From %s to %s"
111
+ class="absolute top-0 left-0 z-10 p-4 text-center text-sm text-white drop-shadow-lg"
267
112
  >
268
- <template data-value="weekday">
269
- <span class="hidden"></span>
270
- </template>
271
- <template data-value="day">
272
- <span class="text-4xl block uppercase leading-none font-bold"></span>
273
- </template>
274
- <template data-value="month">
275
- <span class="text-xl block uppercase leading-tight font-bold"></span>
276
- </template>
277
- <template data-value="year">
278
- <span class="text-lg mb-1 font-bold block uppercase leading-tight "></span>
279
- </template>
280
- <template data-value="to">
281
- <span class="font-medium block my-1 text-3xl leading-none">↓</span>
282
- </template>
113
+ <template data-value="weekday"><span class="hidden"></span></template>
114
+ <template data-value="day"><span class="block text-4xl font-bold leading-none"></span></template>
115
+ <template data-value="month"><span class="block text-xl font-bold uppercase leading-tight"></span></template>
116
+ <template data-value="year"><span class="block text-lg font-bold leading-tight"></span></template>
117
+ <template data-value="to"><span class="block my-1 text-3xl leading-none">↓</span></template>
283
118
  </sonic-date>
284
- <sonic-image
285
- ratio="1/1" src="https://picsum.photos/id/237/700/700">
286
- </sonic-image>
119
+ <sonic-image src="img/concorde/plane_03.jpg" alt="Concorde specifications board" ratio="1/1" cover></sonic-image>
287
120
  </div>
288
121
  </template>
289
122
  </sonic-code>
290
123
 
124
+ ## API reference
125
+
126
+ | Attribute | Values | Description |
127
+ |-----------|--------|-------------|
128
+ | `date` | number | Unix timestamp in seconds |
129
+ | `date_string` | string | Date parsed with `new Date()`. Overrides `date` |
130
+ | `start_date` / `start_date_string` | number / string | Range start. Overrides `date` |
131
+ | `end_date` / `end_date_string` | number / string | Range end. Swapped with the start when earlier |
132
+ | `now` | boolean | Uses the current date when no start is set |
133
+ | `hide_hours` | boolean | Hides hours and minutes in a same-day range |
134
+ | `weekday` | `narrow` · `short` · `long` · `hidden` (default `short`) | Weekday format |
135
+ | `day` | `numeric` · `2-digit` (default `2-digit`) | Day format |
136
+ | `month` | `numeric` · `2-digit` · `narrow` · `short` · `long` (default `short`) | Month format |
137
+ | `year` | `numeric` · `2-digit` (default `numeric`) | Year format |
138
+ | `hour` | `numeric` · `2-digit` · `hidden` (default `2-digit`) | Hour format |
139
+ | `minute` | `numeric` · `2-digit` · `hidden` (default `2-digit`) | Minute format |
140
+ | `hour12` | boolean | 12-hour clock. Default is 24-hour |
141
+ | `era` | `narrow` · `short` · `long` | Shows the era. Hidden by default |
142
+ | `language` | BCP 47 tag | Locale. Defaults to `<html lang>` |
143
+ | `time_zone` | IANA name | Time zone. Defaults to the browser one |
144
+ | `wording_billet_periode_validite` | string with two `%s` (default `Du %s au %s`) | Wording of a multi-day range |
145
+ | `designMode` | boolean | Removes the "from" word and commas |
146
+ | `noShadowDom` | boolean | Renders in light DOM so page styles apply to the parts |
147
+ | `templates` | `HTMLTemplateElement[]` (property) | Part templates, instead of child `<template>` elements |
148
+ | `renderIf` | boolean | Deprecated: wrap the date in [sonic-if](/core/components/functional/if) instead |
149
+
150
+ No slots. Child `<template data-value>` elements customise the parts.