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