@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
@@ -948,13 +948,59 @@ I prefer
948
948
 
949
949
  ---
950
950
 
951
- ## Concorde
951
+ ## Alert messages
952
952
 
953
953
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/alert-messages/alert-messages.html
954
954
  - Doc ID: core/components/ui/alert-messages/alert-messages
955
- - Keywords: Concorde, supersoniks, core/components/ui/alert-messages/alert-messages, alert-messages, UI component, sonic-alert-messages, web component
955
+ - Keywords: Concorde, supersoniks, core/components/ui/alert-messages/alert-messages, alert-messages, Alert messages, UI component, sonic-alert-messages, web component, sonic-alert, messages, submitResultDataProvider, type="public", announce, dataProvider, type
956
956
 
957
+ Alert messages
957
958
 
959
+ 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.
960
+
961
+ With submit result
962
+
963
+ Bind dataProvider to the same publisher as submitResultDataProvider. API messages entries need type: public, plus content and optional status (warning · success · error · info).
964
+
965
+ Submit (empty fields → error messages)
966
+
967
+ Shared alert props
968
+
969
+ size · background and noIcon apply to every rendered sonic-alert in the list.
970
+
971
+ Load sample messages
972
+
973
+ Message shape
974
+
975
+ Example JSON on the result publisher (or API response merged into it):
976
+
977
+ {
978
+ "messages": [
979
+ {
980
+ "type": "public",
981
+ "content": "The product has been added to your cart",
982
+ "status": "success"
983
+ }
984
+ ]
985
+ }
986
+
987
+ API reference
988
+
989
+ | Attribute | Values | Description |
990
+ |----------|---------|-------------|
991
+ | dataProvider | publisher id | Source object; messages array is auto-filled via Subscriber |
992
+ | size | 2xs … 2xl (default md) | Passed to each sonic-alert |
993
+ | background | boolean | Tinted background on each alert |
994
+ | noIcon | boolean | Hides icons on each alert |
995
+ | messages | Message[] | Usually set by the publisher; each item uses content as alert text |
996
+
997
+ | Message field | Values | Description |
998
+ |---------------|---------|-------------|
999
+ | type | public | Required for the message to render |
1000
+ | content | string | Alert body (text on sonic-alert) |
1001
+ | status | warning · success · error · info | Alert status; defaults to default when omitted |
1002
+
1003
+ No slots — alerts are generated from messages.
958
1004
 
959
1005
  ---
960
1006
 
@@ -962,13 +1008,13 @@ I prefer
962
1008
 
963
1009
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/alert/alert.html
964
1010
  - Doc ID: core/components/ui/alert/alert
965
- - Keywords: Concorde, supersoniks, core/components/ui/alert/alert, alert, Alert, UI component, sonic-alert, web component, label, text, status, default, info, success, warning
1011
+ - Keywords: Concorde, supersoniks, core/components/ui/alert/alert, alert, Alert, UI component, sonic-alert, web component, label, text, announce, status, default, role, aria-live
966
1012
 
967
1013
  Alert
968
1014
 
969
- 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).
1015
+ 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.
970
1016
 
971
- Use status: default, info, success, warning, error.
1017
+ Basic example
972
1018
 
973
1019
  Status
974
1020
 
@@ -1056,19 +1102,36 @@ With dismissForever, dismissal is stored in localStorage (key sonic-alert-dismis
1056
1102
 
1057
1103
  This address is already in use.
1058
1104
 
1105
+ API reference
1106
+
1107
+ | Attribute | Values | Description |
1108
+ |----------|---------|-------------|
1109
+ | status | default · info · success · warning · error | Color and default icon |
1110
+ | label | string | Title (plain text) |
1111
+ | text | string | Short body (plain text), rendered before the slot |
1112
+ | size | 2xs … 2xl | Corner radius and typography |
1113
+ | background | boolean | Tinted background (color-mix on status color) |
1114
+ | dismissible | boolean | Close control; removes the element from the DOM |
1115
+ | dismissForever | boolean | Persists dismissal in localStorage; requires id |
1116
+ | noIcon | boolean | Hides the icon (including custom icon slot content) |
1117
+ | announce | boolean | role="alert" / aria-live for dynamically injected content |
1118
+
1119
+ | Slot | Description |
1120
+ |------|-------------|
1121
+ | (default) | Message body (HTML, actions); rendered after text |
1122
+ | icon | Replaces the default sonic-icon |
1123
+
1059
1124
  ---
1060
1125
 
1061
1126
  ## Badge
1062
1127
 
1063
1128
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/badge/badge.html
1064
1129
  - Doc ID: core/components/ui/badge/badge
1065
- - Keywords: Concorde, supersoniks, core/components/ui/badge/badge, badge, Badge, UI component, sonic-badge, web component, sonic-button, type, variant, size, --sc-primary, --sc-danger, default, base-100, neutral
1130
+ - Keywords: Concorde, supersoniks, core/components/ui/badge/badge, badge, Badge, UI component, sonic-badge, web component, sonic-button, type, variant, size, default, base-100, neutral, base-content, outline
1066
1131
 
1067
1132
  Badge
1068
1133
 
1069
- 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.
1070
-
1071
- Colors come from theme tokens (--sc-primary, --sc-danger, …) or the semantic type values below.
1134
+ 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.
1072
1135
 
1073
1136
  Type
1074
1137
 
@@ -1084,7 +1147,7 @@ default — subtle background (base-100). neutral — dark fill (base-content) w
1084
1147
 
1085
1148
  Variant
1086
1149
 
1087
- outline — border and text in the type color. ghost — text only, no padding (except in forced-colors mode).
1150
+ Default variant is filled. outline — border and text in the type color. ghost — text only, no padding (except in forced-colors mode).
1088
1151
 
1089
1152
  Outline
1090
1153
 
@@ -1149,6 +1212,21 @@ Count inside a button (slot="suffix") or a badge absolutely positioned on a butt
1149
1212
 
1150
1213
  33
1151
1214
 
1215
+ API reference
1216
+
1217
+ | Attribute | Values | Description |
1218
+ |----------|---------|-------------|
1219
+ | type | default (default) · primary · neutral · warning · info · success · danger | Semantic color (--sc- tokens) |
1220
+ | variant | default (default) · outline · ghost | Filled, bordered, or text-only |
1221
+ | size | 2xs … 2xl (default md) | Typography and padding (aligned with sonic-button) |
1222
+ | ellipsis | boolean | Single-line truncation; parent must constrain width |
1223
+
1224
+ | Slot | Description |
1225
+ |------|-------------|
1226
+ | (default) | Main label |
1227
+ | prefix | Icon or short text before the label |
1228
+ | suffix | Icon or short text after the label |
1229
+
1152
1230
  ---
1153
1231
 
1154
1232
  ## Button
@@ -1259,11 +1337,54 @@ Custom styles & active states with tailwind
1259
1337
 
1260
1338
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/captcha/captcha.html
1261
1339
  - Doc ID: core/components/ui/captcha/captcha
1262
- - Keywords: Concorde, supersoniks, core/components/ui/captcha/captcha, captcha, Captcha, UI component, sonic-captcha, web component
1340
+ - Keywords: Concorde, supersoniks, core/components/ui/captcha/captcha, captcha, Captcha, UI component, sonic-captcha, web component, captchaToken, needsCaptchaValidation, formDataProvider, headersDataProvider, sonic-submit, key, generateEncryptedKey
1263
1341
 
1264
1342
  Captcha
1265
1343
 
1266
- Submit with captcha
1344
+ 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.
1345
+
1346
+ > Live widget calls the Supersoniks challenge service — not part of docs mock API.
1347
+
1348
+ Basic example
1349
+
1350
+ Wrap the form scope and place sonic-submit in the default slot so the challenge appears above the action.
1351
+
1352
+ Submit with captcha
1353
+
1354
+ Encrypted site key
1355
+
1356
+ Optional key skips client-side key generation. When omitted, the component derives an encrypted key on connect (after generateEncryptedKey).
1357
+
1358
+ Complete the challenge above to enable submit
1359
+
1360
+ Form publisher fields
1361
+
1362
+ 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 requesttoken to refresh the token immediately before send.
1363
+
1364
+ {
1365
+ needsCaptchaValidation: true,
1366
+ captchaKey: "…",
1367
+ captchaToken: "…"
1368
+ }
1369
+
1370
+ API reference
1371
+
1372
+ | Attribute | Values | Description |
1373
+ |----------|---------|-------------|
1374
+ | formDataProvider | publisher id | Same as ancestor form scope; reads/writes needsCaptchaValidation · captchaKey · captchaToken |
1375
+ | key | string | ALTCHA site key; auto-generated when empty |
1376
+ | action | string | Optional action name forwarded to the widget |
1377
+ | zIndex | number (default 9999) | Stacking for the challenge overlay |
1378
+
1379
+ | Slot | Description |
1380
+ |------|-------------|
1381
+ | (default) | Form actions (typically sonic-submit and fields) rendered below the widget |
1382
+
1383
+ | Event | Description |
1384
+ |-------|-------------|
1385
+ | sonic-captcha-validate | Fired when state is verified · error or expired; detail.valid is true only for verified |
1386
+
1387
+ Related: Submit — needsCaptchaValidation and deferred send.
1267
1388
 
1268
1389
  ---
1269
1390
 
@@ -1271,18 +1392,23 @@ Captcha
1271
1392
 
1272
1393
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/card/card.html
1273
1394
  - Doc ID: core/components/ui/card/card
1274
- - Keywords: Concorde, supersoniks, core/components/ui/card/card, card, Card, UI component, sonic-card, web component, type, sonic-card-header, sonic-card-main, sonic-card-footer, base, light, invert, neutral, primary
1395
+ - Keywords: Concorde, supersoniks, core/components/ui/card/card, card, Card, UI component, sonic-card, web component, type, shadow, lg, sonic-card-header, sonic-card-main, sonic-card-footer, base, default, light
1275
1396
 
1276
1397
  Card
1277
1398
 
1278
- 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.
1399
+ 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.
1279
1400
 
1280
- 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).
1401
+ Basic example
1402
+
1403
+ Related content on a raised surface.
1281
1404
 
1282
1405
  Type
1283
1406
 
1407
+ Default type is base. default and light share the same surface tokens.
1408
+
1284
1409
  Base
1285
1410
  Light
1411
+ Default
1286
1412
  Primary
1287
1413
  Info
1288
1414
  Success
@@ -1291,9 +1417,20 @@ Type
1291
1417
  Neutral
1292
1418
  Invert
1293
1419
 
1420
+ Shadow
1421
+
1422
+ Set shadow to control elevation. Default is lg.
1423
+
1424
+ None
1425
+ Small
1426
+ Medium
1427
+ Large
1428
+
1294
1429
  Header
1295
1430
 
1296
- 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.
1431
+ 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.
1432
+
1433
+ 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.
1297
1434
 
1298
1435
  Body content goes in the card slot or in sonic-card-main .
1299
1436
 
@@ -1305,8 +1442,6 @@ Quick titles with label and description attributes, or full control through the
1305
1442
 
1306
1443
  Use the header slot when attributes are not enough.
1307
1444
 
1308
- label and description accept HTML (rendered as markup). Prefer plain text when possible; use the slot for structured content.
1309
-
1310
1445
  Main
1311
1446
 
1312
1447
  Optional wrapper for the primary content area (typography, media, forms).
@@ -1333,25 +1468,115 @@ Header, media, body, and footer together.
1333
1468
  From $249
1334
1469
  Book
1335
1470
 
1471
+ API reference
1472
+
1473
+ sonic-card
1474
+
1475
+ | Attribute | Values | Description |
1476
+ |----------|---------|-------------|
1477
+ | type | base (default) · light · invert · default · primary · warning · danger · success · info · neutral | Semantic background and text (default and light share the same surface) |
1478
+ | shadow | none · sm · md · lg (default lg) | Elevation on the card surface |
1479
+
1480
+ | Slot | Description |
1481
+ |------|-------------|
1482
+ | (default) | Free-form content (header, main, footer, or direct markup) |
1483
+
1484
+ sonic-card-header
1485
+
1486
+ | Attribute | Values | Description |
1487
+ |----------|---------|-------------|
1488
+ | label | HTML | Title (rendered as markup) |
1489
+ | description | HTML | Subtitle below the title |
1490
+
1491
+ | Slot | Description |
1492
+ |------|-------------|
1493
+ | (default) | Custom title / description when attributes are not enough |
1494
+ | suffix | Actions or badges aligned on the right (does not shrink) |
1495
+
1496
+ sonic-card-header-description
1497
+
1498
+ | Slot | Description |
1499
+ |------|-------------|
1500
+ | (default) | Subtitle text; styled below the title when slotted in sonic-card-header |
1501
+
1502
+ sonic-card-main · sonic-card-footer
1503
+
1504
+ | Slot | Description |
1505
+ |------|-------------|
1506
+ | (default) | Primary content (main) or actions / metadata (footer) |
1507
+
1336
1508
  ---
1337
1509
 
1338
1510
  ## Divider
1339
1511
 
1340
1512
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/divider/divider.html
1341
1513
  - Doc ID: core/components/ui/divider/divider
1342
- - Keywords: Concorde, supersoniks, core/components/ui/divider/divider, divider, Divider, UI component, sonic-divider, web component
1514
+ - Keywords: Concorde, supersoniks, core/components/ui/divider/divider, divider, Divider, UI component, sonic-divider, web component, sonic-menu, label, align, center, lineStyle, solid, size, 0.5rem
1343
1515
 
1344
1516
  Divider
1345
1517
 
1346
- Default
1518
+ 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 slot for richer markup; default align is center and default lineStyle is solid.
1347
1519
 
1348
- Align
1520
+ Basic example
1521
+
1522
+ A bare divider is a full-width line with vertical margin. Omit size to use the host default spacing (0.5rem block margin).
1523
+
1524
+ Label and align
1525
+
1526
+ 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.
1349
1527
 
1350
1528
  Size
1351
1529
 
