@supersoniks/concorde 5.1.1 → 5.1.3
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/PLAN-DOCS-AGENTS.md +80 -0
- package/README.md +4 -4
- package/ai/README.md +29 -41
- package/ai/skills/concorde/SKILL.md +54 -324
- package/ai/skills/concorde/rules/composition.md +32 -0
- package/ai/skills/concorde/rules/data.md +47 -0
- package/ai/skills/concorde/rules/http.md +25 -0
- package/ai/skills/concorde/rules/lists-forms.md +35 -0
- package/ai/skills/concorde/rules/styling.md +46 -0
- package/ai/skills/concorde/rules/troubleshooting.md +45 -0
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +21 -21
- package/concorde-core.es.js +977 -980
- package/custom-elements-manifest.public.config.mjs +8 -0
- package/{.tmp-cem/custom-elements.json → custom-elements.json} +11758 -8904
- package/dist/concorde-core.bundle.js +21 -21
- package/dist/concorde-core.es.js +977 -980
- package/dist/docs-mock-api-sw.js +58 -223
- package/dist/docs-mock-api-sw.js.map +4 -4
- package/dist/img/concorde/plane_01.jpg +0 -0
- package/dist/img/concorde/plane_02.jpg +0 -0
- package/dist/img/concorde/plane_03.jpg +0 -0
- package/dist/img/concorde/plane_04.jpg +0 -0
- package/dist/img/concorde/plane_05.jpg +0 -0
- package/dist/img/concorde/plane_06.jpg +0 -0
- package/dist/img/concorde/plane_07.jpg +0 -0
- package/dist/img/concorde/plane_08.jpg +0 -0
- package/dist/img/concorde/plane_09.jpg +0 -0
- package/dist/img/concorde/plane_10.jpg +0 -0
- package/dist/img/concorde/plane_11.jpg +0 -0
- package/dist/img/concorde/plane_12.jpg +0 -0
- package/dist/img/concorde/plane_13.jpg +0 -0
- package/dist/img/og-concorde.jpg +0 -0
- package/dist/robots.txt +11 -10
- package/docs/.htaccess +82 -0
- package/docs/404.html +15 -0
- package/docs/404.md +5 -0
- package/docs/about.html +111 -0
- package/docs/about.md +22 -0
- package/docs/assets/{index-Bb-_LRyY.js → index-6sS76xWj.js} +2625 -3158
- package/docs/assets/index-DkdPbH0F.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 +200 -0
- package/docs/core/components/functional/list/list.md +125 -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/custom-elements.json +16559 -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 +87 -0
- package/docs/docs/decorators/bind.md +76 -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 +130 -0
- package/docs/docs/getting-started/ai-agents.md +50 -0
- 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 +18 -19
- 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 +438 -0
- package/docs/hubs/form-components.html +404 -0
- package/docs/hubs/remote-data.html +367 -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/img/og-concorde.jpg +0 -0
- package/docs/index.html +184 -68
- package/docs/index.md +22 -0
- package/docs/llms-full.txt +5779 -0
- package/docs/llms.txt +108 -0
- package/docs/privacy.html +122 -0
- package/docs/privacy.md +32 -0
- package/docs/robots.txt +11 -10
- package/docs/sitemap.xml +243 -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 +125 -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 +76 -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 +50 -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 +10332 -0
- package/docs/src/tag-list.json +1 -0
- package/docs/src/tsconfig-model.json +23 -0
- package/docs/src/tsconfig.json +1359 -0
- package/index.html +157 -5
- package/package.json +8 -4
- 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/img/og-concorde.jpg +0 -0
- package/public/robots.txt +11 -10
- package/scripts/ai-init.mjs +104 -379
- package/scripts/ai-init.test.mjs +81 -239
- package/scripts/docs-markdown-vite-plugin.ts +43 -0
- package/scripts/docs-public-url.mjs +56 -0
- package/scripts/docs.htaccess +82 -0
- package/scripts/generate-cem.mjs +244 -0
- package/scripts/generate-cem.test.mjs +122 -0
- package/scripts/generate-crawl-docs.mjs +233 -118
- package/scripts/generate-crawl-docs.test.mjs +124 -0
- package/scripts/generate-sdui-catalog.mjs +11 -10
- package/scripts/post-build-docs.js +37 -50
- package/scripts/pre-publish.mjs +2 -1
- package/scripts/site-pages.mjs +212 -0
- package/scripts/site-pages.test.mjs +116 -0
- package/site-pages/about.md +22 -0
- package/site-pages/privacy.md +32 -0
- package/src/core/components/functional/date/date.md +91 -231
- package/src/core/components/functional/fetch/fetch.md +66 -83
- package/src/core/components/functional/if/if.md +28 -3
- package/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/src/core/components/functional/list/list.md +103 -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/decorators/subscriber/bind.ts +9 -14
- 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 +76 -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 +56 -0
- package/src/docs/docs-location.ts +133 -32
- package/src/docs/docs.ts +1 -2
- package/src/docs/example/decorators-demo-bind-demos.ts +83 -135
- 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 +50 -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 +20 -11
- 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 +2804 -5024
- package/src/docs/search/markdown-renderer.ts +31 -8
- package/src/docs/search/page.ts +9 -6
- package/src/docs/search/search.ts +154 -122
- package/src/docs/tailwind/css/docs/content.css +4 -5
- package/src/tsconfig.json +11 -5
- package/src/tsconfig.tsbuildinfo +1 -1
- package/vite.config.mts +11 -2
- package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
- package/ai/AGENTS.md +0 -56
- package/ai/cursor/rules/concorde-menu.mdc +0 -15
- package/ai/cursor/rules/concorde-scope.mdc +0 -14
- package/ai/cursor/rules/concorde-theme.mdc +0 -13
- package/ai/cursor/rules/concorde.mdc +0 -66
- package/ai/jetbrains/rules/concorde.md +0 -53
- package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
- package/ai/skills/concorde-imports/SKILL.md +0 -78
- package/ai/skills/concorde-menu/SKILL.md +0 -74
- package/ai/skills/concorde-scope/SKILL.md +0 -70
- package/ai/skills/concorde-theme/SKILL.md +0 -57
- 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/ai-agents.md +0 -76
- 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,14 +1,12 @@
|
|
|
1
1
|
# Toast
|
|
2
2
|
|
|
3
|
-
Toasts
|
|
3
|
+
Toasts show short-lived feedback in a fixed stack at the bottom right of the page. Call **`SonicToast.add()`** (also `window.SonicToast`); the **`sonic-toast`** host is created on first use. Use **`label`** for a heading and **`preserve`** when the user must read or act before the toast goes away.
|
|
4
4
|
|
|
5
5
|
## Basic example
|
|
6
6
|
|
|
7
|
-
Click the button to show a toast.
|
|
8
|
-
|
|
9
7
|
<sonic-code>
|
|
10
8
|
<template>
|
|
11
|
-
<sonic-button onclick="SonicToast.add({ text: '
|
|
9
|
+
<sonic-button onclick="SonicToast.add({ text: 'Flight CN 001 is now boarding' })">
|
|
12
10
|
Show toast
|
|
13
11
|
</sonic-button>
|
|
14
12
|
</template>
|
|
@@ -16,54 +14,37 @@ Click the button to show a toast.
|
|
|
16
14
|
|
|
17
15
|
## Status
|
|
18
16
|
|
|
19
|
-
**`status`**
|
|
17
|
+
**`status`** sets the color, the icon and the live-region role. With no `status`, the toast is neutral.
|
|
20
18
|
|
|
21
19
|
<sonic-code>
|
|
22
20
|
<template>
|
|
23
21
|
<div class="flex flex-wrap gap-2">
|
|
24
|
-
<sonic-button onclick="SonicToast.add({ text: 'Default message'
|
|
25
|
-
|
|
26
|
-
</sonic-button>
|
|
27
|
-
<sonic-button onclick="SonicToast.add({ text: '
|
|
28
|
-
|
|
29
|
-
</sonic-button>
|
|
30
|
-
<sonic-button onclick="SonicToast.add({ text: 'Something went wrong', status: 'error' })">
|
|
31
|
-
Error
|
|
32
|
-
</sonic-button>
|
|
33
|
-
<sonic-button onclick="SonicToast.add({ text: 'Check this detail', status: 'warning' })">
|
|
34
|
-
Warning
|
|
35
|
-
</sonic-button>
|
|
36
|
-
<sonic-button onclick="SonicToast.add({ text: 'Helpful context', status: 'info' })">
|
|
37
|
-
Info
|
|
38
|
-
</sonic-button>
|
|
22
|
+
<sonic-button onclick="SonicToast.add({ text: 'Default message' })">Default</sonic-button>
|
|
23
|
+
<sonic-button onclick="SonicToast.add({ text: 'Operation succeeded', status: 'success' })">Success</sonic-button>
|
|
24
|
+
<sonic-button onclick="SonicToast.add({ text: 'Something went wrong', status: 'error' })">Error</sonic-button>
|
|
25
|
+
<sonic-button onclick="SonicToast.add({ text: 'Check this detail', status: 'warning' })">Warning</sonic-button>
|
|
26
|
+
<sonic-button onclick="SonicToast.add({ text: 'Helpful context', status: 'info' })">Info</sonic-button>
|
|
39
27
|
</div>
|
|
40
28
|
</template>
|
|
41
29
|
</sonic-code>
|
|
42
30
|
|
|
43
31
|
## Label
|
|
44
32
|
|
|
45
|
-
|
|
33
|
+
**`label`** adds a bold heading above **`text`**. `title` is a deprecated alias.
|
|
46
34
|
|
|
47
35
|
<sonic-code>
|
|
48
36
|
<template>
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
</sonic-button>
|
|
55
|
-
<sonic-button
|
|
56
|
-
onclick="SonicToast.add({ label: 'Error', text: 'Processing failed. Try again.', status: 'error' })"
|
|
57
|
-
>
|
|
58
|
-
Error with label
|
|
59
|
-
</sonic-button>
|
|
60
|
-
</div>
|
|
37
|
+
<sonic-button
|
|
38
|
+
onclick="SonicToast.add({ label: 'Gate change', text: 'Flight CN 001 now departs from gate B12.', status: 'warning' })"
|
|
39
|
+
>
|
|
40
|
+
Toast with label
|
|
41
|
+
</sonic-button>
|
|
61
42
|
</template>
|
|
62
43
|
</sonic-code>
|
|
63
44
|
|
|
64
45
|
## HTML in text
|
|
65
46
|
|
|
66
|
-
**`text`**
|
|
47
|
+
**`text`** and **`label`** accept HTML strings. A link or form control in **`text`** turns on **`preserve`** automatically.
|
|
67
48
|
|
|
68
49
|
<sonic-code>
|
|
69
50
|
<template>
|
|
@@ -77,12 +58,12 @@ Set **`label`** for a bold title above **`text`**. **`title`** still works but i
|
|
|
77
58
|
|
|
78
59
|
## Preserve
|
|
79
60
|
|
|
80
|
-
|
|
61
|
+
Toasts hide after 6 seconds; the timer pauses on hover and focus. **`preserve`** keeps the toast until the user closes it.
|
|
81
62
|
|
|
82
63
|
<sonic-code>
|
|
83
64
|
<template>
|
|
84
65
|
<sonic-button
|
|
85
|
-
onclick="SonicToast.add({ text: '
|
|
66
|
+
onclick="SonicToast.add({ text: 'Turbulence ahead: please fasten your seat belt', status: 'info', preserve: true })"
|
|
86
67
|
>
|
|
87
68
|
Persistent toast
|
|
88
69
|
</sonic-button>
|
|
@@ -91,12 +72,12 @@ Without **`preserve`**, toasts auto-hide after about six seconds (timer pauses o
|
|
|
91
72
|
|
|
92
73
|
## Dismiss forever
|
|
93
74
|
|
|
94
|
-
With **`dismissForever`** and a stable **`id`**, closing the toast
|
|
75
|
+
With **`dismissForever`** and a stable **`id`**, closing the toast is stored in `localStorage` and later `add()` calls with that `id` are ignored. A toast identical to one already shown (ignoring `id`) is never added twice.
|
|
95
76
|
|
|
96
77
|
<sonic-code>
|
|
97
78
|
<template>
|
|
98
79
|
<sonic-button
|
|
99
|
-
onclick="SonicToast.add({ id: '
|
|
80
|
+
onclick="SonicToast.add({ id: 'welcome-toast', label: 'Welcome', text: 'Close me and I will not come back after a reload.', status: 'info', dismissForever: true })"
|
|
100
81
|
>
|
|
101
82
|
Dismiss forever
|
|
102
83
|
</sonic-button>
|
|
@@ -105,112 +86,62 @@ With **`dismissForever`** and a stable **`id`**, closing the toast stores dismis
|
|
|
105
86
|
|
|
106
87
|
## Ghost
|
|
107
88
|
|
|
108
|
-
**`ghost`** renders a semi-transparent, non-interactive toast
|
|
89
|
+
**`ghost`** renders a semi-transparent, non-interactive toast, for example for a background task.
|
|
109
90
|
|
|
110
91
|
<sonic-code>
|
|
111
92
|
<template>
|
|
112
93
|
<sonic-button
|
|
113
|
-
onclick="SonicToast.add({ text: '
|
|
94
|
+
onclick="SonicToast.add({ text: 'Syncing in the background', status: 'info', ghost: true })"
|
|
114
95
|
>
|
|
115
96
|
Ghost toast
|
|
116
97
|
</sonic-button>
|
|
117
98
|
</template>
|
|
118
99
|
</sonic-code>
|
|
119
100
|
|
|
120
|
-
##
|
|
121
|
-
|
|
122
|
-
Use static helpers to clear the stack from app logic (for example after navigation).
|
|
101
|
+
## Removing toasts
|
|
123
102
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
Removes every toast except **`ghost`** items.
|
|
103
|
+
Static helpers clear the stack from script, for example after navigation. **`removeAll()`** keeps ghost toasts; **`removeTemporaryItems()`** keeps preserved ones.
|
|
127
104
|
|
|
128
105
|
<sonic-code>
|
|
129
106
|
<template>
|
|
130
107
|
<div class="flex flex-wrap gap-2">
|
|
131
|
-
<sonic-button onclick="SonicToast.add({ text: '
|
|
132
|
-
<sonic-button onclick="SonicToast.add({ text: '
|
|
133
|
-
<sonic-button onclick="SonicToast.add({ text: '
|
|
134
|
-
<sonic-button onclick="SonicToast.removeAll()">Remove all</sonic-button>
|
|
108
|
+
<sonic-button onclick="SonicToast.add({ text: 'Temporary success', status: 'success' })">Add success</sonic-button>
|
|
109
|
+
<sonic-button onclick="SonicToast.add({ text: 'Temporary error', status: 'error' })">Add error</sonic-button>
|
|
110
|
+
<sonic-button onclick="SonicToast.add({ text: 'Persistent info', status: 'info', preserve: true })">Add persistent</sonic-button>
|
|
135
111
|
</div>
|
|
136
|
-
|
|
137
|
-
</sonic-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
<sonic-code>
|
|
142
|
-
<template>
|
|
143
|
-
<div class="flex flex-wrap gap-2">
|
|
144
|
-
<sonic-button onclick="SonicToast.add({ text: 'Success toast', status: 'success' })">Success</sonic-button>
|
|
145
|
-
<sonic-button onclick="SonicToast.add({ text: 'Error toast', status: 'error' })">Error</sonic-button>
|
|
146
|
-
<sonic-button onclick="SonicToast.add({ text: 'Warning toast', status: 'warning' })">Warning</sonic-button>
|
|
147
|
-
<sonic-button onclick="SonicToast.removeItemsByStatus('success')">Remove success</sonic-button>
|
|
148
|
-
<sonic-button onclick="SonicToast.removeItemsByStatus('error')">Remove error</sonic-button>
|
|
149
|
-
</div>
|
|
150
|
-
</template>
|
|
151
|
-
</sonic-code>
|
|
152
|
-
|
|
153
|
-
### Remove temporary items
|
|
154
|
-
|
|
155
|
-
Removes toasts that are not **`preserve`**.
|
|
156
|
-
|
|
157
|
-
<sonic-code>
|
|
158
|
-
<template>
|
|
159
|
-
<div class="flex flex-wrap gap-2">
|
|
160
|
-
<sonic-button onclick="SonicToast.add({ text: 'Temporary toast', status: 'info' })">Temporary</sonic-button>
|
|
161
|
-
<sonic-button onclick="SonicToast.add({ text: 'Persistent toast', status: 'success', preserve: true })">
|
|
162
|
-
Persistent
|
|
163
|
-
</sonic-button>
|
|
164
|
-
<sonic-button onclick="SonicToast.removeTemporaryItems()">Remove temporary</sonic-button>
|
|
112
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
113
|
+
<sonic-button variant="outline" onclick="SonicToast.removeItemsByStatus('success')">Remove success</sonic-button>
|
|
114
|
+
<sonic-button variant="outline" onclick="SonicToast.removeTemporaryItems()">Remove temporary</sonic-button>
|
|
115
|
+
<sonic-button variant="outline" onclick="SonicToast.removeAll()">Remove all</sonic-button>
|
|
165
116
|
</div>
|
|
166
117
|
</template>
|
|
167
118
|
</sonic-code>
|
|
168
119
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
<sonic-code>
|
|
172
|
-
<template>
|
|
173
|
-
<sonic-button
|
|
174
|
-
onclick="SonicToast.add({
|
|
175
|
-
id: 'welcome-toast',
|
|
176
|
-
label: 'Welcome',
|
|
177
|
-
text: 'Welcome to the platform. Explore the docs to get started.',
|
|
178
|
-
status: 'success',
|
|
179
|
-
dismissForever: true
|
|
180
|
-
})"
|
|
181
|
-
>
|
|
182
|
-
Full example
|
|
183
|
-
</sonic-button>
|
|
184
|
-
</template>
|
|
185
|
-
</sonic-code>
|
|
186
|
-
|
|
187
|
-
## Accessibility
|
|
188
|
-
|
|
189
|
-
Each toast uses **`role="alert"`** for **`error`** and **`role="status"`** otherwise (with **`aria-live="polite"`** when applicable). Status icons are decorative (**`aria-hidden`**). The close control has an i18n **`aria-label`**. When there is no **`label`**, a truncated string **`aria-label`** may be derived from plain **`text`**.
|
|
120
|
+
Inside an iframe, toasts are forwarded to the parent window's stack when the parent also loads Concorde.
|
|
190
121
|
|
|
191
122
|
## API reference
|
|
192
123
|
|
|
193
|
-
Options
|
|
124
|
+
Options of **`SonicToast.add(options)`**:
|
|
194
125
|
|
|
195
126
|
| Option | Values | Description |
|
|
196
127
|
|----------|---------|-------------|
|
|
197
|
-
| `text` | string · Lit template |
|
|
198
|
-
| `label` | string · Lit template |
|
|
199
|
-
| `title` | string · Lit template | Deprecated alias
|
|
200
|
-
| `status` | `success` · `error` · `warning` · `info`
|
|
201
|
-
| `id` | string · number |
|
|
202
|
-
| `preserve` | boolean |
|
|
203
|
-
| `ghost` | boolean | Semi-transparent and non-interactive; kept by
|
|
204
|
-
| `dismissForever` | boolean |
|
|
205
|
-
| `styleSheet` |
|
|
206
|
-
| `useSlot` | boolean | Legacy:
|
|
128
|
+
| `text` | string · Lit template | Body, required; HTML strings allowed |
|
|
129
|
+
| `label` | string · Lit template | Heading above `text` |
|
|
130
|
+
| `title` | string · Lit template | Deprecated alias of `label` |
|
|
131
|
+
| `status` | `success` · `error` · `warning` · `info` (default neutral) | Color and icon; `error` gets `role="alert"`, others `role="status"` |
|
|
132
|
+
| `id` | string · number (default timestamp) | Identifier for `removeItemById` and `dismissForever` |
|
|
133
|
+
| `preserve` | boolean | No auto-hide; forced when `text` contains a link or control |
|
|
134
|
+
| `ghost` | boolean | Semi-transparent and non-interactive; kept by `removeAll` |
|
|
135
|
+
| `dismissForever` | boolean | Remember the dismissal in `localStorage`; needs a stable `id` |
|
|
136
|
+
| `styleSheet` | `CSSResult` · `CSSStyleSheet` · array | Extra styles adopted by the toast |
|
|
137
|
+
| `useSlot` | boolean | Legacy: render `text` in the light DOM |
|
|
207
138
|
|
|
208
139
|
| Method | Description |
|
|
209
140
|
|--------|-------------|
|
|
210
|
-
| `SonicToast.add(
|
|
211
|
-
| `SonicToast.removeAll()` | Remove
|
|
212
|
-
| `SonicToast.removeItemsByStatus(status)` | Remove toasts
|
|
213
|
-
| `SonicToast.removeItemById(id)` | Remove
|
|
214
|
-
| `SonicToast.removeTemporaryItems()` | Remove toasts without
|
|
141
|
+
| `SonicToast.add(options)` | Show a toast; returns the stored config, or `null` when skipped |
|
|
142
|
+
| `SonicToast.removeAll()` | Remove every toast except ghosts |
|
|
143
|
+
| `SonicToast.removeItemsByStatus(status)` | Remove toasts with this `status` |
|
|
144
|
+
| `SonicToast.removeItemById(id)` | Remove one toast |
|
|
145
|
+
| `SonicToast.removeTemporaryItems()` | Remove toasts without `preserve` |
|
|
215
146
|
|
|
216
|
-
|
|
147
|
+
`sonic-toast` and `sonic-toast-item` are created by `add()`; do not write them in markup. `sonic-toast-message-subscriber` shows a toast for each `{ type: "public", content, status }` entry of its `messages` property.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Tooltip
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**`sonic-tooltip`** shows a short `label` in a bubble when the trigger in the default slot is hovered or receives focus. With no `placement`, the bubble sits on `top`, centered. An empty `label` hides the bubble, like `disabled`.
|
|
4
4
|
|
|
5
5
|
## Basic example
|
|
6
6
|
|
|
7
7
|
<sonic-code>
|
|
8
8
|
<template>
|
|
9
|
-
<sonic-tooltip label="
|
|
9
|
+
<sonic-tooltip label="Cruising at Mach 2.04">
|
|
10
10
|
<sonic-button variant="outline">Hover me</sonic-button>
|
|
11
11
|
</sonic-tooltip>
|
|
12
12
|
</template>
|
|
@@ -14,67 +14,34 @@ Tooltip shows a short **`label`** on hover (and on focus when the trigger can re
|
|
|
14
14
|
|
|
15
15
|
## Placement
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
`top` · `bottom` · `left` · `right` set the side. Add `-start` or `-end` to align the bubble with an edge of the trigger instead of its center. The bubble is repositioned while open to stay in the viewport.
|
|
18
18
|
|
|
19
19
|
<sonic-code>
|
|
20
20
|
<template>
|
|
21
|
-
<div class="flex flex-wrap gap-
|
|
22
|
-
<sonic-tooltip placement="top" label="
|
|
23
|
-
|
|
24
|
-
</sonic-tooltip>
|
|
25
|
-
<sonic-tooltip placement="bottom" label="
|
|
26
|
-
|
|
27
|
-
</sonic-tooltip>
|
|
28
|
-
<sonic-tooltip placement="
|
|
29
|
-
|
|
30
|
-
</sonic-tooltip>
|
|
31
|
-
<sonic-tooltip placement="
|
|
32
|
-
|
|
33
|
-
</sonic-tooltip>
|
|
21
|
+
<div class="flex flex-wrap gap-3">
|
|
22
|
+
<sonic-tooltip placement="top" label="top"><sonic-button minWidth="9rem">top</sonic-button></sonic-tooltip>
|
|
23
|
+
<sonic-tooltip placement="top-start" label="top-start"><sonic-button minWidth="9rem">top-start</sonic-button></sonic-tooltip>
|
|
24
|
+
<sonic-tooltip placement="top-end" label="top-end"><sonic-button minWidth="9rem">top-end</sonic-button></sonic-tooltip>
|
|
25
|
+
<sonic-tooltip placement="bottom" label="bottom"><sonic-button minWidth="9rem">bottom</sonic-button></sonic-tooltip>
|
|
26
|
+
<sonic-tooltip placement="bottom-start" label="bottom-start"><sonic-button minWidth="9rem">bottom-start</sonic-button></sonic-tooltip>
|
|
27
|
+
<sonic-tooltip placement="bottom-end" label="bottom-end"><sonic-button minWidth="9rem">bottom-end</sonic-button></sonic-tooltip>
|
|
28
|
+
<sonic-tooltip placement="left" label="left"><sonic-button minWidth="9rem">left</sonic-button></sonic-tooltip>
|
|
29
|
+
<sonic-tooltip placement="left-start" label="left-start"><sonic-button minWidth="9rem">left-start</sonic-button></sonic-tooltip>
|
|
30
|
+
<sonic-tooltip placement="left-end" label="left-end"><sonic-button minWidth="9rem">left-end</sonic-button></sonic-tooltip>
|
|
31
|
+
<sonic-tooltip placement="right" label="right"><sonic-button minWidth="9rem">right</sonic-button></sonic-tooltip>
|
|
32
|
+
<sonic-tooltip placement="right-start" label="right-start"><sonic-button minWidth="9rem">right-start</sonic-button></sonic-tooltip>
|
|
33
|
+
<sonic-tooltip placement="right-end" label="right-end"><sonic-button minWidth="9rem">right-end</sonic-button></sonic-tooltip>
|
|
34
34
|
</div>
|
|
35
35
|
</template>
|
|
36
36
|
</sonic-code>
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
## Multiline label
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
<template>
|
|
42
|
-
<div class="flex gap-3 flex-wrap">
|
|
43
|
-
<sonic-tooltip placement="top-start" label="Top start">
|
|
44
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Top start</sonic-button>
|
|
45
|
-
</sonic-tooltip>
|
|
46
|
-
<sonic-tooltip placement="top-end" label="Top end">
|
|
47
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Top end</sonic-button>
|
|
48
|
-
</sonic-tooltip>
|
|
49
|
-
<sonic-tooltip placement="bottom-start" label="Bottom start">
|
|
50
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Bottom start</sonic-button>
|
|
51
|
-
</sonic-tooltip>
|
|
52
|
-
<sonic-tooltip placement="bottom-end" label="Bottom end">
|
|
53
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Bottom end</sonic-button>
|
|
54
|
-
</sonic-tooltip>
|
|
55
|
-
<sonic-tooltip placement="right-start" label="Right start">
|
|
56
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Right start</sonic-button>
|
|
57
|
-
</sonic-tooltip>
|
|
58
|
-
<sonic-tooltip placement="right-end" label="Right end">
|
|
59
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Right end</sonic-button>
|
|
60
|
-
</sonic-tooltip>
|
|
61
|
-
<sonic-tooltip placement="left-start" label="Left start">
|
|
62
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Left start</sonic-button>
|
|
63
|
-
</sonic-tooltip>
|
|
64
|
-
<sonic-tooltip placement="left-end" label="Left end">
|
|
65
|
-
<sonic-button class="size-40 bg-neutral-200 rounded-lg">Left end</sonic-button>
|
|
66
|
-
</sonic-tooltip>
|
|
67
|
-
</div>
|
|
68
|
-
</template>
|
|
69
|
-
</sonic-code>
|
|
70
|
-
|
|
71
|
-
## Label formatting
|
|
72
|
-
|
|
73
|
-
**`label`** supports line breaks (`\n` in markup or multiline text). Lines are trimmed; **` `** is normalized to spaces. **`white-space: pre-line`** preserves breaks in the bubble (max width **18rem**).
|
|
40
|
+
Line breaks in `label` (a real newline or ` `) are kept. Each line is trimmed and the bubble wraps at `18rem`.
|
|
74
41
|
|
|
75
42
|
<sonic-code>
|
|
76
43
|
<template>
|
|
77
|
-
<sonic-tooltip label="
|
|
44
|
+
<sonic-tooltip label="Gate B12 Boarding at 08:15">
|
|
78
45
|
<sonic-button variant="outline">Multiline label</sonic-button>
|
|
79
46
|
</sonic-tooltip>
|
|
80
47
|
</template>
|
|
@@ -82,7 +49,7 @@ Use **`top`** · **`bottom`** · **`left`** · **`right`** for the main axis. Ad
|
|
|
82
49
|
|
|
83
50
|
## Focusable
|
|
84
51
|
|
|
85
|
-
|
|
52
|
+
Set `focusable` when the trigger is not focusable itself (text, icon): the host gets `tabindex="0"` so keyboard users can open the tooltip. The bubble uses `popover="hint"`; without Popover API support, the label falls back to a native `title` on one line.
|
|
86
53
|
|
|
87
54
|
<sonic-code>
|
|
88
55
|
<template>
|
|
@@ -98,6 +65,8 @@ On non-interactive triggers, set **`focusable`** so the host gets **`tabindex="0
|
|
|
98
65
|
|
|
99
66
|
## Disabled
|
|
100
67
|
|
|
68
|
+
`disabled` never shows the bubble and sets `tabindex="-1"` on the host.
|
|
69
|
+
|
|
101
70
|
<sonic-code>
|
|
102
71
|
<template>
|
|
103
72
|
<sonic-tooltip disabled label="Not shown">
|
|
@@ -106,19 +75,15 @@ On non-interactive triggers, set **`focusable`** so the host gets **`tabindex="0
|
|
|
106
75
|
</template>
|
|
107
76
|
</sonic-code>
|
|
108
77
|
|
|
109
|
-
## Accessibility
|
|
110
|
-
|
|
111
|
-
The bubble uses **`popover="hint"`** (non-modal, no pointer capture). Prefer **`focusable`** when the slotted content is not already focusable. When the Popover API is unavailable, the host falls back to the native **`title`** attribute with a single-line label. Opacity transitions respect **`prefers-reduced-motion`**.
|
|
112
|
-
|
|
113
78
|
## API reference
|
|
114
79
|
|
|
115
80
|
| Attribute | Values | Description |
|
|
116
81
|
|----------|---------|-------------|
|
|
117
|
-
| `label` | string | Tooltip
|
|
118
|
-
| `placement` | `top` (default) · `bottom` · `left` · `right
|
|
119
|
-
| `disabled` | boolean |
|
|
120
|
-
| `focusable` | boolean |
|
|
82
|
+
| `label` | string | Tooltip text; empty or whitespace-only hides the bubble |
|
|
83
|
+
| `placement` | `top` (default) · `bottom` · `left` · `right`, each with optional `-start` · `-end` | Side and alignment relative to the trigger |
|
|
84
|
+
| `disabled` | boolean | Never show the bubble; sets `tabindex="-1"` on the host |
|
|
85
|
+
| `focusable` | boolean | Sets `tabindex="0"` on the host so the tooltip opens on keyboard focus |
|
|
121
86
|
|
|
122
87
|
| Slot | Description |
|
|
123
88
|
|------|-------------|
|
|
124
|
-
| *(default)* | Trigger content
|
|
89
|
+
| *(default)* | Trigger content |
|
|
@@ -189,28 +189,23 @@ function bindImpl(
|
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
/** @deprecated Pass a `DataProviderKey<T>` instead of a string path (typed, refactor-safe). */
|
|
193
|
+
export function bind(
|
|
194
|
+
path: string,
|
|
195
|
+
options?: BindOptions,
|
|
196
|
+
): (target: unknown, propertyKey: string) => void;
|
|
192
197
|
/**
|
|
193
|
-
* Bidirectional binding to a publisher path
|
|
194
|
-
*
|
|
195
|
-
*
|
|
198
|
+
* Bidirectional binding to a publisher path: subscribes to changes and, with
|
|
199
|
+
* `reflect: true`, writes local assignments back. For one direction only, use
|
|
200
|
+
* `@subscribe` (read) or `@publish` (write).
|
|
201
|
+
* Supports dynamic paths: use placeholders like "users.${userIndex}" in the DataProviderKey.
|
|
196
202
|
*
|
|
197
203
|
* @example
|
|
198
|
-
* // String path (legacy):
|
|
199
|
-
* @bind("demoData.firstName")
|
|
200
|
-
* @state()
|
|
201
|
-
* firstName = "";
|
|
202
|
-
*
|
|
203
|
-
* @example
|
|
204
|
-
* // DataProviderKey with type validation:
|
|
205
204
|
* const dataKey = new DataProviderKey<Data>("data");
|
|
206
205
|
* @bind(dataKey.count, { reflect: true })
|
|
207
206
|
* @state()
|
|
208
207
|
* count: number = 0;
|
|
209
208
|
*/
|
|
210
|
-
export function bind(
|
|
211
|
-
path: string,
|
|
212
|
-
options?: BindOptions,
|
|
213
|
-
): (target: unknown, propertyKey: string) => void;
|
|
214
209
|
export function bind<T, U = any>(
|
|
215
210
|
key: DataProviderKey<T, U>,
|
|
216
211
|
options?: BindOptions,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import LocationHandler from "./LocationHandler";
|
|
3
|
+
|
|
4
|
+
describe("LocationHandler.changeFromComponent pushState", () => {
|
|
5
|
+
const pushState = vi.fn();
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
pushState.mockClear();
|
|
9
|
+
vi.stubGlobal("history", {
|
|
10
|
+
pushState,
|
|
11
|
+
replaceState: vi.fn(),
|
|
12
|
+
state: null,
|
|
13
|
+
length: 1,
|
|
14
|
+
});
|
|
15
|
+
vi.stubGlobal("document", {
|
|
16
|
+
location: {
|
|
17
|
+
href: "https://concorde.supersoniks.org/",
|
|
18
|
+
origin: "https://concorde.supersoniks.org",
|
|
19
|
+
pathname: "/",
|
|
20
|
+
search: "",
|
|
21
|
+
hash: "",
|
|
22
|
+
},
|
|
23
|
+
title: "Concorde",
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
function el(attrs: Record<string, string>) {
|
|
28
|
+
return {
|
|
29
|
+
getAttribute: (k: string) => (k in attrs ? attrs[k] : null),
|
|
30
|
+
hasAttribute: (k: string) => k in attrs,
|
|
31
|
+
href: attrs.href || "",
|
|
32
|
+
goBack: null,
|
|
33
|
+
autoActive: "disabled",
|
|
34
|
+
} as never;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
it("pushState keeps a single leading slash (no protocol-relative //path)", () => {
|
|
38
|
+
LocationHandler.changeFromComponent(
|
|
39
|
+
el({ href: "/docs/getting-started/start", pushState: "" }),
|
|
40
|
+
);
|
|
41
|
+
expect(pushState).toHaveBeenCalledTimes(1);
|
|
42
|
+
expect(pushState.mock.calls[0][2]).toBe("/docs/getting-started/start");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("preserves hash fragments on pathname routes", () => {
|
|
46
|
+
LocationHandler.changeFromComponent(
|
|
47
|
+
el({
|
|
48
|
+
href: "/core/components/functional/router#departures",
|
|
49
|
+
pushState: "",
|
|
50
|
+
}),
|
|
51
|
+
);
|
|
52
|
+
expect(pushState.mock.calls[0][2]).toBe(
|
|
53
|
+
"/core/components/functional/router#departures",
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("keeps pretty component paths without inventing a trailing duplicate", () => {
|
|
58
|
+
LocationHandler.changeFromComponent(
|
|
59
|
+
el({
|
|
60
|
+
href: "/core/components/functional/router",
|
|
61
|
+
pushState: "",
|
|
62
|
+
}),
|
|
63
|
+
);
|
|
64
|
+
expect(pushState.mock.calls[0][2]).toBe(
|
|
65
|
+
"/core/components/functional/router",
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("collapses empty segments from double slashes", () => {
|
|
70
|
+
LocationHandler.changeFromComponent(
|
|
71
|
+
el({ href: "/docs//getting-started//start", pushState: "" }),
|
|
72
|
+
);
|
|
73
|
+
expect(pushState.mock.calls[0][2]).toBe("/docs/getting-started/start");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("navigates to / for the homepage", () => {
|
|
77
|
+
LocationHandler.changeFromComponent(el({ href: "/", pushState: "" }));
|
|
78
|
+
expect(pushState.mock.calls[0][2]).toBe("/");
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -115,15 +115,11 @@ export default class LocationHandler {
|
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
const url = new URL(to, document.location.href);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
prevSp = sp;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
to = "/" + newPathName.join("/") + url.search + (url.hash ? url.hash : "");
|
|
118
|
+
// Drop empty segments from pathname.split ("/a//b" → /a/b) so we never
|
|
119
|
+
// emit a protocol-relative `//path`. Public docs URLs are already pretty
|
|
120
|
+
// (no …/router/router); equal siblings are left untouched if present.
|
|
121
|
+
const parts = url.pathname.split("/").filter(Boolean);
|
|
122
|
+
to = `/${parts.join("/")}${url.search}${url.hash || ""}`;
|
|
127
123
|
if (component.hasAttribute("pushState")) {
|
|
128
124
|
history.pushState(null, "", to);
|
|
129
125
|
} else if (component.hasAttribute("replaceState")) {
|