@slotted/react 0.1.0-beta.2 → 0.1.0-beta.3

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 (252) hide show
  1. package/dist/{action-bar-C7cGnEyJ.js → action-bar-OACchRZw.js} +1 -1
  2. package/dist/action-bar.js +1 -1
  3. package/dist/{action-sheet-DgwzC3iY.js → action-sheet-C60BWUW8.js} +1 -1
  4. package/dist/action-sheet.js +1 -1
  5. package/dist/{app-shell-CXwma4XA.js → app-shell-CmYvnu_7.js} +310 -310
  6. package/dist/app-shell.js +1 -1
  7. package/dist/button-Db9f3Bxn.js +99 -0
  8. package/dist/button.js +2 -2
  9. package/dist/cascader-D1AhTyBL.js +1097 -0
  10. package/dist/cascader.js +1 -1
  11. package/dist/{chart-Gb_P3Kdq.js → chart-O0ZhkzJe.js} +381 -374
  12. package/dist/chart.js +1 -1
  13. package/dist/{checkbox-CwUOc-3u.js → checkbox-DfxFHZaU.js} +3 -3
  14. package/dist/{checkbox-group-BYTjgAcX.js → checkbox-group-9sDgrV5Z.js} +2 -2
  15. package/dist/checkbox-group.js +1 -1
  16. package/dist/checkbox.js +1 -1
  17. package/dist/{color-picker-BlPR4g4H.js → color-picker-CwbWzCKg.js} +4 -4
  18. package/dist/color-picker.js +1 -1
  19. package/dist/{column-manager-B7_a_jDK.js → column-manager-CTtizVhm.js} +6 -6
  20. package/dist/column-manager.js +1 -1
  21. package/dist/{combobox-C66dNlMR.js → combobox-BVMI9lg8.js} +266 -266
  22. package/dist/combobox.js +1 -1
  23. package/dist/{command-palette-BqRyNR9Y.js → command-palette-DFLbSOiv.js} +1 -1
  24. package/dist/command-palette.js +1 -1
  25. package/dist/{context-menu-DMiHdggw.js → context-menu-BuST6W94.js} +1 -1
  26. package/dist/context-menu.js +1 -1
  27. package/dist/currency-field-DD9A5U3D.js +455 -0
  28. package/dist/currency-field.js +1 -1
  29. package/dist/{dashboard-grid-CKdyO4j6.js → dashboard-grid-CBMP_-JV.js} +2 -2
  30. package/dist/dashboard-grid.js +1 -1
  31. package/dist/{data-grid-rWMDNl-6.js → data-grid-BKaGMqIm.js} +19 -19
  32. package/dist/data-grid.js +1 -1
  33. package/dist/{data-list-2xfDpHVC.js → data-list-oICmxGkA.js} +5 -5
  34. package/dist/data-list.js +1 -1
  35. package/dist/{date-field-D_kLLTfL.js → date-field-CYcN6diW.js} +1 -1
  36. package/dist/date-field.js +1 -1
  37. package/dist/date-picker-4X-_2ltN.js +264 -0
  38. package/dist/date-picker.js +1 -1
  39. package/dist/date-range-picker-CNOAtHwU.js +471 -0
  40. package/dist/date-range-picker.js +1 -1
  41. package/dist/{datetime-field-T1gNdJ7t.js → datetime-field-B8TrmsDK.js} +1 -1
  42. package/dist/datetime-field.js +1 -1
  43. package/dist/datetime-picker-HDVlUhzy.js +629 -0
  44. package/dist/datetime-picker.js +1 -1
  45. package/dist/datetime-range-picker-IqOFJtdW.js +994 -0
  46. package/dist/datetime-range-picker.js +1 -1
  47. package/dist/{dialog-Dmy-m_pe.js → dialog-BHYDDj1S.js} +112 -113
  48. package/dist/dialog.js +1 -1
  49. package/dist/docs/app-shell.json +1 -1
  50. package/dist/docs/button-group.json +1 -0
  51. package/dist/docs/button-group.md +1 -1
  52. package/dist/docs/button.json +45 -11
  53. package/dist/docs/button.md +10 -6
  54. package/dist/docs/chart.json +7 -0
  55. package/dist/docs/chart.md +1 -0
  56. package/dist/docs/currency-field.json +32 -1
  57. package/dist/docs/currency-field.md +4 -1
  58. package/dist/docs/dialog.examples.md +26 -0
  59. package/dist/docs/dialog.json +14 -2
  60. package/dist/docs/dialog.md +1 -1
  61. package/dist/docs/list.json +26 -1
  62. package/dist/docs/list.md +4 -1
  63. package/dist/docs/popover.json +1 -1
  64. package/dist/docs/segmented-control.json +29 -1
  65. package/dist/docs/segmented-control.md +17 -1
  66. package/dist/docs/side-navigation.json +2 -2
  67. package/dist/docs/side-navigation.md +19 -4
  68. package/dist/docs/skills/theme-app/SKILL.md +5 -0
  69. package/dist/docs/split-button.json +1 -0
  70. package/dist/docs/split-button.md +1 -1
  71. package/dist/docs/stat-card.json +1 -0
  72. package/dist/docs/stat-card.md +1 -1
  73. package/dist/docs/table.examples.md +1 -1
  74. package/dist/docs/table.json +78 -2
  75. package/dist/docs/table.md +12 -1
  76. package/dist/docs/tabs.examples.md +1 -1
  77. package/dist/docs/tabs.json +1 -1
  78. package/dist/docs/toggle-group.json +14 -3
  79. package/dist/docs/toggle-group.md +3 -3
  80. package/dist/docs/toggle.json +12 -3
  81. package/dist/docs/toggle.md +3 -3
  82. package/dist/docs/tokens.md +25 -1
  83. package/dist/docs/top-navigation.examples.md +23 -5
  84. package/dist/docs/top-navigation.json +2 -2
  85. package/dist/docs/tour.json +1 -1
  86. package/dist/drawer-LXM44eso.js +757 -0
  87. package/dist/drawer.js +1 -1
  88. package/dist/entity-picker-CPDd73JR.js +1110 -0
  89. package/dist/entity-picker.js +1 -1
  90. package/dist/{event-calendar-DYjVwTI6.js → event-calendar-CnF3iIZD.js} +5 -5
  91. package/dist/event-calendar.js +1 -1
  92. package/dist/{field-BJh5HI7w.js → field-NJaCxl2h.js} +1 -1
  93. package/dist/{field-group-BDaspQPh.js → field-group-hAzVa2O9.js} +1 -1
  94. package/dist/field-group.js +1 -1
  95. package/dist/field.js +1 -1
  96. package/dist/{filter-bar-Bh7cbqDE.js → filter-bar-D_xDcAp2.js} +20 -20
  97. package/dist/filter-bar.js +1 -1
  98. package/dist/{hover-card-CSDbA6zd.js → hover-card-BJE5dtaQ.js} +1 -1
  99. package/dist/hover-card.js +1 -1
  100. package/dist/{icon-button-TnvMhK4o.js → icon-button-CCWkCDMs.js} +26 -24
  101. package/dist/import-export-center-DpY2DGBZ.js +813 -0
  102. package/dist/import-export-center.js +1 -1
  103. package/dist/index.js +85 -84
  104. package/dist/{list-C1Y8MWp2.js → list-WsQ6ZzCa.js} +16 -12
  105. package/dist/{list-item-DN_mcouU.js → list-item-DpCwZIrd.js} +1 -1
  106. package/dist/list-item.js +1 -1
  107. package/dist/list.js +1 -1
  108. package/dist/{listbox-4WvqR0JF.js → listbox-Dv856z9I.js} +1 -1
  109. package/dist/listbox.js +1 -1
  110. package/dist/{loading-overlay-B83XFctM.js → loading-overlay-COfnckse.js} +73 -73
  111. package/dist/loading-overlay.js +1 -1
  112. package/dist/{markdown-CpfDn1LF.js → markdown-CeG8mUbI.js} +2 -2
  113. package/dist/markdown.js +1 -1
  114. package/dist/menu-parts-W58pVNUt.js +786 -0
  115. package/dist/menu.js +1 -1
  116. package/dist/{menubar-CtGavUTO.js → menubar-b2CruimJ.js} +1 -1
  117. package/dist/menubar.js +1 -1
  118. package/dist/{multi-select-B-tuIwAu.js → multi-select-DQ5ds0fX.js} +390 -390
  119. package/dist/multi-select.js +1 -1
  120. package/dist/{notification-center-C4pEHJ3h.js → notification-center-Sz54IziY.js} +2 -2
  121. package/dist/notification-center.js +1 -1
  122. package/dist/{number-field-J_koud1r.js → number-field-BFIAmv-z.js} +1 -1
  123. package/dist/number-field.js +1 -1
  124. package/dist/{otp-input-Bf8JUiVR.js → otp-input-BNQhuKaT.js} +1 -1
  125. package/dist/otp-input.js +1 -1
  126. package/dist/popover-Be7JWbGJ.js +475 -0
  127. package/dist/popover.js +1 -1
  128. package/dist/press-selection-DjOllE2B.js +29 -0
  129. package/dist/press-selection.js +2 -0
  130. package/dist/{prompt-composer-B7MMcER0.js → prompt-composer-BxpdkTpZ.js} +1 -1
  131. package/dist/prompt-composer.js +1 -1
  132. package/dist/{radio-group-BFpjhDkV.js → radio-group-BaVIP9UH.js} +2 -2
  133. package/dist/radio-group.js +1 -1
  134. package/dist/{rating-D1EsADFM.js → rating-DYBQBzwB.js} +1 -1
  135. package/dist/rating.js +1 -1
  136. package/dist/{saved-views-BueW-Lyb.js → saved-views-DlE_--Z9.js} +5 -5
  137. package/dist/saved-views.js +1 -1
  138. package/dist/{segmented-control-Cy_5D3Nj.js → segmented-control-DmuOGiu6.js} +28 -24
  139. package/dist/segmented-control.js +1 -1
  140. package/dist/{select-hRFp8nCj.js → select-DOFqPy26.js} +273 -273
  141. package/dist/select.js +1 -1
  142. package/dist/{side-navigation-YUiJRpng.js → side-navigation-CBLtCzuJ.js} +186 -187
  143. package/dist/side-navigation.js +1 -1
  144. package/dist/{slider-B432T6nD.js → slider-DTes4HLF.js} +1 -1
  145. package/dist/slider.js +1 -1
  146. package/dist/{split-button-DHF3v3PJ.js → split-button-CPgHiy9G.js} +2 -2
  147. package/dist/split-button.js +1 -1
  148. package/dist/styles.css +1 -1
  149. package/dist/{switch-4MHwKmkz.js → switch-DQzuIhPX.js} +1 -1
  150. package/dist/switch.js +1 -1
  151. package/dist/{table-Bd79IwDC.js → table-Cipi2c5X.js} +206 -173
  152. package/dist/table.js +2 -2
  153. package/dist/{tags-input-DLdHLWrH.js → tags-input-CcOkm0AW.js} +1 -1
  154. package/dist/tags-input.js +1 -1
  155. package/dist/{text-field-BktZbmzD.js → text-field-DLfIZ0fk.js} +1 -1
  156. package/dist/text-field.js +1 -1
  157. package/dist/{textarea-JAK2RJl0.js → textarea-CBJBJBi6.js} +1 -1
  158. package/dist/textarea.js +1 -1
  159. package/dist/{time-field-DCG_VtGO.js → time-field-DrhiCtUl.js} +1 -1
  160. package/dist/time-field.js +1 -1
  161. package/dist/{time-picker-DuT1tf5-.js → time-picker-CRQsMJbQ.js} +102 -102
  162. package/dist/time-picker.js +1 -1
  163. package/dist/{time-range-picker-HwBvrrXN.js → time-range-picker-DlZJsj1e.js} +202 -202
  164. package/dist/time-range-picker.js +1 -1
  165. package/dist/{toast-wI8BtPY5.js → toast-Bf3e0AgC.js} +157 -157
  166. package/dist/toast.js +1 -1
  167. package/dist/toggle-group-7iBR9Rn1.js +142 -0
  168. package/dist/toggle-group.js +1 -1
  169. package/dist/{toolbar-CDQTydDx.js → toolbar-DDZpEftQ.js} +1 -1
  170. package/dist/toolbar.js +1 -1
  171. package/dist/{tooltip-BggqPDcW.js → tooltip-DbKTPe_i.js} +108 -109
  172. package/dist/tooltip.js +1 -1
  173. package/dist/{top-navigation-COQZsNqW.js → top-navigation-e-tWMGNr.js} +255 -256
  174. package/dist/top-navigation.js +1 -1
  175. package/dist/{tour-C11DmYTC.js → tour-BTdt716T.js} +180 -180
  176. package/dist/tour.js +1 -1
  177. package/dist/{transfer-JA9TWjAw.js → transfer-CqZOTLMP.js} +6 -6
  178. package/dist/transfer.js +1 -1
  179. package/dist/types/app-shell/app-shell.d.ts.map +1 -1
  180. package/dist/types/button/button-link.d.ts +1 -1
  181. package/dist/types/button/button-link.d.ts.map +1 -1
  182. package/dist/types/button/button-root.d.ts +5 -3
  183. package/dist/types/button/button-root.d.ts.map +1 -1
  184. package/dist/types/button/button.constants.d.ts +2 -1
  185. package/dist/types/button/button.constants.d.ts.map +1 -1
  186. package/dist/types/button/button.d.ts +1 -1
  187. package/dist/types/button/button.d.ts.map +1 -1
  188. package/dist/types/button/button.types.d.ts +9 -2
  189. package/dist/types/button/button.types.d.ts.map +1 -1
  190. package/dist/types/button/index.d.ts +1 -1
  191. package/dist/types/button/index.d.ts.map +1 -1
  192. package/dist/types/button/toggle-button.d.ts +1 -1
  193. package/dist/types/button/toggle-button.d.ts.map +1 -1
  194. package/dist/types/chart/chart.d.ts.map +1 -1
  195. package/dist/types/currency-field/currency-field.d.ts +1 -1
  196. package/dist/types/currency-field/currency-field.d.ts.map +1 -1
  197. package/dist/types/currency-field/currency-field.types.d.ts +14 -0
  198. package/dist/types/currency-field/currency-field.types.d.ts.map +1 -1
  199. package/dist/types/currency-field/index.d.ts +1 -1
  200. package/dist/types/currency-field/index.d.ts.map +1 -1
  201. package/dist/types/dialog/dialog-demo.d.ts +8 -0
  202. package/dist/types/dialog/dialog-demo.d.ts.map +1 -1
  203. package/dist/types/filter-bar/filter-bar.d.ts.map +1 -1
  204. package/dist/types/index.d.ts +1 -0
  205. package/dist/types/index.d.ts.map +1 -1
  206. package/dist/types/list/index.d.ts +1 -1
  207. package/dist/types/list/index.d.ts.map +1 -1
  208. package/dist/types/list/list-parts.d.ts +1 -1
  209. package/dist/types/list/list-parts.d.ts.map +1 -1
  210. package/dist/types/list/list.types.d.ts +12 -0
  211. package/dist/types/list/list.types.d.ts.map +1 -1
  212. package/dist/types/press-selection/index.d.ts +3 -0
  213. package/dist/types/press-selection/index.d.ts.map +1 -0
  214. package/dist/types/press-selection/press-selection.d.ts +23 -0
  215. package/dist/types/press-selection/press-selection.d.ts.map +1 -0
  216. package/dist/types/segmented-control/index.d.ts +1 -1
  217. package/dist/types/segmented-control/index.d.ts.map +1 -1
  218. package/dist/types/segmented-control/segmented-control-defaults.d.ts.map +1 -1
  219. package/dist/types/segmented-control/segmented-control.d.ts +1 -1
  220. package/dist/types/segmented-control/segmented-control.d.ts.map +1 -1
  221. package/dist/types/segmented-control/segmented-control.types.d.ts +10 -0
  222. package/dist/types/segmented-control/segmented-control.types.d.ts.map +1 -1
  223. package/dist/types/table/index.d.ts +2 -2
  224. package/dist/types/table/index.d.ts.map +1 -1
  225. package/dist/types/table/table-parts.d.ts +8 -2
  226. package/dist/types/table/table-parts.d.ts.map +1 -1
  227. package/dist/types/table/table.types.d.ts +28 -1
  228. package/dist/types/table/table.types.d.ts.map +1 -1
  229. package/dist/types/toggle/toggle.types.d.ts +1 -1
  230. package/dist/types/toggle/toggle.types.d.ts.map +1 -1
  231. package/dist/types/toggle-group/toggle-group.d.ts.map +1 -1
  232. package/dist/types/toggle-group/toggle-group.types.d.ts +6 -1
  233. package/dist/types/toggle-group/toggle-group.types.d.ts.map +1 -1
  234. package/dist/{upload-Bq_UiyMr.js → upload-DjnlVR8y.js} +2 -2
  235. package/dist/upload.js +1 -1
  236. package/dist/{wizard-B4GrlEqh.js → wizard-BxA08vXt.js} +1 -1
  237. package/dist/wizard.js +1 -1
  238. package/package.json +12 -7
  239. package/dist/button-DakQ-7Tm.js +0 -97
  240. package/dist/cascader-CARCYdHh.js +0 -1097
  241. package/dist/currency-field-B7OZ0hk7.js +0 -436
  242. package/dist/date-picker-DQ5SIhdA.js +0 -264
  243. package/dist/date-range-picker-lpB08hK_.js +0 -471
  244. package/dist/datetime-picker-0F0kDW-8.js +0 -629
  245. package/dist/datetime-range-picker-ClnEleth.js +0 -994
  246. package/dist/drawer-Dtospdqk.js +0 -758
  247. package/dist/entity-picker-Dm-y0RNE.js +0 -1111
  248. package/dist/import-export-center-CkZ_Ar9w.js +0 -813
  249. package/dist/menu-parts-BQej6eU9.js +0 -787
  250. package/dist/popover-DE22lSpV.js +0 -476
  251. package/dist/react-dom-DzrKNxo6.js +0 -273
  252. package/dist/toggle-group-DQBlI1TV.js +0 -140
