@slotted/angular 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 (106) hide show
  1. package/docs/app-shell.json +1 -1
  2. package/docs/button-group.json +1 -0
  3. package/docs/button-group.md +1 -1
  4. package/docs/button.json +45 -11
  5. package/docs/button.md +10 -6
  6. package/docs/chart.json +7 -0
  7. package/docs/chart.md +1 -0
  8. package/docs/currency-field.json +32 -1
  9. package/docs/currency-field.md +4 -1
  10. package/docs/dialog.examples.md +20 -0
  11. package/docs/dialog.json +14 -2
  12. package/docs/dialog.md +1 -1
  13. package/docs/list.json +19 -1
  14. package/docs/list.md +3 -1
  15. package/docs/popover.json +1 -1
  16. package/docs/segmented-control.json +29 -1
  17. package/docs/segmented-control.md +17 -1
  18. package/docs/skills/theme-app/SKILL.md +5 -0
  19. package/docs/split-button.json +1 -0
  20. package/docs/split-button.md +1 -1
  21. package/docs/stat-card.json +1 -0
  22. package/docs/stat-card.md +1 -1
  23. package/docs/table.examples.md +1 -1
  24. package/docs/table.json +70 -1
  25. package/docs/table.md +10 -1
  26. package/docs/toggle-group.json +14 -3
  27. package/docs/toggle-group.md +3 -3
  28. package/docs/toggle.json +12 -3
  29. package/docs/toggle.md +3 -3
  30. package/docs/tokens.md +25 -1
  31. package/docs/tour.json +1 -1
  32. package/fesm2022/slotted-angular-app-shell.mjs +48 -16
  33. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  34. package/fesm2022/slotted-angular-button-group.mjs +4 -4
  35. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  36. package/fesm2022/slotted-angular-button.mjs +51 -19
  37. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  38. package/fesm2022/slotted-angular-cascader.mjs +1 -1
  39. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  40. package/fesm2022/slotted-angular-chart.mjs +41 -20
  41. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  43. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-currency-field.mjs +59 -8
  45. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  47. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-data-grid.mjs +2 -2
  49. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-data-list.mjs +2 -2
  51. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-dialog.mjs +4 -4
  53. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  55. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-filter-bar.mjs +8 -8
  57. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  59. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  60. package/fesm2022/slotted-angular-list.mjs +28 -17
  61. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  62. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  63. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  64. package/fesm2022/slotted-angular-notification-center.mjs +1 -1
  65. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  66. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  67. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  68. package/fesm2022/slotted-angular-segmented-control.mjs +25 -5
  69. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  70. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  71. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  72. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  73. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  74. package/fesm2022/slotted-angular-table.mjs +94 -7
  75. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  76. package/fesm2022/slotted-angular-toggle-group.mjs +17 -4
  77. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  78. package/fesm2022/slotted-angular-toggle.mjs +2 -2
  79. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  80. package/fesm2022/slotted-angular-tour.mjs +1 -1
  81. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  82. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  83. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  84. package/fesm2022/slotted-angular-wizard.mjs +1 -1
  85. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  86. package/package.json +3 -3
  87. package/types/slotted-angular-app-shell.d.ts +6 -0
  88. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  89. package/types/slotted-angular-button-group.d.ts +1 -1
  90. package/types/slotted-angular-button.d.ts +33 -13
  91. package/types/slotted-angular-button.d.ts.map +1 -1
  92. package/types/slotted-angular-chart.d.ts +9 -0
  93. package/types/slotted-angular-chart.d.ts.map +1 -1
  94. package/types/slotted-angular-currency-field.d.ts +25 -3
  95. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  96. package/types/slotted-angular-list.d.ts +42 -27
  97. package/types/slotted-angular-list.d.ts.map +1 -1
  98. package/types/slotted-angular-segmented-control.d.ts +15 -2
  99. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  100. package/types/slotted-angular-split-button.d.ts +2 -2
  101. package/types/slotted-angular-table.d.ts +43 -3
  102. package/types/slotted-angular-table.d.ts.map +1 -1
  103. package/types/slotted-angular-toggle-group.d.ts +8 -2
  104. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  105. package/types/slotted-angular-toggle.d.ts +1 -1
  106. package/types/slotted-angular-toggle.d.ts.map +1 -1
