@supersoniks/concorde 5.1.1 → 5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/concorde-docs/SKILL.md +153 -0
- package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
- package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
- package/.agents/skills/concorde-docs/templates/guide.md +25 -0
- package/.tmp-cem/custom-elements.json +503 -503
- package/PLAN-DOCS-AGENTS.md +80 -0
- package/README.md +3 -3
- package/ai/skills/concorde/SKILL.md +1 -1
- package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
- package/ai/skills/concorde-theme/SKILL.md +1 -1
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +1 -1
- package/concorde-core.es.js +1 -1
- package/dist/concorde-core.bundle.js +1 -1
- package/dist/concorde-core.es.js +1 -1
- package/docs/.htaccess +75 -0
- package/docs/404.html +15 -0
- package/docs/404.md +5 -0
- package/docs/assets/{index-Bb-_LRyY.js → index-BgG6FFPt.js} +2582 -3097
- package/docs/assets/index-x89XINSG.css +1 -0
- package/docs/core/components/functional/date/date.html +211 -0
- package/docs/core/components/functional/date/date.md +150 -0
- package/docs/core/components/functional/fetch/fetch.html +180 -0
- package/docs/core/components/functional/fetch/fetch.md +108 -0
- package/docs/core/components/functional/if/if.html +65 -0
- package/docs/core/components/functional/if/if.md +34 -0
- package/docs/core/components/functional/jsonata/jsonata.html +110 -0
- package/docs/core/components/functional/jsonata/jsonata.md +61 -0
- package/docs/core/components/functional/list/list.html +198 -0
- package/docs/core/components/functional/list/list.md +121 -0
- package/docs/core/components/functional/mix/mix.html +78 -0
- package/docs/core/components/functional/mix/mix.md +46 -0
- package/docs/core/components/functional/queue/queue.html +155 -0
- package/docs/core/components/functional/queue/queue.md +51 -0
- package/docs/core/components/functional/router/router.html +154 -0
- package/docs/core/components/functional/router/router.md +93 -0
- package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
- package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/core/components/functional/sdui/sdui.html +397 -0
- package/docs/core/components/functional/sdui/sdui.md +307 -0
- package/docs/core/components/functional/states/states.html +141 -0
- package/docs/core/components/functional/states/states.md +112 -0
- package/docs/core/components/functional/submit/submit.html +178 -0
- package/docs/core/components/functional/submit/submit.md +106 -0
- package/docs/core/components/functional/subscriber/subscriber.html +68 -0
- package/docs/core/components/functional/subscriber/subscriber.md +91 -0
- package/docs/core/components/functional/translation/translation.html +60 -0
- package/docs/core/components/functional/translation/translation.md +38 -0
- package/docs/core/components/functional/value/value.html +81 -0
- package/docs/core/components/functional/value/value.md +47 -0
- package/docs/core/components/ui/alert/alert.html +201 -0
- package/docs/core/components/ui/alert/alert.md +186 -0
- package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
- package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/core/components/ui/badge/badge.html +197 -0
- package/docs/core/components/ui/badge/badge.md +181 -0
- package/docs/core/components/ui/button/button.html +309 -0
- package/docs/core/components/ui/button/button.md +216 -0
- package/docs/core/components/ui/captcha/captcha.html +80 -0
- package/docs/core/components/ui/captcha/captcha.md +56 -0
- package/docs/core/components/ui/card/card.html +254 -0
- package/docs/core/components/ui/card/card.md +215 -0
- package/docs/core/components/ui/divider/divider.html +144 -0
- package/docs/core/components/ui/divider/divider.md +126 -0
- package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
- package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
- package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
- package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
- package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
- package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
- package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
- package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
- package/docs/core/components/ui/form/input/input.html +235 -0
- package/docs/core/components/ui/form/input/input.md +142 -0
- package/docs/core/components/ui/form/radio/radio.html +144 -0
- package/docs/core/components/ui/form/radio/radio.md +78 -0
- package/docs/core/components/ui/form/select/select.html +178 -0
- package/docs/core/components/ui/form/select/select.md +86 -0
- package/docs/core/components/ui/form/switch/switch.html +146 -0
- package/docs/core/components/ui/form/switch/switch.md +80 -0
- package/docs/core/components/ui/form/textarea/textarea.html +162 -0
- package/docs/core/components/ui/form/textarea/textarea.md +82 -0
- package/docs/core/components/ui/group/group.html +113 -0
- package/docs/core/components/ui/group/group.md +77 -0
- package/docs/core/components/ui/icon/icon.html +223 -0
- package/docs/core/components/ui/icon/icon.md +214 -0
- package/docs/core/components/ui/image/image.html +194 -0
- package/docs/core/components/ui/image/image.md +167 -0
- package/docs/core/components/ui/link/link.html +101 -0
- package/docs/core/components/ui/link/link.md +81 -0
- package/docs/core/components/ui/loader/loader.html +114 -0
- package/docs/core/components/ui/loader/loader.md +87 -0
- package/docs/core/components/ui/menu/menu.html +395 -0
- package/docs/core/components/ui/menu/menu.md +370 -0
- package/docs/core/components/ui/modal/modal.html +324 -0
- package/docs/core/components/ui/modal/modal.md +211 -0
- package/docs/core/components/ui/pop/pop.html +250 -0
- package/docs/core/components/ui/pop/pop.md +216 -0
- package/docs/core/components/ui/progress/progress.html +132 -0
- package/docs/core/components/ui/progress/progress.md +109 -0
- package/docs/core/components/ui/table/table.html +333 -0
- package/docs/core/components/ui/table/table.md +267 -0
- package/docs/core/components/ui/theme/theme.html +116 -0
- package/docs/core/components/ui/theme/theme.md +97 -0
- package/docs/core/components/ui/toast/toast.html +185 -0
- package/docs/core/components/ui/toast/toast.md +147 -0
- package/docs/core/components/ui/tooltip/tooltip.html +112 -0
- package/docs/core/components/ui/tooltip/tooltip.md +89 -0
- package/docs/docs/decorators/ancestor-attribute.html +71 -0
- package/docs/docs/decorators/ancestor-attribute.md +59 -0
- package/docs/docs/decorators/auto-subscribe.html +61 -0
- package/docs/docs/decorators/auto-subscribe.md +40 -0
- package/docs/docs/decorators/bind.html +86 -0
- package/docs/docs/decorators/bind.md +77 -0
- package/docs/docs/decorators/get.html +166 -0
- package/docs/docs/decorators/get.md +160 -0
- package/docs/docs/decorators/handle.html +139 -0
- package/docs/docs/decorators/handle.md +119 -0
- package/docs/docs/decorators/on-assign.html +72 -0
- package/docs/docs/decorators/on-assign.md +63 -0
- package/docs/docs/decorators/patch.html +76 -0
- package/docs/docs/decorators/patch.md +44 -0
- package/docs/docs/decorators/post.html +150 -0
- package/docs/docs/decorators/post.md +134 -0
- package/docs/docs/decorators/publish.html +74 -0
- package/docs/docs/decorators/publish.md +56 -0
- package/docs/docs/decorators/put.html +83 -0
- package/docs/docs/decorators/put.md +51 -0
- package/docs/docs/decorators/subscribe.html +91 -0
- package/docs/docs/decorators/subscribe.md +87 -0
- package/docs/docs/decorators/wait-for-ancestors.html +82 -0
- package/docs/docs/decorators/wait-for-ancestors.md +76 -0
- package/docs/docs/directives/sub.html +79 -0
- package/docs/docs/directives/sub.md +75 -0
- package/docs/docs/directives/t.html +91 -0
- package/docs/docs/directives/t.md +73 -0
- package/docs/docs/getting-started/ai-agents.html +174 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
- package/docs/docs/getting-started/components.html +27 -0
- package/docs/docs/getting-started/create-a-component.html +108 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
- package/docs/docs/getting-started/dataFlow.html +174 -0
- package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +17 -18
- package/docs/docs/getting-started/installation.html +69 -0
- package/docs/docs/getting-started/installation.md +36 -0
- package/docs/docs/getting-started/my-first-component.html +180 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
- package/docs/docs/getting-started/start.html +47 -0
- package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
- package/docs/docs/getting-started/theming.html +334 -0
- package/docs/docs/index.html +99 -0
- package/docs/docs/misc/api-configuration.html +149 -0
- package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
- package/docs/docs/misc/dataProviderKey.html +136 -0
- package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
- package/docs/docs/misc/docs-mock-api.html +155 -0
- package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
- package/docs/docs/misc/dynamic-path.html +181 -0
- package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
- package/docs/docs/misc/endpoint.html +51 -0
- package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
- package/docs/docs/misc/html-integration.html +45 -0
- package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
- package/docs/docs-mock-api-sw.js +58 -223
- package/docs/docs-mock-api-sw.js.map +4 -4
- package/docs/hubs/decorators.html +443 -0
- package/docs/hubs/form-components.html +404 -0
- package/docs/hubs/remote-data.html +371 -0
- package/docs/img/archive/concorde-001-2cv.webp +0 -0
- package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
- package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
- package/docs/img/archive/credits.json +28 -0
- package/docs/img/concorde/plane_01.jpg +0 -0
- package/docs/img/concorde/plane_02.jpg +0 -0
- package/docs/img/concorde/plane_03.jpg +0 -0
- package/docs/img/concorde/plane_04.jpg +0 -0
- package/docs/img/concorde/plane_05.jpg +0 -0
- package/docs/img/concorde/plane_06.jpg +0 -0
- package/docs/img/concorde/plane_07.jpg +0 -0
- package/docs/img/concorde/plane_08.jpg +0 -0
- package/docs/img/concorde/plane_09.jpg +0 -0
- package/docs/img/concorde/plane_10.jpg +0 -0
- package/docs/img/concorde/plane_11.jpg +0 -0
- package/docs/img/concorde/plane_12.jpg +0 -0
- package/docs/img/concorde/plane_13.jpg +0 -0
- package/docs/index.html +95 -68
- package/docs/index.md +22 -0
- package/docs/llms-full.txt +5795 -0
- package/docs/llms.txt +106 -0
- package/docs/robots.txt +11 -10
- package/docs/sitemap.xml +237 -0
- package/docs/src/core/components/functional/date/date.md +150 -0
- package/docs/src/core/components/functional/fetch/fetch.md +108 -0
- package/docs/src/core/components/functional/if/if.md +34 -0
- package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
- package/docs/src/core/components/functional/list/list.md +121 -0
- package/docs/src/core/components/functional/mix/mix.md +46 -0
- package/docs/src/core/components/functional/queue/queue.md +51 -0
- package/docs/src/core/components/functional/router/router.md +93 -0
- package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
- package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
- package/docs/src/core/components/functional/sdui/default-library.json +108 -0
- package/docs/src/core/components/functional/sdui/example.json +32 -0
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/src/core/components/functional/sdui/sdui.md +307 -0
- package/docs/src/core/components/functional/states/states.md +112 -0
- package/docs/src/core/components/functional/submit/submit.md +106 -0
- package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
- package/docs/src/core/components/functional/translation/translation.md +38 -0
- package/docs/src/core/components/functional/value/value.md +47 -0
- package/docs/src/core/components/ui/alert/alert.md +186 -0
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/src/core/components/ui/badge/badge.md +181 -0
- package/docs/src/core/components/ui/button/button.md +216 -0
- package/docs/src/core/components/ui/captcha/captcha.md +56 -0
- package/docs/src/core/components/ui/card/card.md +215 -0
- package/docs/src/core/components/ui/divider/divider.md +126 -0
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
- package/docs/src/core/components/ui/form/input/input.md +142 -0
- package/docs/src/core/components/ui/form/radio/radio.md +78 -0
- package/docs/src/core/components/ui/form/select/select.md +86 -0
- package/docs/src/core/components/ui/form/switch/switch.md +80 -0
- package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
- package/docs/src/core/components/ui/group/group.md +77 -0
- package/docs/src/core/components/ui/icon/icon.md +214 -0
- package/docs/src/core/components/ui/icon/icons.json +1 -0
- package/docs/src/core/components/ui/image/image.md +167 -0
- package/docs/src/core/components/ui/link/link.md +81 -0
- package/docs/src/core/components/ui/loader/loader.md +87 -0
- package/docs/src/core/components/ui/menu/menu.md +370 -0
- package/docs/src/core/components/ui/modal/modal.md +211 -0
- package/docs/src/core/components/ui/pop/pop.md +216 -0
- package/docs/src/core/components/ui/progress/progress.md +109 -0
- package/docs/src/core/components/ui/table/table.md +267 -0
- package/docs/src/core/components/ui/theme/theme.md +97 -0
- package/docs/src/core/components/ui/toast/toast.md +147 -0
- package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
- package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
- package/docs/src/docs/decorators/auto-subscribe.md +40 -0
- package/docs/src/docs/decorators/bind.md +77 -0
- package/docs/src/docs/decorators/get.md +160 -0
- package/docs/src/docs/decorators/handle.md +119 -0
- package/docs/src/docs/decorators/on-assign.md +63 -0
- package/docs/src/docs/decorators/patch.md +44 -0
- package/docs/src/docs/decorators/post.md +134 -0
- package/docs/src/docs/decorators/publish.md +56 -0
- package/docs/src/docs/decorators/put.md +51 -0
- package/docs/src/docs/decorators/subscribe.md +87 -0
- package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
- package/docs/src/docs/directives/sub.md +75 -0
- package/docs/src/docs/directives/t.md +73 -0
- package/docs/src/docs/getting-started/ai-agents.md +76 -0
- package/docs/src/docs/getting-started/components.md +5 -0
- package/docs/src/docs/getting-started/create-a-component.md +136 -0
- package/docs/src/docs/getting-started/dataFlow.md +87 -0
- package/docs/src/docs/getting-started/installation.md +36 -0
- package/docs/src/docs/getting-started/my-first-component.md +227 -0
- package/docs/src/docs/getting-started/start.md +35 -0
- package/docs/src/docs/getting-started/theming.md +253 -0
- package/docs/src/docs/misc/api-configuration.md +79 -0
- package/docs/src/docs/misc/dataProviderKey.md +168 -0
- package/docs/src/docs/misc/docs-mock-api.md +62 -0
- package/docs/src/docs/misc/dynamic-path.md +71 -0
- package/docs/src/docs/misc/endpoint.md +45 -0
- package/docs/src/docs/misc/html-integration.md +14 -0
- package/docs/src/docs/search/docs-search.json +10287 -0
- package/docs/src/tag-list.json +1 -0
- package/docs/src/tsconfig-model.json +23 -0
- package/docs/src/tsconfig.json +1353 -0
- package/index.html +68 -5
- package/package.json +1 -1
- package/public/docs-mock-api-sw.js +58 -223
- package/public/docs-mock-api-sw.js.map +4 -4
- package/public/img/concorde/plane_01.jpg +0 -0
- package/public/img/concorde/plane_02.jpg +0 -0
- package/public/img/concorde/plane_03.jpg +0 -0
- package/public/img/concorde/plane_04.jpg +0 -0
- package/public/img/concorde/plane_05.jpg +0 -0
- package/public/img/concorde/plane_06.jpg +0 -0
- package/public/img/concorde/plane_07.jpg +0 -0
- package/public/img/concorde/plane_08.jpg +0 -0
- package/public/img/concorde/plane_09.jpg +0 -0
- package/public/img/concorde/plane_10.jpg +0 -0
- package/public/img/concorde/plane_11.jpg +0 -0
- package/public/img/concorde/plane_12.jpg +0 -0
- package/public/img/concorde/plane_13.jpg +0 -0
- package/public/robots.txt +11 -10
- package/scripts/docs-markdown-vite-plugin.ts +37 -0
- package/scripts/docs-public-url.mjs +50 -0
- package/scripts/docs.htaccess +75 -0
- package/scripts/generate-crawl-docs.mjs +207 -116
- package/scripts/generate-crawl-docs.test.mjs +124 -0
- package/scripts/post-build-docs.js +34 -50
- package/src/core/components/functional/date/date.md +91 -231
- package/src/core/components/functional/fetch/fetch.md +66 -83
- package/src/core/components/functional/if/if.md +28 -3
- package/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/src/core/components/functional/list/list.md +99 -43
- package/src/core/components/functional/mix/mix.md +31 -26
- package/src/core/components/functional/queue/queue.demo.ts +10 -7
- package/src/core/components/functional/queue/queue.md +40 -61
- package/src/core/components/functional/router/router.demo.ts +16 -16
- package/src/core/components/functional/router/router.md +64 -65
- package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/src/core/components/functional/sdui/component-catalog.json +1 -1
- package/src/core/components/functional/sdui/example.json +19 -86
- package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
- package/src/core/components/functional/sdui/sdui.md +187 -358
- package/src/core/components/functional/states/states.demo.ts +21 -22
- package/src/core/components/functional/states/states.md +86 -61
- package/src/core/components/functional/states/states.ts +1 -1
- package/src/core/components/functional/submit/submit.md +64 -72
- package/src/core/components/functional/translation/translation.md +38 -0
- package/src/core/components/functional/value/value.md +34 -22
- package/src/core/components/ui/alert/alert.md +48 -58
- package/src/core/components/ui/badge/badge.md +27 -34
- package/src/core/components/ui/button/button.md +139 -106
- package/src/core/components/ui/captcha/captcha.md +17 -32
- package/src/core/components/ui/card/card.md +6 -6
- package/src/core/components/ui/divider/divider.md +8 -11
- package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
- package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
- package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
- package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
- package/src/core/components/ui/form/input/input.md +95 -95
- package/src/core/components/ui/form/radio/radio.md +55 -34
- package/src/core/components/ui/form/select/select.md +60 -45
- package/src/core/components/ui/form/switch/switch.md +57 -34
- package/src/core/components/ui/form/textarea/textarea.md +55 -38
- package/src/core/components/ui/group/group.md +35 -33
- package/src/core/components/ui/icon/icon.md +4 -4
- package/src/core/components/ui/image/image.md +41 -107
- package/src/core/components/ui/link/link.md +6 -6
- package/src/core/components/ui/loader/loader.md +30 -55
- package/src/core/components/ui/menu/menu.md +27 -27
- package/src/core/components/ui/modal/modal.md +72 -96
- package/src/core/components/ui/pop/pop.md +80 -158
- package/src/core/components/ui/progress/progress.md +2 -2
- package/src/core/components/ui/table/table.md +91 -255
- package/src/core/components/ui/theme/theme.md +11 -36
- package/src/core/components/ui/toast/toast.md +48 -117
- package/src/core/components/ui/tooltip/tooltip.md +27 -62
- package/src/core/utils/LocationHandler.spec.ts +80 -0
- package/src/core/utils/LocationHandler.ts +5 -9
- package/src/docs/components/docs-demo-sources.ts +55 -140
- package/src/docs/components/docs-lit-demo.ts +1 -3
- package/src/docs/components/docs-source-link.ts +0 -82
- package/src/docs/decorators/ancestor-attribute.md +59 -0
- package/src/docs/decorators/auto-subscribe.md +40 -0
- package/src/docs/decorators/bind.md +77 -0
- package/src/docs/decorators/get.md +160 -0
- package/src/docs/decorators/handle.md +119 -0
- package/src/docs/decorators/on-assign.md +63 -0
- package/src/docs/decorators/patch.md +44 -0
- package/src/docs/decorators/post.md +134 -0
- package/src/docs/decorators/publish.md +56 -0
- package/src/docs/decorators/put.md +51 -0
- package/src/docs/decorators/subscribe.md +87 -0
- package/src/docs/decorators/wait-for-ancestors.md +76 -0
- package/src/docs/directives/sub.md +75 -0
- package/src/docs/directives/t.md +73 -0
- package/src/docs/docs-location.spec.ts +46 -0
- package/src/docs/docs-location.ts +123 -32
- package/src/docs/docs.ts +1 -2
- package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
- package/src/docs/example/decorators-demo-geo.ts +30 -19
- package/src/docs/example/decorators-demo-post.ts +88 -186
- package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
- package/src/docs/example/decorators-demo.ts +85 -98
- package/src/docs/example/docs-api-config-demos.ts +19 -20
- package/src/docs/example/docs-flight-demos.ts +147 -0
- package/src/docs/example/docs-jsonata-demos.ts +52 -52
- package/src/docs/example/docs-list-demos.ts +43 -123
- package/src/docs/example/docs-provider-keys.ts +21 -28
- package/src/docs/example/docs-queue-demos.ts +37 -77
- package/src/docs/example/docs-router-demos.ts +20 -25
- package/src/docs/example/docs-submit-demos.ts +48 -48
- package/src/docs/example/docs-toggle-demos.ts +4 -3
- package/src/docs/getting-started/ai-agents.md +76 -0
- package/src/docs/getting-started/components.md +5 -0
- package/src/docs/getting-started/create-a-component.md +136 -0
- package/src/docs/getting-started/dataFlow.md +87 -0
- package/src/docs/getting-started/installation.md +36 -0
- package/src/docs/getting-started/my-first-component.md +227 -0
- package/src/docs/getting-started/start.md +35 -0
- package/src/docs/getting-started/theming.md +253 -0
- package/src/docs/header/header.ts +11 -6
- package/src/docs/home/catalog.ts +1 -1
- package/src/docs/home/home.ts +17 -10
- package/src/docs/layout.ts +12 -13
- package/src/docs/misc/api-configuration.md +79 -0
- package/src/docs/misc/dataProviderKey.md +168 -0
- package/src/docs/misc/docs-mock-api.md +62 -0
- package/src/docs/misc/dynamic-path.md +71 -0
- package/src/docs/misc/endpoint.md +45 -0
- package/src/docs/misc/html-integration.md +14 -0
- package/src/docs/mock-api/api-config-mock.ts +5 -0
- package/src/docs/mock-api/fixtures.ts +0 -278
- package/src/docs/mock-api/flights.ts +89 -0
- package/src/docs/mock-api/router.ts +3 -4
- package/src/docs/mock-api/urls.ts +1 -2
- package/src/docs/navigation/navigation.ts +82 -103
- package/src/docs/navigation/toc.ts +7 -4
- package/src/docs/search/docs-search.json +2845 -5110
- package/src/docs/search/markdown-renderer.ts +25 -7
- package/src/docs/search/page.ts +9 -6
- package/src/docs/search/search.ts +154 -122
- package/vite.config.mts +11 -2
- package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
- package/docs/assets/index-CD4WyL6o.css +0 -1
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
- package/src/docs/_core-concept/overview.md +0 -57
- package/src/docs/_core-concept/subscriber.md +0 -75
- package/src/docs/_decorators/ancestor-attribute.md +0 -128
- package/src/docs/_decorators/auto-subscribe.md +0 -202
- package/src/docs/_decorators/bind.md +0 -167
- package/src/docs/_decorators/get.md +0 -162
- package/src/docs/_decorators/handle.md +0 -175
- package/src/docs/_decorators/on-assign.md +0 -390
- package/src/docs/_decorators/patch.md +0 -70
- package/src/docs/_decorators/post.md +0 -146
- package/src/docs/_decorators/publish.md +0 -55
- package/src/docs/_decorators/put.md +0 -70
- package/src/docs/_decorators/subscribe.md +0 -100
- package/src/docs/_decorators/wait-for-ancestors.md +0 -163
- package/src/docs/_directives/sub.md +0 -91
- package/src/docs/_getting-started/concorde-manual-install.md +0 -133
- package/src/docs/_getting-started/concorde-outside.md +0 -33
- package/src/docs/_getting-started/my-first-subscriber.md +0 -120
- package/src/docs/_getting-started/pubsub.md +0 -37
- package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
- package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
- package/src/docs/example/docs-joke-demos.ts +0 -297
- /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
- /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
|
@@ -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
|
|
15
|
-
let stat = fs.statSync(
|
|
12
|
+
const filePath = dir + "/" + file;
|
|
13
|
+
let stat = fs.statSync(filePath);
|
|
16
14
|
if (stat && stat.isDirectory()) {
|
|
17
|
-
files = files.concat(listFiles(
|
|
15
|
+
files = files.concat(listFiles(filePath));
|
|
18
16
|
} else {
|
|
19
|
-
files.push(
|
|
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
|
-
*
|
|
27
|
-
*
|
|
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
|
-
|
|
33
|
+
const files = listFiles(src);
|
|
31
34
|
for (const file of files) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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/
|
|
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(); */
|
|
@@ -1,290 +1,150 @@
|
|
|
1
1
|
# Date
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
5
|
+
## Basic example
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
##
|
|
35
|
+
## Range wording
|
|
120
36
|
|
|
121
|
-
|
|
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
|
-
<
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
<
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
<
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
language=
|
|
260
|
-
wording_billet_periode_validite=
|
|
261
|
-
|
|
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
|
-
|
|
270
|
-
|
|
271
|
-
<template data-value="
|
|
272
|
-
|
|
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.
|