@@ -19,6 +19,10 @@
19
19
  "condense": [
20
20
  "none",
21
21
  "icons"
22
+ ],
23
+ "variant": [
24
+ "track",
25
+ "underline"
22
26
  ]
23
27
  },
24
28
  "members": {
@@ -29,7 +33,8 @@
29
33
  "orientation": "horizontal",
30
34
  "condense": "none",
31
35
  "fullWidth": false,
32
- "disabled": false
36
+ "disabled": false,
37
+ "variant": "track"
33
38
  },
34
39
  "capabilities": [
35
40
  "selection",
@@ -143,6 +148,13 @@
143
148
  "appliesTo": "SegmentedControl",
144
149
  "description": "How the segments flow and which way the thumb travels. A horizontal set writes aria-orientation, because radiogroup already implies vertical"
145
150
  },
151
+ {
152
+ "name": "variant",
153
+ "type": "'track' | 'underline'",
154
+ "defaultValue": "track",
155
+ "appliesTo": "SegmentedControl",
156
+ "description": "How the choice is drawn: a track with a thumb, or the words alone with the chosen one underlined"
157
+ },
146
158
  {
147
159
  "name": "condense",
148
160
  "type": "'none' | 'icons'",
@@ -269,6 +281,7 @@
269
281
  },