package/docs/list.md CHANGED
@@ -33,6 +33,7 @@ Excerpt — not a complete module
33
33
  | `root` | ul or ol, or the element render returns | yes |
34
34
  | `section` | li | no |
35
35
  | `section-label` | h1 to h6, or a div | no |
36
+ | `section-end` | span | no |
36
37
  | `section-list` | ul or ol | no |
37
38
  | `empty` | li | no |
38
39
 
@@ -48,6 +49,7 @@ Excerpt — not a complete module
48
49
  | `loading` | `boolean` | false | slList | Writes aria-busy on the set. What stands in for the rows is slSkeleton, composed by the page |
49
50
  | `level` | `'none' \| '1' \| '2' \| '3' \| '4' \| '5' \| '6'` | 3 | the element | Not an input: slListSectionLabel goes on the heading the page wrote, at whatever level the document needs |
50
51
  | `sticky` | `boolean` | false | slListSectionLabel | Keeps a group name in place while its own rows scroll past it |
52
+ | `variant` | `'caption' \| 'ruled'` | caption | slListSectionLabel | How the group heading is drawn: the small muted name, or the name over a rule with no ground; an element inside it marked slListSectionEnd stands at the end, in tabular figures |
51
53
  | `id` | `string` | — | slListSectionLabel | The heading own id, which the nested list is named by. Generated when the page wrote none |
52
54
  | `exportAs` | `slList \| slListSection \| slListSectionLabel \| slListSectionList \| slListEmpty` | — | every directive | Reaches the instance from a template |
53
55
  | `aria-label / aria-labelledby` | `string` | — | slList | The set own name, written on the element. The family adds no label of its own |
@@ -75,7 +77,7 @@ Excerpt — not a complete module
75
77
 
76
78
  ## Tokens
77
79
 
