@supersoniks/concorde 5.0.3 → 5.0.5
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-component-docs/SKILL.md +194 -0
- package/.agents/skills/concorde-component-docs/template.md +45 -0
- package/ai/cursor/rules/concorde-theme.mdc +1 -1
- package/ai/cursor/rules/concorde.mdc +1 -1
- package/ai/skills/concorde/SKILL.md +1 -1
- package/ai/skills/concorde-theme/SKILL.md +21 -10
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +515 -521
- package/concorde-core.es.js +5151 -5056
- package/dist/concorde-core.bundle.js +515 -521
- package/dist/concorde-core.es.js +5151 -5056
- package/dist/docs-mock-api-sw.js +2 -0
- package/dist/docs-mock-api-sw.js.map +2 -2
- package/docs/assets/index-CD4WyL6o.css +1 -0
- package/docs/assets/{index-BnK6OS7w.js → index-wVZpLVYW.js} +815 -808
- package/docs/crawl/core/components/ui/alert/alert.html +76 -5
- package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +113 -5
- package/docs/crawl/core/components/ui/badge/badge.html +57 -8
- package/docs/crawl/core/components/ui/captcha/captcha.html +90 -8
- package/docs/crawl/core/components/ui/card/card.html +122 -12
- package/docs/crawl/core/components/ui/divider/divider.html +117 -31
- package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +232 -101
- package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +95 -52
- package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +97 -38
- package/docs/crawl/core/components/ui/group/group.html +60 -38
- package/docs/crawl/core/components/ui/icon/icon.html +136 -47
- package/docs/crawl/core/components/ui/image/image.html +118 -6
- package/docs/crawl/core/components/ui/link/link.html +65 -7
- package/docs/crawl/core/components/ui/loader/loader.html +97 -23
- package/docs/crawl/core/components/ui/menu/menu.html +162 -90
- package/docs/crawl/core/components/ui/modal/modal.html +275 -50
- package/docs/crawl/core/components/ui/pop/pop.html +242 -124
- package/docs/crawl/core/components/ui/progress/progress.html +103 -30
- package/docs/crawl/core/components/ui/table/table.html +303 -171
- package/docs/crawl/core/components/ui/theme/theme.html +131 -0
- package/docs/crawl/core/components/ui/toast/toast.html +170 -59
- package/docs/crawl/core/components/ui/tooltip/tooltip.html +90 -29
- package/docs/crawl/docs/_decorators/ancestor-attribute.html +3 -2
- package/docs/crawl/docs/_getting-started/start.html +1 -1
- package/docs/crawl/docs/_getting-started/theming.html +311 -63
- package/docs/crawl/hubs/form-components.html +71 -49
- package/docs/crawl/index.html +7 -6
- package/docs/docs-mock-api-sw.js +2 -0
- package/docs/docs-mock-api-sw.js.map +2 -2
- package/docs/index.html +6 -4
- package/docs/llms-full.txt +1468 -405
- package/docs/llms.txt +23 -30
- package/docs/sitemap.xml +3 -0
- package/docs/src/core/components/ui/alert/alert.md +21 -2
- package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/docs/src/core/components/ui/badge/badge.md +19 -6
- package/docs/src/core/components/ui/captcha/captcha.md +65 -6
- package/docs/src/core/components/ui/card/card.md +73 -10
- package/docs/src/core/components/ui/divider/divider.md +107 -13
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +175 -99
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +75 -52
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -34
- package/docs/src/core/components/ui/group/group.md +36 -36
- package/docs/src/core/components/ui/icon/icon.md +132 -43
- package/docs/src/core/components/ui/image/image.md +35 -3
- package/docs/src/core/components/ui/link/link.md +43 -5
- package/docs/src/core/components/ui/loader/loader.md +79 -22
- package/docs/src/core/components/ui/menu/menu.md +133 -92
- package/docs/src/core/components/ui/modal/modal.md +163 -47
- package/docs/src/core/components/ui/pop/pop.md +217 -123
- package/docs/src/core/components/ui/progress/progress.md +76 -30
- package/docs/src/core/components/ui/table/table.md +147 -171
- package/docs/src/core/components/ui/theme/theme.md +122 -0
- package/docs/src/core/components/ui/toast/toast.md +108 -58
- package/docs/src/core/components/ui/tooltip/tooltip.md +68 -26
- package/docs/src/docs/_decorators/ancestor-attribute.md +3 -2
- package/docs/src/docs/_getting-started/start.md +1 -1
- package/docs/src/docs/_getting-started/theming.md +223 -61
- package/docs/src/docs/search/docs-search.json +2504 -399
- package/docs/src/tsconfig.json +18 -0
- package/index.html +4 -2
- package/package.json +7 -1
- package/public/docs-mock-api-sw.js +2 -0
- package/public/docs-mock-api-sw.js.map +2 -2
- package/src/core/components/ui/_css/align.ts +1 -0
- package/src/core/components/ui/_css/type.ts +86 -8
- package/src/core/components/ui/_i18n/ui-aria-labels.ts +8 -0
- package/src/core/components/ui/alert/alert.md +21 -2
- package/src/core/components/ui/alert-messages/alert-messages.md +85 -0
- package/src/core/components/ui/badge/badge.md +19 -6
- package/src/core/components/ui/badge/badge.ts +8 -9
- package/src/core/components/ui/button/button.ts +5 -15
- package/src/core/components/ui/captcha/captcha.md +65 -6
- package/src/core/components/ui/card/card.md +73 -10
- package/src/core/components/ui/card/card.ts +24 -22
- package/src/core/components/ui/divider/divider.md +107 -13
- package/src/core/components/ui/divider/divider.ts +40 -33
- package/src/core/components/ui/form/fieldset/fieldset.md +175 -99
- package/src/core/components/ui/form/fieldset/fieldset.ts +15 -28
- package/src/core/components/ui/form/fieldset/legend.ts +13 -13
- package/src/core/components/ui/form/form-actions/form-actions.md +75 -52
- package/src/core/components/ui/form/form-actions/form-actions.ts +7 -5
- package/src/core/components/ui/form/form-layout/form-layout.md +109 -34
- package/src/core/components/ui/form/form-layout/form-layout.ts +27 -24
- package/src/core/components/ui/form/textarea/textarea.ts +4 -3
- package/src/core/components/ui/group/group.md +36 -36
- package/src/core/components/ui/group/group.ts +5 -10
- package/src/core/components/ui/icon/icon.md +132 -43
- package/src/core/components/ui/image/image.md +35 -3
- package/src/core/components/ui/link/link.md +43 -5
- package/src/core/components/ui/loader/loader.md +79 -22
- package/src/core/components/ui/loader/loader.ts +67 -27
- package/src/core/components/ui/loader/styles/fixed.ts +6 -11
- package/src/core/components/ui/menu/menu.md +133 -92
- package/src/core/components/ui/menu/menu.ts +53 -58
- package/src/core/components/ui/modal/modal.md +163 -47
- package/src/core/components/ui/modal/modal.ts +2 -4
- package/src/core/components/ui/pop/pop.md +217 -123
- package/src/core/components/ui/pop/pop.ts +0 -1
- package/src/core/components/ui/progress/progress.md +76 -30
- package/src/core/components/ui/progress/progress.ts +25 -56
- package/src/core/components/ui/table/table-caption.ts +2 -2
- package/src/core/components/ui/table/table-tbody.ts +3 -3
- package/src/core/components/ui/table/table-td.ts +23 -18
- package/src/core/components/ui/table/table-th.ts +8 -8
- package/src/core/components/ui/table/table-tr.ts +4 -4
- package/src/core/components/ui/table/table.md +147 -171
- package/src/core/components/ui/table/table.ts +20 -19
- package/src/core/components/ui/theme/theme-collection/auto.ts +15 -0
- package/src/core/components/ui/theme/theme-collection/core-variables.ts +8 -31
- package/src/core/components/ui/theme/theme-collection/dark.ts +1 -7
- package/src/core/components/ui/theme/theme-collection/light.ts +30 -26
- package/src/core/components/ui/theme/theme.md +122 -0
- package/src/core/components/ui/theme/theme.ts +30 -7
- package/src/core/components/ui/toast/toast-item.ts +6 -9
- package/src/core/components/ui/toast/toast.md +108 -58
- package/src/core/components/ui/toast/types.ts +1 -1
- package/src/core/components/ui/tooltip/tooltip.md +68 -26
- package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
- package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
- package/src/core/utils/AncestorAttributeObserver.ts +183 -70
- package/src/docs/_decorators/ancestor-attribute.md +3 -2
- package/src/docs/_getting-started/start.md +1 -1
- package/src/docs/_getting-started/theming.md +223 -61
- package/src/docs/code.ts +125 -58
- package/src/docs/header/header.ts +62 -54
- package/src/docs/mock-api/router.ts +2 -0
- package/src/docs/navigation/navigation.ts +6 -3
- package/src/docs/search/docs-search.json +2504 -399
- package/src/docs/search/markdown-renderer.ts +6 -6
- package/src/docs/search/search.ts +4 -4
- package/src/docs/tailwind/css/tailwind.css +6 -5
- package/src/tsconfig.json +18 -0
- package/src/tsconfig.tsbuildinfo +1 -1
- package/tailwind.config.js +19 -0
- package/docs/assets/index--GpD7R7a.css +0 -1
package/docs/llms.txt
CHANGED
|
@@ -29,43 +29,36 @@ Full text: https://concorde.supersoniks.org/llms-full.txt
|
|
|
29
29
|
- [Submit](https://concorde.supersoniks.org/crawl/core/components/functional/submit/submit.html) (core/components/functional/submit/submit): > Live demos: <docs-lit-demo> + src/docs/example/docs-submit-demos.ts. Use Local API demos (serviceURL="/docs-mock-api").
|
|
30
30
|
- [Subscriber](https://concorde.supersoniks.org/crawl/core/components/functional/subscriber/subscriber.html) (core/components/functional/subscriber/subscriber): La mixin Subscriber permet lier un composant à un publisher.
|
|
31
31
|
- [Value](https://concorde.supersoniks.org/crawl/core/components/functional/value/value.html) (core/components/functional/value/value): Simply shows a value from a data provider.
|
|
32
|
-
- [
|
|
33
|
-
- [Alert](https://concorde.supersoniks.org/crawl/core/components/ui/alert/alert.html) (core/components/ui/alert/alert):
|
|
34
|
-
- [Badge](https://concorde.supersoniks.org/crawl/core/components/ui/badge/badge.html) (core/components/ui/badge/badge):
|
|
32
|
+
- [Alert messages](https://concorde.supersoniks.org/crawl/core/components/ui/alert-messages/alert-messages.html) (core/components/ui/alert-messages/alert-messages): sonic-alert-messages renders a vertical stack of sonic-alert items from a messages array on a linked data provider (typical pattern: submitResultDataProvider after a form submit). Only entries with ty
|
|
33
|
+
- [Alert](https://concorde.supersoniks.org/crawl/core/components/ui/alert/alert.html) (core/components/ui/alert/alert): Alerts surface important feedback inline—errors, confirmations, or contextual help. Use label / text for simple copy, or the default slot for rich content (links, buttons). Set announce when the messa
|
|
34
|
+
- [Badge](https://concorde.supersoniks.org/crawl/core/components/ui/badge/badge.html) (core/components/ui/badge/badge): Badges are compact, non-interactive labels for status, counts, or categories. They mirror sonic-button styling (type, variant, size) without focus rings or click handling—use a button when the control
|
|
35
35
|
- [Button](https://concorde.supersoniks.org/crawl/core/components/ui/button/button.html) (core/components/ui/button/button): The length of the button depends on the size of its content
|
|
36
|
-
- [Captcha](https://concorde.supersoniks.org/crawl/core/components/ui/captcha/captcha.html) (core/components/ui/captcha/captcha):
|
|
37
|
-
- [Card](https://concorde.supersoniks.org/crawl/core/components/ui/card/card.html) (core/components/ui/card/card):
|
|
38
|
-
- [Divider](https://concorde.supersoniks.org/crawl/core/components/ui/divider/divider.html) (core/components/ui/divider/divider):
|
|
39
|
-
|
|
40
|
-
Align
|
|
41
|
-
|
|
42
|
-
Size
|
|
43
|
-
|
|
44
|
-
Custom
|
|
45
|
-
|
|
46
|
-
Lorem ipsum dolor sit amet +25
|
|
36
|
+
- [Captcha](https://concorde.supersoniks.org/crawl/core/components/ui/captcha/captcha.html) (core/components/ui/captcha/captcha): 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 vali
|
|
37
|
+
- [Card](https://concorde.supersoniks.org/crawl/core/components/ui/card/card.html) (core/components/ui/card/card): Cards group related content on a padded surface with radius, theme type colors, and elevation. Default shadow is lg. Compose sonic-card-header / sonic-card-main / sonic-card-footer, or place any marku
|
|
38
|
+
- [Divider](https://concorde.supersoniks.org/crawl/core/components/ui/divider/divider.html) (core/components/ui/divider/divider): sonic-divider draws a horizontal or vertical rule with optional centered label copy. Use it to separate sections in forms, cards, and sonic-menu. Set label for simple HTML captions or use the default
|
|
47
39
|
- [Checkbox](https://concorde.supersoniks.org/crawl/core/components/ui/form/checkbox/checkbox.html) (core/components/ui/form/checkbox/checkbox): >Already checked checkbox
|
|
48
|
-
- [Fieldset](https://concorde.supersoniks.org/crawl/core/components/ui/form/fieldset/fieldset.html) (core/components/ui/form/fieldset/fieldset):
|
|
49
|
-
- [Form
|
|
50
|
-
- [Form
|
|
40
|
+
- [Fieldset](https://concorde.supersoniks.org/crawl/core/components/ui/form/fieldset/fieldset.html) (core/components/ui/form/fieldset/fieldset): 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
|
|
41
|
+
- [Form actions](https://concorde.supersoniks.org/crawl/core/components/ui/form/form-actions/form-actions.html) (core/components/ui/form/form-actions/form-actions): sonic-form-actions lays out submit / cancel and other form footer controls in a wrapping flex row with a small fixed gap. Place it inside sonic-form-layout (full-width row) or any block that should en
|
|
42
|
+
- [Form layout](https://concorde.supersoniks.org/crawl/core/components/ui/form/form-layout/form-layout.html) (core/components/ui/form/form-layout/form-layout): sonic-form-layout arranges slotted form controls in a responsive CSS grid with consistent vertical spacing. Pair sonic-input · sonic-select and sonic-input-autocomplete fields side by side when the ho
|
|
51
43
|
- [Input-autocomplete](https://concorde.supersoniks.org/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html) (core/components/ui/form/input-autocomplete/input-autocomplete): Champ formulaire + suggestions via queue. Valeur via formDataProvider + name ; la recherche filtre la queue (store interne).
|
|
52
44
|
- [Input](https://concorde.supersoniks.org/crawl/core/components/ui/form/input/input.html) (core/components/ui/form/input/input): Native attributes list
|
|
53
45
|
- [Radio](https://concorde.supersoniks.org/crawl/core/components/ui/form/radio/radio.html) (core/components/ui/form/radio/radio): >Already checked radio
|
|
54
46
|
- [Select](https://concorde.supersoniks.org/crawl/core/components/ui/form/select/select.html) (core/components/ui/form/select/select): {"value":"dark", "wording":"dark (set by \"attribute\")", "selected" : "true"}, {"value":"auto", "wording":"auto"}
|
|
55
47
|
- [Switch](https://concorde.supersoniks.org/crawl/core/components/ui/form/switch/switch.html) (core/components/ui/form/switch/switch): >Already checked switch
|
|
56
48
|
- [Textarea](https://concorde.supersoniks.org/crawl/core/components/ui/form/textarea/textarea.html) (core/components/ui/form/textarea/textarea): Native attributes list
|
|
57
|
-
- [Group](https://concorde.supersoniks.org/crawl/core/components/ui/group/group.html) (core/components/ui/group/group):
|
|
58
|
-
- [Icon](https://concorde.supersoniks.org/crawl/core/components/ui/icon/icon.html) (core/components/ui/icon/icon):
|
|
59
|
-
- [Image](https://concorde.supersoniks.org/crawl/core/components/ui/image/image.html) (core/components/ui/image/image):
|
|
60
|
-
- [Link](https://concorde.supersoniks.org/crawl/core/components/ui/link/link.html) (core/components/ui/link/link):
|
|
61
|
-
- [Loader](https://concorde.supersoniks.org/crawl/core/components/ui/loader/loader.html) (core/components/ui/loader/loader):
|
|
62
|
-
- [Menu](https://concorde.supersoniks.org/crawl/core/components/ui/menu/menu.html) (core/components/ui/menu/menu):
|
|
63
|
-
- [
|
|
64
|
-
- [Pop](https://concorde.supersoniks.org/crawl/core/components/ui/pop/pop.html) (core/components/ui/pop/pop):
|
|
65
|
-
- [Progress
|
|
66
|
-
- [Table](https://concorde.supersoniks.org/crawl/core/components/ui/table/table.html) (core/components/ui/table/table):
|
|
67
|
-
- [
|
|
68
|
-
- [
|
|
49
|
+
- [Group](https://concorde.supersoniks.org/crawl/core/components/ui/group/group.html) (core/components/ui/group/group): sonic-group lays out slotted sonic-button · sonic-input and sonic-select controls in a single horizontal row with shared corner radius (first / middle / last items). Optional label and description fol
|
|
50
|
+
- [Icon](https://concorde.supersoniks.org/crawl/core/components/ui/icon/icon.html) (core/components/ui/icon/icon): sonic-icon renders inline SVG icons from the bundled core set or from CDN libraries. Set name (and library / prefix when needed); scale with size. Icons inherit currentColor and are aria-hidden by def
|
|
51
|
+
- [Image](https://concorde.supersoniks.org/crawl/core/components/ui/image/image.html) (core/components/ui/image/image): sonic-image wraps a responsive <img> with aspect ratio, object-fit: cover, optional rounded corners, and load transitions. The host shows a placeholder background (--sc-placeholder-bg) until the asset
|
|
52
|
+
- [Link](https://concorde.supersoniks.org/crawl/core/components/ui/link/link.html) (core/components/ui/link/link): Links navigate with inherited typography: internal routes, anchors, or external URLs. The default slot is the anchor label. For in-app routing, pair href with pushstate; use autoActive to reflect the
|
|
53
|
+
- [Loader](https://concorde.supersoniks.org/crawl/core/components/ui/loader/loader.html) (core/components/ui/loader/loader): sonic-loader shows a loading animation in the page or as a viewport overlay. Default mode is fixed (centered overlay). Use inline inside lists and fetch placeholders. Pair noDelay when the spinner sho
|
|
54
|
+
- [Menu](https://concorde.supersoniks.org/crawl/core/components/ui/menu/menu.html) (core/components/ui/menu/menu): sonic-menu lays out navigation or actions as a direction row or column of sonic-menu-item entries (ghost variant and block shape by default), optional sonic-divider separators, and overflow content in
|
|
55
|
+
- [Modal](https://concorde.supersoniks.org/crawl/core/components/ui/modal/modal.html) (core/components/ui/modal/modal): sonic-modal presents focused content in a <dialog> overlay with backdrop, enter/exit animation, and a built-in close control. Compose sonic-modal-title / sonic-modal-subtitle / sonic-modal-content / s
|
|
56
|
+
- [Pop](https://concorde.supersoniks.org/crawl/core/components/ui/pop/pop.html) (core/components/ui/pop/pop): sonic-pop anchors floating panels to a trigger: put the control in the default slot and the panel in slot="content" (menus, forms, custom markup). Click toggles open/closed unless manual is set; defau
|
|
57
|
+
- [Progress](https://concorde.supersoniks.org/crawl/core/components/ui/progress/progress.html) (core/components/ui/progress/progress): Shows task completion on a value / max scale via a native <progress> bar. Omit value for an indeterminate loading animation. Put primary copy in the default slot and optional secondary text in remaini
|
|
58
|
+
- [Table](https://concorde.supersoniks.org/crawl/core/components/ui/table/table.html) (core/components/ui/table/table): sonic-table lays out tabular data with composable sonic-tr / sonic-th / sonic-td children. The root applies shared typography via size, scrolls horizontally when content overflows, and optionally caps
|
|
59
|
+
- [Theme](https://concorde.supersoniks.org/crawl/core/components/ui/theme/theme.html) (core/components/ui/theme/theme): sonic-theme wraps a Concorde UI: it registers --sc-* design tokens and provides the default slot for your app. With no theme attribute (or theme="custom"), only shared primitives and your overrides ap
|
|
60
|
+
- [Toast](https://concorde.supersoniks.org/crawl/core/components/ui/toast/toast.html) (core/components/ui/toast/toast): Toasts surface short-lived feedback in a fixed stack (bottom-right in the main window). Queue messages with SonicToast.add() on the global SonicToast class—the host sonic-toast is created automaticall
|
|
61
|
+
- [Tooltip](https://concorde.supersoniks.org/crawl/core/components/ui/tooltip/tooltip.html) (core/components/ui/tooltip/tooltip): Tooltip shows a short label on hover (and on focus when the trigger can receive focus). Wrap the trigger in the default slot—buttons, icons, or plain text. Default placement is top (center-aligned). A
|
|
69
62
|
- [Data flow](https://concorde.supersoniks.org/crawl/docs/_core-concept/dataFlow.html) (docs/_core-concept/dataFlow): Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, data lives in a DataProvider store (legacy Publisher API: Legacy: Sharing data).
|
|
70
63
|
- [lit + tailwind + vite](https://concorde.supersoniks.org/crawl/docs/_core-concept/overview.html) (docs/_core-concept/overview): Some notes for an overview of Concorde's functioning
|
|
71
64
|
- [Legacy: Subscriber mixin](https://concorde.supersoniks.org/crawl/docs/_core-concept/subscriber.html) (docs/_core-concept/subscriber): > New app components: My first component and Data flow — extend LitElement with decorators (@subscribe, @ancestorAttribute, …). This mixin remains in core components (sonic-list, sonic-fetch, …) and l
|
|
@@ -90,7 +83,7 @@ Custom
|
|
|
90
83
|
- [Legacy: My first subscriber component](https://concorde.supersoniks.org/crawl/docs/_getting-started/my-first-subscriber.html) (docs/_getting-started/my-first-subscriber): > New projects: use My first component (@ancestorAttribute, @subscribe + DataProviderKey, .items on lists) and Data flow. This page documents the Subscriber mixin used by older apps and core component
|
|
91
84
|
- [Legacy: Sharing data](https://concorde.supersoniks.org/crawl/docs/_getting-started/pubsub.html) (docs/_getting-started/pubsub): > New apps: Data flow (get / set / DataProviderKey, decorators). This page documents the historical Publisher proxy API (PublisherManager, publisher.set, onAssign, …).
|
|
92
85
|
- [Introduction](https://concorde.supersoniks.org/crawl/docs/_getting-started/start.html) (docs/_getting-started/start): Based on lit.dev, Concorde is a collection of web components for shared apps and websites.
|
|
93
|
-
- [
|
|
86
|
+
- [Customization](https://concorde.supersoniks.org/crawl/docs/_getting-started/theming.html) (docs/_getting-started/theming): Concorde components ship with default styles (fallback values in each component and in <sonic-theme>).
|
|
94
87
|
- [API configuration](https://concorde.supersoniks.org/crawl/docs/_misc/api-configuration.html) (docs/_misc/api-configuration): APIConfiguration is the object built by HTML.getApiConfiguration from ancestor attributes on the DOM (or from a typed publisher — see @get / @post configuration key). It is passed to API by fetchers,
|
|
95
88
|
- [DataProviderKey](https://concorde.supersoniks.org/crawl/docs/_misc/dataProviderKey.html) (docs/_misc/dataProviderKey): The DataProviderKey<T> utility provides type-safe navigation through composite data structures. Each property or index access extends the path, and the final key can be retrieved via toString() or the
|
|
96
89
|
- [Local API demos (offline)](https://concorde.supersoniks.org/crawl/docs/_misc/docs-mock-api.html) (docs/_misc/docs-mock-api): The Concorde doc site does not call fragile third-party APIs during yarn dev. A Service Worker and the Vite dev middleware serve /docs-mock-api/* on the same origin.
|
package/docs/sitemap.xml
CHANGED
|
@@ -132,6 +132,9 @@
|
|
|
132
132
|
<url>
|
|
133
133
|
<loc>https://concorde.supersoniks.org/crawl/core/components/ui/table/table.html</loc>
|
|
134
134
|
</url>
|
|
135
|
+
<url>
|
|
136
|
+
<loc>https://concorde.supersoniks.org/crawl/core/components/ui/theme/theme.html</loc>
|
|
137
|
+
</url>
|
|
135
138
|
<url>
|
|
136
139
|
<loc>https://concorde.supersoniks.org/crawl/core/components/ui/toast/toast.html</loc>
|
|
137
140
|
</url>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Alert
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Alerts **surface important feedback** inline—errors, confirmations, or contextual help. Use **`label`** / **`text`** for simple copy, or the **default slot** for rich content (links, buttons). Set **`announce`** when the message appears after an action so screen readers pick it up.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Basic example
|
|
6
6
|
|
|
7
7
|
<sonic-code>
|
|
8
8
|
<template>
|
|
@@ -175,3 +175,22 @@ With **`dismissForever`**, dismissal is stored in `localStorage` (key `sonic-ale
|
|
|
175
175
|
</sonic-alert>
|
|
176
176
|
</template>
|
|
177
177
|
</sonic-code>
|
|
178
|
+
|
|
179
|
+
## API reference
|
|
180
|
+
|
|
181
|
+
| Attribute | Values | Description |
|
|
182
|
+
|----------|---------|-------------|
|
|
183
|
+
| `status` | `default` · `info` · `success` · `warning` · `error` | Color and default icon |
|
|
184
|
+
| `label` | string | Title (plain text) |
|
|
185
|
+
| `text` | string | Short body (plain text), rendered before the slot |
|
|
186
|
+
| `size` | `2xs` … `2xl` | Corner radius and typography |
|
|
187
|
+
| `background` | boolean | Tinted background (`color-mix` on status color) |
|
|
188
|
+
| `dismissible` | boolean | Close control; removes the element from the DOM |
|
|
189
|
+
| `dismissForever` | boolean | Persists dismissal in `localStorage`; requires **`id`** |
|
|
190
|
+
| `noIcon` | boolean | Hides the icon (including custom `icon` slot content) |
|
|
191
|
+
| `announce` | boolean | `role="alert"` / `aria-live` for dynamically injected content |
|
|
192
|
+
|
|
193
|
+
| Slot | Description |
|
|
194
|
+
|------|-------------|
|
|
195
|
+
| *(default)* | Message body (HTML, actions); rendered after `text` |
|
|
196
|
+
| `icon` | Replaces the default `sonic-icon` |
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Alert messages
|
|
2
|
+
|
|
3
|
+
**`sonic-alert-messages`** renders a vertical stack of **`sonic-alert`** items from a **`messages`** array on a linked **data provider** (typical pattern: **`submitResultDataProvider`** after a form submit). Only entries with **`type="public"`** are shown. Each alert gets **`announce`** so screen readers pick up feedback after the request.
|
|
4
|
+
|
|
5
|
+
## With submit result
|
|
6
|
+
|
|
7
|
+
Bind **`dataProvider`** to the same publisher as **`submitResultDataProvider`**. API **`messages`** entries need **`type`**: **`public`**, plus **`content`** and optional **`status`** (`warning` · `success` · `error` · `info`).
|
|
8
|
+
|
|
9
|
+
<sonic-code>
|
|
10
|
+
<template>
|
|
11
|
+
<sonic-scope
|
|
12
|
+
serviceURL="/docs-mock-api"
|
|
13
|
+
formDataProvider="submit-example"
|
|
14
|
+
submitResultDataProvider="submit-example-result"
|
|
15
|
+
>
|
|
16
|
+
<sonic-alert-messages dataProvider="submit-example-result" background class="mb-4"></sonic-alert-messages>
|
|
17
|
+
<div class="grid gap-4 max-w-md">
|
|
18
|
+
<sonic-input name="email" type="email" label="Email" value=""></sonic-input>
|
|
19
|
+
<sonic-input name="password" type="password" label="Password" value=""></sonic-input>
|
|
20
|
+
<sonic-submit endPoint="api/register" onClick>
|
|
21
|
+
<sonic-button type="primary">Submit (empty fields → error messages)</sonic-button>
|
|
22
|
+
</sonic-submit>
|
|
23
|
+
</div>
|
|
24
|
+
</sonic-scope>
|
|
25
|
+
</template>
|
|
26
|
+
</sonic-code>
|
|
27
|
+
|
|
28
|
+
## Shared alert props
|
|
29
|
+
|
|
30
|
+
**`size`** · **`background`** and **`noIcon`** apply to every rendered **`sonic-alert`** in the list.
|
|
31
|
+
|
|
32
|
+
<sonic-code>
|
|
33
|
+
<template>
|
|
34
|
+
<sonic-button
|
|
35
|
+
size="sm"
|
|
36
|
+
variant="outline"
|
|
37
|
+
class="mb-3"
|
|
38
|
+
onclick="SonicPublisherManager.get('submit-example-result').set({ messages: [{ type: 'public', content: 'Compact inline feedback without icons.', status: 'info' }] })"
|
|
39
|
+
>
|
|
40
|
+
Load sample messages
|
|
41
|
+
</sonic-button>
|
|
42
|
+
<sonic-alert-messages
|
|
43
|
+
dataProvider="submit-example-result"
|
|
44
|
+
size="sm"
|
|
45
|
+
background
|
|
46
|
+
noIcon
|
|
47
|
+
></sonic-alert-messages>
|
|
48
|
+
</template>
|
|
49
|
+
</sonic-code>
|
|
50
|
+
|
|
51
|
+
## Message shape
|
|
52
|
+
|
|
53
|
+
Example JSON on the result publisher (or API response merged into it):
|
|
54
|
+
|
|
55
|
+
<sonic-code language="typescript">
|
|
56
|
+
<template>
|
|
57
|
+
{
|
|
58
|
+
"messages": [
|
|
59
|
+
{
|
|
60
|
+
"type": "public",
|
|
61
|
+
"content": "The product has been added to your cart",
|
|
62
|
+
"status": "success"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
</template>
|
|
67
|
+
</sonic-code>
|
|
68
|
+
|
|
69
|
+
## API reference
|
|
70
|
+
|
|
71
|
+
| Attribute | Values | Description |
|
|
72
|
+
|----------|---------|-------------|
|
|
73
|
+
| `dataProvider` | publisher id | Source object; **`messages`** array is auto-filled via **Subscriber** |
|
|
74
|
+
| `size` | `2xs` … `2xl` (default `md`) | Passed to each **`sonic-alert`** |
|
|
75
|
+
| `background` | boolean | Tinted background on each alert |
|
|
76
|
+
| `noIcon` | boolean | Hides icons on each alert |
|
|
77
|
+
| `messages` | `Message[]` | Usually set by the publisher; each item uses **`content`** as alert **`text`** |
|
|
78
|
+
|
|
79
|
+
| Message field | Values | Description |
|
|
80
|
+
|---------------|---------|-------------|
|
|
81
|
+
| `type` | `public` | Required for the message to render |
|
|
82
|
+
| `content` | string | Alert body (**`text`** on **`sonic-alert`**) |
|
|
83
|
+
| `status` | `warning` · `success` · `error` · `info` | Alert **`status`**; defaults to **`default`** when omitted |
|
|
84
|
+
|
|
85
|
+
No slots — alerts are generated from **`messages`**.
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Badge
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Colors come from theme tokens (`--sc-primary`, `--sc-danger`, …) or the semantic `type` values below.
|
|
3
|
+
Badges are **compact, non-interactive** labels for status, counts, or categories. They mirror **`sonic-button`** styling (`type`, `variant`, `size`) without focus rings or click handling—use a button when the control should be actionable.
|
|
6
4
|
|
|
7
5
|
## Type
|
|
8
6
|
|
|
@@ -24,9 +22,9 @@ Colors come from theme tokens (`--sc-primary`, `--sc-danger`, …) or the semant
|
|
|
24
22
|
|
|
25
23
|
## Variant
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
Default **`variant`** is filled. **`outline`** — border and text in the `type` color. **`ghost`** — text only, no padding (except in forced-colors mode).
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
### Outline
|
|
30
28
|
|
|
31
29
|
<sonic-code>
|
|
32
30
|
<template>
|
|
@@ -42,7 +40,7 @@ Colors come from theme tokens (`--sc-primary`, `--sc-danger`, …) or the semant
|
|
|
42
40
|
</template>
|
|
43
41
|
</sonic-code>
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
### Ghost
|
|
46
44
|
|
|
47
45
|
<sonic-code>
|
|
48
46
|
<template>
|
|
@@ -173,3 +171,18 @@ Count inside a button (`slot="suffix"`) or a badge absolutely positioned on a bu
|
|
|
173
171
|
</div>
|
|
174
172
|
</template>
|
|
175
173
|
</sonic-code>
|
|
174
|
+
|
|
175
|
+
## API reference
|
|
176
|
+
|
|
177
|
+
| Attribute | Values | Description |
|
|
178
|
+
|----------|---------|-------------|
|
|
179
|
+
| `type` | `default` (default) · `primary` · `neutral` · `warning` · `info` · `success` · `danger` | Semantic color (`--sc-*` tokens) |
|
|
180
|
+
| `variant` | `default` (default) · `outline` · `ghost` | Filled, bordered, or text-only |
|
|
181
|
+
| `size` | `2xs` … `2xl` (default `md`) | Typography and padding (aligned with **`sonic-button`**) |
|
|
182
|
+
| `ellipsis` | boolean | Single-line truncation; parent must constrain width |
|
|
183
|
+
|
|
184
|
+
| Slot | Description |
|
|
185
|
+
|------|-------------|
|
|
186
|
+
| *(default)* | Main label |
|
|
187
|
+
| `prefix` | Icon or short text before the label |
|
|
188
|
+
| `suffix` | Icon or short text after the label |
|
|
@@ -1,12 +1,71 @@
|
|
|
1
1
|
# Captcha
|
|
2
2
|
|
|
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).
|
|
6
|
+
|
|
7
|
+
## Basic example
|
|
8
|
+
|
|
9
|
+
Wrap the form scope and place **`sonic-submit`** in the default slot so the challenge appears above the action.
|
|
10
|
+
|
|
11
|
+
<sonic-code>
|
|
12
|
+
<template>
|
|
13
|
+
<sonic-scope
|
|
14
|
+
serviceURL="/docs-mock-api"
|
|
15
|
+
formDataProvider="captcha-docs-form"
|
|
16
|
+
submitResultDataProvider="captcha-docs-result"
|
|
17
|
+
>
|
|
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>
|
|
20
|
+
<sonic-submit endPoint="api/register" onClick>
|
|
21
|
+
<sonic-button type="primary">Submit with captcha</sonic-button>
|
|
22
|
+
</sonic-submit>
|
|
23
|
+
</sonic-captcha>
|
|
24
|
+
</sonic-scope>
|
|
25
|
+
</template>
|
|
26
|
+
</sonic-code>
|
|
27
|
+
|
|
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
|
+
|
|
3
32
|
<sonic-code>
|
|
4
33
|
<template>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
</sonic-submit>
|
|
9
|
-
</sonic-captcha>
|
|
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>
|
|
10
37
|
</template>
|
|
11
38
|
</sonic-code>
|
|
12
|
-
|
|
39
|
+
|
|
40
|
+
## Form publisher fields
|
|
41
|
+
|
|
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.
|
|
43
|
+
|
|
44
|
+
<sonic-code language="typescript">
|
|
45
|
+
<template>
|
|
46
|
+
{
|
|
47
|
+
needsCaptchaValidation: true,
|
|
48
|
+
captchaKey: "…",
|
|
49
|
+
captchaToken: "…"
|
|
50
|
+
}
|
|
51
|
+
</template>
|
|
52
|
+
</sonic-code>
|
|
53
|
+
|
|
54
|
+
## API reference
|
|
55
|
+
|
|
56
|
+
| Attribute | Values | Description |
|
|
57
|
+
|----------|---------|-------------|
|
|
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 |
|
|
62
|
+
|
|
63
|
+
| Slot | Description |
|
|
64
|
+
|------|-------------|
|
|
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`** |
|
|
70
|
+
|
|
71
|
+
Related: [Submit](#core/components/functional/submit/submit.md/submit) — **`needsCaptchaValidation`** and deferred send.
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
# Card
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Cards **group related content** on a padded surface with radius, theme **`type`** colors, and elevation. Default **`shadow`** is `lg`. Compose **`sonic-card-header`** / **`sonic-card-main`** / **`sonic-card-footer`**, or place any markup in the default slot.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Basic example
|
|
6
|
+
|
|
7
|
+
<sonic-code>
|
|
8
|
+
<template>
|
|
9
|
+
<sonic-card class="max-w-sm">
|
|
10
|
+
<p class="m-0">Related content on a raised surface.</p>
|
|
11
|
+
</sonic-card>
|
|
12
|
+
</template>
|
|
13
|
+
</sonic-code>
|
|
6
14
|
|
|
7
15
|
## Type
|
|
8
16
|
|
|
17
|
+
Default **`type`** is `base`. **`default`** and **`light`** share the same surface tokens.
|
|
18
|
+
|
|
9
19
|
<sonic-code>
|
|
10
20
|
<template>
|
|
11
21
|
<div class="flex flex-wrap gap-3">
|
|
12
22
|
<sonic-card type="base" class="min-w-[8rem]">Base</sonic-card>
|
|
13
23
|
<sonic-card type="light" class="min-w-[8rem]">Light</sonic-card>
|
|
24
|
+
<sonic-card type="default" class="min-w-[8rem]">Default</sonic-card>
|
|
14
25
|
<sonic-card type="primary" class="min-w-[8rem]">Primary</sonic-card>
|
|
15
26
|
<sonic-card type="info" class="min-w-[8rem]">Info</sonic-card>
|
|
16
27
|
<sonic-card type="success" class="min-w-[8rem]">Success</sonic-card>
|
|
@@ -22,9 +33,26 @@ Default **`type`** is `base` (page background). Use `light` for a subtle gray pa
|
|
|
22
33
|
</template>
|
|
23
34
|
</sonic-code>
|
|
24
35
|
|
|
36
|
+
## Shadow
|
|
37
|
+
|
|
38
|
+
Set **`shadow`** to control elevation. Default is `lg`.
|
|
39
|
+
|
|
40
|
+
<sonic-code>
|
|
41
|
+
<template>
|
|
42
|
+
<div class="grid gap-4 sm:grid-cols-2 max-w-2xl">
|
|
43
|
+
<sonic-card shadow="none" class="min-h-[5rem] flex items-center justify-center">None</sonic-card>
|
|
44
|
+
<sonic-card shadow="sm" class="min-h-[5rem] flex items-center justify-center">Small</sonic-card>
|
|
45
|
+
<sonic-card shadow="md" class="min-h-[5rem] flex items-center justify-center">Medium</sonic-card>
|
|
46
|
+
<sonic-card shadow="lg" class="min-h-[5rem] flex items-center justify-center">Large</sonic-card>
|
|
47
|
+
</div>
|
|
48
|
+
</template>
|
|
49
|
+
</sonic-code>
|
|
50
|
+
|
|
25
51
|
## Header
|
|
26
52
|
|
|
27
|
-
Quick titles with **`label`** and **`description
|
|
53
|
+
Quick titles with **`label`** and **`description`**, or full control through the default slot. **`slot="suffix"`** aligns badges or actions on the right; suffix content does not shrink when the title wraps.
|
|
54
|
+
|
|
55
|
+
`label` and `description` accept HTML (rendered as markup). Prefer plain text when possible; use **`sonic-card-header-description`** or the default slot for structured content.
|
|
28
56
|
|
|
29
57
|
<sonic-code>
|
|
30
58
|
<template>
|
|
@@ -42,7 +70,7 @@ Quick titles with **`label`** and **`description`** attributes, or full control
|
|
|
42
70
|
<sonic-card-header-description>
|
|
43
71
|
Choose what we email you about.
|
|
44
72
|
</sonic-card-header-description>
|
|
45
|
-
<sonic-badge slot="suffix"
|
|
73
|
+
<sonic-badge slot="suffix" type="warning" size="xs">3 new</sonic-badge>
|
|
46
74
|
</sonic-card-header>
|
|
47
75
|
</sonic-card>
|
|
48
76
|
|
|
@@ -77,8 +105,6 @@ Quick titles with **`label`** and **`description`** attributes, or full control
|
|
|
77
105
|
</template>
|
|
78
106
|
</sonic-code>
|
|
79
107
|
|
|
80
|
-
`label` and `description` accept HTML (rendered as markup). Prefer plain text when possible; use the slot for structured content.
|
|
81
|
-
|
|
82
108
|
## Main
|
|
83
109
|
|
|
84
110
|
Optional wrapper for the primary content area (typography, media, forms).
|
|
@@ -110,7 +136,7 @@ Optional footer for actions, metadata, or secondary text.
|
|
|
110
136
|
<p class="m-0">This project and all of its data will be removed permanently.</p>
|
|
111
137
|
</sonic-card-main>
|
|
112
138
|
<sonic-card-footer>
|
|
113
|
-
|
|
139
|
+
<sonic-divider></sonic-divider>
|
|
114
140
|
<div class="flex flex-wrap gap-2 justify-end">
|
|
115
141
|
<sonic-button variant="ghost" size="sm">Cancel</sonic-button>
|
|
116
142
|
<sonic-button type="danger" size="sm">Delete</sonic-button>
|
|
@@ -128,14 +154,14 @@ Header, media, body, and footer together.
|
|
|
128
154
|
<template>
|
|
129
155
|
<sonic-card class="max-w-md">
|
|
130
156
|
<sonic-card-header label="Featured route" description="San Francisco → New York">
|
|
131
|
-
<sonic-icon slot="suffix" library="iconoir" name="airplane"></sonic-icon>
|
|
157
|
+
<sonic-icon slot="suffix" library="iconoir" name="airplane" aria-hidden="true"></sonic-icon>
|
|
132
158
|
</sonic-card-header>
|
|
133
159
|
<sonic-card-main>
|
|
134
160
|
<sonic-image
|
|
135
161
|
rounded
|
|
136
162
|
ratio="16/9"
|
|
137
|
-
src="https://
|
|
138
|
-
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"
|
|
139
165
|
></sonic-image>
|
|
140
166
|
<p class="mb-0">
|
|
141
167
|
Nonstop flight with flexible dates. Prices shown include taxes and fees.
|
|
@@ -150,3 +176,40 @@ Header, media, body, and footer together.
|
|
|
150
176
|
</sonic-card>
|
|
151
177
|
</template>
|
|
152
178
|
</sonic-code>
|
|
179
|
+
|
|
180
|
+
## API reference
|
|
181
|
+
|
|
182
|
+
### `sonic-card`
|
|
183
|
+
|
|
184
|
+
| Attribute | Values | Description |
|
|
185
|
+
|----------|---------|-------------|
|
|
186
|
+
| `type` | `base` (default) · `light` · `invert` · `default` · `primary` · `warning` · `danger` · `success` · `info` · `neutral` | Semantic background and text (`default` and `light` share the same surface) |
|
|
187
|
+
| `shadow` | `none` · `sm` · `md` · `lg` (default `lg`) | Elevation on the card surface |
|
|
188
|
+
|
|
189
|
+
| Slot | Description |
|
|
190
|
+
|------|-------------|
|
|
191
|
+
| *(default)* | Free-form content (header, main, footer, or direct markup) |
|
|
192
|
+
|
|
193
|
+
### `sonic-card-header`
|
|
194
|
+
|
|
195
|
+
| Attribute | Values | Description |
|
|
196
|
+
|----------|---------|-------------|
|
|
197
|
+
| `label` | HTML | Title (rendered as markup) |
|
|
198
|
+
| `description` | HTML | Subtitle below the title |
|
|
199
|
+
|
|
200
|
+
| Slot | Description |
|
|
201
|
+
|------|-------------|
|
|
202
|
+
| *(default)* | Custom title / description when attributes are not enough |
|
|
203
|
+
| `suffix` | Actions or badges aligned on the right (does not shrink) |
|
|
204
|
+
|
|
205
|
+
### `sonic-card-header-description`
|
|
206
|
+
|
|
207
|
+
| Slot | Description |
|
|
208
|
+
|------|-------------|
|
|
209
|
+
| *(default)* | Subtitle text; styled below the title when slotted in **`sonic-card-header`** |
|
|
210
|
+
|
|
211
|
+
### `sonic-card-main` · `sonic-card-footer`
|
|
212
|
+
|
|
213
|
+
| Slot | Description |
|
|
214
|
+
|------|-------------|
|
|
215
|
+
| *(default)* | Primary content (`main`) or actions / metadata (`footer`) |
|