@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
|
@@ -16,7 +16,24 @@ export class DocsMakdownRenderer extends Subscriber(LitElement) {
|
|
|
16
16
|
marked.use(gfmHeadingId());
|
|
17
17
|
this.noShadowDom = "";
|
|
18
18
|
super.connectedCallback();
|
|
19
|
+
this.addEventListener("click", this.onDocLinkClick);
|
|
19
20
|
}
|
|
21
|
+
|
|
22
|
+
disconnectedCallback() {
|
|
23
|
+
this.removeEventListener("click", this.onDocLinkClick);
|
|
24
|
+
super.disconnectedCallback();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Markdown `[…](/docs/…)` links use plain `<a>` — pushState so the SPA does not full-reload. */
|
|
28
|
+
private onDocLinkClick = (e: Event) => {
|
|
29
|
+
const a = (e.target as Element | null)?.closest?.("a");
|
|
30
|
+
if (!a || a.target === "_blank" || a.hasAttribute("download")) return;
|
|
31
|
+
const href = a.getAttribute("href");
|
|
32
|
+
if (!href || href.startsWith("http") || href.startsWith("mailto:")) return;
|
|
33
|
+
if (!(href.startsWith("/docs/") || href.startsWith("/core/"))) return;
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
history.pushState(null, "", href);
|
|
36
|
+
};
|
|
20
37
|
@property() anchor = "";
|
|
21
38
|
private _text = "";
|
|
22
39
|
set text(value: string) {
|
|
@@ -45,16 +62,17 @@ export class DocsMakdownRenderer extends Subscriber(LitElement) {
|
|
|
45
62
|
appendImport() {
|
|
46
63
|
if (this.querySelector("h1 + sonic-code")) return;
|
|
47
64
|
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const isComponent = parseDocsLocation(locationHash).url.startsWith(
|
|
51
|
-
"core/components/",
|
|
65
|
+
const { url } = parseDocsLocation(
|
|
66
|
+
document.location.pathname + document.location.search + document.location.hash,
|
|
52
67
|
);
|
|
68
|
+
// Only real component pages (core/components/…), not any URL mentioning "components"
|
|
69
|
+
const isComponent = url.startsWith("core/components/");
|
|
53
70
|
|
|
54
71
|
if (isComponent) {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
const extractComponentName = url
|
|
73
|
+
.split("/")
|
|
74
|
+
.pop()
|
|
75
|
+
?.replace(/\.mdx?$/, "");
|
|
58
76
|
|
|
59
77
|
const markup = `<sonic-code language="javascript" class="mb-8"
|
|
60
78
|
><template> import '@supersoniks/concorde/${extractComponentName}'; </template>
|
package/src/docs/search/page.ts
CHANGED
|
@@ -8,12 +8,15 @@ const tagName = "docs-page"; // For Astro.build
|
|
|
8
8
|
@customElement(tagName)
|
|
9
9
|
export class DocsPage extends Subscriber(LitElement) {
|
|
10
10
|
connectedCallback() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
15
|
-
this.markDownsURL = this.getAncestorAttributeValue("markDownsURL");
|
|
16
|
-
if (
|
|
11
|
+
// Markdown is at the public pathname + `.md` (e.g. `/docs/…/start.md`).
|
|
12
|
+
// Fetch from site root via API serviceURL = origin; never relative to the
|
|
13
|
+
// current pushState path.
|
|
14
|
+
this.setAttribute("serviceURL", "");
|
|
15
|
+
this.markDownsURL = this.getAncestorAttributeValue("markDownsURL") || "";
|
|
16
|
+
if (
|
|
17
|
+
this.markDownsURL &&
|
|
18
|
+
this.markDownsURL.lastIndexOf("/") != this.markDownsURL.length - 1
|
|
19
|
+
) {
|
|
17
20
|
this.markDownsURL += "/";
|
|
18
21
|
}
|
|
19
22
|
super.connectedCallback();
|
|
@@ -1,95 +1,151 @@
|
|
|
1
|
-
import { html, LitElement, nothing } from "lit";
|
|
1
|
+
import { css, html, LitElement, nothing } from "lit";
|
|
2
2
|
import { customElement, state, property } from "lit/decorators.js";
|
|
3
3
|
import { PublisherManager } from "@supersoniks/concorde/utils";
|
|
4
4
|
import { tailwind } from "../tailwind";
|
|
5
5
|
import search from "./docs-search.json";
|
|
6
6
|
import "@supersoniks/concorde/core/components/ui/divider/divider";
|
|
7
7
|
import "@supersoniks/concorde/core/components/ui/icon/icon";
|
|
8
|
-
import "@supersoniks/concorde/core/components/ui/menu/menu";
|
|
8
|
+
import "@supersoniks/concorde/core/components/ui/menu/menu-item";
|
|
9
9
|
import "@supersoniks/concorde/core/components/ui/pop/pop";
|
|
10
10
|
import { customScroll } from "@supersoniks/concorde/core/components/ui/_css/scroll";
|
|
11
|
+
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
11
12
|
|
|
12
13
|
import { FormElementInterface } from "@supersoniks/concorde/core/mixins/FormElement";
|
|
13
14
|
import { Pop } from "@supersoniks/concorde/core/components/ui/pop/pop";
|
|
15
|
+
import { docsPagePath } from "../docs-location";
|
|
16
|
+
|
|
17
|
+
type SearchItem = { href: string; part: string; search: string; index: number };
|
|
18
|
+
type SearchGroup = { title: string; href: string | null; items: SearchItem[] };
|
|
19
|
+
|
|
20
|
+
/** Max sections listed under each page, and characters shown around a match. */
|
|
21
|
+
const MAX_ITEMS_PER_PAGE = 3;
|
|
22
|
+
const SNIPPET_RADIUS = 60;
|
|
14
23
|
|
|
15
24
|
const tagName = "docs-search"; // For Astro.build
|
|
16
25
|
const win: any = window;
|
|
17
26
|
const fuzzysort = win.fuzzysort;
|
|
18
27
|
@customElement(tagName)
|
|
19
28
|
export class DocsSearch extends LitElement {
|
|
20
|
-
static styles = [
|
|
29
|
+
static styles = [
|
|
30
|
+
tailwind,
|
|
31
|
+
customScroll,
|
|
32
|
+
css`
|
|
33
|
+
.snippet mark {
|
|
34
|
+
background: none;
|
|
35
|
+
color: var(--sc-info);
|
|
36
|
+
font-weight: 600;
|
|
37
|
+
}
|
|
38
|
+
`,
|
|
39
|
+
];
|
|
21
40
|
@state({ type: Boolean }) hidePopMenu = false;
|
|
41
|
+
@state() results: SearchGroup[] = [];
|
|
42
|
+
@state() query = "";
|
|
22
43
|
@property({ type: Boolean }) setFocus = false;
|
|
23
44
|
search(val) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
45
|
+
this.query = (val ?? "").toString();
|
|
46
|
+
if (!this.query.trim()) {
|
|
47
|
+
this.results = [];
|
|
48
|
+
(this.shadowRoot?.querySelector("sonic-pop") as Pop)?.show();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const searchResult = fuzzysort.go(this.query, search, {
|
|
52
|
+
key: "search",
|
|
53
|
+
limit: 60,
|
|
54
|
+
});
|
|
55
|
+
const groups: Map<string, SearchGroup> = new Map();
|
|
56
|
+
const found = new Set<string>();
|
|
32
57
|
|
|
33
|
-
const found: Array<string> = [];
|
|
34
58
|
for (const result of searchResult) {
|
|
35
59
|
if (result.score < -100000) continue;
|
|
36
|
-
|
|
37
60
|
const obj = result.obj;
|
|
38
|
-
|
|
39
61
|
for (const file in obj.files) {
|
|
40
62
|
for (const part in obj.files[file].hashes) {
|
|
63
|
+
if (found.has(file + ":" + part)) continue;
|
|
64
|
+
found.add(file + ":" + part);
|
|
41
65
|
const hash = obj.files[file].hashes[part];
|
|
42
|
-
if (found.includes(file + ":" + part)) continue;
|
|
43
|
-
found.push(file + ":" + part);
|
|
44
66
|
const title = obj.files[file].title;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
} else {
|
|
61
|
-
const item = titlesToContent.get(title);
|
|
62
|
-
item.items.push(subItem);
|
|
67
|
+
// file is e.g. docs/getting-started/start.md — public pathname routes
|
|
68
|
+
const publicPath = docsPagePath(file);
|
|
69
|
+
const baseName = publicPath.split("/").pop() || "";
|
|
70
|
+
const href =
|
|
71
|
+
hash.type === "page" || part === baseName
|
|
72
|
+
? publicPath
|
|
73
|
+
: `${publicPath}#${part}`;
|
|
74
|
+
let group = groups.get(title);
|
|
75
|
+
if (!group) {
|
|
76
|
+
group = { title, href: null, items: [] };
|
|
77
|
+
groups.set(title, group);
|
|
78
|
+
}
|
|
79
|
+
if (hash.type == "page") {
|
|
80
|
+
group.href = href;
|
|
81
|
+
continue;
|
|
63
82
|
}
|
|
83
|
+
group.items.push({
|
|
84
|
+
href,
|
|
85
|
+
part: hash.title || title,
|
|
86
|
+
search: this.getResultSearchString(result),
|
|
87
|
+
index: search.indexOf(obj),
|
|
88
|
+
});
|
|
64
89
|
}
|
|
65
90
|
}
|
|
66
91
|
}
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
92
|
+
for (const group of groups.values()) {
|
|
93
|
+
group.items.sort((a, b) => a.index - b.index);
|
|
94
|
+
group.items = group.items.slice(0, MAX_ITEMS_PER_PAGE);
|
|
95
|
+
group.href ??= group.items[0]?.href ?? null;
|
|
71
96
|
}
|
|
72
|
-
|
|
97
|
+
this.results = [...groups.values()];
|
|
98
|
+
(this.shadowRoot?.querySelector("sonic-pop") as Pop)?.show();
|
|
73
99
|
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Close the header search overlay after choosing a result.
|
|
103
|
+
* Capture phase: menu-item pushState calls stopPropagation on bubble.
|
|
104
|
+
* pushState itself does not fire popstate, so the header cannot rely on that.
|
|
105
|
+
*/
|
|
106
|
+
private closeAfterNavigate = (e: Event) => {
|
|
107
|
+
const item = e.composedPath().find((n): n is HTMLElement => {
|
|
108
|
+
if (!(n instanceof HTMLElement) || n.tagName !== "SONIC-MENU-ITEM") {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const href = (n as HTMLElement & { href?: string }).href;
|
|
112
|
+
return Boolean(href || n.getAttribute("href"));
|
|
113
|
+
});
|
|
114
|
+
if (!item) return;
|
|
115
|
+
(this.shadowRoot?.querySelector("sonic-pop") as Pop | null)?.hide();
|
|
116
|
+
this.dispatchEvent(
|
|
117
|
+
new CustomEvent("docs-search-close", { bubbles: true, composed: true }),
|
|
118
|
+
);
|
|
119
|
+
};
|
|
120
|
+
/** Text around the first match, matched characters highlighted. */
|
|
74
121
|
getResultSearchString(result: any) {
|
|
75
|
-
const p =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
122
|
+
const p: number[] = Array.from(
|
|
123
|
+
fuzzysort.indexes?.(result) ?? result.indexes ?? result.p ?? [],
|
|
124
|
+
);
|
|
125
|
+
const target: string = result.target.replace(/\s/g, " ");
|
|
126
|
+
const first = p.length ? Math.min(...p) : 0;
|
|
127
|
+
const from = Math.max(0, first - SNIPPET_RADIUS);
|
|
128
|
+
const to = Math.min(target.length, first + SNIPPET_RADIUS * 2);
|
|
129
|
+
// The index already holds HTML entities: only escape raw tags.
|
|
130
|
+
const escape = (c: string) => (c === "<" ? "<" : c === ">" ? ">" : c);
|
|
131
|
+
let str = "";
|
|
132
|
+
for (let i = from; i < to; i++) {
|
|
133
|
+
const c = escape(target[i]);
|
|
134
|
+
str += p.includes(i) ? `<mark>${c}</mark>` : c;
|
|
135
|
+
}
|
|
136
|
+
return (from > 0 ? "…" : "") + str + (to < target.length ? "…" : "");
|
|
87
137
|
}
|
|
88
138
|
connectedCallback() {
|
|
89
139
|
PublisherManager.get("docsSearch").search.onAssign((v) => this.search(v));
|
|
140
|
+
this.addEventListener("click", this.closeAfterNavigate, true);
|
|
90
141
|
super.connectedCallback();
|
|
91
142
|
}
|
|
92
143
|
|
|
144
|
+
disconnectedCallback() {
|
|
145
|
+
this.removeEventListener("click", this.closeAfterNavigate, true);
|
|
146
|
+
super.disconnectedCallback();
|
|
147
|
+
}
|
|
148
|
+
|
|
93
149
|
firstUpdated() {
|
|
94
150
|
if (this.setFocus) {
|
|
95
151
|
setTimeout(() => {
|
|
@@ -125,81 +181,57 @@ export class DocsSearch extends LitElement {
|
|
|
125
181
|
${this.hidePopMenu
|
|
126
182
|
? nothing
|
|
127
183
|
: html`
|
|
128
|
-
<
|
|
184
|
+
<div
|
|
129
185
|
slot="content"
|
|
130
|
-
class="
|
|
186
|
+
class="w-[30rem] lg:w-[35rem] max-w-[calc(100vw-2rem)] max-h-[60svh] overflow-auto custom-scroll py-2"
|
|
131
187
|
>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</
|
|
141
|
-
|
|
142
|
-
<template data-value="page">
|
|
143
|
-
<sonic-menu-item
|
|
144
|
-
formDataProvider="searchSelection"
|
|
145
|
-
data-keyboard-nav="search-results doc-search"
|
|
146
|
-
class="mt-1"
|
|
147
|
-
>
|
|
148
|
-
<sonic-icon
|
|
149
|
-
slot="prefix"
|
|
150
|
-
size="lg"
|
|
151
|
-
library="heroicons"
|
|
152
|
-
name="book-open"
|
|
153
|
-
></sonic-icon>
|
|
154
|
-
<div>
|
|
155
|
-
<sonic-value
|
|
156
|
-
key="search"
|
|
157
|
-
class="block font-medium "
|
|
158
|
-
></sonic-value>
|
|
159
|
-
</div>
|
|
160
|
-
<sonic-icon
|
|
161
|
-
slot="suffix"
|
|
162
|
-
size="lg"
|
|
163
|
-
library="heroicons"
|
|
164
|
-
name="chevron-right"
|
|
165
|
-
class="opacity-40"
|
|
166
|
-
></sonic-icon>
|
|
167
|
-
</sonic-menu-item>
|
|
168
|
-
</template>
|
|
169
|
-
<template>
|
|
170
|
-
<sonic-menu-item
|
|
171
|
-
formDataProvider="searchSelection"
|
|
172
|
-
data-keyboard-nav="search-results doc-search"
|
|
173
|
-
class="mt-1"
|
|
174
|
-
>
|
|
175
|
-
<div>
|
|
176
|
-
<sonic-badge size="xs" ellipsis class="mb-1">
|
|
177
|
-
<sonic-value
|
|
178
|
-
key="part"
|
|
179
|
-
class="block "
|
|
180
|
-
></sonic-value>
|
|
181
|
-
</sonic-badge>
|
|
182
|
-
<sonic-value
|
|
183
|
-
key="search"
|
|
184
|
-
class="block text-sm font-normal pl-[.75rem]"
|
|
185
|
-
></sonic-value>
|
|
186
|
-
</div>
|
|
187
|
-
<sonic-icon
|
|
188
|
-
slot="suffix"
|
|
189
|
-
size="lg"
|
|
190
|
-
library="heroicons"
|
|
191
|
-
name="chevron-right"
|
|
192
|
-
class="opacity-40"
|
|
193
|
-
></sonic-icon>
|
|
194
|
-
</sonic-menu-item>
|
|
195
|
-
</template>
|
|
196
|
-
</sonic-list>
|
|
197
|
-
</div>
|
|
198
|
-
</template>
|
|
199
|
-
</sonic-list>
|
|
200
|
-
</sonic-menu>
|
|
188
|
+
${this.results.length
|
|
189
|
+
? this.results.map((group) => this.renderGroup(group))
|
|
190
|
+
: this.query.trim()
|
|
191
|
+
? html`<p class="px-3 py-2 text-sm text-neutral-500">
|
|
192
|
+
No results
|
|
193
|
+
</p>`
|
|
194
|
+
: html`<p class="px-3 py-2 text-sm text-neutral-500">
|
|
195
|
+
Type to search the documentation.
|
|
196
|
+
</p>`}
|
|
197
|
+
</div>
|
|
201
198
|
`}
|
|
202
199
|
</sonic-pop>
|
|
203
200
|
`;
|
|
204
201
|
}
|
|
202
|
+
|
|
203
|
+
renderGroup(group: SearchGroup) {
|
|
204
|
+
return html`
|
|
205
|
+
<section class="py-1">
|
|
206
|
+
<sonic-menu-item
|
|
207
|
+
pushState
|
|
208
|
+
href=${group.href ?? nothing}
|
|
209
|
+
data-keyboard-nav="search-results doc-search"
|
|
210
|
+
size="sm"
|
|
211
|
+
class="w-full font-semibold"
|
|
212
|
+
><span class="font-semibold">${group.title}</span></sonic-menu-item
|
|
213
|
+
>
|
|
214
|
+
${group.items.map(
|
|
215
|
+
(item) => html`
|
|
216
|
+
<sonic-menu-item
|
|
217
|
+
pushState
|
|
218
|
+
href=${item.href}
|
|
219
|
+
data-keyboard-nav="search-results doc-search"
|
|
220
|
+
size="sm"
|
|
221
|
+
class="w-full"
|
|
222
|
+
>
|
|
223
|
+
<span class="block min-w-0 pl-3 text-left font-normal">
|
|
224
|
+
<span class="block truncate text-xs text-neutral-500"
|
|
225
|
+
>${item.part}</span
|
|
226
|
+
>
|
|
227
|
+
<span class="snippet block text-sm line-clamp-2"
|
|
228
|
+
>${unsafeHTML(item.search)}</span
|
|
229
|
+
>
|
|
230
|
+
</span>
|
|
231
|
+
</sonic-menu-item>
|
|
232
|
+
`,
|
|
233
|
+
)}
|
|
234
|
+
</section>
|
|
235
|
+
`;
|
|
236
|
+
}
|
|
205
237
|
}
|
package/vite.config.mts
CHANGED
|
@@ -7,6 +7,7 @@ import { configDefaults } from "vitest/config";
|
|
|
7
7
|
import path from "path";
|
|
8
8
|
import fs from "fs";
|
|
9
9
|
import { docsMockApiVitePlugin } from "./scripts/docs-mock-api-vite-plugin";
|
|
10
|
+
import { docsMarkdownVitePlugin } from "./scripts/docs-markdown-vite-plugin";
|
|
10
11
|
import { docsOpenInEditorPlugin } from "./scripts/docs-open-in-editor-plugin";
|
|
11
12
|
|
|
12
13
|
function CustomHmr() {
|
|
@@ -90,7 +91,11 @@ export default defineConfig({
|
|
|
90
91
|
},
|
|
91
92
|
},
|
|
92
93
|
},
|
|
93
|
-
|
|
94
|
+
// Docs SPA uses pathname routes (`/docs/...`); relative `./` breaks asset URLs on deep paths.
|
|
95
|
+
base:
|
|
96
|
+
libName === "docs" || process.env.npm_lifecycle_event === "dev"
|
|
97
|
+
? "/"
|
|
98
|
+
: "./",
|
|
94
99
|
test: {
|
|
95
100
|
globals: true,
|
|
96
101
|
environment: "jsdom",
|
|
@@ -129,7 +134,11 @@ export default defineConfig({
|
|
|
129
134
|
include: ["src/**/*.css", "src/**/*.css?*"],
|
|
130
135
|
}),
|
|
131
136
|
...(enableDocsMockApi
|
|
132
|
-
? [
|
|
137
|
+
? [
|
|
138
|
+
docsMarkdownVitePlugin(),
|
|
139
|
+
docsMockApiVitePlugin(),
|
|
140
|
+
docsOpenInEditorPlugin(),
|
|
141
|
+
]
|
|
133
142
|
: []),
|
|
134
143
|
],
|
|
135
144
|
});
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: concorde-component-docs
|
|
3
|
-
description: >-
|
|
4
|
-
Writes and edits Concorde UI component documentation pages (*.md) in English
|
|
5
|
-
with consistent structure, tone, sonic-code examples, and API tables. Use when
|
|
6
|
-
creating or updating component docs under src/core/components/ui/, when
|
|
7
|
-
uniformizing documentation, or when the user references alert.md-style docs.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Concorde component documentation
|
|
11
|
-
|
|
12
|
-
Apply this skill when **creating** or **editing** a component doc page (typically `src/core/components/ui/<component>/<component>.md`).
|
|
13
|
-
|
|
14
|
-
Canonical examples: `alert.md`, `badge.md`, `link.md`, `image.md`.
|
|
15
|
-
|
|
16
|
-
## Workflow
|
|
17
|
-
|
|
18
|
-
### Creating a new page
|
|
19
|
-
|
|
20
|
-
1. Read the component implementation (`.ts` / props, slots, reflected attributes, defaults).
|
|
21
|
-
2. Draft the **intro** (what it does, when to use it, 1–2 critical APIs).
|
|
22
|
-
3. Add **feature sections** in order of reader need (basic → variants → composition → edge cases → a11y).
|
|
23
|
-
4. Add one **`<sonic-code>`** example per section; group enum variants in a single demo when practical.
|
|
24
|
-
5. End with **`## API reference`** (attributes table, slots table if any).
|
|
25
|
-
6. Run the [quality checklist](#quality-checklist).
|
|
26
|
-
|
|
27
|
-
### Editing an existing page
|
|
28
|
-
|
|
29
|
-
1. Preserve working examples; only change prose/structure to match this guide.
|
|
30
|
-
2. Do not duplicate `## API reference` blocks—merge into one.
|
|
31
|
-
3. Align intro tone and section titles with sibling docs; add missing API rows from source.
|
|
32
|
-
4. Keep demo markup valid; avoid unrelated refactors in examples.
|
|
33
|
-
|
|
34
|
-
## Page structure
|
|
35
|
-
|
|
36
|
-
```markdown
|
|
37
|
-
# ComponentName
|
|
38
|
-
|
|
39
|
-
[Intro paragraph: 1–3 sentences. Purpose, primary use case, key props/slots.]
|
|
40
|
-
|
|
41
|
-
## Basic example
|
|
42
|
-
[or first topical section, e.g. ## Type, ## Href, ## Rounded]
|
|
43
|
-
|
|
44
|
-
[Optional short prose before the example.]
|
|
45
|
-
|
|
46
|
-
<sonic-code>
|
|
47
|
-
<template>
|
|
48
|
-
...
|
|
49
|
-
</template>
|
|
50
|
-
</sonic-code>
|
|
51
|
-
|
|
52
|
-
## [Feature or variant name]
|
|
53
|
-
|
|
54
|
-
...
|
|
55
|
-
|
|
56
|
-
## API reference
|
|
57
|
-
|
|
58
|
-
| Attribute | Values | Description |
|
|
59
|
-
|----------|---------|-------------|
|
|
60
|
-
| ... | ... | ... |
|
|
61
|
-
|
|
62
|
-
| Slot | Description |
|
|
63
|
-
|------|-------------|
|
|
64
|
-
| ... | ... |
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Title (`#`)
|
|
68
|
-
|
|
69
|
-
- Singular component name, Title Case: `# Alert`, `# Badge`, `# Link`, `# Image`.
|
|
70
|
-
- Match the public tag name conceptually (`sonic-alert` → Alert).
|
|
71
|
-
|
|
72
|
-
### Intro (required for new-style docs)
|
|
73
|
-
|
|
74
|
-
One tight paragraph immediately after the title:
|
|
75
|
-
|
|
76
|
-
- State **what** the component does and **when** to choose it.
|
|
77
|
-
- Call out **defaults** and **constraints** only if they prevent misuse.
|
|
78
|
-
- Formatting:
|
|
79
|
-
- **Bold** for emphasis on behavior (not for every noun).
|
|
80
|
-
- API names and tags in backticks; when listing several, **do not put commas between inline-code spans** (rendered as adjacent `<code>`). Join with **`/`**, **`and`**, or separate clauses—e.g. `` `label` `` / `` `text` ``, not `` `label` ``, `` `text` ``.
|
|
81
|
-
- Cross-link related components in prose: “aligned with **`sonic-button`**”, “pair with **`ratio="1/1"`**”.
|
|
82
|
-
|
|
83
|
-
Avoid marketing fluff, long tutorials, and repeating the API table in the intro.
|
|
84
|
-
|
|
85
|
-
### Section headings (`##` / `###`)
|
|
86
|
-
|
|
87
|
-
- **Sentence case** or short Title Case; be consistent within one file.
|
|
88
|
-
- Name sections after **one concern**: `Status`, `Size`, `Dismissible`, `Accessibility (\`announce\`)`, `Prefix and suffix slots`.
|
|
89
|
-
- Use `###` for sub-variants of the same feature (e.g. `### AutoActive Strict vs partial`).
|
|
90
|
-
- Put **`## API reference`** last—never in the middle.
|
|
91
|
-
|
|
92
|
-
Suggested order (omit what does not apply):
|
|
93
|
-
|
|
94
|
-
1. Basic example / primary API
|
|
95
|
-
2. Visual variants (`type` / `status` / `variant` / `size` / …)
|
|
96
|
-
3. Content model (slots, `label` / `text`, rich content)
|
|
97
|
-
4. Composition patterns (inside buttons, with links, …)
|
|
98
|
-
5. Behavioral flags (`dismissible` / `announce` / `cover` / …)
|
|
99
|
-
6. Accessibility (dedicated section when non-obvious)
|
|
100
|
-
7. API reference
|
|
101
|
-
|
|
102
|
-
### Prose before examples
|
|
103
|
-
|
|
104
|
-
- **Default first**: “With no `status`, behavior is `default`.” “Default **`loading`** is `lazy`.”
|
|
105
|
-
- **Enums inline** when short: `` `outline` `` — border and text in the `type` color.
|
|
106
|
-
- **Requirements**: stable `` `id` `` required for `dismissForever`; parent must constrain width for `ellipsis`.
|
|
107
|
-
- **Implementation notes** only when they change usage: `localStorage`; `role="alert"`; remount to replay transitions.
|
|
108
|
-
- Length: 0–4 sentences per section; longer only for accessibility or non-obvious behavior.
|
|
109
|
-
|
|
110
|
-
## Live examples (`<sonic-code>`)
|
|
111
|
-
|
|
112
|
-
Wrap all demos:
|
|
113
|
-
|
|
114
|
-
```html
|
|
115
|
-
<sonic-code>
|
|
116
|
-
<template>
|
|
117
|
-
<!-- demo markup -->
|
|
118
|
-
</template>
|
|
119
|
-
</sonic-code>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Conventions:
|
|
123
|
-
|
|
124
|
-
- Use Tailwind layout utilities already used in the design system docs: `grid gap-4` / `flex flex-wrap gap-2` / `items-center`.
|
|
125
|
-
- Show **all enum values** in one row/grid when demonstrating `type`, `status`, or `size`.
|
|
126
|
-
- Label variants in the UI (badge text, caption `<p class="mt-2">`) when comparison matters.
|
|
127
|
-
- Prefer realistic copy over “Lorem ipsum” unless demonstrating truncation or length.
|
|
128
|
-
- Interactive demos (buttons that mutate DOM) are allowed when they teach behavior—add one sentence explaining what to click.
|
|
129
|
-
- Do not wrap API tables or long prose inside `<sonic-code>`.
|
|
130
|
-
|
|
131
|
-
## API reference
|
|
132
|
-
|
|
133
|
-
### Attributes table
|
|
134
|
-
|
|
135
|
-
```markdown
|
|
136
|
-
| Attribute | Values | Description |
|
|
137
|
-
|----------|---------|-------------|
|
|
138
|
-
| `name` | `a` · `b` (default `a`) | One line: behavior + default + interaction with other props |
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
- Column headers exactly: **Attribute**, **Values**, **Description**.
|
|
142
|
-
- **Values**: list allowed literals separated by **middle dot (` · `)** or **`…`** for ranges (`2xs` … `2xl`)—**never commas between backtick spans**. Put **(default `…`)** in this column or in Description—be consistent within the file.
|
|
143
|
-
- **Description**: imperative, factual; mention side effects (`removes from DOM`, `ignored when \`cover\` is set`).
|
|
144
|
-
- Document boolean attributes as boolean in the table; no need to say “true/false” unless ambiguous.
|
|
145
|
-
|
|
146
|
-
### Slots table
|
|
147
|
-
|
|
148
|
-
```markdown
|
|
149
|
-
| Slot | Description |
|
|
150
|
-
|------|-------------|
|
|
151
|
-
| *(default)* | Main label / message body |
|
|
152
|
-
| `icon` | Replaces the default `sonic-icon` |
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
- If the component has **no slots**, state it in prose under the attributes table (see `image.md`).
|
|
156
|
-
- Use *(default)* for the unnamed slot.
|
|
157
|
-
|
|
158
|
-
### Single API block
|
|
159
|
-
|
|
160
|
-
One `## API reference` section per file. If the source doc has duplicates, consolidate without losing rows.
|
|
161
|
-
|
|
162
|
-
## Voice and language
|
|
163
|
-
|
|
164
|
-
- **English only** for user-facing doc text.
|
|
165
|
-
- Present tense, second person avoided; address the integrator (“Set **`announce`** when…”).
|
|
166
|
-
- Prefer precise verbs: surface, navigate, truncate, persist, intercept.
|
|
167
|
-
- Do not document internal CSS class names unless the doc already uses them for styling hooks (`[&[active]]:text-success` in examples is OK).
|
|
168
|
-
|
|
169
|
-
## Quality checklist
|
|
170
|
-
|
|
171
|
-
Before finishing, verify:
|
|
172
|
-
|
|
173
|
-
- [ ] `#` title + intro paragraph present (for new or modernized pages).
|
|
174
|
-
- [ ] Every `##` section (except API) has a `<sonic-code>` example unless it is pure sub-prose under a parent demo.
|
|
175
|
-
- [ ] Defaults and required attributes are stated in prose or API table.
|
|
176
|
-
- [ ] Accessibility called out where behavior affects AT (roles, `alt`, decorative icons).
|
|
177
|
-
- [ ] Exactly one `## API reference`; attributes and slots match the component source.
|
|
178
|
-
- [ ] No duplicate sections; heading levels skip only when using `###` under `##`.
|
|
179
|
-
- [ ] Attribute/slot names match the implementation (camelCase in docs).
|
|
180
|
-
- [ ] No comma-separated lists of inline-code terms in prose or API **Values** cells.
|
|
181
|
-
|
|
182
|
-
## Anti-patterns
|
|
183
|
-
|
|
184
|
-
- Long narrative guides, installation steps, or changelog in component `.md` files.
|
|
185
|
-
- Examples without `<sonic-code>` wrappers.
|
|
186
|
-
- API tables at the top of the page.
|
|
187
|
-
- Mixing French and English in the same page.
|
|
188
|
-
- Vague intros (“This component is very useful”) without API hints.
|
|
189
|
-
- Separate micro-sections per enum value when one grid demo suffices.
|
|
190
|
-
- Comma chains of inline code: `` `a` ``, `` `b` ``, and `` `c` `` (use `/`, ` · `, or `and` instead).
|
|
191
|
-
|
|
192
|
-
## Reference template
|
|
193
|
-
|
|
194
|
-
See [template.md](template.md) for a copy-paste skeleton.
|