78
- `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-font-size-xs`, `--slotted-font-weight-semibold`, `--slotted-line-height-sm`, `--slotted-list-background`, `--slotted-list-border-color`, `--slotted-list-border-width`, `--slotted-list-empty-color`, `--slotted-list-empty-padding`, `--slotted-list-empty-padding-lg`, `--slotted-list-empty-padding-sm`, `--slotted-list-gap`, `--slotted-list-gap-lg`, `--slotted-list-gap-sm`, `--slotted-list-padding-inline`, `--slotted-list-padding-inline-lg`, `--slotted-list-padding-inline-sm`, `--slotted-list-radius`, `--slotted-list-section-color`, `--slotted-list-section-font-size`, `--slotted-list-section-font-weight`, `--slotted-list-section-letter-spacing`, `--slotted-list-section-padding-block`, `--slotted-list-section-padding-block-lg`, `--slotted-list-section-padding-block-sm`, `--slotted-radius-md`, `--slotted-space-2`, `--slotted-space-3`, `--slotted-space-4`, `--slotted-space-5`, `--slotted-space-6`, `--slotted-space-8`, `--slotted-space-9`, `--slotted-surface`, `--slotted-text-muted`, `--slotted-z-index-sticky`
80
+ `--slotted-border-subtle`, `--slotted-border-width-thin`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-font-size-xs`, `--slotted-font-weight-medium`, `--slotted-font-weight-semibold`, `--slotted-line-height-sm`, `--slotted-list-background`, `--slotted-list-border-color`, `--slotted-list-border-width`, `--slotted-list-empty-color`, `--slotted-list-empty-padding`, `--slotted-list-empty-padding-lg`, `--slotted-list-empty-padding-sm`, `--slotted-list-gap`, `--slotted-list-gap-lg`, `--slotted-list-gap-sm`, `--slotted-list-padding-inline`, `--slotted-list-padding-inline-lg`, `--slotted-list-padding-inline-sm`, `--slotted-list-radius`, `--slotted-list-section-color`, `--slotted-list-section-font-size`, `--slotted-list-section-font-weight`, `--slotted-list-section-letter-spacing`, `--slotted-list-section-padding-block`, `--slotted-list-section-padding-block-lg`, `--slotted-list-section-padding-block-sm`, `--slotted-list-section-rule-color`, `--slotted-list-section-ruled-color`, `--slotted-radius-md`, `--slotted-space-2`, `--slotted-space-3`, `--slotted-space-4`, `--slotted-space-5`, `--slotted-space-6`, `--slotted-space-8`, `--slotted-space-9`, `--slotted-surface`, `--slotted-text`, `--slotted-text-muted`, `--slotted-z-index-sticky`
79
81
 
80
82
  ## Examples
81
83
 
package/docs/popover.json CHANGED
@@ -146,7 +146,7 @@
146
146
  "part": "content",
147
147
  "element": "the element carrying slPopoverContent",
148
148
  "required": true,
149
- "purpose": "The panel, with role=\"dialog\" and tabindex=\"-1\". It is named by its title and described by its description when those parts are present. aria-modal is never written, because the popover is not modal."
149
+ "purpose": "The panel, with role=\"dialog\" and tabindex=\"-1\". It is named by its title and described by its description when those parts are present. aria-modal is never written, because the popover is not modal. It draws no padding: slPopoverHeader, slPopoverBody and slPopoverFooter carry the panel inset, set by --slotted-popover-padding-inline and --slotted-popover-padding-block."
150
150
  },
151
151
  {
152
152
  "part": "header",
@@ -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",
@@ -145,6 +150,13 @@
145
150
  "appliesTo": "slSegmentedControl",
146
151
  "description": "How the segments flow and which way the thumb travels. A horizontal set writes aria-orientation, because radiogroup already implies vertical"
147
152
  },
153
+ {
154
+ "name": "variant",
155
+ "type": "'track' | 'underline'",
156
+ "defaultValue": "track",
157
+ "appliesTo": "slSegmentedControl",
158
+ "description": "How the choice is drawn: a track with a thumb, or the words alone with the chosen one underlined"
159
+ },
148
160
  {
149
161
  "name": "condense",
150
162
  "type": "'none' | 'icons'",
@@ -263,6 +275,7 @@
263
275
  },
264
276
  "tokens": [
265
277
  "--slotted-border-subtle",
278
+ "--slotted-border-width-thick",
266
279
  "--slotted-control-border-color",
267
280
  "--slotted-control-border-width",
268
281
  "--slotted-control-font-family",
@@ -298,7 +311,9 @@
298
311
  "--slotted-easing-standard",
299
312
  "--slotted-focus-ring-color",
300
313
  "--slotted-focus-ring-color-invalid",
314
+ "--slotted-focus-ring-offset",
301
315
  "--slotted-focus-ring-width",
316
+ "--slotted-font-weight-medium",
302
317
  "--slotted-radius-xs",
303
318
  "--slotted-segmented-control-active-background",
304
319
  "--slotted-segmented-control-background",
@@ -318,9 +333,14 @@
318
333
  "--slotted-segmented-control-invalid-focus-ring-color",
319
334
  "--slotted-segmented-control-radius",
320
335
  "--slotted-segmented-control-shadow",
336
+ "--slotted-segmented-control-underline-checked-color",
337
+ "--slotted-segmented-control-underline-color",
338
+ "--slotted-segmented-control-underline-gap",
321
339
  "--slotted-space-1",
340
+ "--slotted-space-6",
322
341
  "--slotted-target-min",
323
342
  "--slotted-text",
343
+ "--slotted-text-muted",
324
344
  "--slotted-tone-accent-border",
325
345
  "--slotted-tone-accent-subtle-active",
326
346
  "--slotted-tone-accent-text",
@@ -369,6 +389,14 @@
369
389
  "source": "<div slSegmentedControl aria-label=\"Alinhamento\" defaultValue=\"center\">\n <label slSegment value=\"start\" aria-label=\"Início\">\n <ng-icon slSegmentIcon name=\"lucideAlignLeft\" />\n </label>\n</div>\n",
370
390
  "verdict": "excerpt"
371
391
  },
392
+ {
393
+ "id": "variants",
394
+ "title": "A track, or the words alone",
395
+ "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.",
396
+ "language": "html",
397
+ "source": "<div slSegmentedControl aria-label=\"Período\" defaultValue=\"month\" variant=\"underline\">\n <label slSegment value=\"day\">Dia</label>\n <label slSegment value=\"week\">Semana</label>\n <label slSegment value=\"month\">Mês</label>\n</div>\n",
398
+ "verdict": "excerpt"
399
+ },
372
400
  {
373
401
  "id": "condense",
374
402
  "title": "Narrower than its words",
@@ -48,6 +48,7 @@ Excerpt — not a complete module
48
48
  | `name` | `string` | — | slSegmentedControl | The submission name the segments share, and the reason the platform treats them as one radio group. Generated when none is written, from an application-scoped factory so the server and the client agree |
49
49
  | `size` | `'sm' \| 'md' \| 'lg'` | md | slSegmentedControl | The control step. The track measures its segments back from it, so the whole control is exactly as tall as the field beside it |
50
50
  | `orientation` | `'horizontal' \| 'vertical'` | horizontal | slSegmentedControl | How the segments flow and which way the thumb travels. A horizontal set writes aria-orientation, because radiogroup already implies vertical |
51
+ | `variant` | `'track' \| 'underline'` | track | slSegmentedControl | How the choice is drawn: a track with a thumb, or the words alone with the chosen one underlined |
51
52
  | `condense` | `'none' \| 'icons'` | none | slSegmentedControl | 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 |
52
53
  | `fullWidth` | `boolean` | false | slSegmentedControl | Whether the equal columns spread across the whole line. Left alone every column is the widest label’s |
53
54
  | `disabled` | `boolean` | false | slSegmentedControl | Unstated rather than false, so the control defers to the field around it and to a form that disables it. Stated, it reaches every radio as the native attribute |
@@ -76,6 +77,7 @@ Excerpt — not a complete module
76
77
  | `size` | `sm`, `md`, `lg` | `md` |
77
78
  | `orientation` | `horizontal`, `vertical` | `horizontal` |
78
79
  | `condense` | `none`, `icons` | `none` |
80
+ | `variant` | `track`, `underline` | `track` |
79
81
 
80
82
  ## Rules
81
83
 
@@ -88,7 +90,7 @@ Excerpt — not a complete module
88
90
 
89
91
  ## Tokens
90
92
 
91
- `--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`
93
+ `--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`
92
94
 
93
95
  ## Examples
94
96
 
@@ -145,6 +147,20 @@ Excerpt — not a complete module
145
147
  </div>
146
148
  ```
