@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.
Files changed (151) hide show
  1. package/.agents/skills/concorde-component-docs/SKILL.md +194 -0
  2. package/.agents/skills/concorde-component-docs/template.md +45 -0
  3. package/ai/cursor/rules/concorde-theme.mdc +1 -1
  4. package/ai/cursor/rules/concorde.mdc +1 -1
  5. package/ai/skills/concorde/SKILL.md +1 -1
  6. package/ai/skills/concorde-theme/SKILL.md +21 -10
  7. package/build-infos.json +1 -1
  8. package/concorde-core.bundle.js +515 -521
  9. package/concorde-core.es.js +5151 -5056
  10. package/dist/concorde-core.bundle.js +515 -521
  11. package/dist/concorde-core.es.js +5151 -5056
  12. package/dist/docs-mock-api-sw.js +2 -0
  13. package/dist/docs-mock-api-sw.js.map +2 -2
  14. package/docs/assets/index-CD4WyL6o.css +1 -0
  15. package/docs/assets/{index-BnK6OS7w.js → index-wVZpLVYW.js} +815 -808
  16. package/docs/crawl/core/components/ui/alert/alert.html +76 -5
  17. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +113 -5
  18. package/docs/crawl/core/components/ui/badge/badge.html +57 -8
  19. package/docs/crawl/core/components/ui/captcha/captcha.html +90 -8
  20. package/docs/crawl/core/components/ui/card/card.html +122 -12
  21. package/docs/crawl/core/components/ui/divider/divider.html +117 -31
  22. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +232 -101
  23. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +95 -52
  24. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +97 -38
  25. package/docs/crawl/core/components/ui/group/group.html +60 -38
  26. package/docs/crawl/core/components/ui/icon/icon.html +136 -47
  27. package/docs/crawl/core/components/ui/image/image.html +118 -6
  28. package/docs/crawl/core/components/ui/link/link.html +65 -7
  29. package/docs/crawl/core/components/ui/loader/loader.html +97 -23
  30. package/docs/crawl/core/components/ui/menu/menu.html +162 -90
  31. package/docs/crawl/core/components/ui/modal/modal.html +275 -50
  32. package/docs/crawl/core/components/ui/pop/pop.html +242 -124
  33. package/docs/crawl/core/components/ui/progress/progress.html +103 -30
  34. package/docs/crawl/core/components/ui/table/table.html +303 -171
  35. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  36. package/docs/crawl/core/components/ui/toast/toast.html +170 -59
  37. package/docs/crawl/core/components/ui/tooltip/tooltip.html +90 -29
  38. package/docs/crawl/docs/_decorators/ancestor-attribute.html +3 -2
  39. package/docs/crawl/docs/_getting-started/start.html +1 -1
  40. package/docs/crawl/docs/_getting-started/theming.html +311 -63
  41. package/docs/crawl/hubs/form-components.html +71 -49
  42. package/docs/crawl/index.html +7 -6
  43. package/docs/docs-mock-api-sw.js +2 -0
  44. package/docs/docs-mock-api-sw.js.map +2 -2
  45. package/docs/index.html +6 -4
  46. package/docs/llms-full.txt +1468 -405
  47. package/docs/llms.txt +23 -30
  48. package/docs/sitemap.xml +3 -0
  49. package/docs/src/core/components/ui/alert/alert.md +21 -2
  50. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  51. package/docs/src/core/components/ui/badge/badge.md +19 -6
  52. package/docs/src/core/components/ui/captcha/captcha.md +65 -6
  53. package/docs/src/core/components/ui/card/card.md +73 -10
  54. package/docs/src/core/components/ui/divider/divider.md +107 -13
  55. package/docs/src/core/components/ui/form/fieldset/fieldset.md +175 -99
  56. package/docs/src/core/components/ui/form/form-actions/form-actions.md +75 -52
  57. package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -34
  58. package/docs/src/core/components/ui/group/group.md +36 -36
  59. package/docs/src/core/components/ui/icon/icon.md +132 -43
  60. package/docs/src/core/components/ui/image/image.md +35 -3
  61. package/docs/src/core/components/ui/link/link.md +43 -5
  62. package/docs/src/core/components/ui/loader/loader.md +79 -22
  63. package/docs/src/core/components/ui/menu/menu.md +133 -92
  64. package/docs/src/core/components/ui/modal/modal.md +163 -47
  65. package/docs/src/core/components/ui/pop/pop.md +217 -123
  66. package/docs/src/core/components/ui/progress/progress.md +76 -30
  67. package/docs/src/core/components/ui/table/table.md +147 -171
  68. package/docs/src/core/components/ui/theme/theme.md +122 -0
  69. package/docs/src/core/components/ui/toast/toast.md +108 -58
  70. package/docs/src/core/components/ui/tooltip/tooltip.md +68 -26
  71. package/docs/src/docs/_decorators/ancestor-attribute.md +3 -2
  72. package/docs/src/docs/_getting-started/start.md +1 -1
  73. package/docs/src/docs/_getting-started/theming.md +223 -61
  74. package/docs/src/docs/search/docs-search.json +2504 -399
  75. package/docs/src/tsconfig.json +18 -0
  76. package/index.html +4 -2
  77. package/package.json +7 -1
  78. package/public/docs-mock-api-sw.js +2 -0
  79. package/public/docs-mock-api-sw.js.map +2 -2
  80. package/src/core/components/ui/_css/align.ts +1 -0
  81. package/src/core/components/ui/_css/type.ts +86 -8
  82. package/src/core/components/ui/_i18n/ui-aria-labels.ts +8 -0
  83. package/src/core/components/ui/alert/alert.md +21 -2
  84. package/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  85. package/src/core/components/ui/badge/badge.md +19 -6
  86. package/src/core/components/ui/badge/badge.ts +8 -9
  87. package/src/core/components/ui/button/button.ts +5 -15
  88. package/src/core/components/ui/captcha/captcha.md +65 -6
  89. package/src/core/components/ui/card/card.md +73 -10
  90. package/src/core/components/ui/card/card.ts +24 -22
  91. package/src/core/components/ui/divider/divider.md +107 -13
  92. package/src/core/components/ui/divider/divider.ts +40 -33
  93. package/src/core/components/ui/form/fieldset/fieldset.md +175 -99
  94. package/src/core/components/ui/form/fieldset/fieldset.ts +15 -28
  95. package/src/core/components/ui/form/fieldset/legend.ts +13 -13
  96. package/src/core/components/ui/form/form-actions/form-actions.md +75 -52
  97. package/src/core/components/ui/form/form-actions/form-actions.ts +7 -5
  98. package/src/core/components/ui/form/form-layout/form-layout.md +109 -34
  99. package/src/core/components/ui/form/form-layout/form-layout.ts +27 -24
  100. package/src/core/components/ui/form/textarea/textarea.ts +4 -3
  101. package/src/core/components/ui/group/group.md +36 -36
  102. package/src/core/components/ui/group/group.ts +5 -10
  103. package/src/core/components/ui/icon/icon.md +132 -43
  104. package/src/core/components/ui/image/image.md +35 -3
  105. package/src/core/components/ui/link/link.md +43 -5
  106. package/src/core/components/ui/loader/loader.md +79 -22
  107. package/src/core/components/ui/loader/loader.ts +67 -27
  108. package/src/core/components/ui/loader/styles/fixed.ts +6 -11
  109. package/src/core/components/ui/menu/menu.md +133 -92
  110. package/src/core/components/ui/menu/menu.ts +53 -58
  111. package/src/core/components/ui/modal/modal.md +163 -47
  112. package/src/core/components/ui/modal/modal.ts +2 -4
  113. package/src/core/components/ui/pop/pop.md +217 -123
  114. package/src/core/components/ui/pop/pop.ts +0 -1
  115. package/src/core/components/ui/progress/progress.md +76 -30
  116. package/src/core/components/ui/progress/progress.ts +25 -56
  117. package/src/core/components/ui/table/table-caption.ts +2 -2
  118. package/src/core/components/ui/table/table-tbody.ts +3 -3
  119. package/src/core/components/ui/table/table-td.ts +23 -18
  120. package/src/core/components/ui/table/table-th.ts +8 -8
  121. package/src/core/components/ui/table/table-tr.ts +4 -4
  122. package/src/core/components/ui/table/table.md +147 -171
  123. package/src/core/components/ui/table/table.ts +20 -19
  124. package/src/core/components/ui/theme/theme-collection/auto.ts +15 -0
  125. package/src/core/components/ui/theme/theme-collection/core-variables.ts +8 -31
  126. package/src/core/components/ui/theme/theme-collection/dark.ts +1 -7
  127. package/src/core/components/ui/theme/theme-collection/light.ts +30 -26
  128. package/src/core/components/ui/theme/theme.md +122 -0
  129. package/src/core/components/ui/theme/theme.ts +30 -7
  130. package/src/core/components/ui/toast/toast-item.ts +6 -9
  131. package/src/core/components/ui/toast/toast.md +108 -58
  132. package/src/core/components/ui/toast/types.ts +1 -1
  133. package/src/core/components/ui/tooltip/tooltip.md +68 -26
  134. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
  135. package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
  136. package/src/core/utils/AncestorAttributeObserver.ts +183 -70
  137. package/src/docs/_decorators/ancestor-attribute.md +3 -2
  138. package/src/docs/_getting-started/start.md +1 -1
  139. package/src/docs/_getting-started/theming.md +223 -61
  140. package/src/docs/code.ts +125 -58
  141. package/src/docs/header/header.ts +62 -54
  142. package/src/docs/mock-api/router.ts +2 -0
  143. package/src/docs/navigation/navigation.ts +6 -3
  144. package/src/docs/search/docs-search.json +2504 -399
  145. package/src/docs/search/markdown-renderer.ts +6 -6
  146. package/src/docs/search/search.ts +4 -4
  147. package/src/docs/tailwind/css/tailwind.css +6 -5
  148. package/src/tsconfig.json +18 -0
  149. package/src/tsconfig.tsbuildinfo +1 -1
  150. package/tailwind.config.js +19 -0
  151. 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
