@supersoniks/concorde 5.1.1 → 5.1.3-immutable.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/concorde-docs/SKILL.md +153 -0
- package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
- package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
- package/.agents/skills/concorde-docs/templates/guide.md +25 -0
- package/.claude/skills +1 -0
- package/.github/workflows/ci.yml +21 -0
- package/.github-export-ignore +30 -0
- package/CONTRIBUTING.md +59 -0
- package/DEV.md +54 -0
- package/LICENSE +21 -0
- package/OPEN_SOURCE_CHECKPOINT.md +133 -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 +177 -177
- package/concorde-core.es.js +4993 -4833
- 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 +177 -177
- package/dist/concorde-core.es.js +4993 -4833
- 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/assets/index-D_alEsng.js +12122 -0
- package/docs/crawl/core/components/functional/date/date.html +190 -0
- package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
- package/docs/crawl/core/components/functional/if/if.html +27 -0
- package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
- package/docs/crawl/core/components/functional/list/list.html +70 -0
- package/docs/crawl/core/components/functional/mix/mix.html +45 -0
- package/docs/crawl/core/components/functional/queue/queue.html +96 -0
- package/docs/crawl/core/components/functional/router/router.html +106 -0
- package/docs/crawl/core/components/functional/sdui/sdui-extension-points.html +126 -0
- package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
- package/docs/crawl/core/components/functional/states/states.html +66 -0
- package/docs/crawl/core/components/functional/submit/submit.html +160 -0
- package/docs/crawl/core/components/functional/subscriber/subscriber.html +67 -0
- package/docs/crawl/core/components/functional/value/value.html +51 -0
- package/docs/crawl/core/components/ui/alert/alert.html +211 -0
- package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +131 -0
- package/docs/crawl/core/components/ui/badge/badge.html +197 -0
- package/docs/crawl/core/components/ui/button/button.html +150 -0
- package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
- package/docs/crawl/core/components/ui/card/card.html +253 -0
- package/docs/crawl/core/components/ui/divider/divider.html +144 -0
- package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
- package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
- package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +122 -0
- package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
- package/docs/crawl/core/components/ui/form/input/input.html +109 -0
- package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
- package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
- package/docs/crawl/core/components/ui/form/select/select.html +73 -0
- package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
- package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
- package/docs/crawl/core/components/ui/group/group.html +104 -0
- package/docs/crawl/core/components/ui/icon/icon.html +222 -0
- package/docs/crawl/core/components/ui/image/image.html +298 -0
- package/docs/crawl/core/components/ui/link/link.html +100 -0
- package/docs/crawl/core/components/ui/loader/loader.html +124 -0
- package/docs/crawl/core/components/ui/menu/menu.html +394 -0
- package/docs/crawl/core/components/ui/modal/modal.html +342 -0
- package/docs/crawl/core/components/ui/pop/pop.html +296 -0
- package/docs/crawl/core/components/ui/progress/progress.html +131 -0
- package/docs/crawl/core/components/ui/table/table.html +545 -0
- package/docs/crawl/core/components/ui/theme/theme.html +131 -0
- package/docs/crawl/core/components/ui/toast/toast.html +233 -0
- package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
- package/docs/crawl/docs/_core-concept/dataFlow.html +177 -0
- package/docs/crawl/docs/_core-concept/overview.html +66 -0
- package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
- package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
- package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
- package/docs/crawl/docs/_decorators/bind.html +141 -0
- package/docs/crawl/docs/_decorators/get.html +149 -0
- package/docs/crawl/docs/_decorators/handle.html +165 -0
- package/docs/crawl/docs/_decorators/on-assign.html +355 -0
- package/docs/crawl/docs/_decorators/patch.html +78 -0
- package/docs/crawl/docs/_decorators/post.html +139 -0
- package/docs/crawl/docs/_decorators/publish.html +61 -0
- package/docs/crawl/docs/_decorators/put.html +78 -0
- package/docs/crawl/docs/_decorators/subscribe.html +109 -0
- package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
- package/docs/crawl/docs/_directives/sub.html +93 -0
- package/docs/crawl/docs/_getting-started/ai-agents.html +173 -0
- package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
- package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
- package/docs/crawl/docs/_getting-started/create-a-component.html +111 -0
- package/docs/crawl/docs/_getting-started/my-first-component.html +189 -0
- package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
- package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
- package/docs/crawl/docs/_getting-started/start.html +76 -0
- package/docs/crawl/docs/_getting-started/theming.html +333 -0
- package/docs/crawl/docs/_misc/api-configuration.html +149 -0
- package/docs/crawl/docs/_misc/dataProviderKey.html +135 -0
- package/docs/crawl/docs/_misc/docs-mock-api.html +158 -0
- package/docs/crawl/docs/_misc/dynamic-path.html +180 -0
- package/docs/crawl/docs/_misc/endpoint.html +50 -0
- package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
- package/docs/crawl/docs/_misc/html-integration.html +48 -0
- package/docs/crawl/hubs/decorators.html +547 -0
- package/docs/crawl/hubs/form-components.html +381 -0
- package/docs/crawl/hubs/remote-data.html +452 -0
- package/docs/crawl/index.html +103 -0
- package/docs/index.html +1 -1
- package/docs/llms-full.txt +7174 -0
- package/docs/llms.txt +98 -0
- package/docs/sitemap.xml +243 -0
- package/docs/src/core/components/functional/date/date.md +290 -0
- package/docs/src/core/components/functional/fetch/fetch.md +125 -0
- package/docs/src/core/components/functional/if/if.md +9 -0
- package/docs/src/core/components/functional/jsonata/jsonata.md +56 -0
- package/docs/src/core/components/functional/list/list.md +65 -0
- package/docs/src/core/components/functional/mix/mix.md +41 -0
- package/docs/src/core/components/functional/queue/queue.md +72 -0
- package/docs/src/core/components/functional/router/router.md +94 -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 +99 -0
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
- package/docs/src/core/components/functional/sdui/sdui.md +478 -0
- package/docs/src/core/components/functional/states/states.md +87 -0
- package/docs/src/core/components/functional/submit/submit.md +114 -0
- package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
- package/docs/src/core/components/functional/value/value.md +35 -0
- package/docs/src/core/components/ui/alert/alert.md +196 -0
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/src/core/components/ui/badge/badge.md +188 -0
- package/docs/src/core/components/ui/button/button.md +183 -0
- package/docs/src/core/components/ui/captcha/captcha.md +71 -0
- package/docs/src/core/components/ui/card/card.md +215 -0
- package/docs/src/core/components/ui/divider/divider.md +129 -0
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +77 -0
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +205 -0
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +100 -0
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +119 -0
- package/docs/src/core/components/ui/form/input/input.md +142 -0
- package/docs/src/core/components/ui/form/radio/radio.md +57 -0
- package/docs/src/core/components/ui/form/select/select.md +71 -0
- package/docs/src/core/components/ui/form/switch/switch.md +57 -0
- package/docs/src/core/components/ui/form/textarea/textarea.md +65 -0
- package/docs/src/core/components/ui/group/group.md +75 -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 +233 -0
- package/docs/src/core/components/ui/link/link.md +81 -0
- package/docs/src/core/components/ui/loader/loader.md +112 -0
- package/docs/src/core/components/ui/menu/menu.md +370 -0
- package/docs/src/core/components/ui/modal/modal.md +235 -0
- package/docs/src/core/components/ui/pop/pop.md +294 -0
- package/docs/src/core/components/ui/progress/progress.md +109 -0
- package/docs/src/core/components/ui/table/table.md +431 -0
- package/docs/src/core/components/ui/theme/theme.md +122 -0
- package/docs/src/core/components/ui/toast/toast.md +216 -0
- package/docs/src/core/components/ui/tooltip/tooltip.md +124 -0
- package/{src → docs/src}/docs/_core-concept/subscriber.md +0 -0
- package/{src → docs/src}/docs/_getting-started/my-first-subscriber.md +0 -0
- package/{src → docs/src}/docs/_getting-started/pubsub.md +0 -0
- package/docs/src/docs/_getting-started/theming.md +253 -0
- package/docs/src/docs/search/docs-search.json +12242 -0
- package/docs/src/tag-list.json +1 -0
- package/docs/src/tsconfig-model.json +23 -0
- package/docs/src/tsconfig.declarations.json +22 -0
- package/docs/src/tsconfig.emit.json +23 -0
- package/docs/src/tsconfig.json +1332 -0
- package/gitlab/job_github_mirror.sh +39 -0
- package/index.html +157 -5
- package/package.json +22 -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/github-export.mjs +150 -0
- package/scripts/post-build-docs.js +37 -50
- package/scripts/post-build.mjs +0 -0
- 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/example/example.ts +3 -1
- package/src/core/components/functional/fetch/fetch.md +66 -83
- package/src/core/components/functional/if/if.md +28 -3
- package/src/core/components/functional/if/if.ts +0 -0
- package/src/core/components/functional/jsonata/jsonata.md +42 -37
- package/src/core/components/functional/list/list.demo.ts +0 -0
- package/src/core/components/functional/list/list.md +103 -43
- package/src/core/components/functional/list/list.ts +17 -4
- package/src/core/components/functional/mix/mix.md +31 -26
- package/src/core/components/functional/queue/queue.demo.ts +10 -7
- package/src/core/components/functional/queue/queue.md +40 -61
- package/src/core/components/functional/router/router.demo.ts +16 -16
- package/src/core/components/functional/router/router.md +64 -65
- package/src/core/components/functional/router/router.ts +0 -0
- package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
- package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/src/core/components/functional/sdui/component-catalog.json +2 -2
- 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-immutable.spec.ts +74 -0
- package/src/core/components/functional/sdui/sdui.md +187 -358
- package/src/core/components/functional/sdui/sdui.ts +33 -8
- package/src/core/components/functional/sdui/types.ts +0 -0
- package/src/core/components/functional/states/states.demo.ts +21 -22
- package/src/core/components/functional/states/states.md +86 -61
- package/src/core/components/functional/states/states.ts +1 -1
- package/src/core/components/functional/submit/submit.md +64 -72
- package/src/core/components/functional/submit/submit.spec.ts +60 -0
- package/src/core/components/functional/submit/submit.ts +6 -3
- package/src/core/components/functional/subscriber/subscriber.ts +0 -0
- package/src/core/components/functional/translation/translation.md +38 -0
- package/src/core/components/functional/value/value.md +34 -22
- package/src/core/components/functional/value/value.ts +0 -0
- package/src/core/components/ui/_css/size.ts +0 -0
- package/src/core/components/ui/alert/alert.md +48 -58
- package/src/core/components/ui/badge/badge.md +27 -34
- package/src/core/components/ui/button/button.md +139 -106
- package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
- package/src/core/components/ui/captcha/captcha.md +17 -32
- package/src/core/components/ui/card/card.md +6 -6
- package/src/core/components/ui/divider/divider.md +8 -11
- package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
- package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
- package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
- package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
- package/src/core/components/ui/form/input/input.md +108 -90
- package/src/core/components/ui/form/input/input.ts +8 -2
- package/src/core/components/ui/form/radio/radio.md +65 -30
- 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/decorators/subscriber/subscribe.ts +15 -9
- package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
- package/src/core/mixins/Subscriber.ts +0 -0
- package/src/core/utils/DataBindObserver.ts +0 -0
- package/src/core/utils/LocationHandler.spec.ts +80 -0
- package/src/core/utils/LocationHandler.ts +5 -9
- package/src/core/utils/Objects.ts +0 -0
- package/src/core/utils/PublisherProxy.ts +166 -125
- package/src/core/utils/deepReadonly.spec.ts +66 -0
- package/src/core/utils/deepReadonly.ts +71 -0
- package/src/core/utils/immutableValue.spec.ts +54 -0
- package/src/core/utils/immutableValue.ts +102 -0
- package/src/core/utils/nestedDotForm.spec.ts +88 -0
- package/src/core/utils/publisherImmutable.spec.ts +76 -0
- package/src/core/utils/route.ts +0 -0
- package/src/core/utils/strictGet.spec.ts +61 -0
- package/src/core/utils/strictGet.ts +102 -0
- package/src/css.d.ts +19 -0
- 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/example/users.ts +0 -0
- package/src/docs/getting-started/ai-agents.md +50 -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/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/misc/publisher-get-immutability-docs-crawl.json +902 -0
- package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
- package/src/docs/misc/publisher-get-immutability-study.md +229 -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 +84 -101
- package/src/docs/navigation/toc.ts +7 -4
- package/src/docs/search/docs-search.json +3188 -5153
- 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.declarations.json +22 -0
- package/src/tsconfig.emit.json +23 -0
- package/src/tsconfig.json +53 -5
- package/src/tsconfig.tsbuildinfo +1 -1
- package/vite.config.mts +11 -2
- package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
- package/.taste-skill/after/desktop-fold.jpg +0 -0
- package/.taste-skill/after/desktop-page-01.jpg +0 -0
- package/.taste-skill/after/desktop-page-02.jpg +0 -0
- package/.taste-skill/after/desktop-page-03.jpg +0 -0
- package/.taste-skill/after/mobile-fold.jpg +0 -0
- package/.taste-skill/after/mobile-page-01.jpg +0 -0
- package/.taste-skill/after/report.json +0 -4103
- package/.taste-skill/after/tablet-fold.jpg +0 -0
- package/.taste-skill/after/tablet-page-01.jpg +0 -0
- package/.taste-skill/after/tablet-page-02.jpg +0 -0
- package/.taste-skill/before/desktop-fold.jpg +0 -0
- package/.taste-skill/before/desktop-page-01.jpg +0 -0
- package/.taste-skill/before/desktop-page-02.jpg +0 -0
- package/.taste-skill/before/mobile-fold.jpg +0 -0
- package/.taste-skill/before/mobile-page-01.jpg +0 -0
- package/.taste-skill/before/report.json +0 -2556
- package/.taste-skill/before/tablet-fold.jpg +0 -0
- package/.taste-skill/before/tablet-page-01.jpg +0 -0
- package/.taste-skill/direction.json +0 -510
- package/.taste-skill/notes.md +0 -84
- package/.taste-skill/prod/desktop-fold.jpg +0 -0
- package/.taste-skill/prod/desktop-page-01.jpg +0 -0
- package/.taste-skill/prod/desktop-page-02.jpg +0 -0
- package/.taste-skill/prod/desktop-page-03.jpg +0 -0
- package/.taste-skill/prod/mobile-fold.jpg +0 -0
- package/.taste-skill/prod/mobile-page-01.jpg +0 -0
- package/.taste-skill/prod/mobile-page-02.jpg +0 -0
- package/.taste-skill/prod/report.json +0 -1973
- package/.taste-skill/prod/tablet-fold.jpg +0 -0
- package/.taste-skill/prod/tablet-page-01.jpg +0 -0
- package/.taste-skill/prod/tablet-page-02.jpg +0 -0
- package/AUDIT.md +0 -228
- package/PLAN-AMELIORATION.md +0 -220
- 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-Bb-_LRyY.js +0 -12280
- package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
- package/src/docs/example/docs-joke-demos.ts +0 -297
- /package/{src → docs/src}/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -0
- /package/{src → docs/src}/docs/_core-concept/dataFlow.md +0 -0
- /package/{src → docs/src}/docs/_core-concept/overview.md +0 -0
- /package/{src → docs/src}/docs/_decorators/ancestor-attribute.md +0 -0
- /package/{src → docs/src}/docs/_decorators/auto-subscribe.md +0 -0
- /package/{src → docs/src}/docs/_decorators/bind.md +0 -0
- /package/{src → docs/src}/docs/_decorators/get.md +0 -0
- /package/{src → docs/src}/docs/_decorators/handle.md +0 -0
- /package/{src → docs/src}/docs/_decorators/on-assign.md +0 -0
- /package/{src → docs/src}/docs/_decorators/patch.md +0 -0
- /package/{src → docs/src}/docs/_decorators/post.md +0 -0
- /package/{src → docs/src}/docs/_decorators/publish.md +0 -0
- /package/{src → docs/src}/docs/_decorators/put.md +0 -0
- /package/{src → docs/src}/docs/_decorators/subscribe.md +0 -0
- /package/{src → docs/src}/docs/_decorators/wait-for-ancestors.md +0 -0
- /package/{src → docs/src}/docs/_directives/sub.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/ai-agents.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/concorde-manual-install.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/concorde-outside.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/create-a-component.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/my-first-component.md +0 -0
- /package/{src → docs/src}/docs/_getting-started/start.md +0 -0
- /package/{src → docs/src}/docs/_misc/api-configuration.md +0 -0
- /package/{src → docs/src}/docs/_misc/dataProviderKey.md +0 -0
- /package/{src → docs/src}/docs/_misc/docs-mock-api.md +0 -0
- /package/{src → docs/src}/docs/_misc/dynamic-path.md +0 -0
- /package/{src → docs/src}/docs/_misc/endpoint.md +0 -0
- /package/{src → docs/src}/docs/_misc/formelement-subscriber-removal.md +0 -0
- /package/{src → docs/src}/docs/_misc/html-integration.md +0 -0
- /package/src/docs/{_getting-started → getting-started}/components.md +0 -0
- /package/src/docs/{_getting-started → getting-started}/theming.md +0 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Button
|
|
2
2
|
|
|
3
|
+
**`sonic-button`** is the clickable control of the library: a plain button, a link when `href` is set, or a form toggle when it has a `name` and `value`. It shares `type` / `variant` / `size` with **`sonic-badge`**, and exposes `prefix` / `suffix` slots for icons.
|
|
4
|
+
|
|
3
5
|
## Type
|
|
6
|
+
|
|
7
|
+
With no `type`, the button is `default`. Use `custom` with `--sc-btn-custom-color` and `--sc-btn-custom-bg` for a one-off color.
|
|
8
|
+
|
|
4
9
|
<sonic-code>
|
|
5
10
|
<template>
|
|
6
11
|
<div class="flex flex-wrap gap-2">
|
|
@@ -16,168 +21,196 @@
|
|
|
16
21
|
</template>
|
|
17
22
|
</sonic-code>
|
|
18
23
|
|
|
19
|
-
##
|
|
24
|
+
## Variant
|
|
25
|
+
|
|
26
|
+
With no `variant`, the button is filled. The `outline` / `ghost` / `link` variants take their color from `type`. `unstyled` removes all styling so you can apply your own classes.
|
|
27
|
+
|
|
20
28
|
<sonic-code>
|
|
21
29
|
<template>
|
|
22
30
|
<div class="flex flex-wrap gap-2">
|
|
23
|
-
<sonic-button
|
|
24
|
-
<sonic-button
|
|
25
|
-
<sonic-button
|
|
26
|
-
<sonic-button
|
|
27
|
-
<sonic-button variant="
|
|
28
|
-
<sonic-button variant="outline" type="success">Success</sonic-button>
|
|
29
|
-
<sonic-button variant="outline" type="danger">Danger</sonic-button>
|
|
30
|
-
<sonic-button variant="outline" type="custom" style="--sc-btn-custom-bg: #5b21b6">Custom</sonic-button>
|
|
31
|
+
<sonic-button type="primary">Default</sonic-button>
|
|
32
|
+
<sonic-button type="primary" variant="outline">Outline</sonic-button>
|
|
33
|
+
<sonic-button type="primary" variant="ghost">Ghost</sonic-button>
|
|
34
|
+
<sonic-button type="primary" variant="link">Link</sonic-button>
|
|
35
|
+
<sonic-button variant="unstyled">Unstyled</sonic-button>
|
|
31
36
|
</div>
|
|
32
37
|
</template>
|
|
33
38
|
</sonic-code>
|
|
34
39
|
|
|
35
|
-
## Variant
|
|
36
|
-
<sonic-code>
|
|
37
|
-
<template>
|
|
38
|
-
<sonic-button variant="default">Default</sonic-button>
|
|
39
|
-
<sonic-button variant="outline">Outline</sonic-button>
|
|
40
|
-
<sonic-button variant="ghost">Ghost</sonic-button>
|
|
41
|
-
<sonic-button variant="link">Link</sonic-button>
|
|
42
|
-
<sonic-button variant="unstyled">Unstyled</sonic-button>
|
|
43
|
-
</template>
|
|
44
|
-
</sonic-code>
|
|
45
|
-
|
|
46
40
|
## Size
|
|
41
|
+
|
|
42
|
+
With no `size`, the button is `md`.
|
|
43
|
+
|
|
47
44
|
<sonic-code>
|
|
48
45
|
<template>
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
<div class="flex flex-wrap items-center gap-2">
|
|
47
|
+
<sonic-button size="2xs">2xs</sonic-button>
|
|
48
|
+
<sonic-button size="xs">xs</sonic-button>
|
|
49
|
+
<sonic-button size="sm">sm</sonic-button>
|
|
50
|
+
<sonic-button>md</sonic-button>
|
|
51
|
+
<sonic-button size="lg">lg</sonic-button>
|
|
52
|
+
<sonic-button size="xl">xl</sonic-button>
|
|
53
|
+
<sonic-button size="2xl">2xl</sonic-button>
|
|
54
|
+
</div>
|
|
57
55
|
</template>
|
|
58
56
|
</sonic-code>
|
|
59
57
|
|
|
60
58
|
## Shape
|
|
61
|
-
<sonic-code>
|
|
62
|
-
<template>
|
|
63
|
-
<sonic-button shape="circle"> 😂 </sonic-button>
|
|
64
|
-
<sonic-button shape="square"> 🚀 </sonic-button>
|
|
65
|
-
</template>
|
|
66
|
-
</sonic-code>
|
|
67
59
|
|
|
68
|
-
|
|
69
|
-
|
|
60
|
+
`circle` and `square` make a fixed-size icon button. `block` stretches to the full width of the parent.
|
|
61
|
+
|
|
70
62
|
<sonic-code>
|
|
71
63
|
<template>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
64
|
+
<div class="flex flex-wrap items-center gap-2 mb-2">
|
|
65
|
+
<sonic-button shape="circle" type="primary"><sonic-icon library="iconoir" name="plus"></sonic-icon></sonic-button>
|
|
66
|
+
<sonic-button shape="square" type="primary"><sonic-icon library="iconoir" name="plus"></sonic-icon></sonic-button>
|
|
67
|
+
</div>
|
|
68
|
+
<sonic-button shape="block" type="primary">Block</sonic-button>
|
|
75
69
|
</template>
|
|
76
70
|
</sonic-code>
|
|
77
71
|
|
|
78
|
-
##
|
|
72
|
+
## Prefix and suffix slots
|
|
73
|
+
|
|
79
74
|
<sonic-code>
|
|
80
75
|
<template>
|
|
81
|
-
<
|
|
82
|
-
<sonic-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<sonic-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
</sonic-button>
|
|
76
|
+
<div class="flex flex-wrap gap-2">
|
|
77
|
+
<sonic-button type="primary" variant="outline">
|
|
78
|
+
<sonic-icon library="iconoir" slot="prefix" name="arrow-left"></sonic-icon>
|
|
79
|
+
Previous flight
|
|
80
|
+
</sonic-button>
|
|
81
|
+
<sonic-button type="primary">
|
|
82
|
+
Next flight
|
|
83
|
+
<sonic-icon library="iconoir" slot="suffix" name="arrow-right"></sonic-icon>
|
|
84
|
+
</sonic-button>
|
|
85
|
+
</div>
|
|
92
86
|
</template>
|
|
93
87
|
</sonic-code>
|
|
94
88
|
|
|
95
|
-
##
|
|
89
|
+
## Loading
|
|
90
|
+
|
|
91
|
+
`loading` replaces the content with a spinner and blocks clicks. The button keeps the width of its content.
|
|
92
|
+
|
|
96
93
|
<sonic-code>
|
|
97
94
|
<template>
|
|
98
|
-
<div
|
|
99
|
-
<sonic-
|
|
100
|
-
<sonic-button
|
|
95
|
+
<div class="flex flex-wrap gap-2">
|
|
96
|
+
<sonic-button loading></sonic-button>
|
|
97
|
+
<sonic-button loading>Loading button</sonic-button>
|
|
98
|
+
<sonic-button loading type="primary">
|
|
99
|
+
<sonic-icon library="iconoir" slot="prefix" name="check"></sonic-icon>
|
|
100
|
+
Checking in
|
|
101
|
+
</sonic-button>
|
|
101
102
|
</div>
|
|
102
|
-
<sonic-button reset="button-reset-demo">Reset formDataProvider by name</sonic-button>
|
|
103
103
|
</template>
|
|
104
104
|
</sonic-code>
|
|
105
105
|
|
|
106
|
+
## Link
|
|
107
|
+
|
|
108
|
+
With `href`, the button renders as a link. For a relative `href`, the button gets `active` when the current URL matches, according to `autoActive` (default `partial`). Add `pushState` to navigate without reloading the page.
|
|
106
109
|
|
|
107
|
-
## GoBack
|
|
108
110
|
<sonic-code>
|
|
109
111
|
<template>
|
|
110
|
-
<
|
|
111
|
-
<sonic-
|
|
112
|
-
|
|
113
|
-
</
|
|
114
|
-
<sonic-button goBack="http://la-billetterie.net" type="primary" variant="outline" class="mr-4">
|
|
115
|
-
<sonic-icon library="iconoir" slot="prefix" name="arrow-left"></sonic-icon>
|
|
116
|
-
Retour url prédéfinie
|
|
117
|
-
</sonic-button>
|
|
112
|
+
<div class="flex flex-wrap gap-2">
|
|
113
|
+
<sonic-button href="https://example.com" target="_blank" type="primary">External link</sonic-button>
|
|
114
|
+
<sonic-button href="/core/components/ui/button" variant="ghost">Current page</sonic-button>
|
|
115
|
+
</div>
|
|
118
116
|
</template>
|
|
119
117
|
</sonic-code>
|
|
120
118
|
|
|
121
|
-
##
|
|
119
|
+
## Toggle and radio
|
|
120
|
+
|
|
121
|
+
A button with `name` and `value` writes to its `formDataProvider` and toggles `active` when clicked. Add `radio` for a single choice in a group, or `unique` to also allow deselecting. Children marked `swap="on"` / `swap="off"` show only in the active / inactive state.
|
|
122
|
+
|
|
122
123
|
<sonic-code>
|
|
123
124
|
<template>
|
|
124
|
-
<
|
|
125
|
-
<sonic-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
<div class="flex flex-wrap items-center gap-4">
|
|
126
|
+
<sonic-button formDataProvider="button-toggle-demo" name="visible" value="yes" type="primary" shape="circle" variant="outline">
|
|
127
|
+
<sonic-icon library="iconoir" swap="on" name="eye-empty"></sonic-icon>
|
|
128
|
+
<sonic-icon library="iconoir" swap="off" name="eye-off"></sonic-icon>
|
|
129
|
+
</sonic-button>
|
|
130
|
+
<sonic-group formDataProvider="button-radio-demo">
|
|
131
|
+
<sonic-button radio minWidth="7rem" name="plan" value="free">Free</sonic-button>
|
|
132
|
+
<sonic-button radio minWidth="7rem" name="plan" value="pro">Pro</sonic-button>
|
|
133
|
+
<sonic-button radio minWidth="7rem" name="plan" value="team">Team</sonic-button>
|
|
134
|
+
</sonic-group>
|
|
135
|
+
</div>
|
|
128
136
|
</template>
|
|
129
137
|
</sonic-code>
|
|
130
138
|
|
|
139
|
+
## Reset
|
|
140
|
+
|
|
141
|
+
`reset` clears the button's own `formDataProvider`. Give it a value to clear another one by name.
|
|
131
142
|
|
|
132
|
-
## Button group
|
|
133
143
|
<sonic-code>
|
|
134
144
|
<template>
|
|
135
|
-
<
|
|
136
|
-
<sonic-
|
|
137
|
-
<sonic-button
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</sonic-group>
|
|
141
|
-
<sonic-divider size="lg"></sonic-divider>
|
|
142
|
-
<div class="text-lg mb-2">Choose a subscription</div>
|
|
143
|
-
<sonic-group formDataProvider="subscriptionData">
|
|
144
|
-
<sonic-button radio minWidth="10rem" name="subscription" value="standard" type="default"
|
|
145
|
-
>😎 Standard</sonic-button
|
|
146
|
-
>
|
|
147
|
-
<sonic-button radio minWidth="10rem" name="subscription" value="premium" type="default">⭐ Premium</sonic-button>
|
|
148
|
-
<sonic-button radio minWidth="10rem" name="subscription" value="diamond" type="default">💎 Diamond</sonic-button>
|
|
149
|
-
</sonic-group>
|
|
145
|
+
<div formDataProvider="button-reset-demo" class="mb-2">
|
|
146
|
+
<sonic-checkbox name="agree" value="yes">Extra baggage</sonic-checkbox>
|
|
147
|
+
<sonic-button reset>Reset this form</sonic-button>
|
|
148
|
+
</div>
|
|
149
|
+
<sonic-button reset="button-reset-demo">Reset by name</sonic-button>
|
|
150
150
|
</template>
|
|
151
151
|
</sonic-code>
|
|
152
152
|
|
|
153
|
+
## Go back
|
|
154
|
+
|
|
155
|
+
`goBack` navigates back in history. When there is no previous page on the same origin, it goes to the attribute value, or to the site root if empty.
|
|
153
156
|
|
|
154
|
-
## Aria-label
|
|
155
157
|
<sonic-code>
|
|
156
158
|
<template>
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Button link with aria label
|
|
162
|
-
</sonic-button>
|
|
159
|
+
<sonic-button goBack="/" variant="outline">
|
|
160
|
+
<sonic-icon library="iconoir" slot="prefix" name="arrow-left"></sonic-icon>
|
|
161
|
+
Back
|
|
162
|
+
</sonic-button>
|
|
163
163
|
</template>
|
|
164
164
|
</sonic-code>
|
|
165
165
|
|
|
166
|
+
## Accessibility
|
|
167
|
+
|
|
168
|
+
Icon-only buttons need a label. Use `data-aria-label`, which is forwarded to the inner `button` (and link).
|
|
166
169
|
|
|
167
|
-
## Custom styles & active states with tailwind
|
|
168
170
|
<sonic-code>
|
|
169
171
|
<template>
|
|
170
|
-
<
|
|
171
|
-
<sonic-
|
|
172
|
-
|
|
173
|
-
variant="unstyled"
|
|
174
|
-
checkable unique
|
|
175
|
-
name="subscription"
|
|
176
|
-
value="premium"
|
|
177
|
-
type="default">
|
|
178
|
-
<span swap="off" class="inline-block py-2 px-3" >subscribe</span>
|
|
179
|
-
<span swap="on" class="inline-block py-2 px-3" >⭐ Premium</span>
|
|
180
|
-
</sonic-button>
|
|
181
|
-
</div>
|
|
172
|
+
<sonic-button shape="circle" data-aria-label="Close">
|
|
173
|
+
<sonic-icon library="iconoir" name="cancel"></sonic-icon>
|
|
174
|
+
</sonic-button>
|
|
182
175
|
</template>
|
|
183
176
|
</sonic-code>
|
|
177
|
+
|
|
178
|
+
## API reference
|
|
179
|
+
|
|
180
|
+
| Attribute | Values | Description |
|
|
181
|
+
|----------|---------|-------------|
|
|
182
|
+
| `type` | `default` (default) · `primary` · `neutral` · `warning` · `info` · `success` · `danger` · `custom` | Color; `custom` reads `--sc-btn-custom-color` and `--sc-btn-custom-bg` |
|
|
183
|
+
| `variant` | `default` (default) · `outline` · `ghost` · `link` · `unstyled` | Visual style |
|
|
184
|
+
| `size` | `2xs` … `2xl` (default `md`) · `inherit` | Typography and padding |
|
|
185
|
+
| `shape` | `default` (default) · `circle` · `square` · `block` | Icon button or full width |
|
|
186
|
+
| `icon` | boolean | Enlarges a lone icon |
|
|
187
|
+
| `loading` | boolean | Shows a spinner and blocks clicks |
|
|
188
|
+
| `disabled` | boolean | Dims the button and blocks clicks |
|
|
189
|
+
| `active` | boolean | Active state, set automatically for links and toggles |
|
|
190
|
+
| `align` | `left` · `center` · `right` | Text alignment |
|
|
191
|
+
| `direction` | flex direction (default `row`) | Layout of slots |
|
|
192
|
+
| `alignItems` | flex `align-items` (default `center`) | Cross-axis alignment of slots |
|
|
193
|
+
| `justify` | flex `justify-content` (default `center`) | Main-axis alignment of slots |
|
|
194
|
+
| `minWidth` | CSS length (default `0`) | Minimum width of the button |
|
|
195
|
+
| `href` | URL | Renders the button as a link |
|
|
196
|
+
| `target` | `_self` · `_blank` · `_parent` · `_top` | Link target |
|
|
197
|
+
| `download` | string | Link `download` attribute |
|
|
198
|
+
| `pushState` | boolean | Navigates with `history.pushState` |
|
|
199
|
+
| `autoActive` | `partial` (default) · `strict` · `strict-path-only` · `disabled` | URL matching for `active` |
|
|
200
|
+
| `goBack` | URL or empty | Goes back in history, with a fallback URL |
|
|
201
|
+
| `reset` | empty or provider name | Clears the current or named form data provider |
|
|
202
|
+
| `name` / `value` | string | Form field written to the data provider |
|
|
203
|
+
| `formDataProvider` | string | Data provider to write to (default: nearest ancestor) |
|
|
204
|
+
| `radio` | boolean | Single choice among buttons with the same `name` |
|
|
205
|
+
| `unique` | boolean | Like `radio`, but can be deselected |
|
|
206
|
+
| `autoRepeat` | boolean | Repeats the click while the pointer is held |
|
|
207
|
+
| `data-aria-label` | string | `aria-label` of the inner button |
|
|
208
|
+
| `data-aria-labelledby` | string | `aria-labelledby` of the inner button |
|
|
209
|
+
| `data-aria-controls` | string | `aria-controls` of the inner button |
|
|
210
|
+
| `data-aria-expanded` | boolean | `aria-expanded` of the inner button |
|
|
211
|
+
|
|
212
|
+
| Slot | Description |
|
|
213
|
+
|------|-------------|
|
|
214
|
+
| *(default)* | Label |
|
|
215
|
+
| `prefix` | Icon or text before the label |
|
|
216
|
+
| `suffix` | Icon or text after the label |
|
|
File without changes
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# Captcha
|
|
2
2
|
|
|
3
|
-
**`sonic-captcha`** embeds an
|
|
4
|
-
|
|
5
|
-
> Live widget calls the Supersoniks challenge service — not part of [docs mock API](#docs/_misc/docs-mock-api.md/docs-mock-api).
|
|
3
|
+
**`sonic-captcha`** embeds an [ALTCHA](https://altcha.org) proof-of-work widget and makes the nearest form wait for it. Place it inside a form scope and put **`sonic-submit`** in its default slot: the widget renders above the slot content, and the submit sends only once a token is available.
|
|
6
4
|
|
|
7
5
|
## Basic example
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
The widget loads only on **HTTPS**. On plain HTTP the component renders nothing and the form is not blocked.
|
|
10
8
|
|
|
11
9
|
<sonic-code>
|
|
12
10
|
<template>
|
|
@@ -15,57 +13,44 @@ Wrap the form scope and place **`sonic-submit`** in the default slot so the chal
|
|
|
15
13
|
formDataProvider="captcha-docs-form"
|
|
16
14
|
submitResultDataProvider="captcha-docs-result"
|
|
17
15
|
>
|
|
18
|
-
<sonic-captcha
|
|
19
|
-
<sonic-input class="mb-3" name="email" type="email" label="Email" value="demo@example.com"></sonic-input>
|
|
16
|
+
<sonic-captcha>
|
|
17
|
+
<sonic-input class="mb-3 block" name="email" type="email" label="Email" value="demo@example.com"></sonic-input>
|
|
20
18
|
<sonic-submit endPoint="api/register" onClick>
|
|
21
|
-
<sonic-button type="primary">
|
|
19
|
+
<sonic-button type="primary">Join the crew</sonic-button>
|
|
22
20
|
</sonic-submit>
|
|
23
21
|
</sonic-captcha>
|
|
24
22
|
</sonic-scope>
|
|
25
23
|
</template>
|
|
26
24
|
</sonic-code>
|
|
27
25
|
|
|
28
|
-
##
|
|
29
|
-
|
|
30
|
-
Optional **`key`** skips client-side key generation. When omitted, the component derives an encrypted key on connect (after **`generateEncryptedKey`**).
|
|
31
|
-
|
|
32
|
-
<sonic-code>
|
|
33
|
-
<template>
|
|
34
|
-
<sonic-captcha formDataProvider="captcha-docs-form" key="6Leq5V0iAAAAAB-41DlWN335jDlcIuXmhNtdd00t">
|
|
35
|
-
<sonic-button type="outline" disabled>Complete the challenge above to enable submit</sonic-button>
|
|
36
|
-
</sonic-captcha>
|
|
37
|
-
</template>
|
|
38
|
-
</sonic-code>
|
|
39
|
-
|
|
40
|
-
## Form publisher fields
|
|
26
|
+
## Form integration
|
|
41
27
|
|
|
42
|
-
|
|
28
|
+
The component writes to the publisher named by the closest `headersDataProvider`, or else `formDataProvider`, on itself or an ancestor. On connect it sets `needsCaptchaValidation` to `true`. When **`sonic-submit`** sees that flag, it requests a token, the captcha copies the solved ALTCHA payload into `captchaToken` and its key into `captchaKey`, and the request is sent. `needsCaptchaValidation` is stripped from the payload. On disconnect both fields are reset.
|
|
43
29
|
|
|
44
30
|
<sonic-code language="typescript">
|
|
45
31
|
<template>
|
|
46
32
|
{
|
|
47
|
-
|
|
33
|
+
email: "demo@example.com",
|
|
48
34
|
captchaKey: "…",
|
|
49
35
|
captchaToken: "…"
|
|
50
36
|
}
|
|
51
37
|
</template>
|
|
52
38
|
</sonic-code>
|
|
53
39
|
|
|
40
|
+
## Key and challenge endpoint
|
|
41
|
+
|
|
42
|
+
With no `key`, the component generates an encrypted key on connect. The widget fetches its challenge from the `chalengeUrl` property (a JavaScript property, not an attribute) with `key` and `maxNumber` (default `50000`) as query parameters. Point it at your own ALTCHA server and verify `captchaToken` there.
|
|
43
|
+
|
|
44
|
+
Labels follow the page language: French when `<html lang>` starts with `fr`, English otherwise.
|
|
45
|
+
|
|
54
46
|
## API reference
|
|
55
47
|
|
|
56
48
|
| Attribute | Values | Description |
|
|
57
49
|
|----------|---------|-------------|
|
|
58
|
-
| `
|
|
59
|
-
| `key` | string | ALTCHA site key; auto-generated when empty |
|
|
60
|
-
| `action` | string | Optional action name forwarded to the widget |
|
|
61
|
-
| `zIndex` | number (default `9999`) | Stacking for the challenge overlay |
|
|
50
|
+
| `key` | string (default generated) | Key sent to the challenge endpoint and copied to `captchaKey` |
|
|
62
51
|
|
|
63
52
|
| Slot | Description |
|
|
64
53
|
|------|-------------|
|
|
65
|
-
| *(default)* | Form
|
|
66
|
-
|
|
67
|
-
| Event | Description |
|
|
68
|
-
|-------|-------------|
|
|
69
|
-
| `sonic-captcha-validate` | Fired when **`state`** is **`verified`** · **`error`** or **`expired`**; **`detail.valid`** is **`true`** only for **`verified`** |
|
|
54
|
+
| *(default)* | Form fields and actions, rendered below the widget |
|
|
70
55
|
|
|
71
|
-
|
|
56
|
+
No events.
|
|
@@ -7,7 +7,7 @@ Cards **group related content** on a padded surface with radius, theme **`type`*
|
|
|
7
7
|
<sonic-code>
|
|
8
8
|
<template>
|
|
9
9
|
<sonic-card class="max-w-sm">
|
|
10
|
-
<p class="m-0">
|
|
10
|
+
<p class="m-0">CN 001 · CDG → JFK · On time.</p>
|
|
11
11
|
</sonic-card>
|
|
12
12
|
</template>
|
|
13
13
|
</sonic-code>
|
|
@@ -153,23 +153,23 @@ Header, media, body, and footer together.
|
|
|
153
153
|
<sonic-code>
|
|
154
154
|
<template>
|
|
155
155
|
<sonic-card class="max-w-md">
|
|
156
|
-
<sonic-card-header label="Featured route" description="
|
|
156
|
+
<sonic-card-header label="Featured route" description="CDG → JFK">
|
|
157
157
|
<sonic-icon slot="suffix" library="iconoir" name="airplane" aria-hidden="true"></sonic-icon>
|
|
158
158
|
</sonic-card-header>
|
|
159
159
|
<sonic-card-main>
|
|
160
160
|
<sonic-image
|
|
161
161
|
rounded
|
|
162
162
|
ratio="16/9"
|
|
163
|
-
src="
|
|
164
|
-
alt="
|
|
163
|
+
src="/img/concorde/plane_04.jpg"
|
|
164
|
+
alt="Concorde on the apron under a blue sky"
|
|
165
165
|
></sonic-image>
|
|
166
166
|
<p class="mb-0">
|
|
167
|
-
Nonstop
|
|
167
|
+
Nonstop at Mach 2.04, with flexible dates.
|
|
168
168
|
</p>
|
|
169
169
|
</sonic-card-main>
|
|
170
170
|
<sonic-card-footer>
|
|
171
171
|
<div class="flex items-center justify-between gap-3 flex-wrap">
|
|
172
|
-
<span class="text-sm font-semibold">
|
|
172
|
+
<span class="text-sm font-semibold">Cabin class: Business</span>
|
|
173
173
|
<sonic-button type="primary" size="sm">Book</sonic-button>
|
|
174
174
|
</div>
|
|
175
175
|
</sonic-card-footer>
|
|
@@ -14,7 +14,7 @@ A bare divider is a full-width line with vertical margin. Omit **`size`** to use
|
|
|
14
14
|
|
|
15
15
|
## Label and align
|
|
16
16
|
|
|
17
|
-
**`label`** renders inside the line (
|
|
17
|
+
**`label`** renders inside the line (as HTML). **`align`** controls which side(s) of the line remain visible: **`left`** drops the leading segment, **`right`** drops the trailing segment, **`center`** keeps both.
|
|
18
18
|
|
|
19
19
|
<sonic-code>
|
|
20
20
|
<template>
|
|
@@ -80,13 +80,12 @@ Slotted content replaces or augments **`label`**. Useful for badges, icons, or m
|
|
|
80
80
|
<sonic-code>
|
|
81
81
|
<template>
|
|
82
82
|
<sonic-divider>
|
|
83
|
-
<span class="mr-2">
|
|
83
|
+
<span class="mr-2">Departures</span>
|
|
84
84
|
<sonic-badge type="danger">+25</sonic-badge>
|
|
85
85
|
</sonic-divider>
|
|
86
86
|
</template>
|
|
87
87
|
</sonic-code>
|
|
88
88
|
|
|
89
|
-
|
|
90
89
|
## Inside typed cards
|
|
91
90
|
|
|
92
91
|
On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger` · `info` · `success`), the rule uses the card’s text color at reduced opacity so it stays visible on tinted surfaces. **`label`** and slotted captions use the same foreground color as surrounding copy.
|
|
@@ -95,15 +94,15 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
95
94
|
<template>
|
|
96
95
|
<div class="grid gap-4 max-w-xl">
|
|
97
96
|
<sonic-card type="danger">
|
|
98
|
-
<div>
|
|
99
|
-
<sonic-divider label="Affected
|
|
97
|
+
<div>CN 001 is cancelled.</div>
|
|
98
|
+
<sonic-divider label="Affected passengers"></sonic-divider>
|
|
100
99
|
<ul class="m-0 pl-5 text-sm">
|
|
101
|
-
<li>
|
|
102
|
-
<li>
|
|
100
|
+
<li>Ada Lindqvist</li>
|
|
101
|
+
<li>Captain Leo Marchand</li>
|
|
103
102
|
</ul>
|
|
104
103
|
</sonic-card>
|
|
105
104
|
<sonic-card type="info">
|
|
106
|
-
<div>
|
|
105
|
+
<div>Aircraft maintenance is scheduled for tonight.</div>
|
|
107
106
|
<sonic-divider></sonic-divider>
|
|
108
107
|
<div class="opacity-60">Expected downtime: about 15 minutes.</div>
|
|
109
108
|
</sonic-card>
|
|
@@ -117,7 +116,7 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
117
116
|
|----------|---------|-------------|
|
|
118
117
|
| `label` | string (HTML) | Caption centered on the rule; combined with default-slot content when both are set |
|
|
119
118
|
| `align` | `left` · `center` · `right` (default `center`) | Hides the leading or trailing line segment for left/right alignment |
|
|
120
|
-
| `size` | `2xs`
|
|
119
|
+
| `size` | `2xs` … `2xl` · `inherit` | Vertical margin and label `font-size`; omit for host defaults |
|
|
121
120
|
| `lineStyle` | `solid` · `dashed` · `dotted` (default `solid`) | Stroke style of the rule (HTML attribute `linestyle`) |
|
|
122
121
|
| `vertical` | boolean | Renders a vertical rule; swap block/inline margins |
|
|
123
122
|
| `noMargin` | boolean | Sets host margin to `0` |
|
|
@@ -125,5 +124,3 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
125
124
|
| Slot | Description |
|
|
126
125
|
|------|-------------|
|
|
127
126
|
| *(default)* | Label markup when **`label`** is insufficient or empty |
|
|
128
|
-
|
|
129
|
-
The inner flex container exposes **`part="divider"`** for theme overrides.
|