270
282
  "tokens": [
271
283
  "--slotted-border-subtle",
284
+ "--slotted-border-width-thick",
272
285
  "--slotted-control-border-color",
273
286
  "--slotted-control-border-width",
274
287
  "--slotted-control-font-family",
@@ -304,7 +317,9 @@
304
317
  "--slotted-easing-standard",
305
318
  "--slotted-focus-ring-color",
306
319
  "--slotted-focus-ring-color-invalid",
320
+ "--slotted-focus-ring-offset",
307
321
  "--slotted-focus-ring-width",
322
+ "--slotted-font-weight-medium",
308
323
  "--slotted-radius-xs",
309
324
  "--slotted-segmented-control-active-background",
310
325
  "--slotted-segmented-control-background",
@@ -324,9 +339,14 @@
324
339
  "--slotted-segmented-control-invalid-focus-ring-color",
325
340
  "--slotted-segmented-control-radius",
326
341
  "--slotted-segmented-control-shadow",
342
+ "--slotted-segmented-control-underline-checked-color",
343
+ "--slotted-segmented-control-underline-color",
344
+ "--slotted-segmented-control-underline-gap",
327
345
  "--slotted-space-1",
346
+ "--slotted-space-6",
328
347
  "--slotted-target-min",
329
348
  "--slotted-text",
349
+ "--slotted-text-muted",
330
350
  "--slotted-tone-accent-border",
331
351
  "--slotted-tone-accent-subtle-active",
332
352
  "--slotted-tone-accent-text",
@@ -375,6 +395,14 @@
375
395
  "source": "<SegmentedControl aria-label=\"Alinhamento\" defaultValue=\"center\">\n <Segment aria-label=\"Início\" icon={<AlignStartIcon />} value=\"start\" />\n <Segment aria-label=\"Centro\" icon={<AlignCenterIcon />} value=\"center\" />\n</SegmentedControl>;\n",
376
396
  "verdict": "excerpt"
377
397
  },