1352
- Custom
1530
+ size adjusts block margin and label font size. Values follow the shared Concorde scale (2xs … 2xl).
1531
+
1532
+ Line style
1533
+
1534
+ lineStyle sets the stroke of the rule (solid · dashed · dotted). In HTML use the reflected attribute linestyle (case-insensitive).
1535
+
1536
+ Vertical and margin
1537
+
1538
+ Set vertical for a column rule (for example between toolbar actions). noMargin removes host margin when a parent layout already provides spacing.
1539
+
1540
+ Before
1541
+
1542
+ After
1543
+
1544
+ Default slot
1545
+
1546
+ Slotted content replaces or augments label. Useful for badges, icons, or mixed markup in menus.
1547
+
1548
+ Section title
1549
+ +25
1550
+
1551
+ Inside typed cards
1552
+
1553
+ 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.
1353
1554
 
1354
- Lorem ipsum dolor sit amet +25
1555
+ This action cannot be undone.
1556
+
1557
+ Project files
1558
+ Shared links
1559
+
1560
+ Maintenance is scheduled for tonight.
1561
+
1562
+ Expected downtime: about 15 minutes.
1563
+
1564
+ API reference
1565
+
1566
+ | Attribute | Values | Description |
1567
+ |----------|---------|-------------|
1568
+ | label | string (HTML) | Caption centered on the rule; combined with default-slot content when both are set |
1569
+ | align | left · center · right (default center) | Hides the leading or trailing line segment for left/right alignment |
1570
+ | size | 2xs · xs · sm · md · lg · xl · 2xl · inherit | Vertical margin and label font-size; omit for host defaults |
1571
+ | lineStyle | solid · dashed · dotted (default solid) | Stroke style of the rule (HTML attribute linestyle) |
1572
+ | vertical | boolean | Renders a vertical rule; swap block/inline margins |
1573
+ | noMargin | boolean | Sets host margin to 0 |
1574
+
1575
+ | Slot | Description |
1576
+ |------|-------------|
1577
+ | (default) | Label markup when label is insufficient or empty |
1578
+
1579
+ The inner flex container exposes part="divider" for theme overrides.
1355
1580
 
1356
1581
  ---
1357
1582
 