- - [Concorde](https://concorde.supersoniks.org/crawl/core/components/ui/alert-messages/alert-messages.html) (core/components/ui/alert-messages/alert-messages): Concorde documentation: Concorde
33
- - [Alert](https://concorde.supersoniks.org/crawl/core/components/ui/alert/alert.html) (core/components/ui/alert/alert): Inline message in the page: title (label), body (text or default slot), icon from status. For HTML or actions, use the slot instead of label / text (plain text only).
34
- - [Badge](https://concorde.supersoniks.org/crawl/core/components/ui/badge/badge.html) (core/components/ui/badge/badge): A non-interactive pill for labels, counts, or highlights (counter, status, category). The API mirrors sonic-button (type, variant, size) without focus or click states.
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): Captcha: Submit with captcha
37
- - [Card](https://concorde.supersoniks.org/crawl/core/components/ui/card/card.html) (core/components/ui/card/card): A surface for grouped content: padding, radius, shadow, and semantic type colors via shared theme tokens. Compose sonic-card-header, sonic-card-main, and sonic-card-footer inside the card, or put any
38
- - [Divider](https://concorde.supersoniks.org/crawl/core/components/ui/divider/divider.html) (core/components/ui/divider/divider): Default
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): Default
49
- - [Form-actions](https://concorde.supersoniks.org/crawl/core/components/ui/form/form-actions/form-actions.html) (core/components/ui/form/form-actions/form-actions): Left seats
50
- - [Form-layout](https://concorde.supersoniks.org/crawl/core/components/ui/form/form-layout/form-layout.html) (core/components/ui/form/form-layout/form-layout): autocomplete="email"
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): Group: 😎 Standard ⭐ Premium 💎 Diamond
58
- - [Icon](https://concorde.supersoniks.org/crawl/core/components/ui/icon/icon.html) (core/components/ui/icon/icon): customIconDefaultPrefix="regular">
59
- - [Image](https://concorde.supersoniks.org/crawl/core/components/ui/image/image.html) (core/components/ui/image/image): Responsive <img> wrapper: aspect ratio, object-fit: cover, rounded corners, and optional fade-in on load. The host uses a light placeholder background (--sc-placeholder-bg) until the file is ready. De
60
- - [Link](https://concorde.supersoniks.org/crawl/core/components/ui/link/link.html) (core/components/ui/link/link): Link: Basic link with href attribute
61
- - [Loader](https://concorde.supersoniks.org/crawl/core/components/ui/loader/loader.html) (core/components/ui/loader/loader): import {Loader} from "@supersoniks/concorde/core/components/ui/loader/loader";
62
- - [Menu](https://concorde.supersoniks.org/crawl/core/components/ui/menu/menu.html) (core/components/ui/menu/menu): Row
63
- - [Concorde](https://concorde.supersoniks.org/crawl/core/components/ui/modal/modal.html) (core/components/ui/modal/modal): Concorde: Simple modal Lorem ipsum dolor sit amet +33 Donec sed vestibulum augue. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget quam eu mi luctus faucibus. Click don't close Confir
64
- - [Pop](https://concorde.supersoniks.org/crawl/core/components/ui/pop/pop.html) (core/components/ui/pop/pop): Default placement is bottom. Placement is written side-align, like sonic-tooltip: side is top, right, bottom or left, align is start, center or end. Without align, content is aligned on the start of t
65
- - [Progress bar](https://concorde.supersoniks.org/crawl/core/components/ui/progress/progress.html) (core/components/ui/progress/progress): Displays an indicator showing the completion progress of a task.
66
- - [Table](https://concorde.supersoniks.org/crawl/core/components/ui/table/table.html) (core/components/ui/table/table): Values available : primary, info, success, warning, danger
67
- - [Toast](https://concorde.supersoniks.org/crawl/core/components/ui/toast/toast.html) (core/components/ui/toast/toast): Afficher un toast
68
- - [Tooltip](https://concorde.supersoniks.org/crawl/core/components/ui/tooltip/tooltip.html) (core/components/ui/tooltip/tooltip): By default, tooltip is centered next to its content
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
- - [Adding styles](https://concorde.supersoniks.org/crawl/docs/_getting-started/theming.html) (docs/_getting-started/theming): No style crosses the shadow root of a component, except for inheritable properties (which have the "inherit" property possible) and CSS variables.
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
- Inline message in the page: title (`label`), body (`text` or default slot), icon from `status`. For HTML or actions, use the slot instead of `label` / `text` (plain text only).
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
- Use **`status`**: `default`, `info`, `success`, `warning`, `error`.
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
- A **non-interactive** pill for labels, counts, or highlights (counter, status, category). The API mirrors `sonic-button` (`type`, `variant`, `size`) without focus or click states.
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
- `outline` — border and text in the `type` color. `ghost` — text only, no padding (except in forced-colors mode).
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
- ## Outline
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
- ## Ghost
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
- <sonic-captcha formDataProvider="captchaTestDataProvider" key="6Leq5V0iAAAAAB-41DlWN335jDlcIuXmhNtdd00t">
6
- <sonic-submit serviceURL="/docs-mock-api" endPoint="api/unknown" onclick>
7
- <sonic-button class="mt-4">Submit with captcha</sonic-button>
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
- A **surface** for grouped content: padding, radius, shadow, and semantic **`type`** colors via shared theme tokens. Compose **`sonic-card-header`**, **`sonic-card-main`**, and **`sonic-card-footer`** inside the card, or put any markup in the default slot.
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
- Default **`type`** is `base` (page background). Use `light` for a subtle gray panel, `invert` / `neutral` for high-contrast blocks, and `primary`, `info`, `success`, `warning`, or `danger` for tinted surfaces (divider tokens apply on colored types).
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`** attributes, 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.
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" type="warning" size="xs">3 new</sonic-badge>
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
- <sonic-divider></sonic-divider>
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://images.unsplash.com/photo-1436491865332-7a61a109cc05?w=800&q=80"
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`) |