398
+ {
399
+ "id": "variants",
400
+ "title": "A track, or the words alone",
401
+ "note": "underline draws the same radio group as words: each as wide as itself, the chosen one in the text colour and underlined, the others muted. One tab stop, the arrows move the value, and inside a field the label names the set.",
402
+ "language": "tsx",
403
+ "source": "<SegmentedControl aria-label=\"Período\" defaultValue=\"month\" variant=\"underline\">\n <Segment value=\"day\">Dia</Segment>\n <Segment value=\"week\">Semana</Segment>\n <Segment value=\"month\">Mês</Segment>\n</SegmentedControl>;\n",
404
+ "verdict": "excerpt"
405
+ },
378
406
  {
379
407
  "id": "condense",
380
408
  "title": "Narrower than its words",
@@ -41,6 +41,7 @@ Excerpt — not a complete module
41
41
  | `name` | `string` | — | SegmentedControl | The submission name the segments share, and the reason the platform treats them as one radio group. Generated when none is written, and the cost is that such a control submits under a generated key |
42
42
  | `size` | `'sm' \| 'md' \| 'lg'` | md | SegmentedControl | The control step. The track measures its segments back from it, so the whole control is exactly as tall as the field beside it |
43
43
  | `orientation` | `'horizontal' \| 'vertical'` | horizontal | SegmentedControl | How the segments flow and which way the thumb travels. A horizontal set writes aria-orientation, because radiogroup already implies vertical |
44
+ | `variant` | `'track' \| 'underline'` | track | SegmentedControl | How the choice is drawn: a track with a thumb, or the words alone with the chosen one underlined |
44
45
  | `condense` | `'none' \| 'icons'` | none | SegmentedControl | What the control does when it is narrower than its labels need. icons keeps the marks and hides the words, and makes the control take its parent’s width so there is a width to ask a question about |
45
46
  | `fullWidth` | `boolean` | false | SegmentedControl | Whether the equal columns spread across the whole line. Left alone every column is the widest label’s |
46
47
  | `disabled` | `boolean` | false | SegmentedControl | Unstated rather than false, so the control defers to the field around it. Stated, it reaches every radio as the native attribute, which is also what makes the browser skip it with the arrows |
@@ -70,6 +71,7 @@ Excerpt — not a complete module
70
71
  | `size` | `sm`, `md`, `lg` | `md` |
71
72
  | `orientation` | `horizontal`, `vertical` | `horizontal` |
72
73
  | `condense` | `none`, `icons` | `none` |
74
+ | `variant` | `track`, `underline` | `track` |
73
75
 
74
76
  ## Rules
75
77
 
@@ -83,7 +85,7 @@ Excerpt — not a complete module
83
85
 
84
86
  ## Tokens
85
87
 
86
- `--slotted-border-subtle`, `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-font-family`, `--slotted-control-font-size-lg`, `--slotted-control-font-size-md`, `--slotted-control-font-size-sm`, `--slotted-control-font-weight`, `--slotted-control-gap-lg`, `--slotted-control-gap-md`, `--slotted-control-gap-sm`, `--slotted-control-height-lg`, `--slotted-control-height-md`, `--slotted-control-height-sm`, `--slotted-control-icon-size-lg`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-control-invalid-edge-width`, `--slotted-control-letter-spacing`, `--slotted-control-line-height`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-surface`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-duration-instant`, `--slotted-duration-medium`, `--slotted-easing-standard`, `--slotted-focus-ring-color`, `--slotted-focus-ring-color-invalid`, `--slotted-focus-ring-width`, `--slotted-radius-xs`, `--slotted-segmented-control-active-background`, `--slotted-segmented-control-background`, `--slotted-segmented-control-border-color`, `--slotted-segmented-control-checked-color`, `--slotted-segmented-control-color`, `--slotted-segmented-control-disabled-border-color`, `--slotted-segmented-control-disabled-color`, `--slotted-segmented-control-disabled-indicator-background`, `--slotted-segmented-control-divider-color`, `--slotted-segmented-control-hover-background`, `--slotted-segmented-control-indicator-background`, `--slotted-segmented-control-indicator-border-color`, `--slotted-segmented-control-inset`, `--slotted-segmented-control-invalid-border-color`, `--slotted-segmented-control-invalid-edge-width`, `--slotted-segmented-control-invalid-focus-ring-color`, `--slotted-segmented-control-radius`, `--slotted-segmented-control-shadow`, `--slotted-space-1`, `--slotted-target-min`, `--slotted-text`, `--slotted-tone-accent-border`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-text`, `--slotted-tone-danger-border`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
88
+ `--slotted-border-subtle`, `--slotted-border-width-thick`, `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-font-family`, `--slotted-control-font-size-lg`, `--slotted-control-font-size-md`, `--slotted-control-font-size-sm`, `--slotted-control-font-weight`, `--slotted-control-gap-lg`, `--slotted-control-gap-md`, `--slotted-control-gap-sm`, `--slotted-control-height-lg`, `--slotted-control-height-md`, `--slotted-control-height-sm`, `--slotted-control-icon-size-lg`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-control-invalid-edge-width`, `--slotted-control-letter-spacing`, `--slotted-control-line-height`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-surface`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-duration-instant`, `--slotted-duration-medium`, `--slotted-easing-standard`, `--slotted-focus-ring-color`, `--slotted-focus-ring-color-invalid`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-font-weight-medium`, `--slotted-radius-xs`, `--slotted-segmented-control-active-background`, `--slotted-segmented-control-background`, `--slotted-segmented-control-border-color`, `--slotted-segmented-control-checked-color`, `--slotted-segmented-control-color`, `--slotted-segmented-control-disabled-border-color`, `--slotted-segmented-control-disabled-color`, `--slotted-segmented-control-disabled-indicator-background`, `--slotted-segmented-control-divider-color`, `--slotted-segmented-control-hover-background`, `--slotted-segmented-control-indicator-background`, `--slotted-segmented-control-indicator-border-color`, `--slotted-segmented-control-inset`, `--slotted-segmented-control-invalid-border-color`, `--slotted-segmented-control-invalid-edge-width`, `--slotted-segmented-control-invalid-focus-ring-color`, `--slotted-segmented-control-radius`, `--slotted-segmented-control-shadow`, `--slotted-segmented-control-underline-checked-color`, `--slotted-segmented-control-underline-color`, `--slotted-segmented-control-underline-gap`, `--slotted-space-1`, `--slotted-space-6`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-text`, `--slotted-tone-danger-border`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
87
89
 
88
90
  ## Examples
89
91
 
@@ -143,6 +145,20 @@ Excerpt — not a complete module
143
145
  </SegmentedControl>;
144
146
  ```
145
147
 
148
+ ### A track, or the words alone
149
+
150
+ underline draws the same radio group as words: each as wide as itself, the chosen one in the text colour and underlined, the others muted. One tab stop, the arrows move the value, and inside a field the label names the set.
151
+
152
+ Excerpt — not a complete module
153
+
154
+ ```tsx
155
+ <SegmentedControl aria-label="Período" defaultValue="month" variant="underline">
156
+ <Segment value="day">Dia</Segment>
157
+ <Segment value="week">Semana</Segment>
158
+ <Segment value="month">Mês</Segment>
159
+ </SegmentedControl>;
160
+ ```
161
+
146
162
  ### Narrower than its words
147
163
 
148
164
  Below the width its labels need, a control told to condense keeps its marks and hides its words — hidden, never removed, so every segment is announced the same at every width.
@@ -553,9 +553,9 @@
553
553
  {
554
554
  "id": "current",
555
555
  "title": "Where the reader is",
556
- "note": "value on the root names the destination and a press asks it to move; a link that states current itself wins. The parent of a hidden destination is marked until its group opens, and autoExpand opens it.",
556
+ "note": "value on the root names the destination and a press asks it to move; a link that states current itself wins. The parent of a hidden destination is marked until its group opens, and autoExpand opens it. With a router, usePressSelection paints the press before the route renders: the item is current at once, and the navigation runs after the frame that shows it. A click carrying a modifier key is left to the browser.",
557
557
  "language": "tsx",
558
- "source": "const [value, setValue] = useState<string | null>('orders');\n\n<SideNavigation value={value} onValueChange={(next) => setValue(next)}>\n …\n</SideNavigation>;\n",
558
+ "source": "const { pathname } = useLocation();\nconst navigate = useNavigate();\nconst { selected, select } = usePressSelection(pathname);\n\nconst press = (to: string) => (event: MouseEvent) => {\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return;\n }\n event.preventDefault();\n select(to, () => navigate(to));\n};\n\n<SideNavigation value={selected ?? null}>\n …\n <SideNavigationItem value=\"/orders\">\n <SideNavigationLink href=\"/orders\" onClick={press('/orders')}>\n Orders\n </SideNavigationLink>\n </SideNavigationItem>\n</SideNavigation>;\n",
559
559
  "verdict": "excerpt"
560
560
  },
561
561
  {
@@ -272,15 +272,30 @@ Excerpt — not a complete module
272
272
 
273
273
  ### Where the reader is
274
274
 
275
- value on the root names the destination and a press asks it to move; a link that states current itself wins. The parent of a hidden destination is marked until its group opens, and autoExpand opens it.
275
+ value on the root names the destination and a press asks it to move; a link that states current itself wins. The parent of a hidden destination is marked until its group opens, and autoExpand opens it. With a router, usePressSelection paints the press before the route renders: the item is current at once, and the navigation runs after the frame that shows it. A click carrying a modifier key is left to the browser.
276
276
 
277
277
  Excerpt — not a complete module
278
278
 
279
279
  ```tsx
280
- const [value, setValue] = useState<string | null>('orders');
281
-
282
- <SideNavigation value={value} onValueChange={(next) => setValue(next)}>
280
+ const { pathname } = useLocation();
281
+ const navigate = useNavigate();
282
+ const { selected, select } = usePressSelection(pathname);
283
+
284
+ const press = (to: string) => (event: MouseEvent) => {
285
+ if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
286
+ return;
287
+ }
288
+ event.preventDefault();
289
+ select(to, () => navigate(to));
290
+ };
291
+
292
+ <SideNavigation value={selected ?? null}>
283
293
  …
294
+ <SideNavigationItem value="/orders">
295
+ <SideNavigationLink href="/orders" onClick={press('/orders')}>
296
+ Orders
297
+ </SideNavigationLink>
298
+ </SideNavigationItem>
284
299
  </SideNavigation>;
285
300
  ```
286
301
 
@@ -55,6 +55,11 @@ new seed keeps the ratios of every scheme. A colour of the `tone`, `surface`,
55
55
  3. A colour the reader picks at runtime: write the seed property on the element
56
56
  that carries `data-slotted-theme`, with `seedStyle` from
57
57
  `@slotted/theme/seeds`, which leaves the token contract out of the bundle.
58
+ 4. A bar of the application's own that floats over scrolling content — a phone
59
+ tab bar, a sticky banner — is a material: its background reads
60
+ `--slotted-surface-material` and its backdrop filter reads
61
+ `--slotted-material-backdrop`. The theme makes both opaque under reduced
62
+ transparency and forced colours.
58
63
 
59
64
  ## 4. Restyle a control
60
65
 
@@ -10,6 +10,7 @@
10
10
  "tone": [
11
11
  "accent",
12
12
  "secondary",
13
+ "neutral",
13
14
  "success",
14
15
  "warning",
15
16
  "danger"
@@ -78,7 +78,7 @@ Excerpt — not a complete module
78
78
 
79
79
  | Axis | Values | Default |
80
80
  | --- | --- | --- |
81
- | `tone` | `accent`, `secondary`, `success`, `warning`, `danger` | `accent` |
81
+ | `tone` | `accent`, `secondary`, `neutral`, `success`, `warning`, `danger` | `accent` |
82
82
  | `variant` | `solid`, `outline`, `ghost` | `solid` |
83
83
  | `size` | `sm`, `md`, `lg` | `md` |
84
84
 
@@ -354,6 +354,7 @@
354
354
  "--slotted-font-size-xs",
355
355
  "--slotted-font-weight-medium",
356
356
  "--slotted-font-weight-semibold",
357
+ "--slotted-letter-spacing-tighter",
357
358
  "--slotted-line-height-2xl",
358
359
  "--slotted-line-height-3xl",
359
360
  "--slotted-line-height-4xl",
@@ -114,7 +114,7 @@ Excerpt — not a complete module
114
114
 
115
115
  ## Tokens
116
116
 
117
- `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-font-family-sans`, `--slotted-font-size-2xl`, `--slotted-font-size-3xl`, `--slotted-font-size-4xl`, `--slotted-font-size-md`, `--slotted-font-size-sm`, `--slotted-font-size-xl`, `--slotted-font-size-xs`, `--slotted-font-weight-medium`, `--slotted-font-weight-semibold`, `--slotted-line-height-2xl`, `--slotted-line-height-3xl`, `--slotted-line-height-4xl`, `--slotted-line-height-md`, `--slotted-line-height-sm`, `--slotted-line-height-xl`, `--slotted-line-height-xs`, `--slotted-radius-lg`, `--slotted-radius-none`, `--slotted-shadow-md`, `--slotted-space-1`, `--slotted-space-11`, `--slotted-space-12`, `--slotted-space-2`, `--slotted-space-3`, `--slotted-space-4`, `--slotted-space-5`, `--slotted-space-6`, `--slotted-space-7`, `--slotted-space-8`, `--slotted-space-9`, `--slotted-sparkline-block-size`, `--slotted-sparkline-block-size-lg`, `--slotted-sparkline-block-size-sm`, `--slotted-stat-card-background`, `--slotted-stat-card-background-subtle`, `--slotted-stat-card-border-color`, `--slotted-stat-card-border-width`, `--slotted-stat-card-color`, `--slotted-stat-card-color-muted`, `--slotted-stat-card-delta-font-size`, `--slotted-stat-card-delta-font-size-lg`, `--slotted-stat-card-delta-font-size-sm`, `--slotted-stat-card-indicator-size`, `--slotted-stat-card-indicator-size-lg`, `--slotted-stat-card-label-font-size`, `--slotted-stat-card-label-font-size-lg`, `--slotted-stat-card-label-font-size-sm`, `--slotted-stat-card-label-line-height`, `--slotted-stat-card-label-line-height-lg`, `--slotted-stat-card-label-line-height-sm`, `--slotted-stat-card-min-inline-size`, `--slotted-stat-card-padding-block`, `--slotted-stat-card-padding-block-lg`, `--slotted-stat-card-padding-block-sm`, `--slotted-stat-card-padding-inline`, `--slotted-stat-card-padding-inline-lg`, `--slotted-stat-card-padding-inline-sm`, `--slotted-stat-card-prose-font-size`, `--slotted-stat-card-prose-font-size-lg`, `--slotted-stat-card-prose-line-height`, `--slotted-stat-card-prose-line-height-lg`, `--slotted-stat-card-radius`, `--slotted-stat-card-region-gap`, `--slotted-stat-card-region-gap-lg`, `--slotted-stat-card-region-gap-sm`, `--slotted-stat-card-shadow`, `--slotted-stat-card-shadow-elevated`, `--slotted-stat-card-trend-gap`, `--slotted-stat-card-trend-gap-lg`, `--slotted-stat-card-trend-gap-sm`, `--slotted-stat-card-trend-inline-size`, `--slotted-stat-card-trend-inline-size-lg`, `--slotted-stat-card-trend-inline-size-sm`, `--slotted-stat-card-value-font-size`, `--slotted-stat-card-value-font-size-lg`, `--slotted-stat-card-value-font-size-sm`, `--slotted-stat-card-value-line-height`, `--slotted-stat-card-value-line-height-lg`, `--slotted-stat-card-value-line-height-sm`, `--slotted-surface-raised`, `--slotted-surface-sunken`, `--slotted-target-comfortable`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-text`, `--slotted-tone-danger-text`, `--slotted-tone-secondary-text`, `--slotted-tone-success-text`, `--slotted-tone-warning-text`
117
+ `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-font-family-sans`, `--slotted-font-size-2xl`, `--slotted-font-size-3xl`, `--slotted-font-size-4xl`, `--slotted-font-size-md`, `--slotted-font-size-sm`, `--slotted-font-size-xl`, `--slotted-font-size-xs`, `--slotted-font-weight-medium`, `--slotted-font-weight-semibold`, `--slotted-letter-spacing-tighter`, `--slotted-line-height-2xl`, `--slotted-line-height-3xl`, `--slotted-line-height-4xl`, `--slotted-line-height-md`, `--slotted-line-height-sm`, `--slotted-line-height-xl`, `--slotted-line-height-xs`, `--slotted-radius-lg`, `--slotted-radius-none`, `--slotted-shadow-md`, `--slotted-space-1`, `--slotted-space-11`, `--slotted-space-12`, `--slotted-space-2`, `--slotted-space-3`, `--slotted-space-4`, `--slotted-space-5`, `--slotted-space-6`, `--slotted-space-7`, `--slotted-space-8`, `--slotted-space-9`, `--slotted-sparkline-block-size`, `--slotted-sparkline-block-size-lg`, `--slotted-sparkline-block-size-sm`, `--slotted-stat-card-background`, `--slotted-stat-card-background-subtle`, `--slotted-stat-card-border-color`, `--slotted-stat-card-border-width`, `--slotted-stat-card-color`, `--slotted-stat-card-color-muted`, `--slotted-stat-card-delta-font-size`, `--slotted-stat-card-delta-font-size-lg`, `--slotted-stat-card-delta-font-size-sm`, `--slotted-stat-card-indicator-size`, `--slotted-stat-card-indicator-size-lg`, `--slotted-stat-card-label-font-size`, `--slotted-stat-card-label-font-size-lg`, `--slotted-stat-card-label-font-size-sm`, `--slotted-stat-card-label-line-height`, `--slotted-stat-card-label-line-height-lg`, `--slotted-stat-card-label-line-height-sm`, `--slotted-stat-card-min-inline-size`, `--slotted-stat-card-padding-block`, `--slotted-stat-card-padding-block-lg`, `--slotted-stat-card-padding-block-sm`, `--slotted-stat-card-padding-inline`, `--slotted-stat-card-padding-inline-lg`, `--slotted-stat-card-padding-inline-sm`, `--slotted-stat-card-prose-font-size`, `--slotted-stat-card-prose-font-size-lg`, `--slotted-stat-card-prose-line-height`, `--slotted-stat-card-prose-line-height-lg`, `--slotted-stat-card-radius`, `--slotted-stat-card-region-gap`, `--slotted-stat-card-region-gap-lg`, `--slotted-stat-card-region-gap-sm`, `--slotted-stat-card-shadow`, `--slotted-stat-card-shadow-elevated`, `--slotted-stat-card-trend-gap`, `--slotted-stat-card-trend-gap-lg`, `--slotted-stat-card-trend-gap-sm`, `--slotted-stat-card-trend-inline-size`, `--slotted-stat-card-trend-inline-size-lg`, `--slotted-stat-card-trend-inline-size-sm`, `--slotted-stat-card-value-font-size`, `--slotted-stat-card-value-font-size-lg`, `--slotted-stat-card-value-font-size-sm`, `--slotted-stat-card-value-line-height`, `--slotted-stat-card-value-line-height-lg`, `--slotted-stat-card-value-line-height-sm`, `--slotted-surface-raised`, `--slotted-surface-sunken`, `--slotted-target-comfortable`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-text`, `--slotted-tone-danger-text`, `--slotted-tone-secondary-text`, `--slotted-tone-success-text`, `--slotted-tone-warning-text`
118
118
 
119
119
  ## Examples
120
120
 
@@ -688,7 +688,7 @@ export default function TableExpansion() {
688
688
 
689
689
  ### A header, a summary and a column that stay
690
690
 
691
- stickyHeader holds the head against the top of the scroller and stickyFooter holds the summary against the bottom of it, so the total is on screen at the first row and the last. stickyTo says which box that is: this table own scroller, or whatever scrolls outside it. A pinned column darkens its edge exactly while something is hidden under it, and all of it mirrors in a right-to-left document.
691
+ stickyHeader holds the head against the top of the scroller and stickyFooter holds the summary against the bottom of it, so the total is on screen at the first row and the last. stickyTo says which box that is: this table own scroller, or whatever scrolls outside it. Under stickyTo="page" the head stops at --slotted-table-sticky-offset, which a page binds to its own chrome; a table inside a scrolling box of its own sets that token to 0 on the box. A pinned column darkens its edge exactly while something is hidden under it, and all of it mirrors in a right-to-left document.
692
692
 
693
693
  Example
694
694
 
@@ -107,6 +107,7 @@
107
107
  "active",
108
108
  "focus-visible",
109
109
  "selected",
110
+ "current",
110
111
  "expanded",
111
112
  "disabled",
112
113
  "loading"
@@ -139,6 +140,11 @@
139
140
  "selection",
140
141
  "expander",
141
142
  "detail",
143
+ "group-row",
144
+ "group-header",
145
+ "group-content",
146
+ "group-start",
147
+ "group-end",
142
148
  "empty",
143
149
  "loader",
144
150
  "footer"
@@ -148,7 +154,7 @@
148
154
  "docs": {
149
155
  "table": {
150
156
  "imports": {
151
- "source": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableColumnActions,\n TableColumnHeader,\n TableContent,\n TableDefaultsProvider,\n TableDetail,\n TableEmpty,\n TableExpander,\n TableFooter,\n TableHead,\n TableLoader,\n TableRow,\n TableRowHeader,\n TableSelect,\n TableSelectAll,\n TableSort,\n TableSummary,\n} from '@slotted/react';"
157
+ "source": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableColumnActions,\n TableColumnHeader,\n TableContent,\n TableDefaultsProvider,\n TableDetail,\n TableEmpty,\n TableExpander,\n TableFooter,\n TableGroupRow,\n TableHead,\n TableLoader,\n TableRow,\n TableRowHeader,\n TableSelect,\n TableSelectAll,\n TableSort,\n TableSummary,\n} from '@slotted/react';"
152
158
  },
153
159
  "anatomy": [
154
160
  {
@@ -319,6 +325,36 @@
319
325
  "required": false,
320
326
  "purpose": "The open row detail, one cell spanning every column. It is not rendered while it is closed."
321
327
  },
328
+ {
329
+ "part": "group-row",
330
+ "element": "tr",
331
+ "required": false,
332
+ "purpose": "The band that opens a group of rows: a day of a ledger with its net at the end. One header cell spans every column, and sticky holds the band under the header while its rows scroll past."
333
+ },
334
+ {
335
+ "part": "group-header",
336
+ "element": "th",
337
+ "required": false,
338
+ "purpose": "The one cell of the band, scope=\"rowgroup\", spanning the columns of the table. It names the rows of its own tbody, so a grouped listing writes one body per group."
339
+ },
340
+ {
341
+ "part": "group-content",
342
+ "element": "div",
343
+ "required": false,
344
+ "purpose": "The line inside the band that sets the name at the start and the end content at the end."
345
+ },
346
+ {
347
+ "part": "group-start",
348
+ "element": "span",
349
+ "required": false,
350
+ "purpose": "The name of the group."
351
+ },
352
+ {
353
+ "part": "group-end",
354
+ "element": "span",
355
+ "required": false,
356
+ "purpose": "The end of the band, from the end prop: the total or net of the group, in tabular figures."
357
+ },
322
358
  {
323
359
  "part": "empty",
324
360
  "element": "td",
@@ -557,6 +593,34 @@
557
593
  "appliesTo": "TableRow",
558
594
  "description": "The record position in the whole set, written as aria-rowindex"
559
595
  },
596
+ {
597
+ "name": "current",
598
+ "type": "boolean",
599
+ "defaultValue": "false",
600
+ "appliesTo": "TableRow",
601
+ "description": "The record open elsewhere on the page, a detail pane beside the table, written as aria-current"
602
+ },
603
+ {
604
+ "name": "interactive",
605
+ "type": "boolean",
606
+ "defaultValue": "true with onAction",
607
+ "appliesTo": "TableRow",
608
+ "description": "Paints the row as a thing the pointer presses"
609
+ },
610
+ {
611
+ "name": "onAction",
612
+ "type": "(event) => void",
613
+ "defaultValue": "—",
614
+ "appliesTo": "TableRow",
615
+ "description": "A click anywhere in the row that lands on no control of its own; the first link or button in the row is the keyboard way in"
616
+ },
617
+ {
618
+ "name": "end",
619
+ "type": "ReactNode",
620
+ "defaultValue": "—",
621
+ "appliesTo": "TableGroupRow",
622
+ "description": "What stands at the end of the band: the total or net of the group"
623
+ },
560
624
  {
561
625
  "name": "column",
562
626
  "type": "string",
@@ -599,6 +663,13 @@
599
663
  "appliesTo": "the three cell parts and both selection cells",
600
664
  "description": "Which edge the column is pinned to while the table scrolls past it"
601
665
  },
666
+ {
667
+ "name": "sticky",
668
+ "type": "boolean",
669
+ "defaultValue": "false",
670
+ "appliesTo": "TableGroupRow",
671
+ "description": "Holds the band under the header while its rows scroll past"
672
+ },
602
673
  {
603
674
  "name": "stickyOffset",
604
675
  "type": "string",
@@ -731,12 +802,16 @@
731
802
  "--slotted-table-font-family",
732
803
  "--slotted-table-font-size",
733
804
  "--slotted-table-gap",
805
+ "--slotted-table-group-color",
806
+ "--slotted-table-group-sticky-offset",
807
+ "--slotted-table-group-surface",
734
808
  "--slotted-table-header-surface",
735
809
  "--slotted-table-header-surface-hover",
736
810
  "--slotted-table-icon-size",
737
811
  "--slotted-table-radius",
738
812
  "--slotted-table-row-color-selected",
739
813
  "--slotted-table-row-min-block-size",
814
+ "--slotted-table-row-surface-current",
740
815
  "--slotted-table-row-surface-hover",
741
816
  "--slotted-table-row-surface-selected",
742
817
  "--slotted-table-row-surface-selected-hover",
@@ -754,6 +829,7 @@
754
829
  "--slotted-tone-accent-subtle-hover",
755
830
  "--slotted-tone-accent-surface",
756
831
  "--slotted-tone-accent-text",
832
+ "--slotted-tone-secondary-subtle-active",
757
833
  "--slotted-tone-secondary-subtle-hover",
758
834
  "--slotted-z-index-sticky"
759
835
  ],
@@ -881,7 +957,7 @@
881
957
  {
882
958
  "id": "sticky",
883
959
  "title": "A header, a summary and a column that stay",
884
- "note": "stickyHeader holds the head against the top of the scroller and stickyFooter holds the summary against the bottom of it, so the total is on screen at the first row and the last. stickyTo says which box that is: this table own scroller, or whatever scrolls outside it. A pinned column darkens its edge exactly while something is hidden under it, and all of it mirrors in a right-to-left document.",
960
+ "note": "stickyHeader holds the head against the top of the scroller and stickyFooter holds the summary against the bottom of it, so the total is on screen at the first row and the last. stickyTo says which box that is: this table own scroller, or whatever scrolls outside it. Under stickyTo=\"page\" the head stops at --slotted-table-sticky-offset, which a page binds to its own chrome; a table inside a scrolling box of its own sets that token to 0 on the box. A pinned column darkens its edge exactly while something is hidden under it, and all of it mirrors in a right-to-left document.",
885
961
  "language": "tsx",
886
962
  "source": "import {\n Table,\n TableBody,\n TableCell,\n TableColumnHeader,\n TableContent,\n TableHead,\n TableRow,\n TableRowHeader,\n TableSummary,\n} from '@slotted/react/table';\n\nconst USD = new Intl.NumberFormat('en-US', { currency: 'USD', style: 'currency' });\n\nconst CUSTOMERS = [\n 'Alfreds Futterkiste',\n \"Bon app'\",\n 'Ernst Handel',\n 'Folk och fä HB',\n 'Hanari Carnes',\n 'Island Trading',\n 'QUICK-Stop',\n 'Wartian Herkku',\n];\nconst WAREHOUSES = ['Reno', 'Columbus', 'Savannah'];\n\nconst ORDERS = Array.from({ length: 30 }, (_, index) => ({\n id: `SO-${10400 + index}`,\n customer: CUSTOMERS[index % CUSTOMERS.length],\n warehouse: WAREHOUSES[index % WAREHOUSES.length],\n total: 180 + ((index * 397) % 2400),\n}));\n\nconst TOTAL = ORDERS.reduce((sum, order) => sum + order.total, 0);\n\nexport default function TableSticky() {\n return (\n <Table columns={4} stickyFooter stickyHeader>\n <TableContent\n aria-label=\"September orders\"\n scrollProps={{ style: { maxBlockSize: '20rem' } }}\n >\n <TableHead>\n <TableRow>\n <TableColumnHeader>Order</TableColumnHeader>\n <TableColumnHeader>Customer</TableColumnHeader>\n <TableColumnHeader>Warehouse</TableColumnHeader>\n <TableColumnHeader numeric>Total</TableColumnHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {ORDERS.map((order) => (\n <TableRow key={order.id} value={order.id}>\n <TableRowHeader text=\"nowrap\">{order.id}</TableRowHeader>\n <TableCell>{order.customer}</TableCell>\n <TableCell>{order.warehouse}</TableCell>\n <TableCell numeric>{USD.format(order.total)}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n <TableSummary>\n <TableRow>\n <TableCell colSpan={3}>{ORDERS.length} orders</TableCell>\n <TableCell numeric>{USD.format(TOTAL)}</TableCell>\n </TableRow>\n </TableSummary>\n </TableContent>\n </Table>\n );\n}\n",
887
963
  "verdict": "example"
@@ -19,6 +19,7 @@ import {
19
19
  TableEmpty,
20
20
  TableExpander,
21
21
  TableFooter,
22
+ TableGroupRow,
22
23
  TableHead,
23
24
  TableLoader,
24
25
  TableRow,
@@ -160,6 +161,11 @@ export default function TableBasic() {
160
161
  | `selection` | th or td | no |
161
162
  | `expander` | button | no |
162
163
  | `detail` | tr | no |
164
+ | `group-row` | tr | no |
165
+ | `group-header` | th | no |
166
+ | `group-content` | div | no |
167
+ | `group-start` | span | no |
168
+ | `group-end` | span | no |
163
169
  | `empty` | td | no |
164
170
  | `loader` | tbody | no |
165
171
 
@@ -199,12 +205,17 @@ export default function TableBasic() {
199
205
  | `value` | `string` | — | TableRow | The record key the selection and the expansion are held by |
200
206
  | `disabled` | `boolean` | false | TableRow | A record the reader may not choose; it leaves the set the header covers |
201
207
  | `rowIndex` | `number` | — | TableRow | The record position in the whole set, written as aria-rowindex |
208
+ | `current` | `boolean` | false | TableRow | The record open elsewhere on the page, a detail pane beside the table, written as aria-current |
209
+ | `interactive` | `boolean` | true with onAction | TableRow | Paints the row as a thing the pointer presses |
210
+ | `onAction` | `(event) => void` | — | TableRow | A click anywhere in the row that lands on no control of its own; the first link or button in the row is the keyboard way in |
211
+ | `end` | `ReactNode` | — | TableGroupRow | What stands at the end of the band: the total or net of the group |
202
212
  | `column` | `string` | — | TableColumnHeader, TableSort | The column key the sort descriptor names |
203
213
  | `align` | `'start' \| 'center' \| 'end'` | start | the three cell parts | Which edge the value stands on, resolved logically |
204
214
  | `numeric` | `boolean` | false | the three cell parts | Tabular figures, and the end edge unless align says otherwise |
205
215
  | `blockAlign` | `'start' \| 'center' \| 'end'` | center | the three cell parts and both selection cells | Where this cell content sits in its row, overriding the table own cellAlign |
206
216
  | `text` | `'wrap' \| 'truncate' \| 'nowrap'` | wrap | the three cell parts | What a value longer than its column does |
207
217
  | `sticky` | `'start' \| 'end'` | start | the three cell parts and both selection cells | Which edge the column is pinned to while the table scrolls past it |
218
+ | `sticky` | `boolean` | false | TableGroupRow | Holds the band under the header while its rows scroll past |
208
219
  | `stickyOffset` | `string` | 0 | the three cell parts and both selection cells | Where the pinned column stops, as a CSS length. Two columns pinned to the same edge need the second to state how wide the first is — beside a selection column that is --slotted-table-selection-size, which is 3rem. |
209
220
  | `colSpan` | `number` | — | TableDetail, TableEmpty | How many columns the part spans, defaulting to the table own count |
210
221
  | `render` | `(props) => ReactNode` | — | Table, TableRow, TableSort | Substitutes the rendered element, keeping every data attribute |
@@ -254,7 +265,7 @@ export default function TableBasic() {
254
265
 
255
266
  ## Tokens
256
267
 
257
- `--slotted-border-strong`, `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-font-family`, `--slotted-control-font-size-md`, `--slotted-control-gap-md`, `--slotted-control-height-md`, `--slotted-control-icon-size-md`, `--slotted-control-padding-inline-md`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-foreground`, `--slotted-duration-short`, `--slotted-easing-standard`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-font-size-xs`, `--slotted-font-weight-medium`, `--slotted-font-weight-regular`, `--slotted-font-weight-semibold`, `--slotted-ground`, `--slotted-line-height-md`, `--slotted-radius-md`, `--slotted-radius-sm`, `--slotted-shadow-xs`, `--slotted-space-2`, `--slotted-space-5`, `--slotted-space-9`, `--slotted-surface`, `--slotted-table-border-color`, `--slotted-table-border-color-strong`, `--slotted-table-border-width`, `--slotted-table-cell-padding-block`, `--slotted-table-cell-padding-inline`, `--slotted-table-color`, `--slotted-table-color-muted`, `--slotted-table-column-actions-size`, `--slotted-table-control-radius`, `--slotted-table-font-family`, `--slotted-table-font-size`, `--slotted-table-gap`, `--slotted-table-header-surface`, `--slotted-table-header-surface-hover`, `--slotted-table-icon-size`, `--slotted-table-radius`, `--slotted-table-row-color-selected`, `--slotted-table-row-min-block-size`, `--slotted-table-row-surface-hover`, `--slotted-table-row-surface-selected`, `--slotted-table-row-surface-selected-hover`, `--slotted-table-row-surface-stripe`, `--slotted-table-selection-size`, `--slotted-table-shadow`, `--slotted-table-sticky-inset`, `--slotted-table-sticky-offset`, `--slotted-table-sticky-offset-end`, `--slotted-table-surface`, `--slotted-target-comfortable`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-surface`, `--slotted-tone-accent-text`, `--slotted-tone-secondary-subtle-hover`, `--slotted-z-index-sticky`
268
+ `--slotted-border-strong`, `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-font-family`, `--slotted-control-font-size-md`, `--slotted-control-gap-md`, `--slotted-control-height-md`, `--slotted-control-icon-size-md`, `--slotted-control-padding-inline-md`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-foreground`, `--slotted-duration-short`, `--slotted-easing-standard`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-font-size-xs`, `--slotted-font-weight-medium`, `--slotted-font-weight-regular`, `--slotted-font-weight-semibold`, `--slotted-ground`, `--slotted-line-height-md`, `--slotted-radius-md`, `--slotted-radius-sm`, `--slotted-shadow-xs`, `--slotted-space-2`, `--slotted-space-5`, `--slotted-space-9`, `--slotted-surface`, `--slotted-table-border-color`, `--slotted-table-border-color-strong`, `--slotted-table-border-width`, `--slotted-table-cell-padding-block`, `--slotted-table-cell-padding-inline`, `--slotted-table-color`, `--slotted-table-color-muted`, `--slotted-table-column-actions-size`, `--slotted-table-control-radius`, `--slotted-table-font-family`, `--slotted-table-font-size`, `--slotted-table-gap`, `--slotted-table-group-color`, `--slotted-table-group-sticky-offset`, `--slotted-table-group-surface`, `--slotted-table-header-surface`, `--slotted-table-header-surface-hover`, `--slotted-table-icon-size`, `--slotted-table-radius`, `--slotted-table-row-color-selected`, `--slotted-table-row-min-block-size`, `--slotted-table-row-surface-current`, `--slotted-table-row-surface-hover`, `--slotted-table-row-surface-selected`, `--slotted-table-row-surface-selected-hover`, `--slotted-table-row-surface-stripe`, `--slotted-table-selection-size`, `--slotted-table-shadow`, `--slotted-table-sticky-inset`, `--slotted-table-sticky-offset`, `--slotted-table-sticky-offset-end`, `--slotted-table-surface`, `--slotted-target-comfortable`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-surface`, `--slotted-tone-accent-text`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`, `--slotted-z-index-sticky`
258
269
 
259
270
  ## Examples
260
271
 
@@ -377,7 +377,7 @@ export default function TabsOverflow() {
377
377
 
378
378
  ### A view a router can deep-link to
379
379
 
380
- href makes the control an anchor, so the destination is real: a plain click selects, and a click carrying a modifier key is left to the browser, which opens the view in a new browser tab.
380
+ href makes the control an anchor, so the destination is real: a plain click selects, and a click carrying a modifier key is left to the browser, which opens the view in a new browser tab. usePressSelection paints the press before the route renders: the tab is selected at once, and the navigation runs after the frame that shows it.
381
381
 
382
382
  Example
383
383
 
@@ -528,7 +528,7 @@
528
528
  {
529
529
  "id": "links",
530
530
  "title": "A view a router can deep-link to",
531
- "note": "href makes the control an anchor, so the destination is real: a plain click selects, and a click carrying a modifier key is left to the browser, which opens the view in a new browser tab.",
531
+ "note": "href makes the control an anchor, so the destination is real: a plain click selects, and a click carrying a modifier key is left to the browser, which opens the view in a new browser tab. usePressSelection paints the press before the route renders: the tab is selected at once, and the navigation runs after the frame that shows it.",
532
532
  "language": "tsx",
533
533
  "source": "import { Tab, TabList, TabPanel, Tabs } from '@slotted/react/tabs';\nimport { Text } from '@slotted/react/typography';\n\nconst VIEWS = [\n { value: 'summary', label: 'Summary', panel: 'Harbor & Pine, $1,240.00, Net 30.' },\n { value: 'items', label: 'Items', panel: '3 lines: shelves, brackets and an assembly kit.' },\n { value: 'shipments', label: 'Shipments', panel: 'Atlas Freight, expected September 12.' },\n];\n\nexport default function TabsLinks() {\n return (\n <Tabs defaultValue=\"summary\">\n <TabList aria-label=\"Order SO-1187\">\n {VIEWS.map((view) => (\n <Tab key={view.value} href={`#order-${view.value}`} value={view.value}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n {VIEWS.map((view) => (\n <TabPanel key={view.value} value={view.value}>\n <Text size=\"sm\">{view.panel}</Text>\n </TabPanel>\n ))}\n </Tabs>\n );\n}\n",
534
534
  "verdict": "example"
@@ -14,7 +14,8 @@
14
14
  ],
15
15
  "variant": [
16
16
  "outline",
17
- "ghost"
17
+ "ghost",
18
+ "chips"
18
19
  ],
19
20
  "orientation": [
20
21
  "horizontal",
@@ -131,10 +132,10 @@
131
132
  },
132
133
  {
133
134
  "name": "variant",
134
- "type": "'outline' | 'ghost'",
135
+ "type": "'outline' | 'ghost' | 'chips'",
135
136
  "defaultValue": "outline",
136
137
  "appliesTo": "ToggleGroup",
137
- "description": "Whether the bar draws its own edge. There is no tone axis: “on” is one colour across the system, and a bar that wants the whole palette is button-group around ToggleButtons"
138
+ "description": "Whether the bar draws its own edge, or draws its items as chips: separate rounded items that wrap, never joined, the pressed one in the neutral tone ink. There is no tone axis: “on” is one colour across the system, and a bar that wants the whole palette is button-group around ToggleButtons"
138
139
  },
139
140
  {
140
141
  "name": "orientation",
@@ -292,9 +293,16 @@
292
293
  "--slotted-focus-ring-color",
293
294
  "--slotted-focus-ring-offset",
294
295
  "--slotted-focus-ring-width",
296
+ "--slotted-font-weight-medium",
297
+ "--slotted-radius-full",
298
+ "--slotted-space-3",
295
299
  "--slotted-text",
296
300
  "--slotted-toggle-group-active-background",
297
301
  "--slotted-toggle-group-border-color",
302
+ "--slotted-toggle-group-chips-gap",
303
+ "--slotted-toggle-group-chips-pressed-background",
304
+ "--slotted-toggle-group-chips-pressed-color",
305
+ "--slotted-toggle-group-chips-radius",
298
306
  "--slotted-toggle-group-color",
299
307
  "--slotted-toggle-group-disabled-border-color",
300
308
  "--slotted-toggle-group-disabled-color",
@@ -310,6 +318,9 @@
310
318
  "--slotted-tone-accent-subtle-active",
311
319
  "--slotted-tone-accent-subtle-hover",
312
320
  "--slotted-tone-accent-text",
321
+ "--slotted-tone-neutral-on-solid",
322
+ "--slotted-tone-neutral-solid",
323
+ "--slotted-tone-neutral-solid-hover",
313
324
  "--slotted-tone-secondary-subtle-active",
314
325
  "--slotted-tone-secondary-subtle-hover"
315
326
  ],
@@ -39,7 +39,7 @@ Excerpt — not a complete module
39
39
  | `multiple` | `boolean` | false | ToggleGroup | Whether more than one item may be on at a time. The value stays an array either way, so both bindings hold one shape and a single-select consumer writes an array of one |
40
40
  | `deselectable` | `boolean` | true | ToggleGroup | Whether the last item on may be turned off. Ignored while multiple is true, where a set may always empty |
41
41
  | `size` | `'sm' \| 'md' \| 'lg'` | md | ToggleGroup | The control step the bar and every item sit at. It reads the control scale, so the bar is as tall as the field beside it |
42
- | `variant` | `'outline' \| 'ghost'` | outline | ToggleGroup | Whether the bar draws its own edge. There is no tone axis: “on” is one colour across the system, and a bar that wants the whole palette is button-group around ToggleButtons |
42
+ | `variant` | `'outline' \| 'ghost' \| 'chips'` | outline | ToggleGroup | Whether the bar draws its own edge, or draws its items as chips: separate rounded items that wrap, never joined, the pressed one in the neutral tone ink. There is no tone axis: “on” is one colour across the system, and a bar that wants the whole palette is button-group around ToggleButtons |
43
43
  | `orientation` | `'horizontal' \| 'vertical'` | horizontal | ToggleGroup | How the items flow, and which pair of arrows moves focus. A vertical group writes aria-orientation |
44
44
  | `attached` | `boolean` | true | ToggleGroup | Whether the items are joined into one bar or spaced apart. A joined bar overlaps its items by one border so a shared column holds one line |
45
45
  | `fullWidth` | `boolean` | false | ToggleGroup | Whether the items share the whole line. Left alone the bar is as wide as its labels |
@@ -67,7 +67,7 @@ Excerpt — not a complete module
67
67
  | Axis | Values | Default |
68
68
  | --- | --- | --- |
69
69
  | `size` | `sm`, `md`, `lg` | `md` |
70
- | `variant` | `outline`, `ghost` | `outline` |
70
+ | `variant` | `outline`, `ghost`, `chips` | `outline` |
71
71
  | `orientation` | `horizontal`, `vertical` | `horizontal` |
72
72
 
73
73
  ## Rules
@@ -81,7 +81,7 @@ Excerpt — not a complete module
81
81
 
82
82
  ## Tokens
83
83
 
84
- `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-font-family`, `--slotted-control-font-size-lg`, `--slotted-control-font-size-md`, `--slotted-control-font-size-sm`, `--slotted-control-font-weight`, `--slotted-control-gap-lg`, `--slotted-control-gap-md`, `--slotted-control-gap-sm`, `--slotted-control-height-lg`, `--slotted-control-height-md`, `--slotted-control-height-sm`, `--slotted-control-icon-size-lg`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-control-letter-spacing`, `--slotted-control-line-height`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-duration-instant`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-text`, `--slotted-toggle-group-active-background`, `--slotted-toggle-group-border-color`, `--slotted-toggle-group-color`, `--slotted-toggle-group-disabled-border-color`, `--slotted-toggle-group-disabled-color`, `--slotted-toggle-group-disabled-pressed-background`, `--slotted-toggle-group-hover-background`, `--slotted-toggle-group-pressed-background`, `--slotted-toggle-group-pressed-border-color`, `--slotted-toggle-group-pressed-color`, `--slotted-toggle-group-pressed-hover-background`, `--slotted-toggle-group-radius`, `--slotted-toggle-group-shadow`, `--slotted-tone-accent-border`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-text`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
84
+ `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-font-family`, `--slotted-control-font-size-lg`, `--slotted-control-font-size-md`, `--slotted-control-font-size-sm`, `--slotted-control-font-weight`, `--slotted-control-gap-lg`, `--slotted-control-gap-md`, `--slotted-control-gap-sm`, `--slotted-control-height-lg`, `--slotted-control-height-md`, `--slotted-control-height-sm`, `--slotted-control-icon-size-lg`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-control-letter-spacing`, `--slotted-control-line-height`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-duration-instant`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-font-weight-medium`, `--slotted-radius-full`, `--slotted-space-3`, `--slotted-text`, `--slotted-toggle-group-active-background`, `--slotted-toggle-group-border-color`, `--slotted-toggle-group-chips-gap`, `--slotted-toggle-group-chips-pressed-background`, `--slotted-toggle-group-chips-pressed-color`, `--slotted-toggle-group-chips-radius`, `--slotted-toggle-group-color`, `--slotted-toggle-group-disabled-border-color`, `--slotted-toggle-group-disabled-color`, `--slotted-toggle-group-disabled-pressed-background`, `--slotted-toggle-group-hover-background`, `--slotted-toggle-group-pressed-background`, `--slotted-toggle-group-pressed-border-color`, `--slotted-toggle-group-pressed-color`, `--slotted-toggle-group-pressed-hover-background`, `--slotted-toggle-group-radius`, `--slotted-toggle-group-shadow`, `--slotted-tone-accent-border`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-text`, `--slotted-tone-neutral-on-solid`, `--slotted-tone-neutral-solid`, `--slotted-tone-neutral-solid-hover`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
85
85
 
86
86
  ## Examples
87
87
 
@@ -14,7 +14,8 @@
14
14
  ],
15
15
  "variant": [
16
16
  "outline",
17
- "ghost"
17
+ "ghost",
18
+ "chips"
18
19
  ]
19
20
  },
20
21
  "members": {
@@ -99,10 +100,10 @@
99
100
  },
100
101
  {
101
102
  "name": "variant",
102
- "type": "'outline' | 'ghost'",
103
+ "type": "'outline' | 'ghost' | 'chips'",
103
104
  "defaultValue": "outline",
104
105
  "appliesTo": "Toggle",
105
- "description": "Whether the control draws its own edge before it is on. There is no tone axis: a mode is one colour when it is on, and an action that persists in one of five tones is button’s ToggleButton"
106
+ "description": "Whether the control draws its own edge before it is on, or is a chip pressed in the neutral tone ink. There is no tone axis: a mode is one colour when it is on, and an action that persists in one of five tones is button’s ToggleButton"
106
107
  },
107
108
  {
108
109
  "name": "icon",
@@ -217,9 +218,14 @@
217
218
  "--slotted-focus-ring-color",
218
219
  "--slotted-focus-ring-offset",
219
220
  "--slotted-focus-ring-width",
221
+ "--slotted-font-weight-medium",
222
+ "--slotted-radius-full",
220
223
  "--slotted-text",
221
224
  "--slotted-toggle-active-background",
222
225
  "--slotted-toggle-border-color",
226
+ "--slotted-toggle-chips-pressed-background",
227
+ "--slotted-toggle-chips-pressed-color",
228
+ "--slotted-toggle-chips-radius",
223
229
  "--slotted-toggle-color",
224
230
  "--slotted-toggle-disabled-border-color",
225
231
  "--slotted-toggle-disabled-color",
@@ -235,6 +241,9 @@
235
241
  "--slotted-tone-accent-subtle-active",
236
242
  "--slotted-tone-accent-subtle-hover",
237
243
  "--slotted-tone-accent-text",
244
+ "--slotted-tone-neutral-on-solid",
245
+ "--slotted-tone-neutral-solid",
246
+ "--slotted-tone-neutral-solid-hover",
238
247
  "--slotted-tone-secondary-subtle-active",
239
248
  "--slotted-tone-secondary-subtle-hover"
240
249
  ],