147
149
 
150
+ ### A track, or the words alone
151
+
152
+ 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.
153
+
154
+ Excerpt — not a complete module
155
+
156
+ ```html
157
+ <div slSegmentedControl aria-label="Período" defaultValue="month" variant="underline">
158
+ <label slSegment value="day">Dia</label>
159
+ <label slSegment value="week">Semana</label>
160
+ <label slSegment value="month">Mês</label>
161
+ </div>
162
+ ```
163
+
148
164
  ### Narrower than its words
149
165
 
150
166
  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.
@@ -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"
@@ -83,7 +83,7 @@ Excerpt — not a complete module
83
83
 
84
84
  | Axis | Values | Default |
85
85
  | --- | --- | --- |
86
- | `tone` | `accent`, `secondary`, `success`, `warning`, `danger` | `accent` |
86
+ | `tone` | `accent`, `secondary`, `neutral`, `success`, `warning`, `danger` | `accent` |
87
87
  | `variant` | `solid`, `outline`, `ghost` | `solid` |
88
88
  | `size` | `sm`, `md`, `lg` | `md` |
89
89
 
@@ -356,6 +356,7 @@
356
356
  "--slotted-font-size-xs",
357
357
  "--slotted-font-weight-medium",
358
358
  "--slotted-font-weight-semibold",
359
+ "--slotted-letter-spacing-tighter",
359
360
  "--slotted-line-height-2xl",
360
361
  "--slotted-line-height-3xl",
361
362
  "--slotted-line-height-4xl",
package/docs/stat-card.md CHANGED
@@ -110,7 +110,7 @@ Excerpt — not a complete module
110
110
 
111
111
  ## Tokens
112
112
 
113
- `--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`
113
+ `--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`
114
114
 
115
115
  ## Examples
116
116
 
@@ -742,7 +742,7 @@ export class TableExpansion {
742
742
 
743
743
  ### A header, a summary and a column that stay
744
744
 
745
- 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.
745
+ 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.
746
746
 
747
747
  Example
748
748
 
package/docs/table.json CHANGED
@@ -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"
@@ -321,6 +327,36 @@
321
327
  "required": false,
322
328
  "purpose": "The open row detail, one cell spanning every column. Control flow in the template keeps a closed one out of the DOM, which a host element cannot do for itself."
323
329
  },
