@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
|
@@ -1,13 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-build agent/SEO artifacts for the docs site.
|
|
3
|
+
*
|
|
4
|
+
* Canonical page URLs are the SPA pathnames (`/docs/…`, `/core/…`):
|
|
5
|
+
* - Browsers → index.html (pushState SPA)
|
|
6
|
+
* - Accept: text/markdown → sibling `*.md` (same pathname + `.md`)
|
|
7
|
+
* - Known crawler UAs → sibling `*.html` static pages (same path + `.html`)
|
|
8
|
+
*
|
|
9
|
+
* No redirects for old URL shapes (`/crawl/`, `/docs/…`, `…/name/name`).
|
|
10
|
+
*/
|
|
1
11
|
import fs from "fs";
|
|
2
12
|
import path from "path";
|
|
3
13
|
import { fileURLToPath } from "url";
|
|
4
14
|
import { marked } from "marked";
|
|
5
15
|
import { gfmHeadingId } from "marked-gfm-heading-id";
|
|
16
|
+
import { toPublicPath } from "./docs-public-url.mjs";
|
|
6
17
|
|
|
7
18
|
const SITE_ORIGIN = "https://concorde.supersoniks.org";
|
|
8
19
|
const SRC_DIR = path.resolve("src");
|
|
9
20
|
const DOCS_OUT = path.resolve("docs");
|
|
10
|
-
const CRAWL_DIR = path.join(DOCS_OUT, "crawl");
|
|
11
21
|
|
|
12
22
|
const SONIC_CODE_BLOCK_RE = /<sonic-code\b[\s\S]*?<\/sonic-code>/gi;
|
|
13
23
|
const DOC_HASH_LINK_RE = /#([^)\s"']+)\.md\/([^)\s"'#]+)/g;
|
|
@@ -48,28 +58,44 @@ function mdRelativePath(absPath) {
|
|
|
48
58
|
return path.relative(SRC_DIR, absPath).replace(/\\/g, "/");
|
|
49
59
|
}
|
|
50
60
|
|
|
51
|
-
function crawlHtmlPath(mdRel) {
|
|
52
|
-
return path.join("crawl", mdRel.replace(/\.mdx?$/, ".html")).replace(/\\/g, "/");
|
|
53
|
-
}
|
|
54
|
-
|
|
55
61
|
function docId(mdRel) {
|
|
56
62
|
return mdRel.replace(/\.mdx?$/, "");
|
|
57
63
|
}
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return `${
|
|
65
|
+
/** Public pathname (SPA + agents): /docs/getting-started/start */
|
|
66
|
+
export function pagePath(mdRel) {
|
|
67
|
+
return toPublicPath(mdRel);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** On-disk static HTML next to the SPA build: docs/getting-started/start.html */
|
|
71
|
+
function staticHtmlRel(mdRel) {
|
|
72
|
+
return `${docId(mdRel)}.html`;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
|
-
function
|
|
70
|
-
return
|
|
71
|
-
|
|
75
|
+
function pageUrl(mdRel) {
|
|
76
|
+
return `${SITE_ORIGIN}${pagePath(mdRel)}`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function docLink(toMdPath, anchor) {
|
|
80
|
+
const base = pagePath(`${toMdPath}.md`);
|
|
81
|
+
const slug = toMdPath.split("/").pop() || "page";
|
|
82
|
+
if (!anchor || anchor === slug) return base;
|
|
83
|
+
return `${base}#${anchor}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function rewriteDocLinks(text) {
|
|
87
|
+
let out = text.replace(DOC_HASH_LINK_RE, (match, mdPath, anchor) => {
|
|
88
|
+
return docLink(mdPath, anchor);
|
|
72
89
|
});
|
|
90
|
+
out = out.replace(
|
|
91
|
+
/\]\((\/(?:docs|core)\/[^)\s"'#]+)(#[^)\s"']*)?\)/g,
|
|
92
|
+
(match, pathname, fragment) => {
|
|
93
|
+
const mdPath = pathname.replace(/^\//, "");
|
|
94
|
+
const anchor = fragment ? fragment.slice(1) : mdPath.split("/").pop() || "page";
|
|
95
|
+
return `](${docLink(mdPath, anchor)})`;
|
|
96
|
+
},
|
|
97
|
+
);
|
|
98
|
+
return out;
|
|
73
99
|
}
|
|
74
100
|
|
|
75
101
|
function extractTitle(markdown) {
|
|
@@ -133,11 +159,10 @@ function extractDescription(markdown, title) {
|
|
|
133
159
|
}
|
|
134
160
|
|
|
135
161
|
function docKind(mdRel) {
|
|
136
|
-
if (mdRel.includes("/
|
|
137
|
-
if (mdRel.includes("/
|
|
138
|
-
if (mdRel.includes("/
|
|
139
|
-
if (mdRel.includes("/
|
|
140
|
-
if (mdRel.includes("/_misc/")) return "reference";
|
|
162
|
+
if (mdRel.includes("/decorators/")) return "decorator";
|
|
163
|
+
if (mdRel.includes("/directives/")) return "directive";
|
|
164
|
+
if (mdRel.includes("/getting-started/")) return "guide";
|
|
165
|
+
if (mdRel.includes("/misc/")) return "reference";
|
|
141
166
|
if (mdRel.includes("/components/functional/")) return "functional component";
|
|
142
167
|
if (mdRel.includes("/components/ui/")) return "UI component";
|
|
143
168
|
return "documentation";
|
|
@@ -167,10 +192,10 @@ function extractKeywords(mdRel, title, raw) {
|
|
|
167
192
|
keywords.add(`sonic-${baseName}`);
|
|
168
193
|
keywords.add("web component", "Lit");
|
|
169
194
|
}
|
|
170
|
-
if (mdRel.includes("/
|
|
195
|
+
if (mdRel.includes("/decorators/")) {
|
|
171
196
|
keywords.add("decorator", "DataProvider", "ApiResult", "Endpoint");
|
|
172
197
|
}
|
|
173
|
-
if (mdRel.
|
|
198
|
+
if (mdRel.endsWith("/dataFlow.md")) {
|
|
174
199
|
keywords.add("DataProvider", "data flow");
|
|
175
200
|
}
|
|
176
201
|
|
|
@@ -184,16 +209,6 @@ function extractKeywords(mdRel, title, raw) {
|
|
|
184
209
|
return [...keywords].join(", ");
|
|
185
210
|
}
|
|
186
211
|
|
|
187
|
-
function pageHash(mdRel) {
|
|
188
|
-
const base = mdRel.replace(/\.mdx?$/, "");
|
|
189
|
-
const anchor = base.split("/").pop() || "page";
|
|
190
|
-
return `#${base}.md/${anchor}`;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function crawlPageUrl(crawlRel) {
|
|
194
|
-
return `${SITE_ORIGIN}/${crawlRel}`;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
212
|
function buildLeadParagraph({ title, mdRel, description, canonical, keywords }) {
|
|
198
213
|
const id = docId(mdRel);
|
|
199
214
|
const kind = docKind(mdRel);
|
|
@@ -201,11 +216,7 @@ function buildLeadParagraph({ title, mdRel, description, canonical, keywords })
|
|
|
201
216
|
}
|
|
202
217
|
|
|
203
218
|
function renderPage({ mdRel, title, description, keywords, bodyHtml }) {
|
|
204
|
-
const
|
|
205
|
-
const canonical = crawlPageUrl(crawlRel);
|
|
206
|
-
const interactiveDoc = `${SITE_ORIGIN}/${pageHash(mdRel)}`;
|
|
207
|
-
const depth = path.dirname(crawlRel).split("/").length - 1;
|
|
208
|
-
const indexHref = `${"../".repeat(depth)}index.html`;
|
|
219
|
+
const canonical = pageUrl(mdRel);
|
|
209
220
|
const id = docId(mdRel);
|
|
210
221
|
const leadHtml = buildLeadParagraph({
|
|
211
222
|
title,
|
|
@@ -216,19 +227,20 @@ function renderPage({ mdRel, title, description, keywords, bodyHtml }) {
|
|
|
216
227
|
});
|
|
217
228
|
|
|
218
229
|
return `<!DOCTYPE html>
|
|
219
|
-
<html lang="
|
|
230
|
+
<html lang="en" data-doc-url="${escapeHtml(canonical)}" data-doc-id="${escapeHtml(id)}">
|
|
220
231
|
<head>
|
|
221
232
|
<meta charset="UTF-8">
|
|
222
233
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
223
|
-
<title>${escapeHtml(title)} — Concorde</title>
|
|
234
|
+
<title>${escapeHtml(title)} — Concorde by Supersoniks</title>
|
|
224
235
|
<meta name="description" content="${escapeHtml(description)}">
|
|
225
236
|
<meta name="keywords" content="${escapeHtml(keywords)}">
|
|
226
237
|
<meta name="concorde-doc-id" content="${escapeHtml(id)}">
|
|
227
238
|
<link rel="canonical" href="${escapeHtml(canonical)}">
|
|
239
|
+
<link rel="alternate" type="text/markdown" href="${SITE_ORIGIN}${pagePath(mdRel)}.md">
|
|
228
240
|
</head>
|
|
229
241
|
<body>
|
|
230
242
|
<header>
|
|
231
|
-
<p><a href="
|
|
243
|
+
<p><a href="/docs/index.html">Concorde documentation</a> · <a href="${escapeHtml(canonical)}">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
|
|
232
244
|
</header>
|
|
233
245
|
<main>
|
|
234
246
|
<article>
|
|
@@ -245,29 +257,29 @@ function renderIndex(pages) {
|
|
|
245
257
|
const items = pages
|
|
246
258
|
.map(
|
|
247
259
|
(p) =>
|
|
248
|
-
` <li><a href="${escapeHtml(p.
|
|
260
|
+
` <li><a href="${escapeHtml(p.pagePath)}">${escapeHtml(p.title)}</a> <small>(${escapeHtml(p.docId)})</small></li>`,
|
|
249
261
|
)
|
|
250
262
|
.join("\n");
|
|
251
263
|
|
|
252
264
|
return `<!DOCTYPE html>
|
|
253
|
-
<html lang="
|
|
265
|
+
<html lang="en" data-doc-id="docs-index">
|
|
254
266
|
<head>
|
|
255
267
|
<meta charset="UTF-8">
|
|
256
268
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
257
|
-
<title>Concorde documentation index</title>
|
|
258
|
-
<meta name="description" content="
|
|
259
|
-
<meta name="keywords" content="Concorde, documentation index, web components, Lit, DataProvider">
|
|
260
|
-
<link rel="canonical" href="${SITE_ORIGIN}/
|
|
269
|
+
<title>Concorde documentation index — Supersoniks</title>
|
|
270
|
+
<meta name="description" content="Documentation index for Concorde by Supersoniks. Same pathnames as the interactive docs; static HTML for crawlers, Markdown via Accept: text/markdown.">
|
|
271
|
+
<meta name="keywords" content="Concorde, Supersoniks, documentation index, web components, Lit, DataProvider">
|
|
272
|
+
<link rel="canonical" href="${SITE_ORIGIN}/docs/index.html">
|
|
261
273
|
</head>
|
|
262
274
|
<body>
|
|
263
275
|
<header>
|
|
264
276
|
<h1>Concorde documentation</h1>
|
|
265
|
-
<p>
|
|
266
|
-
<p>Full text
|
|
277
|
+
<p>Canonical URLs match the interactive docs (<code>/docs/…</code>, <code>/core/…</code>). Crawlers receive static HTML; agents can request <code>Accept: text/markdown</code>.</p>
|
|
278
|
+
<p>Interactive site: <a href="${SITE_ORIGIN}/">${SITE_ORIGIN}/</a> · Full text: <a href="${SITE_ORIGIN}/llms-full.txt">llms-full.txt</a></p>
|
|
267
279
|
<ul>
|
|
268
|
-
<li><a href="hubs/decorators.html">Decorators hub (@get, @post, …)</a></li>
|
|
269
|
-
<li><a href="hubs/remote-data.html">Remote data hub (@get, List, Queue)</a></li>
|
|
270
|
-
<li><a href="hubs/form-components.html">Form components hub</a></li>
|
|
280
|
+
<li><a href="/hubs/decorators.html">Decorators hub (@get, @post, …)</a></li>
|
|
281
|
+
<li><a href="/hubs/remote-data.html">Remote data hub (@get, List, Queue)</a></li>
|
|
282
|
+
<li><a href="/hubs/form-components.html">Form components hub</a></li>
|
|
271
283
|
</ul>
|
|
272
284
|
</header>
|
|
273
285
|
<main>
|
|
@@ -287,15 +299,27 @@ function writeFileEnsuringDir(filePath, content) {
|
|
|
287
299
|
|
|
288
300
|
function generateLlmsTxt(pages, hubs = []) {
|
|
289
301
|
const lines = [
|
|
290
|
-
"# Concorde",
|
|
302
|
+
"# Concorde by Supersoniks",
|
|
291
303
|
"",
|
|
292
|
-
">
|
|
304
|
+
"> Concorde is the Supersoniks Lit web-components library (UI, DataProvider, decorators, forms, SDUI).",
|
|
305
|
+
"> npm: `@supersoniks/concorde` — https://www.npmjs.com/package/@supersoniks/concorde",
|
|
306
|
+
`> Site: ${SITE_ORIGIN}/`,
|
|
293
307
|
"",
|
|
294
|
-
"
|
|
295
|
-
"Example: https://concorde.supersoniks.org/crawl/docs/_decorators/post.html",
|
|
296
|
-
"Do not fetch `/crawl/**/*.md` (does not exist) nor `/src/docs/**/*.md` (SPA source only).",
|
|
308
|
+
"## Developer resources",
|
|
297
309
|
"",
|
|
298
|
-
|
|
310
|
+
`- [Homepage (HTML)](${SITE_ORIGIN}/) — interactive docs SPA`,
|
|
311
|
+
`- [Homepage (Markdown)](${SITE_ORIGIN}/index.md) — also via \`Accept: text/markdown\` on ${SITE_ORIGIN}/`,
|
|
312
|
+
`- [llms-full.txt](${SITE_ORIGIN}/llms-full.txt) — full plain-text mirror`,
|
|
313
|
+
`- [Docs index](${SITE_ORIGIN}/docs/index.html)`,
|
|
314
|
+
`- [Sitemap](${SITE_ORIGIN}/sitemap.xml)`,
|
|
315
|
+
`- [npm package @supersoniks/concorde](https://www.npmjs.com/package/@supersoniks/concorde)`,
|
|
316
|
+
`- [Getting started](${SITE_ORIGIN}/docs/getting-started/start)`,
|
|
317
|
+
`- [AI agents (skills)](${SITE_ORIGIN}/docs/getting-started/ai-agents)`,
|
|
318
|
+
`- [Components index](${SITE_ORIGIN}/docs/getting-started/components)`,
|
|
319
|
+
"",
|
|
320
|
+
"Doc pages use the same pathnames as the interactive site (`/docs/…`, `/core/…`).",
|
|
321
|
+
"Markdown: same URL with `.md` (e.g. `/docs/getting-started/start.md`), or `Accept: text/markdown` on the pathname.",
|
|
322
|
+
"HTML crawlers receive a static HTML variant of the same URL.",
|
|
299
323
|
"",
|
|
300
324
|
"## Topic hubs (start here for RAG)",
|
|
301
325
|
"",
|
|
@@ -303,7 +327,7 @@ function generateLlmsTxt(pages, hubs = []) {
|
|
|
303
327
|
|
|
304
328
|
for (const h of hubs) {
|
|
305
329
|
lines.push(
|
|
306
|
-
`- [${h.title}](${SITE_ORIGIN}/${h.
|
|
330
|
+
`- [${h.title}](${SITE_ORIGIN}/${h.hubPath}) (${h.docId}, ${h.sectionCount} pages)`,
|
|
307
331
|
);
|
|
308
332
|
}
|
|
309
333
|
|
|
@@ -311,27 +335,29 @@ function generateLlmsTxt(pages, hubs = []) {
|
|
|
311
335
|
|
|
312
336
|
for (const p of pages) {
|
|
313
337
|
lines.push(
|
|
314
|
-
`- [${p.title}](${SITE_ORIGIN}
|
|
338
|
+
`- [${p.title}](${SITE_ORIGIN}${p.pagePath}) (${p.docId}): ${p.description}`,
|
|
315
339
|
);
|
|
316
340
|
}
|
|
317
341
|
|
|
318
|
-
lines.push("", "## Optional", "", `- [Full index](${SITE_ORIGIN}/
|
|
342
|
+
lines.push("", "## Optional", "", `- [Full index](${SITE_ORIGIN}/docs/index.html)`);
|
|
319
343
|
return lines.join("\n");
|
|
320
344
|
}
|
|
321
345
|
|
|
322
346
|
function generateLlmsFullTxt(pages, hubs = []) {
|
|
323
347
|
const lines = [
|
|
324
|
-
"# Concorde — full documentation (plain text)",
|
|
348
|
+
"# Concorde by Supersoniks — full documentation (plain text)",
|
|
325
349
|
"",
|
|
326
350
|
"> Mirror for AI indexers. Each page is a section below.",
|
|
327
|
-
">
|
|
351
|
+
"> Canonical URLs: /docs/** and /core/** (Markdown via Accept: text/markdown).",
|
|
352
|
+
`> Homepage Markdown: ${SITE_ORIGIN}/index.md`,
|
|
353
|
+
`> npm: https://www.npmjs.com/package/@supersoniks/concorde`,
|
|
328
354
|
"",
|
|
329
355
|
"## Topic hubs",
|
|
330
356
|
"",
|
|
331
357
|
];
|
|
332
358
|
|
|
333
359
|
for (const h of hubs) {
|
|
334
|
-
lines.push(`- ${h.title}: ${SITE_ORIGIN}/${h.
|
|
360
|
+
lines.push(`- ${h.title}: ${SITE_ORIGIN}/${h.hubPath} (${h.docId})`);
|
|
335
361
|
}
|
|
336
362
|
|
|
337
363
|
lines.push("");
|
|
@@ -342,7 +368,7 @@ function generateLlmsFullTxt(pages, hubs = []) {
|
|
|
342
368
|
"",
|
|
343
369
|
`## ${p.title}`,
|
|
344
370
|
"",
|
|
345
|
-
`- URL: ${SITE_ORIGIN}
|
|
371
|
+
`- URL: ${SITE_ORIGIN}${p.pagePath}`,
|
|
346
372
|
`- Doc ID: ${p.docId}`,
|
|
347
373
|
`- Keywords: ${p.keywords}`,
|
|
348
374
|
"",
|
|
@@ -363,7 +389,7 @@ const TOPIC_HUBS = [
|
|
|
363
389
|
"Hub for all Concorde Lit decorators: @get @post @put @patch @subscribe @publish @bind @handle and related. Use this page when asking about any decorator.",
|
|
364
390
|
keywords:
|
|
365
391
|
"decorator, @get, @post, @put, @patch, @subscribe, @publish, @bind, @handle, ApiResult, Endpoint, DataProviderKey",
|
|
366
|
-
filter: (p) => p.docId.startsWith("docs/
|
|
392
|
+
filter: (p) => p.docId.startsWith("docs/decorators/"),
|
|
367
393
|
},
|
|
368
394
|
{
|
|
369
395
|
slug: "remote-data",
|
|
@@ -375,14 +401,14 @@ const TOPIC_HUBS = [
|
|
|
375
401
|
"@get, fetch, remote data, API, Endpoint, ApiResult, serviceURL, sonic-list, sonic-queue, HTTP GET",
|
|
376
402
|
filter: (p) =>
|
|
377
403
|
[
|
|
378
|
-
"docs/
|
|
379
|
-
"docs/
|
|
380
|
-
"docs/
|
|
381
|
-
"docs/
|
|
382
|
-
"docs/
|
|
383
|
-
"docs/
|
|
384
|
-
"docs/
|
|
385
|
-
"docs/
|
|
404
|
+
"docs/decorators/get",
|
|
405
|
+
"docs/decorators/post",
|
|
406
|
+
"docs/decorators/put",
|
|
407
|
+
"docs/decorators/patch",
|
|
408
|
+
"docs/misc/endpoint",
|
|
409
|
+
"docs/misc/api-configuration",
|
|
410
|
+
"docs/misc/dynamic-path",
|
|
411
|
+
"docs/getting-started/dataFlow",
|
|
386
412
|
"core/components/functional/fetch/fetch",
|
|
387
413
|
"core/components/functional/list/list",
|
|
388
414
|
"core/components/functional/queue/queue",
|
|
@@ -400,26 +426,19 @@ const TOPIC_HUBS = [
|
|
|
400
426
|
},
|
|
401
427
|
];
|
|
402
428
|
|
|
403
|
-
function
|
|
404
|
-
return `
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
function relativeHubLink(fromHubSlug, targetCrawlPath) {
|
|
408
|
-
const from = hubCrawlPath(fromHubSlug);
|
|
409
|
-
const rel = path.relative(path.dirname(from), targetCrawlPath).replace(/\\/g, "/");
|
|
410
|
-
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
429
|
+
function hubPath(slug) {
|
|
430
|
+
return `hubs/${slug}.html`;
|
|
411
431
|
}
|
|
412
432
|
|
|
413
433
|
function renderHubPage(hub, sections) {
|
|
414
|
-
const
|
|
415
|
-
const canonical =
|
|
434
|
+
const hubRel = hubPath(hub.slug);
|
|
435
|
+
const canonical = `${SITE_ORIGIN}/${hubRel}`;
|
|
416
436
|
const sectionHtml = sections
|
|
417
437
|
.map((p) => {
|
|
418
438
|
const excerpt = p.plainText.slice(0, 1200);
|
|
419
|
-
const href = relativeHubLink(hub.slug, p.crawlPath);
|
|
420
439
|
return `<section id="${escapeHtml(p.docId.replace(/\//g, "-"))}" data-doc-id="${escapeHtml(p.docId)}">
|
|
421
|
-
<h2><a href="${escapeHtml(
|
|
422
|
-
<p><strong>Doc ID:</strong> <code>${escapeHtml(p.docId)}</code> · <a href="${escapeHtml(
|
|
440
|
+
<h2><a href="${escapeHtml(p.pagePath)}">${escapeHtml(p.title)}</a></h2>
|
|
441
|
+
<p><strong>Doc ID:</strong> <code>${escapeHtml(p.docId)}</code> · <a href="${escapeHtml(p.pagePath)}">full page</a></p>
|
|
423
442
|
<p>${escapeHtml(p.description)}</p>
|
|
424
443
|
<pre class="doc-excerpt">${escapeHtml(excerpt)}</pre>
|
|
425
444
|
</section>`;
|
|
@@ -435,11 +454,11 @@ function renderHubPage(hub, sections) {
|
|
|
435
454
|
});
|
|
436
455
|
|
|
437
456
|
return `<!DOCTYPE html>
|
|
438
|
-
<html lang="
|
|
457
|
+
<html lang="en" data-doc-url="${escapeHtml(canonical)}" data-doc-id="${escapeHtml(hub.docId)}">
|
|
439
458
|
<head>
|
|
440
459
|
<meta charset="UTF-8">
|
|
441
460
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
442
|
-
<title>${escapeHtml(hub.title)} — Concorde</title>
|
|
461
|
+
<title>${escapeHtml(hub.title)} — Concorde by Supersoniks</title>
|
|
443
462
|
<meta name="description" content="${escapeHtml(hub.intro)}">
|
|
444
463
|
<meta name="keywords" content="${escapeHtml(hub.keywords)}">
|
|
445
464
|
<meta name="concorde-doc-id" content="${escapeHtml(hub.docId)}">
|
|
@@ -447,7 +466,7 @@ function renderHubPage(hub, sections) {
|
|
|
447
466
|
</head>
|
|
448
467
|
<body>
|
|
449
468
|
<header>
|
|
450
|
-
<p><a href="
|
|
469
|
+
<p><a href="/docs/index.html">Concorde documentation</a></p>
|
|
451
470
|
</header>
|
|
452
471
|
<main>
|
|
453
472
|
<article>
|
|
@@ -465,14 +484,11 @@ function generateTopicHubs(pages) {
|
|
|
465
484
|
for (const hub of TOPIC_HUBS) {
|
|
466
485
|
const sections = pages.filter(hub.filter);
|
|
467
486
|
if (sections.length === 0) continue;
|
|
468
|
-
const
|
|
469
|
-
writeFileEnsuringDir(
|
|
470
|
-
path.join(DOCS_OUT, crawlRel),
|
|
471
|
-
renderHubPage(hub, sections),
|
|
472
|
-
);
|
|
487
|
+
const rel = hubPath(hub.slug);
|
|
488
|
+
writeFileEnsuringDir(path.join(DOCS_OUT, rel), renderHubPage(hub, sections));
|
|
473
489
|
hubs.push({
|
|
474
490
|
...hub,
|
|
475
|
-
|
|
491
|
+
hubPath: rel,
|
|
476
492
|
sectionCount: sections.length,
|
|
477
493
|
});
|
|
478
494
|
}
|
|
@@ -480,16 +496,20 @@ function generateTopicHubs(pages) {
|
|
|
480
496
|
}
|
|
481
497
|
|
|
482
498
|
function generateSitemap(pages, hubs = []) {
|
|
483
|
-
const
|
|
499
|
+
const homeUrl = ` <url>\n <loc>${SITE_ORIGIN}/</loc>\n </url>`;
|
|
500
|
+
const homeMdUrl = ` <url>\n <loc>${SITE_ORIGIN}/index.md</loc>\n </url>`;
|
|
501
|
+
const indexUrl = ` <url>\n <loc>${SITE_ORIGIN}/docs/index.html</loc>\n </url>`;
|
|
484
502
|
const hubUrls = hubs
|
|
485
|
-
.map((h) => ` <url>\n <loc>${SITE_ORIGIN}/${h.
|
|
503
|
+
.map((h) => ` <url>\n <loc>${SITE_ORIGIN}/${h.hubPath}</loc>\n </url>`)
|
|
486
504
|
.join("\n");
|
|
487
505
|
const urls = pages
|
|
488
|
-
.map((p) => ` <url>\n <loc>${SITE_ORIGIN}
|
|
506
|
+
.map((p) => ` <url>\n <loc>${SITE_ORIGIN}${p.pagePath}</loc>\n </url>`)
|
|
489
507
|
.join("\n");
|
|
490
508
|
|
|
491
509
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
492
510
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
511
|
+
${homeUrl}
|
|
512
|
+
${homeMdUrl}
|
|
493
513
|
${indexUrl}
|
|
494
514
|
${hubUrls}
|
|
495
515
|
${urls}
|
|
@@ -497,15 +517,91 @@ ${urls}
|
|
|
497
517
|
`;
|
|
498
518
|
}
|
|
499
519
|
|
|
520
|
+
/** Homepage Markdown for Accept: text/markdown negotiation (acceptmarkdown.com). */
|
|
521
|
+
export function generateHomepageMarkdown() {
|
|
522
|
+
return `# Concorde by Supersoniks
|
|
523
|
+
|
|
524
|
+
Concorde is an open-source Lit web-components library from Supersoniks. It provides UI primitives, data binding, forms, routing helpers and theming that run the same way in React, Vue, PHP templates or a static HTML page.
|
|
525
|
+
|
|
526
|
+
Install the npm package [\`@supersoniks/concorde\`](https://www.npmjs.com/package/@supersoniks/concorde).
|
|
527
|
+
|
|
528
|
+
## Developer resources
|
|
529
|
+
|
|
530
|
+
- Interactive docs: ${SITE_ORIGIN}/
|
|
531
|
+
- Agent index: ${SITE_ORIGIN}/llms.txt
|
|
532
|
+
- Full text mirror: ${SITE_ORIGIN}/llms-full.txt
|
|
533
|
+
- Docs index: ${SITE_ORIGIN}/docs/index.html
|
|
534
|
+
- Sitemap: ${SITE_ORIGIN}/sitemap.xml
|
|
535
|
+
- Getting started: ${SITE_ORIGIN}/docs/getting-started/start
|
|
536
|
+
- AI agents (skills): ${SITE_ORIGIN}/docs/getting-started/ai-agents
|
|
537
|
+
- Components: ${SITE_ORIGIN}/docs/getting-started/components
|
|
538
|
+
|
|
539
|
+
Doc pages share pathnames with the interactive site (\`/docs/…\`, \`/core/…\`). Markdown is at the same path with a \`.md\` suffix (e.g. \`/docs/getting-started/start.md\`), or via \`Accept: text/markdown\` on the pathname (\`Content-Type: text/markdown\`, \`Vary: Accept\`).
|
|
540
|
+
|
|
541
|
+
## What Concorde includes
|
|
542
|
+
|
|
543
|
+
Custom elements (\`sonic-*\`) for buttons, forms, lists, queues, SDUI trees and more. Decorators such as \`@get\`, \`@post\`, \`@subscribe\` and \`@bind\` wire components to a shared DataProvider without framework lock-in. Concorde is MIT-licensed and maintained by Supersoniks.
|
|
544
|
+
`;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/** Markdown 404 body for agents (HTTP 404 + text/markdown). */
|
|
548
|
+
export function generateNotFoundMarkdown() {
|
|
549
|
+
return `# Page not found
|
|
550
|
+
|
|
551
|
+
The requested URL does not exist on the Concorde documentation site (Concorde by Supersoniks).
|
|
552
|
+
|
|
553
|
+
Try the [homepage](${SITE_ORIGIN}/), the [documentation index](${SITE_ORIGIN}/docs/index.html), [llms.txt](${SITE_ORIGIN}/llms.txt), or the [sitemap](${SITE_ORIGIN}/sitemap.xml).
|
|
554
|
+
`;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
export function generateNotFoundHtml() {
|
|
558
|
+
return `<!DOCTYPE html>
|
|
559
|
+
<html lang="en">
|
|
560
|
+
<head>
|
|
561
|
+
<meta charset="UTF-8">
|
|
562
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
563
|
+
<title>Page not found — Concorde by Supersoniks</title>
|
|
564
|
+
<meta name="robots" content="noindex">
|
|
565
|
+
<link rel="canonical" href="${SITE_ORIGIN}/">
|
|
566
|
+
</head>
|
|
567
|
+
<body>
|
|
568
|
+
<h1>Page not found</h1>
|
|
569
|
+
<p>The requested URL does not exist on the Concorde documentation site (Concorde by Supersoniks).</p>
|
|
570
|
+
<p>Try the <a href="${SITE_ORIGIN}/">homepage</a>, the <a href="${SITE_ORIGIN}/docs/index.html">documentation index</a>, <a href="${SITE_ORIGIN}/llms.txt">llms.txt</a>, or the <a href="${SITE_ORIGIN}/sitemap.xml">sitemap</a>.</p>
|
|
571
|
+
</body>
|
|
572
|
+
</html>
|
|
573
|
+
`;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Apache rules live in scripts/docs.htaccess (pretty URLs + negotiation).
|
|
578
|
+
*/
|
|
579
|
+
export function generateHtaccess() {
|
|
580
|
+
const htaccessPath = fileURLToPath(new URL("./docs.htaccess", import.meta.url));
|
|
581
|
+
return fs.readFileSync(htaccessPath, "utf8");
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
export function writeAgentSiteArtifacts(docsOut = DOCS_OUT) {
|
|
585
|
+
fs.writeFileSync(path.join(docsOut, "index.md"), generateHomepageMarkdown());
|
|
586
|
+
fs.writeFileSync(path.join(docsOut, "404.md"), generateNotFoundMarkdown());
|
|
587
|
+
fs.writeFileSync(path.join(docsOut, "404.html"), generateNotFoundHtml());
|
|
588
|
+
fs.writeFileSync(path.join(docsOut, ".htaccess"), generateHtaccess());
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
function removeLegacyCrawlDir() {
|
|
592
|
+
const crawlDir = path.join(DOCS_OUT, "crawl");
|
|
593
|
+
if (fs.existsSync(crawlDir)) {
|
|
594
|
+
fs.rmSync(crawlDir, { recursive: true, force: true });
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
500
598
|
export function generateCrawlDocs() {
|
|
501
599
|
if (!fs.existsSync(DOCS_OUT)) {
|
|
502
600
|
console.warn("generate-crawl-docs: docs/ not found, skipping");
|
|
503
601
|
return;
|
|
504
602
|
}
|
|
505
603
|
|
|
506
|
-
|
|
507
|
-
fs.rmSync(CRAWL_DIR, { recursive: true, force: true });
|
|
508
|
-
}
|
|
604
|
+
removeLegacyCrawlDir();
|
|
509
605
|
|
|
510
606
|
const mdFiles = listMdFiles(SRC_DIR).sort();
|
|
511
607
|
const pages = [];
|
|
@@ -517,14 +613,13 @@ export function generateCrawlDocs() {
|
|
|
517
613
|
const description = extractDescription(raw, title);
|
|
518
614
|
const keywords = extractKeywords(mdRel, title, raw);
|
|
519
615
|
const plainText = markdownToPlainText(raw);
|
|
520
|
-
const markdown = rewriteDocLinks(preprocessSonicCode(raw)
|
|
616
|
+
const markdown = rewriteDocLinks(preprocessSonicCode(raw));
|
|
521
617
|
const bodyHtml = marked.parse(markdown);
|
|
522
|
-
const
|
|
523
|
-
const outPath = path.join(DOCS_OUT, crawlRel);
|
|
618
|
+
const htmlRel = staticHtmlRel(mdRel);
|
|
524
619
|
const id = docId(mdRel);
|
|
525
620
|
|
|
526
621
|
writeFileEnsuringDir(
|
|
527
|
-
|
|
622
|
+
path.join(DOCS_OUT, htmlRel),
|
|
528
623
|
renderPage({ mdRel, title, description, keywords, bodyHtml }),
|
|
529
624
|
);
|
|
530
625
|
|
|
@@ -535,19 +630,14 @@ export function generateCrawlDocs() {
|
|
|
535
630
|
description,
|
|
536
631
|
keywords,
|
|
537
632
|
plainText,
|
|
538
|
-
|
|
539
|
-
|
|
633
|
+
pagePath: pagePath(mdRel),
|
|
634
|
+
htmlRel,
|
|
540
635
|
});
|
|
541
636
|
}
|
|
542
637
|
|
|
543
638
|
writeFileEnsuringDir(
|
|
544
|
-
path.join(
|
|
545
|
-
renderIndex(
|
|
546
|
-
pages.map((p) => ({
|
|
547
|
-
...p,
|
|
548
|
-
crawlHref: p.mdRel.replace(/\.mdx?$/, ".html"),
|
|
549
|
-
})),
|
|
550
|
-
),
|
|
639
|
+
path.join(DOCS_OUT, "docs/index.html"),
|
|
640
|
+
renderIndex(pages),
|
|
551
641
|
);
|
|
552
642
|
|
|
553
643
|
const hubs = generateTopicHubs(pages);
|
|
@@ -558,9 +648,10 @@ export function generateCrawlDocs() {
|
|
|
558
648
|
path.join(DOCS_OUT, "llms-full.txt"),
|
|
559
649
|
generateLlmsFullTxt(pages, hubs),
|
|
560
650
|
);
|
|
651
|
+
writeAgentSiteArtifacts(DOCS_OUT);
|
|
561
652
|
|
|
562
653
|
console.info(
|
|
563
|
-
`generate-crawl-docs: ${pages.length} pages, ${hubs.length} hubs → docs
|
|
654
|
+
`generate-crawl-docs: ${pages.length} pages, ${hubs.length} hubs → pathnames /docs|/core + hubs/, sitemap, llms*, index.md (no /crawl/)`,
|
|
564
655
|
);
|
|
565
656
|
}
|
|
566
657
|
|