@@ -1410,98 +1635,212 @@ Checked blacklistFlags values are sent to the mock API (?blacklistFlags=racist,s
1410
1635
 
1411
1636
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/form/fieldset/fieldset.html
1412
1637
  - Doc ID: core/components/ui/form/fieldset/fieldset
1413
- - Keywords: Concorde, supersoniks, core/components/ui/form/fieldset/fieldset, fieldset, Fieldset, UI component, form, sonic-fieldset, web component
1638
+ - Keywords: Concorde, supersoniks, core/components/ui/form/fieldset/fieldset, fieldset, Fieldset, UI component, form, sonic-fieldset, web component, , sonic-legend, label, description, iconName, variant, default, sonic-form-layout, ghost
1414
1639
 
1415
1640
  Fieldset
1416
1641
 
1642
+ sonic-fieldset groups related form controls with a bordered container and an accessible 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.
1643
+
1644
+ Basic example
1645
+
1417
1646
  Variant
1418
1647
 
1419
- Default
1648
+ ghost and shadow use a transparent border; shadow also applies --sc-shadow-lg.
1420
1649
 
1421
- Ghost
1650
+ Tight layout
1422
1651
 
1423
- Shadow
1652
+ Set tight to remove horizontal padding and side borders (flat strip inside a parent).
1424
1653
 
1425
1654
  Legend
1426
1655
 
1427
- Custom legend via slot
1656
+ 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.
1657
+
1658
+ Attribute values on sonic-legend are rendered as HTML—use only trusted content.
1659
+
1660
+ Custom title in the default slot
1661
+ Description via sonic-legend-description
1662
+
1663
+ Shorthand legend on the fieldset
1428
1664
 
1429
- Description via composant : sonic-legend-description
1665
+ 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.
1430
1666
 
1431
- Short hand
1667
+ Legend actions
1432
1668
 
1433
- Example of use
1669
+ Use slot="suffix" on sonic-legend for menus or icon buttons aligned to the end of the legend row.
1434
1670
 
1435
- Informations personnelles
1436
- Description du fieldset lorem ipsum dolor
1671
+ Legal notice
1672
+ Terms of use
1437
1673
 
1438
- Mentions légales
1439
- Conditions générales d'utilisation
1674
+ Form association and disabled state
1440
1675
 
1441
- - Sélectionner -
1442
- Je préfère ne pas le dire
1443
- Homme
1444
- Femme
1676
+ Associating a distant form
1445
1677
 
1446
- Coordonnées
1678
+ Set form on sonic-fieldset to the id of a elsewhere in the page (same as the native form attribute on ). 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.
1447
1679
 
1448
- S'inscrire
1680
+ Save billing
1449
1681
 
1450
- Continuer sans m'inscrire
1682
+ Disabling a group
1451
1683
 
1452
- Submitted informations...
1684
+ Set disabled on sonic-fieldset to disable the inner and every control in the group (same as a native fieldset). Use it for read-only steps or sections gated by permissions.
1685
+
1686
+ Accessibility
1687
+
1688
+ The inner carries grouping semantics. disabled is applied on that element so nested controls are disabled in the usual way. sonic-legend renders a native for the group label.
1689
+
1690
+ API reference
1691
+
1692
+ sonic-fieldset
1693
+
1694
+ | Attribute | Values | Description |
1695
+ |----------|---------|-------------|
1696
+ | variant | default · ghost · shadow (default default) | Border and shadow treatment |
1697
+ | tight | boolean | Removes horizontal padding and side borders |
1698
+ | label | string | Shorthand legend title; renders sonic-legend when set |
1699
+ | description | string | Shorthand legend description (HTML) |
1700
+ | iconName | string | Shorthand legend icon name |
1701
+ | iconLibrary | string | Shorthand legend icon library |
1702
+ | iconPrefix | string | Shorthand legend icon prefix |
1703
+ | disabled | boolean | Disables the native and its controls |
1704
+ | form | string | id of an associated form |
1705
+ | dataProvider | string | Subscriber key; can autofill properties that match publisher fields (e.g. label) |
1706
+
1707
+ | Slot | Description |
1708
+ |------|-------------|
1709
+ | (default) | Legend (optional) and field group content in visual order |
1710
+
1711
+ sonic-legend
1712
+
1713
+ | Attribute | Values | Description |
1714
+ |----------|---------|-------------|
1715
+ | label | string | Title HTML when not using the default slot |
1716
+ | description | string | Description HTML (wrapped in sonic-legend-description) |
1717
+ | iconName | string | Leading sonic-icon name |
1718
+ | iconLibrary | string | Icon library |
1719
+ | iconPrefix | string | Icon prefix |
1720
+ | forceAutoFill | boolean | Allows Subscriber autofill to override attribute-backed label / description |
1721
+
1722
+ | Slot | Description |
1723
+ |------|-------------|
1724
+ | (default) | Legend title and description components |
1725
+ | suffix | Trailing actions (menus, icon buttons) |
1726
+
1727
+ sonic-legend-description
1728
+
1729
+ Muted description line below the legend title. No attributes—project content through the default slot.
1453
1730
 
1454
1731
  ---
1455
1732
 
1456
- ## Form-actions
1733
+ ## Form actions
1457
1734
 
1458
1735
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/form/form-actions/form-actions.html
1459
1736
  - Doc ID: core/components/ui/form/form-actions/form-actions
1460
- - Keywords: Concorde, supersoniks, core/components/ui/form/form-actions/form-actions, form-actions, Form-actions, UI component, form, sonic-form-actions, web component
1737
+ - Keywords: Concorde, supersoniks, core/components/ui/form/form-actions/form-actions, form-actions, Form actions, UI component, form, sonic-form-actions, web component, sonic-form-layout, direction, row, justify, flex-start, alignItems, center, justify-content
1461
1738
 
1462
- Form-actions
1739
+ Form actions
1463
1740
 
1464
- Left by default
1741
+ 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 end with actions. Defaults: direction row · justify flex-start · alignItems center.
1465
1742
 
1466
- Submit
1467
- Cancel
1743
+ Basic example
1468
1744
 
1469
- Justify
1745
+ With no attributes, actions align to the start of the row (typical for left-to-right forms).
1470
1746
 
1471
- Submit
1472
- Cancel
1747
+ Submit
1748
+ Cancel
1473
1749
 
1474
- Direction
1750
+ Justify content
1475
1751
 
1476
- Submit
1477
- Cancel
1752
+ justify maps to CSS justify-content. Use flex-end for dialog-style footers or center for balanced toolbars.
1478
1753
 
1479
- Center
1754
+ Submit
1755
+ Cancel
1480
1756
 
1481
- Left seats
1757
+ Flex direction
1482
1758
 
1483
- Right seats
1759
+ direction maps to flex-direction. row-reverse swaps visual order while keeping DOM order (focus order unchanged).
1760
+
1761
+ Submit
1762
+ Cancel
1763
+
1764
+ Mixed controls
1765
+
1766
+ Combine sonic-button with sonic-divider vertical or other slotted content. Default alignItems center keeps unlike heights aligned on the cross axis.
1767
+
1768
+ Left seats
1769
+
1770
+ Right seats
1771
+
1772
+ API reference
1773
+
1774
+ | Attribute | Values | Description |
1775
+ |----------|---------|-------------|
1776
+ | direction | row (default) · column · row-reverse · column-reverse | Main-axis layout of slotted controls |
1777
+ | justify | CSS justify-content (default flex-start) | Distribution along the main axis |
1778
+ | alignItems | CSS align-items (default center) | Cross-axis alignment when items differ in height |
1779
+
1780
+ The component exposes a single unnamed slot; there are no named slots. Slotted nodes use the host’s flex gap (0.3rem) and flex-wrap.
1781
+
1782
+ | Slot | Description |
1783
+ |------|-------------|
1784
+ | (default) | Footer actions (sonic-button and related controls) |
1484
1785
 
1485
1786
  ---
1486
1787
 
1487
- ## Form-layout
1788
+ ## Form layout
1488
1789
 
1489
1790
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/form/form-layout/form-layout.html
1490
1791
  - Doc ID: core/components/ui/form/form-layout/form-layout
1491
- - Keywords: Concorde, supersoniks, core/components/ui/form/form-layout/form-layout, form-layout, Form-layout, UI component, form, sonic-form-layout, web component
1792
+ - Keywords: Concorde, supersoniks, core/components/ui/form/form-layout/form-layout, form-layout, Form layout, UI component, form, sonic-form-layout, web component, sonic-input, sonic-select, sonic-input-autocomplete, sonic-form-actions, sonic-fieldset, offsetWidth
1793
+
1794
+ Form layout
1795
+
1796
+ 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 host is wider than 440px; textareas, toggles, dividers, and sonic-form-actions span the full width. Wrap a form or sonic-fieldset body—no attributes are required.
1797
+
1798
+ Basic example
1799
+
1800
+ Typical registration-style form: short fields flow in two columns on wide layouts; long or grouped blocks stay full width.
1801
+
1802
+ — Select —
1803
+ Prefer not to say
1804
+ Male
1805
+ Female
1806
+
1807
+ Enable optional feature
1808
+ Subscribe to newsletter
1809
+
1810
+ I accept the
1811
+ terms and conditions
1812
+
1813
+ Submit
1814
+
1815
+ Responsive columns
1816
+
1817
+ When the host offsetWidth is greater than 440px, the grid uses two equal columns with slightly larger gap (1.75rem). Below that breakpoint, fields stack in a single column (1.5rem gap).
1818
+
1819
+ If the slot contains exactly one direct sonic-input, sonic-select, or sonic-input-autocomplete, the layout stays one column even above the breakpoint so a lone field does not sit in half an empty row.
1820
+
1821
+ Narrow host (single column)
1822
+
1823
+ Wide host (two columns for inputs)
1824
+
1825
+ Full-width slotted blocks
1826
+
1827
+ Everything except sonic-input, sonic-select, sonic-input-autocomplete, and slotted elements with class form-item-container is assigned grid-column: 1 / -1. Use this for sonic-textarea, sonic-checkbox, sonic-switch, sonic-form-actions, sonic-divider, and similar blocks.
1828
+
1829
+ Slotted sonic-divider sets --sc-divider-my: 0 so divider spacing matches the grid rhythm. Slotted sonic-submit uses display: contents so submit controls participate in the grid without an extra wrapper box.
1830
+
1831
+ Send
1492
1832
 
1493
- Form-layout
1833
+ Custom column wrapper
1494
1834
 
1495
- - Sélectionner -
1496
- Je préfère ne pas le dire
1497
- Homme
1498
- Femme
1835
+ Add class form-item-container on a slotted wrapper (for example a div) when a field is not a direct sonic-input / sonic-select / sonic-input-autocomplete but should still share the two-column flow with short inputs.
1499
1836
 
1500
- Activer une superbe option
1501
- Inscription à la newsletter
1502
- J'ai lu et accepte les Conditions générales de ventes
1837
+ API reference
1503
1838
 
1504
- Valider
1839
+ No public attributes — layout follows slotted children and host width.
1840
+
1841
+ | Slot | Description |
1842
+ |------|-------------|
1843
+ | (default) | Form fields and blocks in visual order; column vs full-width rules apply per slotted tag or form-item-container class |
1505
1844
 
1506
1845
  ---
1507
1846
 
@@ -1736,47 +2075,91 @@ Size
1736
2075
 
1737
2076
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/group/group.html
1738
2077
  - Doc ID: core/components/ui/group/group
1739
- - Keywords: Concorde, supersoniks, core/components/ui/group/group, group, Group, UI component, sonic-group, web component
2078
+ - Keywords: Concorde, supersoniks, core/components/ui/group/group, group, Group, UI component, sonic-group, web component, sonic-button, sonic-input, sonic-select, label, description, radio, name, formDataProvider
1740
2079
 
1741
2080
  Group
1742
2081
 
2082
+ 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 follow form field styling. Use it for button groups, radio rows, or input + action toolbars.
2083
+
1743
2084
  Radio group
1744
2085
 
2086
+ Pair with sonic-button radio and a shared name; ancestor formDataProvider stores the selected value.
2087
+
1745
2088
  😎 Standard
1746
2089
  ⭐ Premium
1747
2090
  💎 Diamond
1748
2091
 
1749
2092
  Button group
1750
2093
 
1751
- 🗼Air France
2094
+ Adjacent link or action buttons without merging into one control.
2095
+
2096
+ 🗼 Air France
1752
2097
  🌴 Air Tahiti
1753
2098
  💣 Air Corsica
1754
2099
 
1755
2100
  Input actions prefix
1756
2101
 
2102
+ Action control before the field. label or description on sonic-group annotate the row.
2103
+
1757
2104
  Input actions suffix
1758
2105
 
2106
+ Field first, action after (submit, validate, etc.).
2107
+
2108
+ API reference
2109
+
2110
+ | Attribute | Values | Description |
2111
+ |----------|---------|-------------|
2112
+ | label | string (HTML) | Label above the row; slot="label" overrides / extends |
2113
+ | description | string (HTML) | Help text below the row; slot="description" overrides / extends |
2114
+ | alignItems | CSS align-items (default center) | Cross-axis alignment of the main flex row |
2115
+
2116
+ | Slot | Description |
2117
+ |------|-------------|
2118
+ | (default) | sonic-button · sonic-input · sonic-select in visual order |
2119
+ | label | Custom label markup |
2120
+ | description | Custom description markup |
2121
+
1759
2122
  ---
1760
2123
 
1761
2124
  ## Icon
1762
2125
 
1763
2126
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/icon/icon.html
1764
2127
  - Doc ID: core/components/ui/icon/icon
1765
- - Keywords: Concorde, supersoniks, core/components/ui/icon/icon, icon, Icon, UI component, sonic-icon, web component
2128
+ - Keywords: Concorde, supersoniks, core/components/ui/icon/icon, icon, Icon, UI component, sonic-icon, web component, name, library, prefix, size, currentColor, aria-hidden, icons.json
1766
2129
 
1767
2130
  Icon
1768
2131
 
1769
- Custom
2132
+ 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 default—keep visible text nearby or label the control that contains them.
1770
2133
 
1771
- Icons located in the following folder : /svg/$prefix/$name.svg
2134
+ Core library
1772
2135
 
1773
- regular
2136
+ Omit library to use the bundled set in icons.json. Available name values: cancel · check · check-circled-outline · emoji-puzzled · info-empty · loader · minus-small · more-horiz · more-vert · nav-arrow-down · warning-circled-outline.
1774
2137
 
1775
- solid
2138
+ cancel
1776
2139
 
1777
- default prefix
2140
+ check
2141
+
2142
+ check-circled-outline
2143
+
2144
+ emoji-puzzled
1778
2145
 
1779
- External
2146
+ info-empty
2147
+
2148
+ loader
2149
+
2150
+ minus-small
2151
+
2152
+ more-horiz
2153
+
2154
+ more-vert
2155
+
2156
+ nav-arrow-down
2157
+
2158
+ warning-circled-outline
2159
+
2160
+ External libraries
2161
+
2162
+ Set library to load SVGs from a built-in CDN template. prefix falls back to each library’s default when omitted (outline for heroicons, regular for fontAwesome and material, and so on).
1780
2163
 
1781
2164
  heroicons
1782
2165
 
@@ -1792,8 +2175,20 @@ External
1792
2175
 
1793
2176
  lucide
1794
2177
 
2178
+ Custom library
2179
+
2180
+ Use library="custom" with SVG files on your origin. On an ancestor (for example sonic-scope or sonic-code), set customIconLibraryPath to a URL template with $prefix and $name placeholders, and optionally customIconDefaultPrefix when prefix is omitted.
2181
+
2182
+ regular
2183
+
2184
+ solid
2185
+
2186
+ default prefix
2187
+
1795
2188
  Size
1796
2189
 
2190
+ Omit size for the default scale (1em height). Larger steps use 3xl.
2191
+
1797
2192
  2xs
1798
2193
 
1799
2194
  xs
@@ -1810,17 +2205,34 @@ Size
1810
2205
 
1811
2206
  3xl
1812
2207
 
2208
+ Accessibility
2209
+
2210
+ On connect, the host sets aria-hidden="true". Treat icons as decorative unless the surrounding control already has an accessible name. Do not rely on sonic-icon alone for meaning—use visible text or aria-label on the parent button / link.
2211
+
2212
+ API reference
2213
+
2214
+ | Attribute | Values | Description |
2215
+ |----------|---------|-------------|
2216
+ | name | string | Icon id in the core bundle or in the remote library |
2217
+ | library | heroicons · iconoir · feathers · lucide · material · fontAwesome · custom | CDN or custom template; omit for bundled core icons |
2218
+ | prefix | string | Library-specific variant; defaults per library when empty |
2219
+ | size | 2xs · xs · sm · lg · xl · 2xl · 3xl (default md) | em-based SVG scale on the host |
2220
+
2221
+ Ancestor attributes (for library="custom" only): customIconLibraryPath (URL template with $prefix and $name) and customIconDefaultPrefix. May be set on sonic-scope, theme roots, or globally in the document.
2222
+
2223
+ No slots — the component inlines fetched or bundled SVG markup.
2224
+
1813
2225
  ---
1814
2226
 
1815
2227
  ## Image
1816
2228
 
1817
2229
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/image/image.html
1818
2230
  - Doc ID: core/components/ui/image/image
1819
- - Keywords: Concorde, supersoniks, core/components/ui/image/image, image, Image, UI component, sonic-image, web component, , object-fit: cover, --sc-placeholder-bg, loading, lazy, loading="eager", rounded, --sc-rounded, sm
2231
+ - Keywords: Concorde, supersoniks, core/components/ui/image/image, image, Image, UI component, sonic-image, web component, , object-fit: cover, --sc-placeholder-bg, loading, lazy, loading="eager", rounded, --sc-rounded
1820
2232
 
1821
2233
  Image
1822
2234
 
1823
- Responsive 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. Default loading is lazy; set loading="eager" for above-the-fold heroes.
2235
+ sonic-image wraps a responsive with aspect ratio, object-fit: cover, optional rounded corners, and load transitions. The host shows a placeholder background (--sc-placeholder-bg) until the asset loads. Default loading is lazy; use loading="eager" for above-the-fold heroes.
1824
2236
 
1825
2237
  Rounded
1826
2238
 
@@ -1868,69 +2280,175 @@ Accessibility and parts
1868
2280
 
1869
2281
  Always set meaningful alt text (empty string only for decorative images).
1870
2282
 
2283
+ API reference
2284
+
2285
+ | Attribute | Values | Description |
2286
+ |----------|---------|-------------|
2287
+ | src | URL | Image URL passed to |
2288
+ | alt | string | Accessible description; use "" only for decorative images |
2289
+ | loading | lazy (default), eager | Native lazy loading |
2290
+ | ratio | CSS ratio, auto (default) | Host aspect-ratio on the image (ignored when cover is set) |
2291
+ | rounded | none (default), boolean, base, sm, md, lg, xl, full | Corner radius from theme tokens; full is a circle (often with ratio="1/1") |
2292
+ | objectPosition | CSS position | Maps to object-position (default center center) |
2293
+ | imageRendering | CSS value | Maps to image-rendering (default auto) |
2294
+ | cover | boolean | Absolutely fills a positioned parent; host aspect ratio is ignored |
2295
+ | transition | fade, fade-scale-out | Opacity (and scale) animation after load; remount to replay on src change |
2296
+
2297
+ No slots — content is driven entirely by attributes on the inner .
2298
+
2299
+ API reference
2300
+
2301
+ | Attribute | Values | Description |
2302
+ |----------|---------|-------------|
2303
+ | src | URL | Image URL passed to |
2304
+ | alt | string | Accessible description; use "" only for decorative images |
2305
+ | loading | lazy (default), eager | Native lazy loading |
2306
+ | ratio | CSS ratio, auto (default) | Host aspect-ratio on the image (ignored when cover is set) |
2307
+ | rounded | none (default), boolean, base, sm, md, lg, xl, full | Corner radius from theme tokens; full is a circle (often with ratio="1/1") |
2308
+ | objectPosition | CSS position | Maps to object-position (default center center) |
2309
+ | imageRendering | CSS value | Maps to image-rendering (default auto) |
2310
+ | cover | boolean | Absolutely fills a positioned parent; host aspect ratio is ignored |
2311
+ | transition | fade, fade-scale-out | Opacity (and scale) animation after load; remount to replay on src change |
2312
+
2313
+ No slots — content is driven entirely by attributes on the inner .
2314
+
1871
2315
  ---
1872
2316
 
1873
2317
  ## Link
1874
2318
 
1875
2319
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/link/link.html
1876
2320
  - Doc ID: core/components/ui/link/link
1877
- - Keywords: Concorde, supersoniks, core/components/ui/link/link, link, Link, UI component, sonic-link, web component
2321
+ - Keywords: Concorde, supersoniks, core/components/ui/link/link, link, Link, UI component, sonic-link, web component, href, pushstate, autoActive, active, target="_blank", rel="noopener noreferrer", partial
1878
2322
 
1879
2323
  Link
1880
2324
 
1881
- Href
2325
+ 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 current URL on the host (active).
2326
+
2327
+ Basic example
1882
2328
 
1883
2329
  Basic link with href attribute
1884
2330
 
1885
2331
  Target
1886
2332
 
2333
+ target="blank" opens a new browsing context and sets rel="noopener noreferrer".
2334
+
1887
2335
  Link with target attribute
1888
2336
 
2337
+ Pushstate
2338
+
2339
+ Set pushstate on same-origin href values to intercept clicks and navigate through Concorde’s client router without a full reload.
2340
+
2341
+ Client navigation (pushstate)
2342
+
1889
2343
  AutoActive
1890
2344
 
2345
+ Default autoActive is partial: the host gets active when the current URL starts with href. Style with [&[active]]: utilities or host selectors.
2346
+
1891
2347
  autoActive partial (default)
1892
2348
 
1893
- AutoActive Strict vs partial
2349
+ AutoActive strict vs partial
2350
+
2351
+ strict requires pathname, search, and hash to match. strict-path-only matches pathname and hash but ignores search.
1894
2352
 
1895
2353
  autoActive strict
1896
- autoActive strict
2354
+ autoActive strict (long href)
2355
+ autoActive strict-path-only
1897
2356
 
1898
2357
  AutoActive disabled
1899
2358
 
1900
2359
  autoActive disabled
1901
2360
 
2361
+ Accessibility
2362
+
2363
+ The inner uses focus-visible outline styling. Set data-aria-label when the slot text is not sufficient on its own.
2364
+
2365
+ API reference
2366
+
2367
+ | Attribute | Values | Description |
2368
+ |----------|---------|-------------|
2369
+ | href | URL | Link target; without href, only the slot is rendered (no ) |
2370
+ | target | e.g. blank | Navigation target; blank adds rel="noopener noreferrer" |
2371
+ | pushstate | boolean | Intercepts click for Concorde client navigation without reload |
2372
+ | autoActive | partial (default) · strict · strict-path-only · disabled | When the host gets the active attribute (same-origin href only) |
2373
+ | data-aria-label | string | Accessible aria-label when the slot text is not enough |
2374
+
2375
+ | Slot | Description |
2376
+ |------|-------------|
2377
+ | (default) | Link content (text, icons) |
2378
+
1902
2379
  ---
1903
2380
 
1904
2381
  ## Loader
1905
2382
 
1906
2383
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/loader/loader.html
1907
2384
  - Doc ID: core/components/ui/loader/loader
1908
- - Keywords: Concorde, supersoniks, core/components/ui/loader/loader, loader, Loader, UI component, sonic-loader, web component
2385
+ - Keywords: Concorde, supersoniks, core/components/ui/loader/loader, loader, Loader, UI component, sonic-loader, web component, mode, fixed, inline, noDelay, sonic-fetch, sonic-list, currentColor
1909
2386
 
1910
2387
  Loader
1911
2388
 
1912
- Inline mode
2389
+ 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 should appear without the default fade-in wait. For sonic-fetch / sonic-list, set the parent loader attribute instead of embedding a tag manually.
1913
2390
 
1914
- CurrentColor
2391
+ Basic example
1915
2392
 
1916
- Align
2393
+ Inline loaders fit content areas; they use the theme primary color unless currentColor is set.
1917
2394
 
1918
- Fixed mode
2395
+ Mode
1919
2396
 
1920
- Loading button
2397
+ inline — ellipsis animation in the document flow. fixed — centered overlay (position: fixed); default when the tag is omitted.
1921
2398
 
1922
- A loading button
2399
+ Use the checkbox below to toggle a fixed loader over the page (default mode on sonic-loader).
1923
2400
 
1924
- Hide / show programmatically
2401
+ Inline alignment and color
1925
2402
 
1926
- import {Loader} from "@supersoniks/concorde/core/components/ui/loader/loader";
1927
- // Show
1928
- Loader.show({
1929
- mode:"fixed" // optional : fixed | inline
1930
- container : document.querySelector('#foo') // optional, default : parent sonic-theme || document.body
1931
- });
1932
- // Hide
1933
- Loader.hide();
2403
+ align only affects mode="inline": left · center (default) · right. Set currentColor so dots follow the host color (for example on a purple parent).
2404
+
2405
+ noDelay
2406
+
2407
+ By default mode="fixed" waits briefly before fading in. mode="inline" already skips that wait. Set noDelay on fixed (or pass noDelay: true to Loader.show()) to appear immediately.
2408
+
2409
+ Accessibility (announce)
2410
+
2411
+ The animation is aria-hidden by default so screen readers are not spammed on every fetch. Set announce when the loader is injected after user action (for example a global overlay): the host gets role="status", aria-live="polite", and a localized aria-label (“Loading” / “Chargement en cours”, …). For in-button loading, prefer sonic-button loading and aria-busy on the control—not on the loader.
2412
+
2413
+ Show and hide programmatically
2414
+
2415
+ Import Loader and call Loader.show() / Loader.hide(). hide() is reference-counted: call it once per show(). With no container, the loader is appended to the theme pop container and mode is always fixed. Pass container and mode: "inline" to mount an inline instance in a specific element.
2416
+
2417
+ import { Loader } from "@supersoniks/concorde/core/components/ui/loader/loader";
2418
+
2419
+ Loader.show({
2420
+ mode: "fixed",
2421
+ noDelay: false,
2422
+ announce: true,
2423
+ container: document.querySelector("#foo"),
2424
+ });
2425
+
2426
+ Loader.hide();
2427
+
2428
+ Composition
2429
+
2430
+ sonic-button loading shows an icon spinner and sets aria-busy on the button. sonic-fetch and sonic-list render sonic-loader when their loader attribute is set: true or an empty string maps to fixed; otherwise use inline or fixed.
2431
+
2432
+ Save changes
2433
+
2434
+ API reference
2435
+
2436
+ | Attribute | Values | Description |
2437
+ |----------|---------|-------------|
2438
+ | mode | inline · fixed (default fixed) | Layout: in-flow ellipsis vs viewport-centered overlay |
2439
+ | noDelay | boolean | Skips the initial fade-in delay before the animation appears |
2440
+ | announce | boolean | role="status" and aria-live="polite" with localized loading label when the loader should be announced |
2441
+ | align | left · center · right | Horizontal alignment for mode="inline" only (attribute selector; default centered) |
2442
+ | currentColor | boolean | Uses currentColor for dot fill instead of --sc-primary |
2443
+
2444
+ This component has no slots. The animation markup is internal.
2445
+
2446
+ Static methods
2447
+
2448
+ | Method | Description |
2449
+ |--------|-------------|
2450
+ | Loader.show(conf?) | Mounts the shared loader instance. conf.mode, conf.noDelay, conf.announce, optional conf.container. Without container, uses the theme pop container and forces fixed. |
2451
+ | Loader.hide() | Decrements the show counter and removes the instance from the DOM when it reaches zero. |
1934
2452
 
1935
2453
  ---
1936
2454
 
@@ -1938,12 +2456,24 @@ import {Loader} from "@supersoniks/concorde/core/components/ui/loader/loader";
1938
2456
 
1939
2457
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/menu/menu.html
1940
2458
  - Doc ID: core/components/ui/menu/menu
1941
- - Keywords: Concorde, supersoniks, core/components/ui/menu/menu, menu, Menu, UI component, sonic-menu, web component
2459
+ - Keywords: Concorde, supersoniks, core/components/ui/menu/menu, menu, Menu, UI component, sonic-menu, web component, direction, sonic-menu-item, variant, shape, sonic-divider, more, href, pushstate, autoActive
1942
2460
 
1943
2461
  Menu
1944
2462
 
2463
+ 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 the more slot (popover “…” trigger). Set href / pushstate / autoActive on each sonic-menu-item—same API as sonic-button—not on the menu host.
2464
+
2465
+ Basic example
2466
+
2467
+ Home
2468
+
2469
+ Profile
2470
+
2471
+ Log out
2472
+
1945
2473
  Direction
1946
2474
 
2475
+ Default direction is column. Use row for horizontal toolbars or tabs.
2476
+
1947
2477
  Row
1948
2478
 
1949
2479
  Profile
@@ -1966,7 +2496,9 @@ Direction
1966
2496
 
1967
2497
  Size
1968
2498
 
1969
- XS
2499
+ size on the menu propagates to items and the more trigger when they omit their own size.
2500
+
2501
+ XS
1970
2502
 
1971
2503
  Profile
1972
2504
 
@@ -1974,7 +2506,7 @@ Size
1974
2506
 
1975
2507
  Orders
1976
2508
 
1977
- Small
2509
+ Small
1978
2510
 
1979
2511
  Profile
1980
2512
 
@@ -1982,7 +2514,7 @@ Size
1982
2514
 
1983
2515
  Orders
1984
2516
 
1985
- Medium
2517
+ Medium
1986
2518
 
1987
2519
  Profile
1988
2520
 
@@ -1990,7 +2522,7 @@ Size
1990
2522
 
1991
2523
  Orders
1992
2524
 
1993
- Large
2525
+ Large
1994
2526
 
1995
2527
  Profile
1996
2528
 
@@ -1998,7 +2530,7 @@ Size
1998
2530
 
1999
2531
  Orders
2000
2532
 
2001
- XL
2533
+ XL
2002
2534
 
2003
2535
  Profile
2004
2536
 
@@ -2008,30 +2540,36 @@ Size
2008
2540
 
2009
2541
  Shadow
2010
2542
 
2011
- None
2543
+ Optional shadow wraps the menu surface (no shadow when omitted).
2012
2544
 
2013
- Small
2545
+ None
2014
2546
 
2015
- Medium
2547
+ Small
2016
2548
 
2017
- Large
2549
+ Medium
2550
+
2551
+ Large
2018
2552
 
2019
2553
  Align
2020
2554
 
2021
- Home
2555
+ align propagates to items except square / circle shape.
2022
2556
 
2023
- Profile
2557
+ Home
2024
2558
 
2025
- Home
2559
+ Profile
2026
2560
 
2027
- Profile
2561
+ Home
2028
2562
 
2029
- Home
2563
+ Profile
2030
2564
 
2031
- Profile
2565
+ Home
2566
+
2567
+ Profile
2032
2568
 
2033
2569
  More
2034
2570
 
2571
+ Assign nodes to slot="more" to show the overflow popover. The trigger appears only when the slot has content. Icon orientation follows direction (vertical ellipsis in a row menu).
2572
+
2035
2573
  Home
2036
2574
 
2037
2575
  Profile
@@ -2048,6 +2586,8 @@ More
2048
2586
 
2049
2587
  Scrollable
2050
2588
 
2589
+ With scrollable, the main slot scrolls with edge fade masks; drag-to-scroll works on pointer devices. When exactly one item is active, the menu scrolls it into view.
2590
+
2051
2591
  Home
2052
2592
 
2053
2593
  Profile
@@ -2082,74 +2622,189 @@ Scrollable
2082
2622
 
2083
2623
  Log out
2084
2624
 
2625
+ API reference
2626
+
2627
+ | Attribute | Values | Description |
2628
+ |----------|---------|-------------|
2629
+ | direction | column (default) · row | Vertical list or horizontal bar |
2630
+ | align | left (default) · center · right | Alignment propagated to items (except square / circle shape) |
2631
+ | size | xs · sm · md · lg · xl | Propagated to items and the more trigger when unset on the item |
2632
+ | shadow | sm · md · lg | Shadow around the menu; omitted for none |
2633
+ | minWidth | CSS length | Minimum width of the container (default 0) |
2634
+ | scrollable | boolean | Scroll with edge fade; auto-scroll when a single item is active |
2635
+ | moreShape | circle (default) · square | Shape of the more slot trigger button |
2636
+
2637
+ | Slot | Description |
2638
+ |------|-------------|
2639
+ | (default) | Visible items: sonic-menu-item, sonic-divider, nested sonic-menu |
2640
+ | more | Popover content for the “…” control; shown only when the slot has assigned nodes |
2641
+
2642
+ sonic-menu-item extends sonic-button (defaults: variant="ghost", shape="block"). Use the button docs for type, variant, href, pushstate, autoActive, and item slots.
2643
+
2085
2644
  ---
2086
2645
 
2087
- ## Concorde
2646
+ ## Modal
2088
2647
 
2089
2648
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/modal/modal.html
2090
2649
  - Doc ID: core/components/ui/modal/modal
2091
- - Keywords: Concorde, supersoniks, core/components/ui/modal/modal, modal, UI component, sonic-modal, web component
2650
+ - Keywords: Concorde, supersoniks, core/components/ui/modal/modal, modal, Modal, UI component, sonic-modal, web component, , sonic-modal-title, sonic-modal-subtitle, sonic-modal-content, sonic-modal-actions, show(), hideModal, hide(), forceAction
2092
2651
 
2093
2652
  Modal
2094
2653
 
2095
- Simple modal
2654
+ sonic-modal presents focused content in a overlay with backdrop, enter/exit animation, and a built-in close control. Compose sonic-modal-title / sonic-modal-subtitle / sonic-modal-content / sonic-modal-actions, or use the default slot. Call show() on the element to open; use hideModal on action buttons or hide() from script. Set forceAction when dismissal must go through explicit actions only. Imperative dialogs: Modal.create() (also window.SonicModal).
2096
2655
 
2097
- Lorem ipsum dolor sit amet +33
2098
- Donec sed vestibulum augue.
2656
+ Basic example
2657
+
2658
+ Click the trigger to open. sonic-modal-actions lays out footer buttons; hideModal closes the modal on click. Scope form state with formDataProvider on sonic-modal-actions so child sonic-button elements share one publisher.
2659
+
2660
+ Open modal
2099
2661
 
2100
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget quam eu mi luctus faucibus.
2662
+ Export ready
2663
+ New
2101
2664
 
2102
- Click don't close
2665
+ Your report finished processing.
2103
2666
 
2104
- Confirm
2667
+ Download the CSV now or review the summary in your dashboard before sharing.
2105
2668
 
2106
- Long text
2669
+ Save draft
2107
2670
 
2108
- Long text
2671
+ Download
2109
2672
 
2110
- Infos et tarifs
2673
+ Scrollable content
2111
2674
 
2112
- Horaires d’ouverture
2113
- Du mercredi au samedi de 13h30 à 19h et le dimanche de 13h30 à 18h
2114
- + horaires spécifiques pour événements ou festivals 
2675
+ Long copy scrolls inside the dialog. Default maxHeight is 90vh. Default align is left.
2115
2676
 
2116
- Billetterie 
2117
- La participation à certains événements et activités est soumise à un système de billetterie avec achats ou
2118
- réservations disponibles en ligne ou au guichet.  
2677
+ Venue details
2119
2678
 
2120
- Les tarifs (Tarif plein / Tarif Réduit / Tarif Spécifique) sont indiqués pour chaque événement et peuvent
2121
- varier selon la nature de l’événement. Les tarifs sont identiques en ligne et au guichet. Il est néanmoins
2122
- conseillé de réserver les billets en avance pour s’assurer une place.
2679
+ Hours and tickets
2123
2680
 
2124
- L’accès au Skatepark, Fablab et Halle C sont soumis à adhésions. Les adhésions sont gratuites et
2125
- nominatives. Elle donnent accès aux espaces dans la limite des places disponibles.
2681
+ Opening hours
2682
+ Wednesday–Saturday, 1:30 p.m.–7:00 p.m.; Sunday, 1:30 p.m.–6:00 p.m.
2126
2683
 
2127
- + d’infos billetterie@laconditionpublique.com +33 (0)328334833 
2684
+ Ticketing
2685
+ Some events require online or box-office reservations. Prices vary by event; booking ahead is recommended when capacity is limited.
2128
2686
 
2129
- Accès 14, place Faidherbe 59100 Roubaix Métro / Tram : Arrêt
2130
- Eurotéléport, Ligne 2 Bus / V’Lille : Arrêt Condition Publique 
2687
+ Contact
2688
+ tickets@example.com · +33 3 28 33 48 33
2131
2689
 
2132
- Accès handicapés : nous contacter avant votre venue au 03 28 33 48 33 ou par mail
2133
- billetterie@laconditionpublique.com
2690
+ Access
2691
+ 14 Place Faidherbe, 59100 Roubaix
2692
+ Metro line 2, Eurotéléport stop
2134
2693
 
2135
2694
  Force action
2136
2695
 
2137
- Force action to close
2696
+ With forceAction, backdrop click, Escape, and the default close button are disabled. Provide sonic-modal-actions (or sonic-modal-close) so users can finish the flow.
2138
2697
 
2139
- Do you want some cookies ?
2698
+ Cookie consent
2140
2699
 
2141
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget quam eu mi luctus faucibus.
2700
+ Allow analytics cookies?
2142
2701
 
2143
- Nope
2144
- Hell yes !
2702
+ We use cookies to measure traffic and improve the product. You can change this later in settings.
2703
+
2704
+ Decline
2705
+ Accept
2145
2706
 
2146
2707
  Custom dimensions
2147
2708
 
2148
- Custom width
2709
+ Set width / height / maxWidth / maxHeight (CSS lengths). On narrow viewports the panel becomes a bottom sheet. Use rounded="none" for edge-to-edge media.
2710
+
2711
+ Image preview
2149
2712
 
2150
2713
  Fullscreen
2151
2714
 
2152
- Fullscreen
2715
+ fullscreen fills the viewport and hides the backdrop.
2716
+
2717
+ Fullscreen
2718
+
2719
+ Programmatic creation
2720
+
2721
+ Use Modal.create(options) when there is no modal in the template—for confirmations, toasts that need a follow-up, or one-off flows from script. The modal is appended to the nearest sonic-theme pop container (same as declarative modals), opened automatically, and returns the sonic-modal instance. Set removeOnHide: true to detach it from the DOM after close. In the browser, window.SonicModal is the same class after the module loads.
2722
+
2723
+ Pass title / subtitle / content / actions as HTML strings (or Lit template results from application code). Put hideModal on action buttons in the actions string so clicks close the dialog.
2724
+
2725
+ Open programmatic modal
2726
+
2727
+ import { Modal } from "@supersoniks/concorde/core/components/ui/modal/modal";
2728
+
2729
+ const modal = Modal.create({
2730
+ title: "Delete project?",
2731
+ subtitle: "This cannot be undone.",
2732
+ content: " All files in Acme HQ will be removed. ",
2733
+ actions:
2734
+ Cancel
2735
+ Delete
2736
+ ,
2737
+ removeOnHide: true,
2738
+ forceAction: false,
2739
+ maxWidth: "min(100vw, 28rem)",
2740
+ });
2741
+
2742
+ modal.addEventListener("hidden", () => {
2743
+ console.log("Modal removed from the DOM");
2744
+ });
2745
+
2746
+ // Or close from script: await modal.hide(); await modal.dispose();
2747
+
2748
+ API reference
2749
+
2750
+ sonic-modal
2751
+
2752
+ | Attribute | Values | Description |
2753
+ |----------|---------|-------------|
2754
+ | align | left (default) · center · right | Align title and slotted content |
2755
+ | maxWidth | CSS length (default min(100vw, 40rem)) | Dialog max width |
2756
+ | maxHeight | CSS length (default 90vh) | Scrollable body max height |
2757
+ | width | CSS length (default 100%) | Dialog width |
2758
+ | height | CSS length (default fit-content) | Dialog height |
2759
+ | paddingX · paddingY | CSS length | Override content padding (--sc-modal-px / --sc-modal-py) |
2760
+ | zIndex | CSS number | Stacking order (default 990) |
2761
+ | effect | slide (default) · fade · none | Open/close animation |
2762
+ | fullscreen | boolean | Full viewport; no backdrop |
2763
+ | forceAction | boolean | Disable overlay, Escape, and default close button |
2764
+ | noCloseButton | boolean | Hide built-in close when not forceAction |
2765
+ | closeButtonType | sonic-button type | Style of built-in close |
2766
+ | visible | boolean | When toggled, opens or closes the dialog |
2767
+ | removeOnHide | boolean | Remove element from DOM after close |
2768
+ | removeHashOnHide | boolean | Clear URL hash on close |
2769
+ | closeOnLocationChange | boolean | Close when app location changes |
2770
+ | resetDataProviderOnHide | string | Reset named formDataProvider on close |
2771
+ | rounded | none | Square dialog corners (useful for full-bleed media) |
2772
+
2773
+ | Slot | Description |
2774
+ |------|-------------|
2775
+ | (default) | Additional markup alongside structured children |
2776
+
2777
+ | Event | Description |
2778
+ |-------|-------------|
2779
+ | show | Fired when open animation completes |
2780
+ | hide | Fired when close starts |
2781
+ | hidden | Fired when close finishes |
2782
+
2783
+ Methods: show() · hide() · dispose() (hide and remove). Static Modal.create(options) appends a modal to the theme pop container and opens it. options / styleSheet are JavaScript-only.
2784
+
2785
+ sonic-modal-title · sonic-modal-subtitle · sonic-modal-content
2786
+
2787
+ | Slot | Description |
2788
+ |------|-------------|
2789
+ | (default) | Title, subtitle, or main body content |
2790
+
2791
+ sonic-modal-actions
2792
+
2793
+ | Slot | Description |
2794
+ |------|-------------|
2795
+ | (default) | Footer actions (typically sonic-button) |
2796
+
2797
+ Put hideModal on a sonic-button to close the parent modal on click. Ancestor formDataProvider on this element is inherited by child form controls.
2798
+
2799
+ sonic-modal-close
2800
+
2801
+ Rendered automatically unless forceAction or noCloseButton is set. Calls hide() on the parent modal.
2802
+
2803
+ | Attribute | Values | Description |
2804
+ |----------|---------|-------------|
2805
+ | type | sonic-button type | Close button color |
2806
+ | reset | string | Passed to inner sonic-button reset |
2807
+ | translation | UI label object | Overrides default close aria-label |
2153
2808
 
2154
2809
  ---
2155
2810
 
@@ -2157,71 +2812,81 @@ Fullscreen
2157
2812
 
2158
2813
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/pop/pop.html
2159
2814
  - Doc ID: core/components/ui/pop/pop
2160
- - Keywords: Concorde, supersoniks, core/components/ui/pop/pop, pop, Pop, UI component, sonic-pop, web component, bottom, side-align, sonic-tooltip, side, top, right, left, align, start
2815
+ - Keywords: Concorde, supersoniks, core/components/ui/pop/pop, pop, Pop, UI component, sonic-pop, web component, slot="content", manual, placement, bottom, top, left, right, -start
2161
2816
 
2162
2817
  Pop
2163
2818
 
2819
+ 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; default placement is bottom (start-aligned). Position updates while open and flips inside the viewport when space is tight.
2820
+
2821
+ Basic example
2822
+
2823
+ Notifications
2824
+
2825
+ Notifications
2826
+
2827
+ Settings
2828
+
2164
2829
  Placement
2165
2830
 
2166
- Left
2831
+ Use top · bottom · left · right for the main axis. Add -start · -center · -end to align along the trigger edge. With no align suffix, content aligns to start. Legacy space syntax (placement="bottom center") still works but is deprecated—prefer bottom-center.
2167
2832
 
2168
- Notifications
2833
+ Left
2169
2834
 
2170
- Right
2835
+ Notifications
2171
2836
 
2172
- Notifications
2837
+ Right
2173
2838
 
2174
- Top
2839
+ Notifications
2175
2840
 
2176
- Notifications
2841
+ Top
2177
2842
 
2178
- Bottom
2843
+ Notifications
2179
2844
 
2180
- Notifications
2845
+ Bottom
2181
2846
 
2182
- 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 the trigger. If there is not enough room, content flips to the opposite side and stays inside the viewport.
2847
+ Notifications
2183
2848
 
2184
- The former space syntax (placement="bottom center") still works but is deprecated.
2849
+ Center-aligned sides
2185
2850
 
2186
- Bottom center
2851
+ Bottom center
2187
2852
 
2188
- Notifications
2853
+ Notifications
2189
2854
 
2190
- Top center
2855
+ Top center
2191
2856
 
2192
- Notifications
2857
+ Notifications
2193
2858
 
2194
- Left center
2859
+ Left center
2195
2860
 
2196
- Notifications
2861
+ Notifications
2197
2862
 
2198
- Right center
2863
+ Right center
2199
2864
 
2200
- Notifications
2865
+ Notifications
2201
2866
 
2202
2867
  Shadow
2203
2868
 
2204
- Default shadow is lg.
2869
+ Default shadow is lg. The shadow applies to the floating content panel.
2205
2870
 
2206
- None
2871
+ None
2207
2872
 
2208
- Notifications
2873
+ Notifications
2209
2874
 
2210
- Small
2875
+ Small
2211
2876
 
2212
- Notifications
2877
+ Notifications
2213
2878
 
2214
- Medium
2879
+ Medium
2215
2880
 
2216
- Notifications
2881
+ Notifications
2217
2882
 
2218
- Large
2883
+ Large
2219
2884
 
2220
- Notifications
2885
+ Notifications
2221
2886
 
2222
2887
  Inline
2223
2888
 
2224
- By default, pop is vertically aligned to the middle. Use inline to align it on the text baseline, e.g. inside a sentence.
2889
+ By default the host is middle-aligned with siblings. Set inline to baseline-align the trigger inside running text.
2225
2890
 
2226
2891
  The Concorde flew from Paris to
2227
2892
 
@@ -2232,98 +2897,152 @@ By default, pop is vertically aligned to the middle. Use inline to align it on t
2232
2897
 
2233
2898
  in about 3.5 hours.
2234
2899
 
2235
- noToggle
2900
+ No toggle
2901
+
2902
+ With noToggle, a click on the trigger still opens the pop but does not close it when it is already open. Use hide() or an outside click to dismiss.
2903
+
2904
+ No toggle on click
2905
+
2906
+ Notifications
2236
2907
 
2237
- No toggle on click
2908
+ Default toggle on click
2238
2909
 
2239
- Notifications
2910
+ Notifications
2240
2911
 
2241
- Default toggle on click
2912
+ Manual control
2242
2913
 
2243
- Notifications
2914
+ Set manual to disable built-in click and keyboard toggle on the trigger. Call show() and hide() on the element instead. The pop dispatches show when it opens and hide when it closes.
2244
2915
 
2245
- manual
2916
+ Click Click to open pop to open the panel programmatically.
2246
2917
 
2247
- Manual doesn't open on click
2918
+ Manual trigger
2248
2919
 
2249
- Hourra !
2920
+ It worked!
2250
2921
 
2251
2922
  Click to open pop
2252
2923
 
2253
2924
  Keep open on select
2254
2925
 
2255
- By default, a click inside the content closes the pop, as well as a click outside. Add data-on-select="keep" on the content, or on any of its elements, to keep the pop open when interacting with it.
2926
+ By default, a click inside content closes the pop (same as an outside click). Set data-on-select="keep" on the panel or a descendant to keep it open while selecting checkboxes, toggles, or menu items.
2256
2927
 
2257
- Closes on select
2928
+ Closes on select
2258
2929
 
2259
- Option A
2260
- Option B
2930
+ Option A
2931
+ Option B
2261
2932
 
2262
- Stays open on select
2933
+ Stays open on select
2263
2934
 
2264
- Option A
2265
- Option B
2935
+ Option A
2936
+ Option B
2266
2937
 
2267
- Keyboard
2938
+ Keyboard and dismissal
2268
2939
 
2269
- - ArrowDown on the trigger opens the pop.
2270
- - Escape closes the last opened pop and gives focus back to its trigger.
2940
+ ArrowDown on the trigger opens the pop when it is closed. Escape closes the most recently opened pop (capture phase, before ancestors such as sonic-modal) and returns focus to that trigger. Multiple pops on the page stack in open order for Escape.
2271
2941
 
2272
- Methods and events
2942
+ Focus me — ArrowDown opens, Escape closes
2273
2943
 
2274
- show() and hide() open and close the pop programmatically (see manual above). The pop dispatches a show event when it opens and a hide event when it closes.
2944
+ First item
2945
+ Second item
2275
2946
 
2276
- const pop = document.querySelector("sonic-pop");
2277
- pop.addEventListener("hide", () => console.log("pop closed"));
2278
- pop.show();
2947
+ API reference
2279
2948
 
2280
- Styling
2949
+ | Attribute | Values | Description |
2950
+ |----------|---------|-------------|
2951
+ | placement | bottom (default) · top · left · right · top-start · top-center · top-end · bottom-start · bottom-center · bottom-end · left-start · left-center · left-end · right-start · right-center · right-end | Side and alignment relative to the trigger; repositions while open and flips within the viewport |
2952
+ | shadow | none · sm · md · lg (default lg) | Box shadow on the content panel |
2953
+ | inline | boolean | Baseline-align the host for inline triggers |
2954
+ | noToggle | boolean | When open, trigger click does not close the pop |
2955
+ | manual | boolean | Disable default trigger toggle; use show() / hide() |
2281
2956
 
2282
- The content can be styled from outside with ::part(content).
2957
+ | Slot | Description |
2958
+ |------|-------------|
2959
+ | (default) | Trigger; listens for click and keydown (ArrowDown opens when closed) unless manual |
2960
+ | content | Floating panel; receives focus tabindex="0" while open |
2283
2961
 
2284
- sonic-pop::part(content) {
2285
- border-radius: 0;
2286
- }
2962
+ Methods: show() · hide() on the host element.
2963
+
2964
+ Events: show · hide (non-bubbling CustomEvent).
2965
+
2966
+ Content attribute: data-on-select="keep" on content or descendants prevents close-on-click inside the panel.
2287
2967
 
2288
2968
  ---
2289
2969
 
2290
- ## Progress bar
2970
+ ## Progress
2291
2971
 
2292
2972
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/progress/progress.html
2293
2973
  - Doc ID: core/components/ui/progress/progress
2294
- - Keywords: Concorde, supersoniks, core/components/ui/progress/progress, progress, Progress bar, UI component, sonic-progress, web component
2974
+ - Keywords: Concorde, supersoniks, core/components/ui/progress/progress, progress, Progress, UI component, sonic-progress, web component, value, max, , remaining, invert, sonic-card, to **, ** (default
2295
2975
 
2296
- Progress bar
2976
+ Progress
2297
2977
 
2298
- Displays an indicator showing the completion progress of a task.
2978
+ Shows task completion on a value / max scale via a native bar. Omit value for an indeterminate loading animation. Put primary copy in the default slot and optional secondary text in remaining; set invert when the bar sits on a colored surface such as sonic-card.
2299
2979
 
2300
- Indeterminate
2980
+ Basic example
2301
2981
 
2302
- Remaining
2982
+ Set value from 0 to max (default 100). Label text uses the type color.
2303
2983
 
2304
- 80% Used 20% left
2984
+ 50%
2305
2985
 
2306
- Sizes
2986
+ Indeterminate
2307
2987
 
2308
- 25%
2309
- 25%
2310
- 25%
2311
- 25%
2312
- 25%
2313
- 25%
2314
- 25%
2988
+ With no value, the bar animates until progress is known.
2315
2989
 
2316
2990
  Type
2317
2991
 
2318
- 50%
2319
- 50%
2320
- 50%
2321
- 50%
2322
- 50%
2992
+ Semantic color follows type. With no type, behavior is default.
2993
+
2994
+ 50%
2995
+ 50%
2996
+ 50%
2997
+ 50%
2998
+ 50%
2999
+ 50%
3000
+ 50%
3001
+
3002
+ Size
3003
+
3004
+ Bar height scales with typography via size. With no size, font size matches md (1rem).
3005
+
3006
+ 25%
3007
+ 25%
3008
+ 25%
3009
+ 25%
3010
+ 25%
3011
+ 25%
3012
+ 25%
3013
+
3014
+ Default and remaining slots
3015
+
3016
+ The default slot is the main label (left). remaining is right-aligned with lighter weight—use it for “left to complete” copy.
3017
+
3018
+ 80% Used 20% left
2323
3019
 
2324
3020
  Invert
2325
3021
 
2326
- 50%
3022
+ On tinted backgrounds, invert adjusts track and fill tokens so the bar stays readable (pair with matching type on sonic-card or similar).
3023
+
3024
+ 50%
3025
+
3026
+ 50%
3027
+
3028
+ 50%
3029
+
3030
+ 50%
3031
+
3032
+ API reference
3033
+
3034
+ | Attribute | Values | Description |
3035
+ |----------|---------|-------------|
3036
+ | value | number | Completion amount; omit for indeterminate state |
3037
+ | max | number (default 100) | Upper bound for value |
3038
+ | type | default (default) · primary · neutral · warning · info · success · danger | Semantic bar and label color |
3039
+ | size | 2xs · xs · sm · md · lg · xl · 2xl · inherit | Typography scale (bar height follows em) |
3040
+ | invert | boolean | High-contrast tokens on colored backgrounds |
3041
+
3042
+ | Slot | Description |
3043
+ |------|-------------|
3044
+ | (default) | Primary label below the bar (left) |
3045
+ | remaining | Secondary label below the bar (right) |
2327
3046
 
2328
3047
  ---
2329
3048
 
@@ -2331,11 +3050,15 @@ Invert
2331
3050
 
2332
3051
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/table/table.html
2333
3052
  - Doc ID: core/components/ui/table/table
2334
- - Keywords: Concorde, supersoniks, core/components/ui/table/table, table, Table, UI component, sonic-table, web component
3053
+ - Keywords: Concorde, supersoniks, core/components/ui/table/table, table, Table, UI component, sonic-table, web component, sonic-tr, sonic-th, sonic-td, size, maxHeight, sonic-thead, sonic-tbody, sonic-list
2335
3054
 
2336
3055
  Table
2337
3056
 
2338
- Basic usage
3057
+ 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 height with maxHeight. Pair with sonic-thead and sonic-tbody for structure and with sonic-list to render fetched rows.
3058
+
3059
+ Basic example
3060
+
3061
+ A header row plus body rows is enough for static tables; sonic-thead / sonic-tbody are optional for simple layouts.
2339
3062
 
2340
3063
  Id
2341
3064
  Name
@@ -2353,7 +3076,9 @@ Basic usage
2353
3076
  Emma Wong
2354
3077
  emma.wong@reqres.in
2355
3078
 
2356
- List / fetch
3079
+ List and fetch
3080
+
3081
+ Place sonic-list inside sonic-tbody so each item template renders a sonic-tr. sonic-list sets row metadata (even / odd / last) on sonic-tr for striping and borders.
2357
3082
 
2358
3083
  Id
2359
3084
  Name
@@ -2363,6 +3088,8 @@ List / fetch
2363
3088
 
2364
3089
  Size
2365
3090
 
3091
+ Default font size is md (omit size). Sizes follow the shared scale (2xs … 2xl).
3092
+
2366
3093
  2xs
2367
3094
 
2368
3095
  xs
@@ -2381,6 +3108,8 @@ Size
2381
3108
 
2382
3109
  Bordered
2383
3110
 
3111
+ Set bordered on sonic-table for an outer frame and horizontal rules between rows.
3112
+
2384
3113
  Id
2385
3114
  Name
2386
3115
  Email
@@ -2397,7 +3126,9 @@ Bordered
2397
3126
  Emma Wong
2398
3127
  emma.wong@reqres.in
2399
3128
 
2400
- MaxHeight
3129
+ Max height
3130
+
3131
+ maxHeight applies to the scroll container (for example 8rem), so the body scrolls vertically while the table can still scroll horizontally.
2401
3132
 
2402
3133
  Id
2403
3134
  Name
@@ -2407,36 +3138,34 @@ MaxHeight
2407
3138
 
2408
3139
  Type
2409
3140
 
2410
- Values available : primary, info, success, warning, danger
3141
+ Set type on sonic-th / sonic-td / sonic-tr for semantic text color (primary · info · success · warning · danger · neutral · default).
3142
+
3143
+ Attribute type set on
3144
+ sonic-th
2411
3145
 
2412
- Attribute type set on
2413
- sonic-th
3146
+ Attribute type set on
3147
+ sonic-td
2414
3148
 
2415
- Attribute type set on
2416
- sonic-td
3149
+ Attribute type set on
3150
+ sonic-tr
2417
3151
 
2418
- Attribute type set on
2419
- sonic-tr
3152
+ Colspan and rowspan
2420
3153
 
2421
- Colspan / rowspan
3154
+ Use colSpan and rowSpan on sonic-th or sonic-td (maps to colspan / rowspan on the cell).
2422
3155
 
2423
- colspan : 2
3156
+ colspan: 2
2424
3157
  cell
2425
3158
 
2426
3159
  cell
2427
3160
  cell
2428
- rowspan : 2
3161
+ rowspan: 2
2429
3162
 
2430
3163
  cell
2431
3164
  cell
2432
3165
 
2433
- Cell style attributes
3166
+ Cell alignment and width
2434
3167
 
2435
- The following attributes will be used to set the style of the component :
2436
- - align
2437
- - minWidth
2438
- - maxWidth
2439
- - width
3168
+ align sets horizontal alignment (left · center · right). minWidth / maxWidth / width set inline dimensions on the cell. vAlign is available on sonic-td only.
2440
3169
 
2441
3170
  align
2442
3171
  minWidth
@@ -2455,12 +3184,12 @@ The following attributes will be used to set the style of the component :
2455
3184
 
2456
3185
  right
2457
3186
  20rem
2458
- 5rem - Lorem ipsum dolor
2459
- 15rem - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam porta sollicitudin mollis. Curabitur sit amet nibh diam. Vivamus a pharetra mauris.
3187
+ 5rem — Lorem ipsum dolor
3188
+ 15rem — Lorem ipsum dolor sit amet, consectetur adipiscing elit.
2460
3189
 
2461
- Responsive
3190
+ Responsive layout
2462
3191
 
2463
- Every table is responsive by default
3192
+ Tables scroll horizontally by default when columns exceed the viewport. Use minWidth on wide columns to preserve readable line length.
2464
3193
 
2465
3194
  Id
2466
3195
  Name
@@ -2469,9 +3198,11 @@ Every table is responsive by default
2469
3198
 
2470
3199
  $lastname ">
2471
3200
 
2472
- hasellus suscipit vulputate lacus, in tempor turpis aliquam vel. Nunc eleifend, velit id ultrices elementum, ipsum felis porttitor dui, id laoreet diam nulla sed urna.
3201
+ Phasellus suscipit vulputate lacus, in tempor turpis aliquam vel. Nunc eleifend, velit id ultrices elementum, ipsum felis porttitor dui, id laoreet diam nulla sed urna.
2473
3202
 
2474
- Sticky header
3203
+ Sticky header and caption
3204
+
3205
+ sonic-th uses position: sticky with top: 0 inside the table. For page-level sticky headers, set noCustomScroll on sonic-table and position sonic-thead (for example class="sticky top-16"). Add sonic-caption for a table title below the grid.
2475
3206
 
2476
3207
  Company
2477
3208
  Contact
@@ -2490,18 +3221,6 @@ Sticky header
2490
3221
  3
2491
3222
  40€
2492
3223
 
2493
- Ernst Handel
2494
- Roland Mendel
2495
- Austria
2496
- 4
2497
- 40€
2498
-
2499
- Island Trading
2500
- Helen Bennett
2501
- UK
2502
- 1
2503
- 40€
2504
-
2505
3224
  Laughing Bacchus Winecellars
2506
3225
  Yoshi Tannamuri
2507
3226
  Canada
@@ -2514,42 +3233,165 @@ Sticky header
2514
3233
  20
2515
3234
  40€
2516
3235
 
2517
- Alfreds Futterkiste
2518
- Maria Anders
2519
- Germany
2520
- 2
2521
- 40€
3236
+ Table caption
2522
3237
 
2523
- Centro comercial Moctezuma
2524
- no information yet
2525
- 3
2526
- 40€
3238
+ API reference
2527
3239
 
2528
- Ernst Handel
2529
- Roland Mendel
2530
- Austria
2531
- 4
2532
- 40€
3240
+ sonic-table
2533
3241
 
2534
- Island Trading
2535
- Helen Bennett
2536
- UK
2537
- 1
2538
- 40€
3242
+ | Attribute | Values | Description |
3243
+ |----------|---------|-------------|
3244
+ | size | 2xs · xs · sm · md · lg · xl · 2xl · inherit (default md) | Scales table font size via shared size tokens |
3245
+ | bordered | boolean | Outer border and row dividers |
3246
+ | noCustomScroll | boolean | Disables custom scrollbar styling on the horizontal scroll container |
3247
+ | rounded | boolean | Reflected on the host; no default table styles |
3248
+ | maxHeight | CSS length | Max height on the scroll container; enables vertical scrolling |
2539
3249
 
2540
- Laughing Bacchus Winecellars
2541
- Yoshi Tannamuri
2542
- Canada
2543
- 0
2544
- 40€
3250
+ | Slot | Description |
3251
+ |------|-------------|
3252
+ | (default) | Table sections and rows (sonic-thead, sonic-tbody, sonic-tr, …) |
2545
3253
 
2546
- Magazzini Alimentari Riuniti
2547
- Giovanni Rovelli
2548
- Italy
2549
- 20
2550
- 40€
3254
+ sonic-thead · sonic-tbody · sonic-tfoot
3255
+
3256
+ | Slot | Description |
3257
+ |------|-------------|
3258
+ | (default) | Row elements (sonic-tr) |
3259
+
3260
+ sonic-tbody wraps slotted rows in a native and applies zebra / hover backgrounds to sonic-tr children.
3261
+
3262
+ sonic-caption
3263
+
3264
+ | Slot | Description |
3265
+ |------|-------------|
3266
+ | (default) | Caption text rendered as table-caption |
3267
+
3268
+ sonic-tr
3269
+
3270
+ | Attribute | Values | Description |
3271
+ |----------|---------|-------------|
3272
+ | type | default · primary · info · success · warning · danger · neutral | Semantic text color for the row |
3273
+ | even | boolean | Striping background; usually set by sonic-list metadata |
3274
+ | odd | boolean | Alternate striping background; usually set by sonic-list |
3275
+ | last | boolean | Removes bottom cell border on the last row when bordered |
3276
+
3277
+ | Slot | Description |
3278
+ |------|-------------|
3279
+ | (default) | Header or data cells (sonic-th / sonic-td) |
3280
+
3281
+ sonic-th
3282
+
3283
+ | Attribute | Values | Description |
3284
+ |----------|---------|-------------|
3285
+ | type | default · primary · info · success · warning · danger · neutral | Semantic text color |
3286
+ | align | left · center · right | Horizontal text alignment |
3287
+ | colSpan | number | Column span |
3288
+ | rowSpan | number | Row span |
3289
+ | minWidth | CSS length | Minimum cell width |
3290
+ | maxWidth | CSS length | Maximum cell width |
3291
+ | width | CSS length | Cell width |
3292
+ | noBorder | boolean | Removes the bottom border under the header cell |
3293
+
3294
+ | Slot | Description |
3295
+ |------|-------------|
3296
+ | (default) | Header label content |
2551
3297
 
2552
- table caption
3298
+ sonic-td
3299
+
3300
+ | Attribute | Values | Description |
3301
+ |----------|---------|-------------|
3302
+ | type | default · primary · info · success · warning · danger · neutral | Semantic text color |
3303
+ | align | left · center · right | Horizontal text alignment |
3304
+ | vAlign | CSS vertical-align value | Vertical alignment |
3305
+ | colSpan | number | Column span |
3306
+ | rowSpan | number | Row span |
3307
+ | minWidth | CSS length | Minimum cell width |
3308
+ | maxWidth | CSS length | Maximum cell width |
3309
+ | width | CSS length | Cell width |
3310
+
3311
+ | Slot | Description |
3312
+ |------|-------------|
3313
+ | (default) | Cell content |
3314
+
3315
+ ---
3316
+
3317
+ ## Theme
3318
+
3319
+ - URL: https://concorde.supersoniks.org/crawl/core/components/ui/theme/theme.html
3320
+ - Doc ID: core/components/ui/theme/theme
3321
+ - Keywords: Concorde, supersoniks, core/components/ui/theme/theme, theme, Theme, UI component, sonic-theme, web component, --sc-*, theme="custom", light, dark, auto, color, font, bg-base
3322
+
3323
+ Theme
3324
+
3325
+ 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 apply—built-in light / dark / auto palettes are opt-in. Set color and font when the host should carry base text and typography; add Tailwind bg-base and block (or min-h-screen) on the tag for a full surface fill. Popovers, modals, and toasts mount under the nearest connected theme (see Pop container). Import @supersoniks/concorde/theme once at the app entry. For the full public token list and brand overrides, see Customization.
3326
+
3327
+ Basic example
3328
+
3329
+ Wrap interactive components so tokens and overlays resolve from one root.
3330
+
3331
+ Save changes
3332
+
3333
+ Theme mode
3334
+
3335
+ Default: omit theme or set theme="custom". The host loads core tokens (--sc-rounded, shadows, form defaults, …) and any --sc- you set; it does not apply the built-in light or dark palette.
3336
+
3337
+ Set theme to light or dark for Concorde’s preset palettes. Set theme="auto" to follow prefers-color-scheme (light palette until the OS prefers dark).
3338
+
3339
+ theme="light"
3340
+
3341
+ Primary
3342
+ Success
3343
+ Danger
3344
+
3345
+ theme="dark"
3346
+
3347
+ Primary
3348
+ Success
3349
+ Danger
3350
+
3351
+ Presentation
3352
+
3353
+ color sets text from --sc-base-content. font applies --sc-font-family-base, --sc-font-weight-base, and --sc-font-style-base. For the page or shell background, use bg-base on sonic-theme (maps to --sc-base in Tailwind) with block so the host paints the surface. Components keep their own fallbacks when color / font are omitted.
3354
+
3355
+ Body copy inherits base content color and font from the theme host.
3356
+
3357
+ Custom tokens
3358
+
3359
+ Override primitives on sonic-theme (or :root / a project stylesheet). Derived radii, shadows, and control rounding are computed from tokens such as --sc-rounded—avoid copying long lists of internal variables unless you have a specific need.
3360
+
3361
+ Brand primary
3362
+
3363
+ Pop container
3364
+
3365
+ Theme.getPopContainer() returns the last connected sonic-theme, or document.body if none is connected. When a theme disconnects, the previous connected instance is adopted. Imperative Modal.create() and declarative sonic-modal use the same container.
3366
+
3367
+ Open modal
3368
+
3369
+ Mounted on theme
3370
+
3371
+ This dialog is appended under the nearest sonic-theme pop container.
3372
+
3373
+ Close
3374
+
3375
+ Embedded iframes
3376
+
3377
+ On connect, the theme publishes resolved --sc- values and linked font stylesheet URLs (Google Fonts / Adobe Fonts) to the sonic-theme data channel and postMessages them to same-page iframes. Iframes can request a refresh by posting { type: "GetSonicTheme" }.
3378
+
3379
+ // Inside the iframe — ask the parent theme to rebroadcast tokens
3380
+ window.parent.postMessage({ type: "GetSonicTheme" }, "");
3381
+
3382
+ API reference
3383
+
3384
+ | Attribute | Values | Description |
3385
+ |----------|---------|-------------|
3386
+ | theme | omitted · custom (default) · light · dark · auto | Omitted or custom: core tokens and your --sc- only. light / dark: fixed presets. auto: presets follow prefers-color-scheme |
3387
+ | color | boolean | Host text color uses --sc-base-content |
3388
+ | font | boolean | Host font uses --sc-font-family-base and related base weight/style tokens |
3389
+
3390
+ | Slot | Description |
3391
+ |------|-------------|
3392
+ | (default) | Application markup and Concorde components |
3393
+
3394
+ Surface background: Tailwind bg-base on sonic-theme (requires Concorde Tailwind color base → --sc-base).
2553
3395
 
2554
3396
  ---
2555
3397
 
@@ -2557,17 +3399,21 @@ Sticky header
2557
3399
 
2558
3400
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/toast/toast.html
2559
3401
  - Doc ID: core/components/ui/toast/toast
2560
- - Keywords: Concorde, supersoniks, core/components/ui/toast/toast, toast, Toast, UI component, sonic-toast, web component, success, error, warning, info, preserve: true, dismissForever: true, id, ghost: true
3402
+ - Keywords: Concorde, supersoniks, core/components/ui/toast/toast, toast, Toast, UI component, sonic-toast, web component, SonicToast.add(), SonicToast, label, preserve, text, status
2561
3403
 
2562
3404
  Toast
2563
3405
 
2564
- Utilisation de base
3406
+ 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 automatically. Prefer label for a heading; use preserve or interactive text when the user must read or act before dismiss.
2565
3407
 
2566
- Afficher un toast
3408
+ Basic example
3409
+
3410
+ Click the button to show a toast.
2567
3411
 
2568
- Statut
3412
+ Show toast
2569
3413
 
2570
- Les statuts disponibles sont : success, error, warning, info ou vide (par défaut).
3414
+ Status
3415
+
3416
+ status drives color, icon, and live-region behavior. Omit status or pass an empty string for a neutral toast.
2571
3417
 
2572
3418
  Default
2573
3419
 
@@ -2579,69 +3425,105 @@ Les statuts disponibles sont : success, error, warning, info ou vide (par défau
2579
3425
 
2580
3426
  Info
2581
3427
 
2582
- Avec titre
3428
+ Label
2583
3429
 
2584
- Toast avec titre
3430
+ Set label for a bold title above text. title still works but is deprecated—use label in new code.
2585
3431
 
2586
- Toast d'erreur avec titre
3432
+ Toast with label
2587
3433
 
2588
- Avec contenu HTML
3434
+ Error with label
2589
3435
 
2590
- Le contenu du toast peut contenir du HTML.
3436
+ HTML in text
2591
3437
 
2592
- HTML et un lien cliquable ', status: 'info' })">
2593
- Toast avec HTML
3438
+ text (and label) can include HTML strings. Links and controls in text automatically enable preserve so the toast does not auto-hide while the user interacts.
2594
3439
 
2595
- Persistance
3440
+ HTML and an action link ', status: 'info' })"
3441
+ >
3442
+ Toast with HTML
2596
3443
 
2597
- Par défaut, les toasts disparaissent automatiquement. Avec preserve: true, le toast reste affiché jusqu'à ce qu'il soit fermé manuellement.
3444
+ Preserve
2598
3445
 
2599
- Toast persistant
3446
+ Without preserve, toasts auto-hide after about six seconds (timer pauses on hover or focus). Set preserve to keep the toast until the user closes it.
2600
3447
 
2601
- Masquer définitivement
3448
+ Persistent toast
2602
3449
 
2603
- Avec dismissForever: true et un id, le toast peut être masqué définitivement. Une fois fermé, il ne réapparaîtra plus même après rechargement de la page.
3450
+ Dismiss forever
2604
3451
 
2605
- Toast avec dismiss forever
3452
+ With dismissForever and a stable id, closing the toast stores dismissal in localStorage—SonicToast.add skips it on later visits. Duplicate payloads (same fields, ignoring id) are not queued twice.
2606
3453
 
2607
- Fantôme
3454
+ Dismiss forever
2608
3455
 
2609
- Avec ghost: true, le toast devient semi-transparent et non-interactif.
3456
+ Ghost
3457
+
3458
+ ghost renders a semi-transparent, non-interactive toast—useful for loading or background states. SonicToast.removeAll leaves ghost toasts in place.
2610
3459
 
2611
- Toast ghost
3460
+ Ghost toast
2612
3461
 
2613
- Méthodes de suppression
3462
+ Dismissal
2614
3463
 
2615
- Tout supprimer
3464
+ Use static helpers to clear the stack from app logic (for example after navigation).
2616
3465
 
2617
- Supprime tous les toasts sauf ceux marqués comme ghost.
3466
+ Remove all
2618
3467
 
2619
- Ajouter toast 1
2620
- Ajouter toast 2
2621
- Ajouter toast 3
2622
- Supprimer tous
3468
+ Removes every toast except ghost items.
2623
3469
 
2624
- Supprimer par statut
3470
+ Add toast 1
3471
+ Add toast 2
3472
+ Add toast 3
3473
+ Remove all
2625
3474
 
2626
- Supprime tous les toasts d'un statut spécifique.
3475
+ Remove by status
2627
3476
 
2628
3477
  Success
2629
3478
  Error
2630
3479
  Warning
2631
- Supprimer success
2632
- Supprimer error
3480
+ Remove success
3481
+ Remove error
3482
+
3483
+ Remove temporary items
3484
+
3485
+ Removes toasts that are not preserve.
3486
+
3487
+ Temporary
3488
+
3489
+ Persistent
3490
+
3491
+ Remove temporary
3492
+
3493
+ Combined options
3494
+
3495
+ Full example
2633
3496
 
2634
- Supprimer les éléments temporaires
3497
+ Accessibility
2635
3498
 
2636
- Supprime tous les toasts qui ne sont pas marqués comme preserve.
3499
+ Each toast uses role="alert" for error and role="status" otherwise (with aria-live="polite" when applicable). Status icons are decorative (aria-hidden). The close control has an i18n aria-label. When there is no label, a truncated string aria-label may be derived from plain text.
2637
3500
 
2638
- Temporaire
2639
- Persistant
2640
- Supprimer temporaires
3501
+ API reference
2641
3502
 
2642
- Exemple complet
3503
+ Options passed to SonicToast.add(conf):
2643
3504
 
2644
- Toast complet
3505
+ | Option | Values | Description |
3506
+ |----------|---------|-------------|
3507
+ | text | string · Lit template | Main body; HTML strings are supported |
3508
+ | label | string · Lit template | Optional heading above text |
3509
+ | title | string · Lit template | Deprecated alias for label |
3510
+ | status | success · error · warning · info · (empty) | Semantic styling and live region behavior |
3511
+ | id | string · number | Stable id for deduplication and dismissForever (defaults to timestamp) |
3512
+ | preserve | boolean | Skip auto-hide; forced when text contains interactive markup |
3513
+ | ghost | boolean | Semi-transparent and non-interactive; kept by removeAll |
3514
+ | dismissForever | boolean | Persist dismissal in localStorage when closed (requires stable id) |
3515
+ | styleSheet | modal style input | Extra adopted styles on the toast item shadow root |
3516
+ | useSlot | boolean | Legacy: project text into the light DOM slot |
3517
+
3518
+ | Method | Description |
3519
+ |--------|-------------|
3520
+ | SonicToast.add(conf) | Append a toast; returns the config or null if skipped (dismissed forever or duplicate) |
3521
+ | SonicToast.removeAll() | Remove all non-ghost toasts |
3522
+ | SonicToast.removeItemsByStatus(status) | Remove toasts matching status |
3523
+ | SonicToast.removeItemById(id) | Remove a single toast by id |
3524
+ | SonicToast.removeTemporaryItems() | Remove toasts without preserve |
3525
+
3526
+ sonic-toast is mounted automatically; sonic-toast-item is internal. In iframes, toasts can delegate to the parent window via postMessage.
2645
3527
 
2646
3528
  ---
2647
3529
 
@@ -2649,25 +3531,29 @@ Exemple complet
2649
3531
 
2650
3532
  - URL: https://concorde.supersoniks.org/crawl/core/components/ui/tooltip/tooltip.html
2651
3533
  - Doc ID: core/components/ui/tooltip/tooltip
2652
- - Keywords: Concorde, supersoniks, core/components/ui/tooltip/tooltip, tooltip, Tooltip, UI component, sonic-tooltip, web component
3534
+ - Keywords: Concorde, supersoniks, core/components/ui/tooltip/tooltip, tooltip, Tooltip, UI component, sonic-tooltip, web component, label, placement, top, disabled, bottom, left, right, -start
2653
3535
 
2654
3536
  Tooltip
2655
3537
 
2656
- hover me
3538
+ 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). An empty label hides the bubble the same way as disabled.
3539
+
3540
+ Basic example
3541
+
3542
+ Hover me
2657
3543
 
2658
3544
  Placement
2659
3545
 
2660
- By default, tooltip is centered next to its content
3546
+ Use top · bottom · left · right for the main axis. Add -start or -end to align the bubble along the anchor edge.
2661
3547
 
2662
- Top
3548
+ Top
2663
3549
 
2664
- Bottom
3550
+ Bottom
2665
3551
 
2666
- Right
3552
+ Right
2667
3553
 
2668
- Left
3554
+ Left
2669
3555
 
2670
- More placement
3556
+ Aligned placements
2671
3557
 
2672
3558
  Top start
2673
3559
 
@@ -2685,14 +3571,39 @@ More placement
2685
3571
 
2686
3572
  Left end
2687
3573
 
3574
+ Label formatting
3575
+
3576
+ label supports line breaks (\n in markup or multiline text). Lines are trimmed;   is normalized to spaces. white-space: pre-line preserves breaks in the bubble (max width 18rem).
3577
+
3578
+ Multiline label
3579
+
2688
3580
  Focusable
2689
3581
 
2690
- Focus or hover non interactive element
3582
+ On non-interactive triggers, set focusable so the host gets tabindex="0" and the tooltip opens on keyboard focus as well as hover.
3583
+
3584
+ Focus or hover this text
2691
3585
 
2692
3586
  Disabled
2693
3587
 
2694
3588
  Tooltip disabled
2695
3589
 
3590
+ Accessibility
3591
+
3592
+ The bubble uses popover="hint" (non-modal, no pointer capture). Prefer focusable when the slotted content is not already focusable. When the Popover API is unavailable, the host falls back to the native title attribute with a single-line label. Opacity transitions respect prefers-reduced-motion.
3593
+
3594
+ API reference
3595
+
3596
+ | Attribute | Values | Description |
3597
+ |----------|---------|-------------|
3598
+ | label | string | Tooltip copy; whitespace-only values suppress the bubble |
3599
+ | placement | top (default) · bottom · left · right · top-start · top-end · bottom-start · bottom-end · left-start · left-end · right-start · right-end | Position relative to the trigger; repositions while open |
3600
+ | disabled | boolean | Suppress show/hide; sets tabindex="-1" on the host |
3601
+ | focusable | boolean | Add tabindex="0" on the host for keyboard access |
3602
+
3603
+ | Slot | Description |
3604
+ |------|-------------|
3605
+ | (default) | Trigger content (hover target) |
3606
+
2696
3607
  ---
2697
3608
 
2698
3609
  ## Data flow
@@ -2992,8 +3903,9 @@ Behavior
2992
3903
  - By default (dynamic: false), the value is read once at connect time and is not updated afterward
2993
3904
  - With { dynamic: true }, the property stays in sync when:
2994
3905
  - an ancestor changes the attribute value
2995
- - a closer ancestor gains the attribute (that value wins)
2996
- - the nearest ancestor loses the attribute (falls back to the next one up, or null)
3906
+ - a closer ancestor gains / loses the attribute (fallback / null)
3907
+ - the component is reparented (no extra opt-in) — parent childList only reacts if this node moves
3908
+ - Observers are shared (one per ancestor attribute / one per parent) so large lists of sonic-icon stay cheap on Firefox.
2997
3909
  - When dynamic is enabled, updates also propagate to @subscribe / @bind paths that depend on the decorated property (e.g. ${dataProvider})
2998
3910
 
2999
3911
  Dynamic mode
@@ -5260,7 +6172,7 @@ Introduction
5260
6172
  What is Concorde?
5261
6173
 
5262
6174
  Based on lit.dev, Concorde is a collection of web components for shared apps and websites.
5263
- Build UIs without tying components to a specific host stack, while keeping visual consistency through a small set of CSS variables.
6175
+ Build UIs without tying components to a specific host stack, while keeping visual consistency through the smallest set of CSS variables needed to define a theme.
5264
6176
 
5265
6177
  Why and use case
5266
6178
 
@@ -5301,91 +6213,242 @@ The starter runs yarn ai:sync for you. Details: AI agents (skills). Manual Vite
5301
6213
 
5302
6214
  ---
5303
6215
 
5304
- ## Adding styles
6216
+ ## Customization
5305
6217
 
5306
6218
  - URL: https://concorde.supersoniks.org/crawl/docs/_getting-started/theming.html
5307
6219
  - Doc ID: docs/_getting-started/theming
5308
- - Keywords: Concorde, supersoniks, docs/_getting-started/theming, theming, Adding styles, guide, , size, {reflect: true}, :host(), :host([type='primary']){...}, inline, block, display, contents
5309
-
5310
- Adding styles
5311
-
5312
- Normal Behavior
5313
-
5314
- No style crosses the shadow root of a component, except for inheritable properties (which have the "inherit" property possible) and CSS variables.
5315
- Properties integrated via a "slot" remain stylizable in a conventional way.
5316
-
5317
- - During creation / from the inside:
5318
- - We edit the static "styles" property of the lit component, which can also reference shared and dynamic styles.
5319
- These styles are scoped and do not impact the outside.
5320
- - We use CSS variables as the value of properties intended to be customized from the outside.
5321
- For each variable, we define a default value to have a simple but consistent base style.
5322
- - We only rewrite inheritable properties with hard values if they are truly specific to the component.
5323
- - The tag as a direct child can be used as a last resort, especially if there is a need for particularly dynamic customization. Performance is reduced.
5324
- - During use / from the outside:
5325
- We define values for inheritable CSS properties (e.g., font-\, color...) using tools like Tailwind.
5326
- We modify the value of CSS variables used by the component.
5327
-
5328
- Choosing Style Presets via Reactive Properties:
5329
-
5330
- The declaration of reactive properties is useful for selecting a particular configuration that mostly affects a set of properties.
5331
-
5332
- For example, a size property (xs, sm, md, xl) will affect margins, font, line heights to align them with the corresponding CSS vars, which can be customized using the methods mentioned earlier if necessary.
6220
+ - Keywords: Concorde, supersoniks, docs/_getting-started/theming, theming, Customization, guide, , :root, theme="custom", --sc-*, theme="light", "dark", "auto", auto, prefers-color-scheme
6221
+
6222
+ Customization
6223
+
6224
+ Theme-first customization
6225
+
6226
+ Concorde components ship with default styles (fallback values in each component and in ).
6227
+ You do not need to define any CSS variables to get a usable UI.
6228
+
6229
+ To align the kit with your brand, override only the essential theme tokens on , on :root, or in a project stylesheet.
6230
+ Concorde derives radius steps, button/input rounding, shadows, and most per-component layout from these primitives—do not copy long lists of derived variables unless you have a specific need.
6231
+
6232
+ import "@supersoniks/concorde/theme";
6233
+
6234
+ | Attribute | Effect |
6235
+ |-----------|--------|
6236
+ | (omit) \| theme="custom" | Default: core tokens + your --sc-; no built-in light/dark palette |
6237
+ | theme="light" \| "dark" \| "auto" | Opt-in presets; auto follows prefers-color-scheme |
6238
+ | class="bg-base block" (Tailwind) | Page/surface background (--sc-base) |
6239
+ | color | Text color (--sc-base-content) |
6240
+ | font | Base font family/weight (--sc-font-family-base, etc.) |
6241
+
6242
+ Popovers, modals, and toasts mount under the nearest .
6243
+
6244
+ Customization example
6245
+
6246
+ Example (full brand override on or :root). Set every essential token below; derived radii and shadows still come from the theme engine—only --sc-rounded is listed here.
6247
+
6248
+ sonic-theme {
6249
+ / Semantic fills /
6250
+ --sc-primary: #353429;
6251
+ --sc-secondary: #f43f5e;
6252
+ --sc-info: #7c3aed;
6253
+ --sc-danger: #d71839;
6254
+ --sc-warning: #f97316;
6255
+ --sc-success: #10b981;
6256
+ --sc-contrast: #111;
6257
+
6258
+ / Text/icons on semantic fills /
6259
+ --sc-primary-content: #fff;
6260
+ --sc-secondary-content: #fff;
6261
+ --sc-info-content: #fff;
6262
+ --sc-danger-content: #fff;
6263
+ --sc-warning-content: #fff;
6264
+ --sc-success-content: #fff;
6265
+ --sc-contrast-content: #fff;
6266
+
6267
+ / Neutral fills /
6268
+ --sc-base: #fff;
6269
+ --sc-base-50: #f6f6f5;
6270
+ --sc-base-100: #ededec;
6271
+ --sc-base-200: #d7d7d4;
6272
+ --sc-base-300: #c8c7c4;
6273
+ --sc-base-400: #a8a7a2;
6274
+ --sc-base-500: #94938c;
6275
+ --sc-base-600: #76756c;
6276
+ --sc-base-700: #59584e;
6277
+ --sc-base-800: #47463b;
6278
+ --sc-base-900: #353429;
6279
+
6280
+ / Text/icons on neutral surfaces /
6281
+ --sc-base-content: var(--sc-base-900);
6282
+
6283
+ / Typography /
6284
+ --sc-font-family-base: "Oswald", system-ui, -apple-system, "Segoe UI", Roboto,
6285
+ "Helvetica Neue", Arial, sans-serif;
6286
+ --sc-headings-font-family: "alternate-gothic-compressed", system-ui, sans-serif;
6287
+ --sc-headings-line-height: 1.1;
6288
+ --sc-headings-font-weight: bold;
6289
+ --sc-headings-text-transform: none;
6290
+
6291
+ / Shape (primitive only) /
6292
+ --sc-rounded: 0;
6293
+
6294
+ / Forms /
6295
+ --sc-border-width: 0.2rem;
6296
+ --sc-form-height: 2em;
6297
+ --sc-input-bg: var(--sc-base);
6298
+ --sc-input-color: var(--sc-base-content);
6299
+ --sc-input-border-color: var(--sc-input-color);
6300
+ --sc-input-active-bg: var(--sc-primary);
6301
+ --sc-input-active-color: var(--sc-primary-content);
6302
+ --sc-input-active-border-color: var(--sc-primary);
6303
+ }
5333
6304
 
5334
- It is recommended to use the {reflect: true} property for reactive properties that have an associated style on the :host(). For example: :host([type='primary']){...}
6305
+ Palette generator: concordecolors
5335
6306
 
5336
- ☢️ Caution: Passing class names via reactive properties / HTML attributes of the component should be avoided as it can quickly lead to difficult-to-manage situations.
6307
+ Without these overrides, components keep Concorde’s per-component fallbacks. Built-in light/dark palettes apply only when you set theme="light", theme="dark", or theme="auto".
5337
6308
 
5338
- CSS "display" Property
6309
+ What we intentionally avoid: large public --sc-alert- / --sc-badge- APIs or ::part() styling hooks on most components. Prefer attributes (type, status, size, …) and the theme tokens above.
5339
6310
 
5340
- By default, the display property is inline.
5341
- Therefore, be careful to define it according to the needs, as one might mistakenly expect it to be block as with a regular .
6311
+ Only essential CSS variables (public theme API)
5342
6312
 
5343
- ☢️ Caution: Defining the display property as contents may seem attractive at first, but:
6313
+ These are the smallest set we recommend customizing. Everything else should stay internal to the theme or to components (--sc private variables, attributes like type, size, variant).
5344
6314
 
5345
- - It almost always leads to the creation of wrappers to style the content (instead of using :host).
5346
- - It is no longer possible to directly add classes to the component or style it from the outside.
5347
- Ultimately, the amount of code to write increases significantly.
6315
+ Surfaces and foreground
5348
6316
 
5349
- TAILWIND Functional Classes
6317
+ Tokens without a -content suffix are fill / background colors.
6318
+ Tokens with -content are text and icons on top of the matching fill (solid buttons, badges, alerts, etc.).
5350
6319
 
5351
- tailwind has been integrated into Concorde and is available in scoped components (with Shadow DOM).
5352
- To use it, you need to import the following:
6320
+ Neutral fills
5353
6321
 
5354
- import { tailwind } from "@supersoniks/concorde/la-billetterie/ui/theme/theme";
6322
+ | Variable | Role |
6323
+ |----------|------|
6324
+ | --sc-base | Main surface / page background |
6325
+ | --sc-base-50 … --sc-base-900 | Neutral scale (borders, subtle backgrounds, muted UI) |
5355
6326
 
5356
- Then include the tailwind style in the static styles property of the component:
6327
+ Neutral foreground
5357
6328
 
5358
- static styles = [tailwind];
6329
+ | Variable | Role |
6330
+ |----------|------|
6331
+ | --sc-base-content | Default body text and icons on neutral surfaces |
5359
6332
 
5360
- Finally, use it in the HTML within the render function:
6333
+ Semantic fills
5361
6334
 
5362
- A paragraph with margin
6335
+ | Variable | Role |
6336
+ |----------|------|
6337
+ | --sc-primary | Primary actions, links, emphasis |
6338
+ | --sc-secondary | Secondary brand accent (when used) |
6339
+ | --sc-info, --sc-success, --sc-warning, --sc-danger | Status and feedback |
6340
+ | --sc-contrast | High-contrast fills (e.g. on media) |
5363
6341
 
5364
- The colors from Concorde's theme are referenced in Tailwind's theme.
6342
+ Semantic foreground
5365
6343
 
5366
- Operation without Shadow DOM
6344
+ | Variable | Role |
6345
+ |----------|------|
6346
+ | --sc-primary-content, --sc-secondary-content, … | Text/icons on the matching semantic fill (--sc-primary, etc.) |
5367
6347
 
5368
- Usefulness
6348
+ Shape
5369
6349
 
5370
- This operation is particularly useful when it comes to adding behavior to a simple existing element.
5371
- It may also become necessary to establish compatibility with a traditional JS library.
6350
+ | Variable | Role |
6351
+ |----------|------|
6352
+ | --sc-rounded | Single primitive corner radius; the theme computes --sc-rounded-sm, --sc-btn-rounded, --sc-input-rounded, etc. |
5372
6353
 
5373
- For example, with a text input:
6354
+ Typography
5374
6355
 
5375
- - Trigger automatic data or filter update when typing text.
5376
- - Automatic formatting.
5377
- - Constraints that cannot be handled by native methods.
6356
+ | Variable | Role |
6357
+ |----------|------|
6358
+ | --sc-font-family-base | Body UI text |
6359
+ | --sc-font-weight-base, --sc-font-style-base | Optional |
6360
+ | --sc-headings-font-family, --sc-headings-line-height, --sc-headings-font-weight, --sc-headings-text-transform | Headings (modal titles, etc.) |
5378
6361
 
5379
- Consequences
6362
+ Forms (only if you customize inputs globally)
5380
6363
 
5381
- If there is no shadow DOM (see the noShadowDom property of Subscriber):
6364
+ Interactive controls expose a few extra theme-level tokens; prefer these over styling individual inputs from outside.
5382
6365
 
5383
- - Styling using the static "styles" property of the lit component will not be applied.
5384
- - The element and its content can be styled in a traditional manner.
6366
+ | Variable | Role |
6367
+ |----------|------|
6368
+ | --sc-border-width | Default border thickness |
6369
+ | --sc-form-height | Control height |
6370
+ | --sc-input-bg, --sc-input-color, --sc-input-border-color | Default field chrome |
6371
+ | --sc-input-active-bg, --sc-input-active-color, --sc-input-active-border-color | Focus/active state |
5385
6372
 
5386
- For example, the components queue, list, and fetch do not have a shadow DOM.
6373
+ ---
5387
6374
 
5388
- ℹ️ Note: Specifically in this case, it may be useful to set the display property to contents.
6375
+ Tailwind in new components ?
6376
+
6377
+ Set tailwind.config.js to match concorde style token in your custom component.
6378
+
6379
+ ...
6380
+ theme: {
6381
+ borderRadius: {
6382
+ DEFAULT: "var(--sc-rounded)",
6383
+ none: "0",
6384
+ sm: "var(--sc-rounded-sm)",
6385
+ md: "var(--sc-rounded-md)",
6386
+ lg: "var(--sc-rounded-lg)",
6387
+ xl: "var(--sc-rounded-xl)",
6388
+ full: "9999px",
6389
+ },
6390
+ boxShadow: {
6391
+ DEFAULT: "var(--sc-shadow)",
6392
+ none: "none",
6393
+ sm: "var(--sc-shadow-sm)",
6394
+ md: "var(--sc-shadow-md)",
6395
+ lg: "var(--sc-shadow-lg)",
6396
+ xl: "var(--sc-shadow-xl)",
6397
+ },
6398
+ colors: {
6399
+ transparent: "transparent",
6400
+ current: "currentColor",
6401
+ content: "var(--sc-base-content)",
6402
+ base: "var(--sc-base)",
6403
+ neutral: {
6404
+ 0: "var(--sc-base)",
6405
+ 50: "var(--sc-base-50)",
6406
+ 100: "var(--sc-base-100)",
6407
+ 200: "var(--sc-base-200)",
6408
+ 300: "var(--sc-base-300)",
6409
+ 400: "var(--sc-base-400)",
6410
+ 500: "var(--sc-base-500)",
6411
+ 600: "var(--sc-base-600)",
6412
+ 700: "var(--sc-base-700)",
6413
+ 800: "var(--sc-base-800)",
6414
+ 900: "var(--sc-base-900)",
6415
+ content: "var(--sc-base)",
6416
+ },
6417
+ primary: {
6418
+ DEFAULT: "var(--sc-primary)",
6419
+ content: "var(--sc-primary-content)",
6420
+ },
6421
+ success: {
6422
+ DEFAULT: "var(--sc-success)",
6423
+ content: "var(--sc-success-content)",
6424
+ },
6425
+ danger: {
6426
+ DEFAULT: "var(--sc-danger)",
6427
+ content: "var(--sc-danger-content)",
6428
+ },
6429
+ warning: {
6430
+ DEFAULT: "var(--sc-warning)",
6431
+ content: "var(--sc-warning-content)",
6432
+ },
6433
+ info: {
6434
+ DEFAULT: "var(--sc-info)",
6435
+ content: "var(--sc-info-content)",
6436
+ },
6437
+ contrast: {
6438
+ DEFAULT: "var(--sc-contrast)",
6439
+ content: "var(--sc-contrast-content)",
6440
+ },
6441
+ },
6442
+ extend: {
6443
+ borderWidth: {
6444
+ DEFAULT: "var(--sc-border-width)",
6445
+ },
6446
+ fontFamily: {
6447
+ headings: ["var(--sc-headings-font-family, var(--sc-font-family-base, sans-serif))"],
6448
+ body: ["var(--sc-font-family-base)"],
6449
+ monospace: ["var(--sc-font-family-monospace, monospace)"],
6450
+ }
6451
+ }
5389
6452
 
5390
6453
  ---
5391
6454