330
+ {
331
+ "part": "group-row",
332
+ "element": "tr[slTableGroupRow]",
333
+ "required": false,
334
+ "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."
335
+ },
336
+ {
337
+ "part": "group-header",
338
+ "element": "th",
339
+ "required": false,
340
+ "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."
341
+ },
342
+ {
343
+ "part": "group-content",
344
+ "element": "div",
345
+ "required": false,
346
+ "purpose": "The line inside the band that sets the name at the start and the end content at the end."
347
+ },
348
+ {
349
+ "part": "group-start",
350
+ "element": "span",
351
+ "required": false,
352
+ "purpose": "The name of the group."
353
+ },
354
+ {
355
+ "part": "group-end",
356
+ "element": "span",
357
+ "required": false,
358
+ "purpose": "The end of the band, the element marked slTableGroupRowEnd: the total or net of the group, in tabular figures."
359
+ },
324
360
  {
325
361
  "part": "empty",
326
362
  "element": "td[slTableEmpty]",
@@ -566,6 +602,27 @@
566
602
  "appliesTo": "slTableRow",
567
603
  "description": "The record position in the whole set, written as aria-rowindex"
568
604
  },
605
+ {
606
+ "name": "current",
607
+ "type": "boolean",
608
+ "defaultValue": "false",
609
+ "appliesTo": "slTableRow",
610
+ "description": "The record open elsewhere on the page, a detail pane beside the table, written as aria-current"
611
+ },
612
+ {
613
+ "name": "interactive",
614
+ "type": "boolean",
615
+ "defaultValue": "false",
616
+ "appliesTo": "slTableRow",
617
+ "description": "Paints the row as a thing the pointer presses; stated beside (action)"
618
+ },
619
+ {
620
+ "name": "(action)",
621
+ "type": "MouseEvent",
622
+ "defaultValue": "—",
623
+ "appliesTo": "slTableRow",
624
+ "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"
625
+ },
569
626
  {
570
627
  "name": "column",
571
628
  "type": "string",
@@ -608,6 +665,13 @@
608
665
  "appliesTo": "the three cell parts and both selection cells",
609
666
  "description": "Which edge the column is pinned to while the table scrolls past it"
610
667
  },
668
+ {
669
+ "name": "sticky",
670
+ "type": "boolean",
671
+ "defaultValue": "false",
672
+ "appliesTo": "slTableGroupRow",
673
+ "description": "Holds the band under the header while its rows scroll past; the end of the band is the element marked slTableGroupRowEnd"
674
+ },
611
675
  {
612
676
  "name": "stickyOffset",
613
677
  "type": "string",
@@ -748,12 +812,16 @@
748
812
  "--slotted-table-font-family",
749
813
  "--slotted-table-font-size",
750
814
  "--slotted-table-gap",
815
+ "--slotted-table-group-color",
816
+ "--slotted-table-group-sticky-offset",
817
+ "--slotted-table-group-surface",
751
818
  "--slotted-table-header-surface",
752
819
  "--slotted-table-header-surface-hover",
753
820
  "--slotted-table-icon-size",
754
821
  "--slotted-table-radius",
755
822
  "--slotted-table-row-color-selected",
756
823
  "--slotted-table-row-min-block-size",
824
+ "--slotted-table-row-surface-current",
757
825
  "--slotted-table-row-surface-hover",
758
826
  "--slotted-table-row-surface-selected",
759
827
  "--slotted-table-row-surface-selected-hover",
@@ -771,6 +839,7 @@
771
839
  "--slotted-tone-accent-subtle-hover",
772
840
  "--slotted-tone-accent-surface",
773
841
  "--slotted-tone-accent-text",
842
+ "--slotted-tone-secondary-subtle-active",
774
843
  "--slotted-tone-secondary-subtle-hover",
775
844
  "--slotted-z-index-sticky"
776
845
  ],
