@supersoniks/concorde 5.1.2 → 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 +1 -1
- 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 +1 -1
- 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} +11722 -8868
- 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/og-concorde.jpg +0 -0
- package/dist/robots.txt +11 -10
- package/docs/assets/index-CD4WyL6o.css +1 -0
- 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/{core → crawl/core}/components/functional/sdui/sdui-extension-points.html +8 -9
- 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/{core → crawl/core}/components/functional/subscriber/subscriber.html +5 -6
- package/docs/crawl/core/components/functional/value/value.html +51 -0
- package/docs/{core → crawl/core}/components/ui/alert/alert.html +63 -53
- package/docs/{core → crawl/core}/components/ui/alert-messages/alert-messages.html +5 -6
- package/docs/{core → crawl/core}/components/ui/badge/badge.html +33 -33
- package/docs/crawl/core/components/ui/button/button.html +150 -0
- package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
- package/docs/{core → crawl/core}/components/ui/card/card.html +11 -12
- package/docs/{core → crawl/core}/components/ui/divider/divider.html +14 -14
- 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/{core → crawl/core}/components/ui/form/form-actions/form-actions.html +23 -23
- 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/{core → crawl/core}/components/ui/icon/icon.html +9 -10
- package/docs/crawl/core/components/ui/image/image.html +298 -0
- package/docs/{core → crawl/core}/components/ui/link/link.html +11 -12
- package/docs/crawl/core/components/ui/loader/loader.html +124 -0
- package/docs/{core → crawl/core}/components/ui/menu/menu.html +33 -34
- package/docs/crawl/core/components/ui/modal/modal.html +342 -0
- package/docs/crawl/core/components/ui/pop/pop.html +296 -0
- package/docs/{core → crawl/core}/components/ui/progress/progress.html +7 -8
- 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/{docs/getting-started → crawl/docs/_core-concept}/dataFlow.html +29 -26
- 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/{docs/getting-started → crawl/docs/_getting-started}/ai-agents.html +11 -12
- 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/{docs/getting-started → crawl/docs/_getting-started}/create-a-component.html +14 -11
- package/docs/{docs/getting-started → crawl/docs/_getting-started}/my-first-component.html +22 -13
- 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/{docs/getting-started → crawl/docs/_getting-started}/theming.html +9 -10
- package/docs/{docs/misc → crawl/docs/_misc}/api-configuration.html +18 -18
- package/docs/{docs/misc → crawl/docs/_misc}/dataProviderKey.html +11 -12
- package/docs/{docs/misc → crawl/docs/_misc}/docs-mock-api.html +28 -25
- package/docs/{docs/misc → crawl/docs/_misc}/dynamic-path.html +15 -16
- package/docs/{docs/misc → crawl/docs/_misc}/endpoint.html +15 -16
- package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
- package/docs/{docs/misc → crawl/docs/_misc}/html-integration.html +15 -12
- 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/docs-mock-api-sw.js +223 -58
- package/docs/docs-mock-api-sw.js.map +4 -4
- package/docs/index.html +68 -95
- package/docs/llms-full.txt +3610 -2231
- package/docs/llms.txt +86 -94
- package/docs/robots.txt +10 -11
- package/docs/sitemap.xml +84 -78
- package/docs/src/core/components/functional/date/date.md +231 -91
- package/docs/src/core/components/functional/fetch/fetch.md +83 -66
- package/docs/src/core/components/functional/if/if.md +3 -28
- package/docs/src/core/components/functional/jsonata/jsonata.md +37 -42
- package/docs/src/core/components/functional/list/list.md +43 -99
- package/docs/src/core/components/functional/mix/mix.md +26 -31
- package/docs/src/core/components/functional/queue/queue.md +61 -40
- package/docs/src/core/components/functional/router/router.md +65 -64
- package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
- package/docs/src/core/components/functional/sdui/example.json +86 -19
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
- package/docs/src/core/components/functional/sdui/sdui.md +358 -187
- package/docs/src/core/components/functional/states/states.md +61 -86
- package/docs/src/core/components/functional/submit/submit.md +72 -64
- package/docs/src/core/components/functional/value/value.md +22 -34
- package/docs/src/core/components/ui/alert/alert.md +58 -48
- package/docs/src/core/components/ui/badge/badge.md +34 -27
- package/docs/src/core/components/ui/button/button.md +106 -139
- package/docs/src/core/components/ui/captcha/captcha.md +32 -17
- package/docs/src/core/components/ui/card/card.md +6 -6
- package/docs/src/core/components/ui/divider/divider.md +11 -8
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +42 -90
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +75 -31
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +16 -14
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +29 -19
- package/docs/src/core/components/ui/form/input/input.md +95 -95
- package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +29 -0
- package/docs/src/core/components/ui/form/radio/radio.md +34 -55
- package/docs/src/core/components/ui/form/select/select.md +45 -60
- package/docs/src/core/components/ui/form/switch/switch.md +34 -57
- package/docs/src/core/components/ui/form/textarea/textarea.md +38 -55
- package/docs/src/core/components/ui/group/group.md +33 -35
- package/docs/src/core/components/ui/icon/icon.md +4 -4
- package/docs/src/core/components/ui/image/image.md +107 -41
- package/docs/src/core/components/ui/link/link.md +6 -6
- package/docs/src/core/components/ui/loader/loader.md +55 -30
- package/docs/src/core/components/ui/menu/menu.md +27 -27
- package/docs/src/core/components/ui/modal/modal.md +96 -72
- package/docs/src/core/components/ui/pop/pop.md +158 -80
- package/docs/src/core/components/ui/progress/progress.md +2 -2
- package/docs/src/core/components/ui/table/table.md +255 -91
- package/docs/src/core/components/ui/theme/theme.md +36 -11
- package/docs/src/core/components/ui/toast/toast.md +117 -48
- package/docs/src/core/components/ui/tooltip/tooltip.md +62 -27
- package/docs/{docs/getting-started → src/docs/_core-concept}/dataFlow.md +18 -17
- package/docs/src/docs/_core-concept/overview.md +57 -0
- package/docs/src/docs/_core-concept/subscriber.md +75 -0
- package/docs/src/docs/_decorators/ancestor-attribute.md +128 -0
- package/docs/src/docs/_decorators/auto-subscribe.md +202 -0
- package/docs/src/docs/_decorators/bind.md +167 -0
- package/docs/src/docs/_decorators/get.md +162 -0
- package/docs/src/docs/_decorators/handle.md +175 -0
- package/docs/src/docs/_decorators/on-assign.md +390 -0
- package/docs/src/docs/_decorators/patch.md +70 -0
- package/docs/src/docs/_decorators/post.md +146 -0
- package/docs/src/docs/_decorators/publish.md +55 -0
- package/docs/src/docs/_decorators/put.md +70 -0
- package/docs/src/docs/_decorators/subscribe.md +100 -0
- package/docs/src/docs/_decorators/wait-for-ancestors.md +163 -0
- package/docs/src/docs/_directives/sub.md +91 -0
- package/docs/src/docs/{getting-started → _getting-started}/ai-agents.md +3 -3
- package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
- package/docs/src/docs/_getting-started/concorde-outside.md +33 -0
- package/docs/{docs/getting-started → src/docs/_getting-started}/create-a-component.md +6 -3
- package/docs/src/docs/{getting-started → _getting-started}/my-first-component.md +14 -5
- package/docs/src/docs/_getting-started/my-first-subscriber.md +120 -0
- package/docs/src/docs/_getting-started/pubsub.md +37 -0
- package/docs/src/docs/{getting-started → _getting-started}/start.md +13 -1
- package/docs/src/docs/{getting-started → _getting-started}/theming.md +2 -2
- package/docs/src/docs/{misc → _misc}/api-configuration.md +12 -10
- package/docs/src/docs/{misc → _misc}/dataProviderKey.md +4 -4
- package/docs/{docs/misc → src/docs/_misc}/docs-mock-api.md +13 -12
- package/docs/{docs/misc → src/docs/_misc}/dynamic-path.md +8 -8
- package/docs/{docs/misc → src/docs/_misc}/endpoint.md +8 -8
- package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
- package/docs/{docs/misc → src/docs/_misc}/html-integration.md +5 -4
- package/docs/src/docs/search/docs-search.json +4375 -2420
- package/docs/src/tsconfig.declarations.json +22 -0
- package/docs/src/tsconfig.emit.json +23 -0
- package/docs/src/tsconfig.json +2 -23
- package/gitlab/job_github_mirror.sh +39 -0
- package/index.html +89 -0
- package/package.json +22 -4
- package/public/img/og-concorde.jpg +0 -0
- package/scripts/ai-init.mjs +104 -379
- package/scripts/ai-init.test.mjs +81 -239
- package/scripts/docs-markdown-vite-plugin.ts +11 -5
- package/scripts/docs-public-url.mjs +6 -0
- package/scripts/docs.htaccess +7 -0
- package/scripts/generate-cem.mjs +244 -0
- package/scripts/generate-cem.test.mjs +122 -0
- package/scripts/generate-crawl-docs.mjs +29 -5
- package/scripts/generate-sdui-catalog.mjs +11 -10
- package/scripts/github-export.mjs +150 -0
- package/scripts/post-build-docs.js +3 -0
- 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 +1 -1
- package/src/core/components/functional/example/example.ts +3 -1
- package/src/core/components/functional/if/if.ts +0 -0
- package/src/core/components/functional/list/list.demo.ts +0 -0
- package/src/core/components/functional/list/list.md +6 -2
- package/src/core/components/functional/list/list.ts +17 -4
- package/src/core/components/functional/mix/mix.md +0 -0
- package/src/core/components/functional/router/router.demo.ts +0 -0
- 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 +0 -0
- package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
- 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.ts +0 -0
- 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/value/value.md +0 -0
- 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/captcha/altchaStyles.ts +0 -0
- package/src/core/components/ui/card/card.md +1 -1
- package/src/core/components/ui/form/input/input.md +19 -1
- package/src/core/components/ui/form/input/input.ts +8 -2
- package/src/core/components/ui/form/radio/radio.md +14 -0
- package/src/core/components/ui/image/image.md +17 -17
- package/src/core/components/ui/modal/modal.md +2 -2
- 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/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 +3 -3
- package/src/docs/decorators/bind.md +23 -24
- package/src/docs/docs-location.spec.ts +10 -0
- package/src/docs/docs-location.ts +10 -0
- package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
- package/src/docs/example/docs-toggle-demos.ts +1 -1
- package/src/docs/example/users.ts +0 -0
- package/src/docs/getting-started/ai-agents.md +29 -55
- package/src/docs/getting-started/dataFlow.md +2 -2
- package/src/docs/home/home.ts +3 -1
- 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/navigation/navigation.ts +5 -1
- package/src/docs/search/docs-search.json +358 -58
- package/src/docs/search/markdown-renderer.ts +6 -1
- 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/.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/PLAN-DOCS-AGENTS.md +0 -80
- 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/.htaccess +0 -75
- package/docs/404.html +0 -15
- package/docs/404.md +0 -5
- package/docs/assets/index-BgG6FFPt.js +0 -11765
- package/docs/assets/index-x89XINSG.css +0 -1
- package/docs/core/components/functional/date/date.html +0 -211
- package/docs/core/components/functional/date/date.md +0 -150
- package/docs/core/components/functional/fetch/fetch.html +0 -180
- package/docs/core/components/functional/fetch/fetch.md +0 -108
- package/docs/core/components/functional/if/if.html +0 -65
- package/docs/core/components/functional/if/if.md +0 -34
- package/docs/core/components/functional/jsonata/jsonata.html +0 -110
- package/docs/core/components/functional/jsonata/jsonata.md +0 -61
- package/docs/core/components/functional/list/list.html +0 -198
- package/docs/core/components/functional/list/list.md +0 -121
- package/docs/core/components/functional/mix/mix.html +0 -78
- package/docs/core/components/functional/mix/mix.md +0 -46
- package/docs/core/components/functional/queue/queue.html +0 -155
- package/docs/core/components/functional/queue/queue.md +0 -51
- package/docs/core/components/functional/router/router.html +0 -154
- package/docs/core/components/functional/router/router.md +0 -93
- package/docs/core/components/functional/sdui/sdui-extension-points.md +0 -94
- package/docs/core/components/functional/sdui/sdui.html +0 -397
- package/docs/core/components/functional/sdui/sdui.md +0 -307
- package/docs/core/components/functional/states/states.html +0 -141
- package/docs/core/components/functional/states/states.md +0 -112
- package/docs/core/components/functional/submit/submit.html +0 -178
- package/docs/core/components/functional/submit/submit.md +0 -106
- package/docs/core/components/functional/subscriber/subscriber.md +0 -91
- package/docs/core/components/functional/translation/translation.html +0 -60
- package/docs/core/components/functional/translation/translation.md +0 -38
- package/docs/core/components/functional/value/value.html +0 -81
- package/docs/core/components/functional/value/value.md +0 -47
- package/docs/core/components/ui/alert/alert.md +0 -186
- package/docs/core/components/ui/alert-messages/alert-messages.md +0 -85
- package/docs/core/components/ui/badge/badge.md +0 -181
- package/docs/core/components/ui/button/button.html +0 -309
- package/docs/core/components/ui/button/button.md +0 -216
- package/docs/core/components/ui/captcha/captcha.html +0 -80
- package/docs/core/components/ui/captcha/captcha.md +0 -56
- package/docs/core/components/ui/card/card.md +0 -215
- package/docs/core/components/ui/divider/divider.md +0 -126
- package/docs/core/components/ui/form/checkbox/checkbox.html +0 -200
- package/docs/core/components/ui/form/checkbox/checkbox.md +0 -125
- package/docs/core/components/ui/form/fieldset/fieldset.html +0 -238
- package/docs/core/components/ui/form/fieldset/fieldset.md +0 -161
- package/docs/core/components/ui/form/form-actions/form-actions.md +0 -98
- package/docs/core/components/ui/form/form-layout/form-layout.html +0 -115
- package/docs/core/components/ui/form/form-layout/form-layout.md +0 -109
- package/docs/core/components/ui/form/input/input.html +0 -235
- package/docs/core/components/ui/form/input/input.md +0 -142
- package/docs/core/components/ui/form/radio/radio.html +0 -144
- package/docs/core/components/ui/form/radio/radio.md +0 -78
- package/docs/core/components/ui/form/select/select.html +0 -178
- package/docs/core/components/ui/form/select/select.md +0 -86
- package/docs/core/components/ui/form/switch/switch.html +0 -146
- package/docs/core/components/ui/form/switch/switch.md +0 -80
- package/docs/core/components/ui/form/textarea/textarea.html +0 -162
- package/docs/core/components/ui/form/textarea/textarea.md +0 -82
- package/docs/core/components/ui/group/group.html +0 -113
- package/docs/core/components/ui/group/group.md +0 -77
- package/docs/core/components/ui/icon/icon.md +0 -214
- package/docs/core/components/ui/image/image.html +0 -194
- package/docs/core/components/ui/image/image.md +0 -167
- package/docs/core/components/ui/link/link.md +0 -81
- package/docs/core/components/ui/loader/loader.html +0 -114
- package/docs/core/components/ui/loader/loader.md +0 -87
- package/docs/core/components/ui/menu/menu.md +0 -370
- package/docs/core/components/ui/modal/modal.html +0 -324
- package/docs/core/components/ui/modal/modal.md +0 -211
- package/docs/core/components/ui/pop/pop.html +0 -250
- package/docs/core/components/ui/pop/pop.md +0 -216
- package/docs/core/components/ui/progress/progress.md +0 -109
- package/docs/core/components/ui/table/table.html +0 -333
- package/docs/core/components/ui/table/table.md +0 -267
- package/docs/core/components/ui/theme/theme.html +0 -116
- package/docs/core/components/ui/theme/theme.md +0 -97
- package/docs/core/components/ui/toast/toast.html +0 -185
- package/docs/core/components/ui/toast/toast.md +0 -147
- package/docs/core/components/ui/tooltip/tooltip.html +0 -112
- package/docs/core/components/ui/tooltip/tooltip.md +0 -89
- package/docs/docs/decorators/ancestor-attribute.html +0 -71
- package/docs/docs/decorators/ancestor-attribute.md +0 -59
- package/docs/docs/decorators/auto-subscribe.html +0 -61
- package/docs/docs/decorators/auto-subscribe.md +0 -40
- package/docs/docs/decorators/bind.html +0 -86
- package/docs/docs/decorators/bind.md +0 -77
- package/docs/docs/decorators/get.html +0 -166
- package/docs/docs/decorators/get.md +0 -160
- package/docs/docs/decorators/handle.html +0 -139
- package/docs/docs/decorators/handle.md +0 -119
- package/docs/docs/decorators/on-assign.html +0 -72
- package/docs/docs/decorators/on-assign.md +0 -63
- package/docs/docs/decorators/patch.html +0 -76
- package/docs/docs/decorators/patch.md +0 -44
- package/docs/docs/decorators/post.html +0 -150
- package/docs/docs/decorators/post.md +0 -134
- package/docs/docs/decorators/publish.html +0 -74
- package/docs/docs/decorators/publish.md +0 -56
- package/docs/docs/decorators/put.html +0 -83
- package/docs/docs/decorators/put.md +0 -51
- package/docs/docs/decorators/subscribe.html +0 -91
- package/docs/docs/decorators/subscribe.md +0 -87
- package/docs/docs/decorators/wait-for-ancestors.html +0 -82
- package/docs/docs/decorators/wait-for-ancestors.md +0 -76
- package/docs/docs/directives/sub.html +0 -79
- package/docs/docs/directives/sub.md +0 -75
- package/docs/docs/directives/t.html +0 -91
- package/docs/docs/directives/t.md +0 -73
- package/docs/docs/getting-started/ai-agents.md +0 -76
- package/docs/docs/getting-started/components.html +0 -27
- package/docs/docs/getting-started/components.md +0 -5
- package/docs/docs/getting-started/installation.html +0 -69
- package/docs/docs/getting-started/installation.md +0 -36
- package/docs/docs/getting-started/my-first-component.md +0 -227
- package/docs/docs/getting-started/start.html +0 -47
- package/docs/docs/getting-started/start.md +0 -35
- package/docs/docs/getting-started/theming.md +0 -253
- package/docs/docs/index.html +0 -99
- package/docs/docs/misc/api-configuration.md +0 -79
- package/docs/docs/misc/dataProviderKey.md +0 -168
- package/docs/hubs/decorators.html +0 -443
- package/docs/hubs/form-components.html +0 -404
- package/docs/hubs/remote-data.html +0 -371
- 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 +0 -28
- package/docs/index.md +0 -22
- package/docs/src/core/components/functional/translation/translation.md +0 -38
- package/docs/src/docs/decorators/ancestor-attribute.md +0 -59
- package/docs/src/docs/decorators/auto-subscribe.md +0 -40
- package/docs/src/docs/decorators/bind.md +0 -77
- package/docs/src/docs/decorators/get.md +0 -160
- package/docs/src/docs/decorators/handle.md +0 -119
- package/docs/src/docs/decorators/on-assign.md +0 -63
- package/docs/src/docs/decorators/patch.md +0 -44
- package/docs/src/docs/decorators/post.md +0 -134
- package/docs/src/docs/decorators/publish.md +0 -56
- package/docs/src/docs/decorators/put.md +0 -51
- package/docs/src/docs/decorators/subscribe.md +0 -87
- package/docs/src/docs/decorators/wait-for-ancestors.md +0 -76
- package/docs/src/docs/directives/sub.md +0 -75
- package/docs/src/docs/directives/t.md +0 -73
- package/docs/src/docs/getting-started/components.md +0 -5
- package/docs/src/docs/getting-started/create-a-component.md +0 -136
- package/docs/src/docs/getting-started/dataFlow.md +0 -87
- package/docs/src/docs/getting-started/installation.md +0 -36
- package/docs/src/docs/misc/docs-mock-api.md +0 -62
- package/docs/src/docs/misc/dynamic-path.md +0 -71
- package/docs/src/docs/misc/endpoint.md +0 -45
- package/docs/src/docs/misc/html-integration.md +0 -14
- /package/{docs → dist}/img/concorde/plane_01.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_02.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_03.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_04.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_05.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_06.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_07.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_08.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_09.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_10.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_11.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_12.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_13.jpg +0 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# Captcha
|
|
2
2
|
|
|
3
|
-
**`sonic-captcha`** embeds an
|
|
3
|
+
**`sonic-captcha`** embeds an **ALTCHA** widget and wires **`captchaToken`** / **`needsCaptchaValidation`** on the ancestor **`formDataProvider`** (or **`headersDataProvider`**). **`sonic-submit`** waits for a token before sending when validation is required. The widget loads only on **HTTPS**; on plain HTTP the host renders nothing.
|
|
4
|
+
|
|
5
|
+
> Live widget calls the Supersoniks challenge service — not part of [docs mock API](#docs/_misc/docs-mock-api.md/docs-mock-api).
|
|
4
6
|
|
|
5
7
|
## Basic example
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
Wrap the form scope and place **`sonic-submit`** in the default slot so the challenge appears above the action.
|
|
8
10
|
|
|
9
11
|
<sonic-code>
|
|
10
12
|
<template>
|
|
@@ -13,44 +15,57 @@ The widget loads only on **HTTPS**. On plain HTTP the component renders nothing
|
|
|
13
15
|
formDataProvider="captcha-docs-form"
|
|
14
16
|
submitResultDataProvider="captcha-docs-result"
|
|
15
17
|
>
|
|
16
|
-
<sonic-captcha>
|
|
17
|
-
<sonic-input class="mb-3
|
|
18
|
+
<sonic-captcha formDataProvider="captcha-docs-form">
|
|
19
|
+
<sonic-input class="mb-3" name="email" type="email" label="Email" value="demo@example.com"></sonic-input>
|
|
18
20
|
<sonic-submit endPoint="api/register" onClick>
|
|
19
|
-
<sonic-button type="primary">
|
|
21
|
+
<sonic-button type="primary">Submit with captcha</sonic-button>
|
|
20
22
|
</sonic-submit>
|
|
21
23
|
</sonic-captcha>
|
|
22
24
|
</sonic-scope>
|
|
23
25
|
</template>
|
|
24
26
|
</sonic-code>
|
|
25
27
|
|
|
26
|
-
##
|
|
28
|
+
## Encrypted site key
|
|
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
|
|
27
41
|
|
|
28
|
-
|
|
42
|
+
On connect (HTTPS only), **`needsCaptchaValidation`** is set to **`true`** and **`captchaToken`** is cleared. When the ALTCHA widget reaches **`verified`**, **`captchaToken`** is written on the form publisher and **`sonic-captcha-validate`** fires (`detail.valid` · **`detail.state`** · optional **`detail.token`** / **`detail.payload`**). **`sonic-submit`** still listens for **`request_token`** to refresh the token immediately before send.
|
|
29
43
|
|
|
30
44
|
<sonic-code language="typescript">
|
|
31
45
|
<template>
|
|
32
46
|
{
|
|
33
|
-
|
|
47
|
+
needsCaptchaValidation: true,
|
|
34
48
|
captchaKey: "…",
|
|
35
49
|
captchaToken: "…"
|
|
36
50
|
}
|
|
37
51
|
</template>
|
|
38
52
|
</sonic-code>
|
|
39
53
|
|
|
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
|
-
|
|
46
54
|
## API reference
|
|
47
55
|
|
|
48
56
|
| Attribute | Values | Description |
|
|
49
57
|
|----------|---------|-------------|
|
|
50
|
-
| `
|
|
58
|
+
| `formDataProvider` | publisher id | Same as ancestor form scope; reads/writes **`needsCaptchaValidation`** · **`captchaKey`** · **`captchaToken`** |
|
|
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 |
|
|
51
62
|
|
|
52
63
|
| Slot | Description |
|
|
53
64
|
|------|-------------|
|
|
54
|
-
| *(default)* | Form
|
|
65
|
+
| *(default)* | Form actions (typically **`sonic-submit`** and fields) rendered below the widget |
|
|
66
|
+
|
|
67
|
+
| Event | Description |
|
|
68
|
+
|-------|-------------|
|
|
69
|
+
| `sonic-captcha-validate` | Fired when **`state`** is **`verified`** · **`error`** or **`expired`**; **`detail.valid`** is **`true`** only for **`verified`** |
|
|
55
70
|
|
|
56
|
-
|
|
71
|
+
Related: [Submit](#core/components/functional/submit/submit.md/submit) — **`needsCaptchaValidation`** and deferred send.
|
|
@@ -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">Related content on a raised surface.</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="San Francisco → New York">
|
|
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="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
|
|
164
|
+
alt="Airplane wing above the clouds"
|
|
165
165
|
></sonic-image>
|
|
166
166
|
<p class="mb-0">
|
|
167
|
-
Nonstop
|
|
167
|
+
Nonstop flight with flexible dates. Prices shown include taxes and fees.
|
|
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">From $249</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 (as
|
|
17
|
+
**`label`** renders inside the line (HTML via the same pipeline as other form labels). **`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,12 +80,13 @@ 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">Section title</span>
|
|
84
84
|
<sonic-badge type="danger">+25</sonic-badge>
|
|
85
85
|
</sonic-divider>
|
|
86
86
|
</template>
|
|
87
87
|
</sonic-code>
|
|
88
88
|
|
|
89
|
+
|
|
89
90
|
## Inside typed cards
|
|
90
91
|
|
|
91
92
|
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.
|
|
@@ -94,15 +95,15 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
94
95
|
<template>
|
|
95
96
|
<div class="grid gap-4 max-w-xl">
|
|
96
97
|
<sonic-card type="danger">
|
|
97
|
-
<div>
|
|
98
|
-
<sonic-divider label="Affected
|
|
98
|
+
<div>This action cannot be undone.</div>
|
|
99
|
+
<sonic-divider label="Affected resources"></sonic-divider>
|
|
99
100
|
<ul class="m-0 pl-5 text-sm">
|
|
100
|
-
<li>
|
|
101
|
-
<li>
|
|
101
|
+
<li>Project files</li>
|
|
102
|
+
<li>Shared links</li>
|
|
102
103
|
</ul>
|
|
103
104
|
</sonic-card>
|
|
104
105
|
<sonic-card type="info">
|
|
105
|
-
<div>
|
|
106
|
+
<div>Maintenance is scheduled for tonight.</div>
|
|
106
107
|
<sonic-divider></sonic-divider>
|
|
107
108
|
<div class="opacity-60">Expected downtime: about 15 minutes.</div>
|
|
108
109
|
</sonic-card>
|
|
@@ -116,7 +117,7 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
116
117
|
|----------|---------|-------------|
|
|
117
118
|
| `label` | string (HTML) | Caption centered on the rule; combined with default-slot content when both are set |
|
|
118
119
|
| `align` | `left` · `center` · `right` (default `center`) | Hides the leading or trailing line segment for left/right alignment |
|
|
119
|
-
| `size` | `2xs`
|
|
120
|
+
| `size` | `2xs` · `xs` · `sm` · `md` · `lg` · `xl` · `2xl` · `inherit` | Vertical margin and label `font-size`; omit for host defaults |
|
|
120
121
|
| `lineStyle` | `solid` · `dashed` · `dotted` (default `solid`) | Stroke style of the rule (HTML attribute `linestyle`) |
|
|
121
122
|
| `vertical` | boolean | Renders a vertical rule; swap block/inline margins |
|
|
122
123
|
| `noMargin` | boolean | Sets host margin to `0` |
|
|
@@ -124,3 +125,5 @@ On **`sonic-card`** with semantic **`type`** (`primary` · `warning` · `danger`
|
|
|
124
125
|
| Slot | Description |
|
|
125
126
|
|------|-------------|
|
|
126
127
|
| *(default)* | Label markup when **`label`** is insufficient or empty |
|
|
128
|
+
|
|
129
|
+
The inner flex container exposes **`part="divider"`** for theme overrides.
|
|
@@ -1,125 +1,77 @@
|
|
|
1
1
|
# Checkbox
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Basic example
|
|
6
|
-
|
|
3
|
+
## Size
|
|
7
4
|
<sonic-code>
|
|
8
5
|
<template>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
</sonic-checkbox>
|
|
6
|
+
<div class="grid gap-2">
|
|
7
|
+
<sonic-checkbox size="2xs">2xs checkbox</sonic-checkbox>
|
|
8
|
+
<sonic-checkbox size="xs">xs checkbox</sonic-checkbox>
|
|
9
|
+
<sonic-checkbox size="sm">sm checkbox</sonic-checkbox>
|
|
10
|
+
<sonic-checkbox>default checkbox</sonic-checkbox>
|
|
11
|
+
<sonic-checkbox size="lg">lg checkbox</sonic-checkbox>
|
|
12
|
+
<sonic-checkbox size="xl">xl checkbox</sonic-checkbox>
|
|
13
|
+
<sonic-checkbox size="2xl">2xl checkbox</sonic-checkbox>
|
|
14
|
+
</div>
|
|
13
15
|
</template>
|
|
14
16
|
</sonic-code>
|
|
15
17
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
With no `size`, the checkbox follows `md` (1rem).
|
|
19
|
-
|
|
18
|
+
## Checked
|
|
20
19
|
<sonic-code>
|
|
21
20
|
<template>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<sonic-checkbox size="sm">sm</sonic-checkbox>
|
|
26
|
-
<sonic-checkbox>Default</sonic-checkbox>
|
|
27
|
-
<sonic-checkbox size="lg">lg</sonic-checkbox>
|
|
28
|
-
<sonic-checkbox size="xl">xl</sonic-checkbox>
|
|
29
|
-
<sonic-checkbox size="2xl">2xl</sonic-checkbox>
|
|
30
|
-
</div>
|
|
21
|
+
<sonic-checkbox checked
|
|
22
|
+
>Already checked checkbox
|
|
23
|
+
</sonic-checkbox>
|
|
31
24
|
</template>
|
|
32
25
|
</sonic-code>
|
|
33
26
|
|
|
34
|
-
##
|
|
35
|
-
|
|
36
|
-
`checked` sets the initial state. `disabled` blocks interaction and dims the control.
|
|
37
|
-
|
|
27
|
+
## Disabled
|
|
38
28
|
<sonic-code>
|
|
39
29
|
<template>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<sonic-checkbox disabled checked>Disabled and checked</sonic-checkbox>
|
|
44
|
-
<sonic-checkbox>I accept the <sonic-link href="#" class="underline">terms</sonic-link></sonic-checkbox>
|
|
45
|
-
</div>
|
|
30
|
+
<sonic-checkbox disabled
|
|
31
|
+
>Disabled checkbox
|
|
32
|
+
</sonic-checkbox>
|
|
46
33
|
</template>
|
|
47
34
|
</sonic-code>
|
|
48
35
|
|
|
49
|
-
##
|
|
50
|
-
|
|
51
|
-
Checkboxes with the same `name` under one `formDataProvider` store an array of the checked `value`s. Initial state is read from that data, so a value already present checks the matching box. See [Data flow](/docs/getting-started/dataFlow).
|
|
52
|
-
|
|
36
|
+
## Disabled and checked
|
|
53
37
|
<sonic-code>
|
|
54
38
|
<template>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<sonic-checkbox name="extras" value="lounge">Lounge access</sonic-checkbox>
|
|
59
|
-
<div>Selected: <sonic-value dataProvider="checkbox-multiple-demo" key="extras"></sonic-value></div>
|
|
60
|
-
</div>
|
|
39
|
+
<sonic-checkbox disabled checked
|
|
40
|
+
>Disabled but already checked checkbox
|
|
41
|
+
</sonic-checkbox>
|
|
61
42
|
</template>
|
|
62
43
|
</sonic-code>
|
|
63
44
|
|
|
64
|
-
##
|
|
65
|
-
|
|
66
|
-
`unique` stores a single value instead of an array: checking one box unchecks the others with the same `name`, and the checked box can be unchecked again (value `null`). `radio` does the same but cannot be unchecked by a click.
|
|
67
|
-
|
|
45
|
+
## Checkbox with link
|
|
68
46
|
<sonic-code>
|
|
69
47
|
<template>
|
|
70
|
-
|
|
71
|
-
<sonic-checkbox unique name="cabin" value="economy">Economy</sonic-checkbox>
|
|
72
|
-
<sonic-checkbox unique name="cabin" value="business">Business</sonic-checkbox>
|
|
73
|
-
<div>Cabin: <sonic-value dataProvider="checkbox-unique-demo" key="cabin"></sonic-value></div>
|
|
74
|
-
</div>
|
|
48
|
+
<sonic-checkbox>Checkbox with <sonic-link href="#" class="underline text-info">link</sonic-link>
|
|
75
49
|
</template>
|
|
76
50
|
</sonic-code>
|
|
77
51
|
|
|
78
|
-
## Check all
|
|
79
|
-
|
|
80
|
-
A checkbox with `checksAll` and the same `name` toggles every sibling value. It shows the indeterminate icon when only some are checked; its own `value` is never stored. With `unsetOnDisconnect`, a checkbox removes its value from the data when it leaves the DOM. `showAsIndeterminate` forces the indeterminate icon on any checkbox.
|
|
81
|
-
|
|
52
|
+
## Check all checkbox
|
|
82
53
|
<sonic-code>
|
|
83
|
-
<template>
|
|
84
|
-
|
|
85
|
-
<sonic-checkbox
|
|
86
|
-
<sonic-
|
|
87
|
-
<
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
<sonic-button size="xs" variant="ghost" onclick="document.getElementById('checkbox-removable').remove()">Remove</sonic-button>
|
|
54
|
+
<template>
|
|
55
|
+
<div formDataProvider="checkbox-check-all-demo">
|
|
56
|
+
<sonic-checkbox name='someSharedName' value="all" checksAll>All</sonic-checkbox>
|
|
57
|
+
<sonic-divider></sonic-divider>
|
|
58
|
+
<div class="grid gap-2">
|
|
59
|
+
<sonic-checkbox name="someSharedName" value="foo">Foo</sonic-checkbox>
|
|
60
|
+
<sonic-checkbox name="someSharedName" value="bar">Bar</sonic-checkbox>
|
|
91
61
|
</div>
|
|
92
|
-
<
|
|
62
|
+
<sonic-divider></sonic-divider>
|
|
63
|
+
<div>
|
|
64
|
+
<span>Enabling unsetOnDisconect ensures that outdated or irrelevant values are not retained in the form state once their associated inputs are no longer rendered.</span>
|
|
65
|
+
<div id="prunable-checkbox" class="flex gap-2 items-center">
|
|
66
|
+
<sonic-checkbox name="someSharedName" value="baz">Baz</sonic-checkbox>
|
|
67
|
+
<sonic-button variant="ghost" shape="circle" unique name="toggleCheckboxExistance" onclick="document.getElementById('prunable-checkbox').remove();" value="true"><sonic-icon library="fontAwesome" prefix="solid" name="trash"></sonic-icon></sonic-button>
|
|
68
|
+
</div>
|
|
93
69
|
</div>
|
|
94
70
|
</template>
|
|
95
71
|
</sonic-code>
|
|
96
72
|
|
|
97
|
-
##
|
|
98
|
-
|
|
99
|
-
| Attribute | Values | Description |
|
|
100
|
-
|----------|---------|-------------|
|
|
101
|
-
| `name` | string | Key in the form data (dot notation supported) |
|
|
102
|
-
| `value` | string | Value stored when checked |
|
|
103
|
-
| `formDataProvider` | string | Form data id; inherited from the closest ancestor when omitted |
|
|
104
|
-
| `checked` | boolean | Initial checked state |
|
|
105
|
-
| `unique` | boolean | Stores a single value; can be unchecked |
|
|
106
|
-
| `radio` | boolean | Stores a single value; cannot be unchecked by a click |
|
|
107
|
-
| `checksAll` | boolean | Toggles every checkbox with the same `name` |
|
|
108
|
-
| `unsetOnDisconnect` | boolean | Removes the value from the data when the element is removed |
|
|
109
|
-
| `showAsIndeterminate` | boolean | Forces the indeterminate icon |
|
|
110
|
-
| `label` | string (HTML) | Label, rendered before the default slot |
|
|
111
|
-
| `description` | string (HTML) | Helper text, rendered in the `description` slot |
|
|
112
|
-
| `size` | `2xs` … `2xl` · `inherit` (default `md`) | Font size and box size |
|
|
113
|
-
| `disabled` | boolean | Blocks interaction |
|
|
114
|
-
| `required` | boolean | Native validation on form submit |
|
|
115
|
-
| `autofocus` | boolean | Focuses the input on load |
|
|
116
|
-
| `iconName` | string (default `check`) | Icon shown when checked |
|
|
117
|
-
| `indeterminateIconName` | string (default `minus-small`) | Icon shown when indeterminate |
|
|
118
|
-
| `data-aria-label` · `data-aria-labelledby` | string | Forwarded to the inner input as `aria-label` / `aria-labelledby` |
|
|
73
|
+
## Example of use — blacklist + queue
|
|
119
74
|
|
|
120
|
-
|
|
121
|
-
|------|-------------|
|
|
122
|
-
| *(default)* | Label content (text, links) |
|
|
123
|
-
| `description` | Helper text under the label |
|
|
75
|
+
Checked **`blacklistFlags`** values are sent to the mock API (`?blacklistFlags=racist,sexist,…`), which excludes jokes whose **`flags`** match (see `filterDocsJokes` in `src/docs/mock-api/fixtures.ts`).
|
|
124
76
|
|
|
125
|
-
|
|
77
|
+
<docs-lit-demo for="docs-joke-blacklist-demo"></docs-lit-demo>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Fieldset
|
|
2
2
|
|
|
3
|
-
**`sonic-fieldset`** groups related form controls
|
|
3
|
+
**`sonic-fieldset`** groups related form controls with a bordered container and an accessible **`<fieldset>`** semantics layer. Put fields in the **default slot**; add a title with **`sonic-legend`** or the shorthand **`label`** / **`description`** / **`iconName`** attributes. Default **`variant`** is `default`. Pair the body with **`sonic-form-layout`** for responsive columns.
|
|
4
4
|
|
|
5
5
|
## Basic example
|
|
6
6
|
|
|
7
7
|
<sonic-code>
|
|
8
8
|
<template>
|
|
9
9
|
<sonic-fieldset>
|
|
10
|
-
<sonic-legend label="
|
|
10
|
+
<sonic-legend label="Contact details"></sonic-legend>
|
|
11
11
|
<sonic-form-layout>
|
|
12
12
|
<sonic-input autocomplete="email" label="Email" name="email" type="email"></sonic-input>
|
|
13
13
|
<sonic-input autocomplete="tel" label="Phone" name="phone" type="tel"></sonic-input>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## Variant
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
**`ghost`** and **`shadow`** use a transparent border; **`shadow`** also applies **`--sc-shadow-lg`**.
|
|
22
22
|
|
|
23
23
|
<sonic-code>
|
|
24
24
|
<template>
|
|
@@ -39,9 +39,9 @@ With no `variant`, the fieldset is `default` (bordered). `ghost` and `shadow` hi
|
|
|
39
39
|
</template>
|
|
40
40
|
</sonic-code>
|
|
41
41
|
|
|
42
|
-
## Tight
|
|
42
|
+
## Tight layout
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Set **`tight`** to remove horizontal padding and side borders (flat strip inside a parent).
|
|
45
45
|
|
|
46
46
|
<sonic-code>
|
|
47
47
|
<template>
|
|
@@ -54,7 +54,9 @@ With no `variant`, the fieldset is `default` (bordered). `ghost` and `shadow` hi
|
|
|
54
54
|
|
|
55
55
|
## Legend
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Use **`sonic-legend`** for the group title. Set **`label`** and **`description`** for simple copy, or use the **default slot** for custom markup. Add secondary text with **`sonic-legend-description`**. Place actions in **`slot="suffix"`** on the legend.
|
|
58
|
+
|
|
59
|
+
Attribute values on **`sonic-legend`** are rendered as HTML—use only trusted content.
|
|
58
60
|
|
|
59
61
|
<sonic-code>
|
|
60
62
|
<template>
|
|
@@ -74,15 +76,15 @@ With no `variant`, the fieldset is `default` (bordered). `ghost` and `shadow` hi
|
|
|
74
76
|
</template>
|
|
75
77
|
</sonic-code>
|
|
76
78
|
|
|
77
|
-
## Shorthand legend
|
|
79
|
+
## Shorthand legend on the fieldset
|
|
78
80
|
|
|
79
|
-
When
|
|
81
|
+
When **`label`** is set on **`sonic-fieldset`**, the component renders **`sonic-legend`** for you. Pass **`description`** **`iconName`** **`iconLibrary`** and **`iconPrefix`** the same way. Do not combine shorthand **`label`** with a separate slotted **`sonic-legend`**—you will get two legends.
|
|
80
82
|
|
|
81
83
|
<sonic-code>
|
|
82
84
|
<template>
|
|
83
85
|
<sonic-fieldset
|
|
84
|
-
label="
|
|
85
|
-
description="Basic
|
|
86
|
+
label="Account"
|
|
87
|
+
description="Basic profile fields"
|
|
86
88
|
iconLibrary="iconoir"
|
|
87
89
|
iconName="user"
|
|
88
90
|
>
|
|
@@ -93,12 +95,12 @@ When `label` is set on `sonic-fieldset`, it renders the `sonic-legend` itself an
|
|
|
93
95
|
|
|
94
96
|
## Legend actions
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
Use **`slot="suffix"`** on **`sonic-legend`** for menus or icon buttons aligned to the end of the legend row.
|
|
97
99
|
|
|
98
100
|
<sonic-code>
|
|
99
101
|
<template>
|
|
100
102
|
<sonic-fieldset>
|
|
101
|
-
<sonic-legend label="
|
|
103
|
+
<sonic-legend label="Personal information">
|
|
102
104
|
<sonic-pop class="inline-block" slot="suffix">
|
|
103
105
|
<sonic-button shape="circle" variant="ghost">
|
|
104
106
|
<sonic-icon library="iconoir" size="lg" name="more-vert"></sonic-icon>
|
|
@@ -117,7 +119,49 @@ When `label` is set on `sonic-fieldset`, it renders the `sonic-legend` itself an
|
|
|
117
119
|
</template>
|
|
118
120
|
</sonic-code>
|
|
119
121
|
|
|
120
|
-
|
|
122
|
+
## Form association and disabled state
|
|
123
|
+
|
|
124
|
+
### Associating a distant `form`
|
|
125
|
+
|
|
126
|
+
Set **`form`** on **`sonic-fieldset`** to the **`id`** of a **`<form>`** elsewhere in the page (same as the native **`form`** attribute on **`<fieldset>`**). Named fields in the fieldset then belong to that form for submit and constraint validation—for example a toolbar **`form`** and a field group rendered lower on the layout.
|
|
127
|
+
|
|
128
|
+
<sonic-code>
|
|
129
|
+
<template>
|
|
130
|
+
<div class="grid gap-4">
|
|
131
|
+
<form id="billing-form" class="flex flex-wrap items-center gap-2">
|
|
132
|
+
<sonic-button submit type="primary">Save billing</sonic-button>
|
|
133
|
+
</form>
|
|
134
|
+
<sonic-fieldset form="billing-form" label="Billing address">
|
|
135
|
+
<sonic-form-layout>
|
|
136
|
+
<sonic-input label="Street" name="street" autocomplete="street-address"></sonic-input>
|
|
137
|
+
<sonic-input label="Postal code" required name="postal_code" autocomplete="postal-code"></sonic-input>
|
|
138
|
+
<sonic-input label="City" name="city" autocomplete="address-level2"></sonic-input>
|
|
139
|
+
</sonic-form-layout>
|
|
140
|
+
</sonic-fieldset>
|
|
141
|
+
</div>
|
|
142
|
+
</template>
|
|
143
|
+
</sonic-code>
|
|
144
|
+
|
|
145
|
+
### Disabling a group
|
|
146
|
+
|
|
147
|
+
Set **`disabled`** on **`sonic-fieldset`** to disable the inner **`<fieldset>`** and every control in the group (same as a native fieldset). Use it for read-only steps or sections gated by permissions.
|
|
148
|
+
|
|
149
|
+
<sonic-code>
|
|
150
|
+
<template>
|
|
151
|
+
<div class="grid gap-4">
|
|
152
|
+
<sonic-fieldset label="Editable">
|
|
153
|
+
<sonic-input label="Display name" name="display_name"></sonic-input>
|
|
154
|
+
</sonic-fieldset>
|
|
155
|
+
<sonic-fieldset label="Locked" disabled>
|
|
156
|
+
<sonic-input label="Account ID" name="account_id" value="acct_42"></sonic-input>
|
|
157
|
+
</sonic-fieldset>
|
|
158
|
+
</div>
|
|
159
|
+
</template>
|
|
160
|
+
</sonic-code>
|
|
161
|
+
|
|
162
|
+
## Accessibility
|
|
163
|
+
|
|
164
|
+
The inner **`<fieldset>`** carries grouping semantics. **`disabled`** is applied on that element so nested controls are disabled in the usual way. **`sonic-legend`** renders a native **`<legend>`** for the group label.
|
|
121
165
|
|
|
122
166
|
## API reference
|
|
123
167
|
|
|
@@ -126,36 +170,36 @@ When `label` is set on `sonic-fieldset`, it renders the `sonic-legend` itself an
|
|
|
126
170
|
| Attribute | Values | Description |
|
|
127
171
|
|----------|---------|-------------|
|
|
128
172
|
| `variant` | `default` · `ghost` · `shadow` (default `default`) | Border and shadow treatment |
|
|
129
|
-
| `tight` | boolean | Removes horizontal padding
|
|
130
|
-
| `label` | string | Shorthand title; renders
|
|
131
|
-
| `description` | string | Shorthand description (HTML) |
|
|
132
|
-
| `iconName` | string | Shorthand legend icon
|
|
133
|
-
| `iconLibrary` | string | Shorthand legend icon
|
|
134
|
-
| `iconPrefix` | string | Shorthand legend icon
|
|
135
|
-
| `disabled` | boolean |
|
|
136
|
-
| `form` | string |
|
|
137
|
-
| `dataProvider` | string |
|
|
173
|
+
| `tight` | boolean | Removes horizontal padding and side borders |
|
|
174
|
+
| `label` | string | Shorthand legend title; renders **`sonic-legend`** when set |
|
|
175
|
+
| `description` | string | Shorthand legend description (HTML) |
|
|
176
|
+
| `iconName` | string | Shorthand legend icon **`name`** |
|
|
177
|
+
| `iconLibrary` | string | Shorthand legend icon **`library`** |
|
|
178
|
+
| `iconPrefix` | string | Shorthand legend icon **`prefix`** |
|
|
179
|
+
| `disabled` | boolean | Disables the native **`<fieldset>`** and its controls |
|
|
180
|
+
| `form` | string | **`id`** of an associated **`form`** |
|
|
181
|
+
| `dataProvider` | string | Subscriber key; can autofill properties that match publisher fields (e.g. **`label`**) |
|
|
138
182
|
|
|
139
183
|
| Slot | Description |
|
|
140
184
|
|------|-------------|
|
|
141
|
-
| *(default)* |
|
|
185
|
+
| *(default)* | Legend (optional) and field group content in visual order |
|
|
142
186
|
|
|
143
187
|
### `sonic-legend`
|
|
144
188
|
|
|
145
189
|
| Attribute | Values | Description |
|
|
146
190
|
|----------|---------|-------------|
|
|
147
|
-
| `label` | string | Title
|
|
148
|
-
| `description` | string | Description
|
|
149
|
-
| `iconName` | string | Leading
|
|
150
|
-
| `iconLibrary` | string | Icon
|
|
151
|
-
| `iconPrefix` | string | Icon
|
|
152
|
-
| `forceAutoFill` | boolean |
|
|
191
|
+
| `label` | string | Title HTML when not using the default slot |
|
|
192
|
+
| `description` | string | Description HTML (wrapped in **`sonic-legend-description`**) |
|
|
193
|
+
| `iconName` | string | Leading **`sonic-icon`** **`name`** |
|
|
194
|
+
| `iconLibrary` | string | Icon **`library`** |
|
|
195
|
+
| `iconPrefix` | string | Icon **`prefix`** |
|
|
196
|
+
| `forceAutoFill` | boolean | Allows Subscriber autofill to override attribute-backed **`label`** / **`description`** |
|
|
153
197
|
|
|
154
198
|
| Slot | Description |
|
|
155
199
|
|------|-------------|
|
|
156
|
-
| *(default)* |
|
|
200
|
+
| *(default)* | Legend title and description components |
|
|
157
201
|
| `suffix` | Trailing actions (menus, icon buttons) |
|
|
158
202
|
|
|
159
203
|
### `sonic-legend-description`
|
|
160
204
|
|
|
161
|
-
|
|
205
|
+
Muted description line below the legend title. No attributes—project content through the **default slot**.
|