@@ -898,7 +967,7 @@
898
967
  {
899
968
  "id": "sticky",
900
969
  "title": "A header, a summary and a column that stay",
901
- "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.",
970
+ "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.",
902
971
  "language": "ts",
903
972
  "source": "import { Component } from '@angular/core';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n SlTableSummary,\n} from '@slotted/angular/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\n@Component({\n selector: 'app-table-sticky',\n imports: [\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n SlTableSummary,\n ],\n template: `\n <div slTable [columns]=\"4\" stickyFooter stickyHeader>\n <div slTableContent aria-label=\"September orders\" style=\"max-block-size: 20rem\">\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n <th slTableColumnHeader>Customer</th>\n <th slTableColumnHeader>Warehouse</th>\n <th slTableColumnHeader numeric>Total</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (order of orders; track order.id) {\n <tr slTableRow [value]=\"order.id\">\n <th slTableRowHeader text=\"nowrap\">{{ order.id }}</th>\n <td slTableCell>{{ order.customer }}</td>\n <td slTableCell>{{ order.warehouse }}</td>\n <td slTableCell numeric>{{ usd.format(order.total) }}</td>\n </tr>\n }\n </tbody>\n <tfoot slTableSummary>\n <tr slTableRow>\n <td slTableCell [attr.colspan]=\"3\">{{ orders.length }} orders</td>\n <td slTableCell numeric>{{ usd.format(total) }}</td>\n </tr>\n </tfoot>\n </div>\n </div>\n `,\n})\nexport class TableSticky {\n readonly orders = ORDERS;\n readonly total = ORDERS.reduce((sum, order) => sum + order.total, 0);\n readonly usd = USD;\n}\n",
904
973
  "verdict": "example"
package/docs/table.md CHANGED
@@ -186,6 +186,11 @@ export class TableBasic {
186
186
  | `selection` | td[slTableSelect] and th[slTableSelectAll] | no |
187
187
  | `expander` | button[slTableExpander] | no |
188
188
  | `detail` | tr[slTableDetail] | no |
189
+ | `group-row` | tr[slTableGroupRow] | no |
190
+ | `group-header` | th | no |
191
+ | `group-content` | div | no |
192
+ | `group-start` | span | no |
193
+ | `group-end` | span | no |
189
194
  | `empty` | td[slTableEmpty] | no |
190
195
  | `loader` | tbody[slTableLoader] | no |
191
196
 
@@ -226,12 +231,16 @@ export class TableBasic {
226
231
  | `value` | `string` | — | slTableRow | The record key the selection and the expansion are held by |
227
232
  | `disabled` | `boolean` | false | slTableRow | A record the reader may not choose; it leaves the set the header covers |
228
233
  | `rowIndex` | `number` | — | slTableRow | The record position in the whole set, written as aria-rowindex |
234
+ | `current` | `boolean` | false | slTableRow | The record open elsewhere on the page, a detail pane beside the table, written as aria-current |
235
+ | `interactive` | `boolean` | false | slTableRow | Paints the row as a thing the pointer presses; stated beside (action) |
236
+ | `(action)` | `MouseEvent` | — | slTableRow | 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 |
229
237
  | `column` | `string` | — | slTableColumnHeader, slTableSort | The column key the sort descriptor names |
230
238
  | `align` | `'start' \| 'center' \| 'end'` | start | the three cell parts | Which edge the value stands on, resolved logically |
231
239
  | `numeric` | `boolean` | false | the three cell parts | Tabular figures, and the end edge unless align says otherwise |
232
240
  | `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 |
233
241
  | `text` | `'wrap' \| 'truncate' \| 'nowrap'` | wrap | the three cell parts | What a value longer than its column does |
234
242
  | `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 |
243
+ | `sticky` | `boolean` | false | slTableGroupRow | Holds the band under the header while its rows scroll past; the end of the band is the element marked slTableGroupRowEnd |
235
244
  | `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. |
236
245
  | `colSpan` | `number` | — | slTableDetail, slTableEmpty | How many columns the part spans, defaulting to the table own count |
237
246
  | `exportAs` | `slTable, slTableRow, slTableContent` | — | every part | Reaches the instance from the template: row.expanded(), table.rows(), content.scrollToRow() |
@@ -283,7 +292,7 @@ export class TableBasic {
283
292
 
284
293
  ## Tokens
285
294
 
286
- `--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`
295
+ `--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`
287
296
 
288
297
  ## Examples
289
298
 
@@ -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",
@@ -133,10 +134,10 @@
133
134
  },
134
135
  {
135
136
  "name": "variant",
136
- "type": "'outline' | 'ghost'",
137
+ "type": "'outline' | 'ghost' | 'chips'",
137
138
  "defaultValue": "outline",
138
139
  "appliesTo": "slToggleGroup",
139
- "description": "Whether the bar draws its own edge. There is no tone axis: “on” is one colour across the system"
140
+ "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"
140
141
  },
141
142
  {
142
143
  "name": "orientation",
@@ -287,9 +288,16 @@
287
288
  "--slotted-focus-ring-color",
288
289
  "--slotted-focus-ring-offset",
289
290
  "--slotted-focus-ring-width",
291
+ "--slotted-font-weight-medium",
292
+ "--slotted-radius-full",
293
+ "--slotted-space-3",
290
294
  "--slotted-text",
291
295
  "--slotted-toggle-group-active-background",
292
296
  "--slotted-toggle-group-border-color",
297
+ "--slotted-toggle-group-chips-gap",
298
+ "--slotted-toggle-group-chips-pressed-background",
299
+ "--slotted-toggle-group-chips-pressed-color",
300
+ "--slotted-toggle-group-chips-radius",
293
301
  "--slotted-toggle-group-color",
294
302
  "--slotted-toggle-group-disabled-border-color",
295
303
  "--slotted-toggle-group-disabled-color",
@@ -305,6 +313,9 @@
305
313
  "--slotted-tone-accent-subtle-active",
306
314
  "--slotted-tone-accent-subtle-hover",
307
315
  "--slotted-tone-accent-text",
316
+ "--slotted-tone-neutral-on-solid",
317
+ "--slotted-tone-neutral-solid",
318
+ "--slotted-tone-neutral-solid-hover",
308
319
  "--slotted-tone-secondary-subtle-active",
309
320
  "--slotted-tone-secondary-subtle-hover"
310
321
  ],
@@ -46,7 +46,7 @@ Excerpt — not a complete module
46
46
  | `multiple` | `boolean` | false | slToggleGroup | Whether more than one item may be on at a time. The value stays an array either way, so one signal holds it in every mode |
47
47
  | `deselectable` | `boolean` | true | slToggleGroup | Whether the last item on may be turned off. Ignored while multiple is true, where a set may always empty |
48
48
  | `size` | `'sm' \| 'md' \| 'lg'` | md | slToggleGroup | 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 |
49
- | `variant` | `'outline' \| 'ghost'` | outline | slToggleGroup | Whether the bar draws its own edge. There is no tone axis: “on” is one colour across the system |
49
+ | `variant` | `'outline' \| 'ghost' \| 'chips'` | outline | slToggleGroup | 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 |
50
50
  | `orientation` | `'horizontal' \| 'vertical'` | horizontal | slToggleGroup | How the items flow, and which pair of arrows moves focus. A vertical group writes aria-orientation |
51
51
  | `attached` | `boolean` | true | slToggleGroup | 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 |
52
52
  | `fullWidth` | `boolean` | false | slToggleGroup | Whether the items share the whole line. Left alone the bar is as wide as its labels |
@@ -73,7 +73,7 @@ Excerpt — not a complete module
73
73
  | Axis | Values | Default |
74
74
  | --- | --- | --- |
75
75
  | `size` | `sm`, `md`, `lg` | `md` |
76
- | `variant` | `outline`, `ghost` | `outline` |
76
+ | `variant` | `outline`, `ghost`, `chips` | `outline` |
77
77
  | `orientation` | `horizontal`, `vertical` | `horizontal` |
78
78
 
79
79
  ## Rules
@@ -87,7 +87,7 @@ Excerpt — not a complete module
87
87
 
88
88
  ## Tokens
89
89
 
90
- `--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`
90
+ `--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`
91
91
 
92
92
  ## Examples
93
93
 
package/docs/toggle.json CHANGED
@@ -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": {
@@ -101,10 +102,10 @@
101
102
  },
102
103
  {
103
104
  "name": "variant",
104
- "type": "'outline' | 'ghost'",
105
+ "type": "'outline' | 'ghost' | 'chips'",
105
106
  "defaultValue": "outline",
106
107
  "appliesTo": "slToggle",
107
- "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"
108
+ "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"
108
109
  },
109
110
  {
110
111
  "name": "disabled",
@@ -212,9 +213,14 @@
212
213
  "--slotted-focus-ring-color",
213
214
  "--slotted-focus-ring-offset",
214
215
  "--slotted-focus-ring-width",
216
+ "--slotted-font-weight-medium",
217
+ "--slotted-radius-full",
215
218
  "--slotted-text",
216
219
  "--slotted-toggle-active-background",
217
220
  "--slotted-toggle-border-color",
221
+ "--slotted-toggle-chips-pressed-background",
222
+ "--slotted-toggle-chips-pressed-color",
223
+ "--slotted-toggle-chips-radius",
218
224
  "--slotted-toggle-color",
219
225
  "--slotted-toggle-disabled-border-color",
220
226
  "--slotted-toggle-disabled-color",
@@ -230,6 +236,9 @@
230
236
  "--slotted-tone-accent-subtle-active",
231
237
  "--slotted-tone-accent-subtle-hover",
232
238
  "--slotted-tone-accent-text",
239
+ "--slotted-tone-neutral-on-solid",
240
+ "--slotted-tone-neutral-solid",
241
+ "--slotted-tone-neutral-solid-hover",
233
242
  "--slotted-tone-secondary-subtle-active",
234
243
  "--slotted-tone-secondary-subtle-hover"
235
244
  ],
package/docs/toggle.md CHANGED
@@ -37,7 +37,7 @@ Excerpt — not a complete module
37
37
  | `pressed` | `boolean` | — | slToggle | Bound, the consumer owns the state for the life of the component. Unbound, the toggle owns it and starts from defaultPressed |
38
38
  | `defaultPressed` | `boolean` | false | slToggle | What an uncontrolled toggle starts from, read once. A later change to it does not silently become new state |
39
39
  | `size` | `'sm' \| 'md' \| 'lg'` | md | slToggle | The control step. It reads the control scale, so the toggle is as tall as the field beside it |
40
- | `variant` | `'outline' \| 'ghost'` | outline | slToggle | 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 |
40
+ | `variant` | `'outline' \| 'ghost' \| 'chips'` | outline | slToggle | 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 |
41
41
  | `disabled` | `boolean` | false | slToggle | The native attribute, which is also what makes the browser refuse focus. A toggle that is on and unavailable keeps saying both |
42
42
  | `type` | `'button' \| 'submit' \| 'reset'` | button | slToggle | The native attribute, kept when the consumer wrote it. A toggle in a form is not a form control — checkbox and switch are — so it is a button unless the consumer says otherwise |
43
43
  | `slToggle` | `directive on a button` | — | the consumer’s element | The component is a directive on the consumer’s own button: every attribute, every listener and every structural directive around it stay as written. It stays a button, because aria-pressed on a link is a link announcing a state a link does not hold |
@@ -58,7 +58,7 @@ Excerpt — not a complete module
58
58
  | Axis | Values | Default |
59
59
  | --- | --- | --- |
60
60
  | `size` | `sm`, `md`, `lg` | `md` |
61
- | `variant` | `outline`, `ghost` | `outline` |
61
+ | `variant` | `outline`, `ghost`, `chips` | `outline` |
62
62
 
63
63
  ## Rules
64
64
 
@@ -70,7 +70,7 @@ Excerpt — not a complete module
70
70
 
71
71
  ## Tokens
72
72
 
73
- `--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-active-background`, `--slotted-toggle-border-color`, `--slotted-toggle-color`, `--slotted-toggle-disabled-border-color`, `--slotted-toggle-disabled-color`, `--slotted-toggle-disabled-pressed-background`, `--slotted-toggle-hover-background`, `--slotted-toggle-pressed-background`, `--slotted-toggle-pressed-border-color`, `--slotted-toggle-pressed-color`, `--slotted-toggle-pressed-hover-background`, `--slotted-toggle-radius`, `--slotted-toggle-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`
73
+ `--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-text`, `--slotted-toggle-active-background`, `--slotted-toggle-border-color`, `--slotted-toggle-chips-pressed-background`, `--slotted-toggle-chips-pressed-color`, `--slotted-toggle-chips-radius`, `--slotted-toggle-color`, `--slotted-toggle-disabled-border-color`, `--slotted-toggle-disabled-color`, `--slotted-toggle-disabled-pressed-background`, `--slotted-toggle-hover-background`, `--slotted-toggle-pressed-background`, `--slotted-toggle-pressed-border-color`, `--slotted-toggle-pressed-color`, `--slotted-toggle-pressed-hover-background`, `--slotted-toggle-radius`, `--slotted-toggle-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`
74
74
 
75
75
  ## Examples
76
76