@slotted/angular 0.1.0-beta.2 → 0.1.0-beta.4

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 (150) 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/calendar.json +7 -0
  7. package/docs/calendar.md +1 -0
  8. package/docs/chart.json +7 -0
  9. package/docs/chart.md +1 -0
  10. package/docs/currency-field.json +32 -1
  11. package/docs/currency-field.md +4 -1
  12. package/docs/date-field.json +8 -1
  13. package/docs/date-field.md +2 -1
  14. package/docs/date-picker.examples.md +36 -0
  15. package/docs/date-picker.json +20 -5
  16. package/docs/date-picker.md +5 -4
  17. package/docs/dialog.examples.md +20 -0
  18. package/docs/dialog.json +14 -2
  19. package/docs/dialog.md +1 -1
  20. package/docs/guidelines/composition.md +10 -0
  21. package/docs/guidelines/index.md +2 -0
  22. package/docs/guidelines/list-pages.md +12 -1
  23. package/docs/list.json +19 -1
  24. package/docs/list.md +3 -1
  25. package/docs/page.json +1 -0
  26. package/docs/page.md +1 -0
  27. package/docs/popover.json +1 -1
  28. package/docs/segmented-control.json +29 -1
  29. package/docs/segmented-control.md +17 -1
  30. package/docs/skills/compose-screen/SKILL.md +7 -0
  31. package/docs/skills/theme-app/SKILL.md +5 -0
  32. package/docs/split-button.json +1 -0
  33. package/docs/split-button.md +1 -1
  34. package/docs/stat-card.json +1 -0
  35. package/docs/stat-card.md +1 -1
  36. package/docs/table.examples.md +1 -1
  37. package/docs/table.json +83 -1
  38. package/docs/table.md +12 -1
  39. package/docs/text-field.json +1 -1
  40. package/docs/text-field.md +1 -1
  41. package/docs/toggle-group.json +14 -3
  42. package/docs/toggle-group.md +3 -3
  43. package/docs/toggle.json +12 -3
  44. package/docs/toggle.md +3 -3
  45. package/docs/tokens.md +25 -1
  46. package/docs/tour.json +1 -1
  47. package/fesm2022/slotted-angular-app-shell.mjs +48 -16
  48. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  49. package/fesm2022/slotted-angular-button-group.mjs +4 -4
  50. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  51. package/fesm2022/slotted-angular-button.mjs +51 -19
  52. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  53. package/fesm2022/slotted-angular-calendar.mjs +158 -33
  54. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  55. package/fesm2022/slotted-angular-cascader.mjs +1 -1
  56. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  57. package/fesm2022/slotted-angular-chart.mjs +41 -20
  58. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  59. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  60. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  61. package/fesm2022/slotted-angular-combobox.mjs +25 -4
  62. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  63. package/fesm2022/slotted-angular-currency-field.mjs +59 -8
  64. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  65. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  66. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  67. package/fesm2022/slotted-angular-data-grid.mjs +4 -4
  68. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  69. package/fesm2022/slotted-angular-data-list.mjs +2 -2
  70. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  71. package/fesm2022/slotted-angular-date-field.mjs +35 -12
  72. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  73. package/fesm2022/slotted-angular-date-picker.mjs +91 -27
  74. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  75. package/fesm2022/slotted-angular-date-range-picker.mjs +1 -1
  76. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  77. package/fesm2022/slotted-angular-datetime-picker.mjs +1 -1
  78. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  79. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1 -1
  80. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  81. package/fesm2022/slotted-angular-dialog.mjs +4 -4
  82. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  83. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  84. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  85. package/fesm2022/slotted-angular-filter-bar.mjs +9 -9
  86. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  87. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  88. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  89. package/fesm2022/slotted-angular-list.mjs +28 -17
  90. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  91. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  92. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  93. package/fesm2022/slotted-angular-multi-select.mjs +24 -3
  94. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  95. package/fesm2022/slotted-angular-notification-center.mjs +1 -1
  96. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  97. package/fesm2022/slotted-angular-page.mjs +20 -1
  98. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  99. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  100. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  101. package/fesm2022/slotted-angular-segmented-control.mjs +25 -5
  102. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  103. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  104. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  105. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  106. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  107. package/fesm2022/slotted-angular-table.mjs +107 -9
  108. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  109. package/fesm2022/slotted-angular-toggle-group.mjs +17 -4
  110. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  111. package/fesm2022/slotted-angular-toggle.mjs +2 -2
  112. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  113. package/fesm2022/slotted-angular-tour.mjs +1 -1
  114. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  115. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  116. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  117. package/fesm2022/slotted-angular-wizard.mjs +1 -1
  118. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  119. package/package.json +3 -3
  120. package/types/slotted-angular-app-shell.d.ts +6 -0
  121. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  122. package/types/slotted-angular-button-group.d.ts +1 -1
  123. package/types/slotted-angular-button.d.ts +33 -13
  124. package/types/slotted-angular-button.d.ts.map +1 -1
  125. package/types/slotted-angular-calendar.d.ts +28 -2
  126. package/types/slotted-angular-calendar.d.ts.map +1 -1
  127. package/types/slotted-angular-chart.d.ts +9 -0
  128. package/types/slotted-angular-chart.d.ts.map +1 -1
  129. package/types/slotted-angular-combobox.d.ts +4 -0
  130. package/types/slotted-angular-combobox.d.ts.map +1 -1
  131. package/types/slotted-angular-currency-field.d.ts +25 -3
  132. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  133. package/types/slotted-angular-date-field.d.ts +11 -1
  134. package/types/slotted-angular-date-field.d.ts.map +1 -1
  135. package/types/slotted-angular-date-picker.d.ts +38 -11
  136. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  137. package/types/slotted-angular-list.d.ts +42 -27
  138. package/types/slotted-angular-list.d.ts.map +1 -1
  139. package/types/slotted-angular-multi-select.d.ts +4 -0
  140. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  141. package/types/slotted-angular-page.d.ts.map +1 -1
  142. package/types/slotted-angular-segmented-control.d.ts +15 -2
  143. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  144. package/types/slotted-angular-split-button.d.ts +2 -2
  145. package/types/slotted-angular-table.d.ts +59 -5
  146. package/types/slotted-angular-table.d.ts.map +1 -1
  147. package/types/slotted-angular-toggle-group.d.ts +8 -2
  148. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  149. package/types/slotted-angular-toggle.d.ts +1 -1
  150. package/types/slotted-angular-toggle.d.ts.map +1 -1
@@ -196,7 +196,7 @@
196
196
  "part": "nav",
197
197
  "element": "nav",
198
198
  "required": false,
199
- "purpose": "The navigation landmark, and one element across all three modes: the rail is this nav at another inline size, which keeps the focus and the scroll position where the reader left them. A query container of its own, named slotted-app-shell-nav, so the rows inside answer the rail without the shell telling them anything."
199
+ "purpose": "The navigation landmark, and one element across all three modes: the rail is this nav at another inline size, which keeps the focus and the scroll position where the reader left them. Its inline axis clips and its block axis scrolls, so a single column taller than the region keeps its foot reachable. A footer that must stay visible goes in nav-footer, between nav-header and a nav-body that scrolls. A query container of its own, named slotted-app-shell-nav, so the rows inside answer the rail without the shell telling them anything."
200
200
  },
201
201
  {
202
202
  "part": "nav-rail",
@@ -133,6 +133,7 @@
133
133
  "--slotted-text-muted",
134
134
  "--slotted-tone-accent-solid-active",
135
135
  "--slotted-tone-danger-solid-active",
136
+ "--slotted-tone-neutral-solid-active",
136
137
  "--slotted-tone-secondary-solid-active",
137
138
  "--slotted-tone-success-solid-active",
138
139
  "--slotted-tone-warning-solid-active"
@@ -50,7 +50,7 @@ Excerpt — not a complete module
50
50
 
51
51
  ## Tokens
52
52
 
53
- `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-radius`, `--slotted-text-muted`, `--slotted-tone-accent-solid-active`, `--slotted-tone-danger-solid-active`, `--slotted-tone-secondary-solid-active`, `--slotted-tone-success-solid-active`, `--slotted-tone-warning-solid-active`
53
+ `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-radius`, `--slotted-text-muted`, `--slotted-tone-accent-solid-active`, `--slotted-tone-danger-solid-active`, `--slotted-tone-neutral-solid-active`, `--slotted-tone-secondary-solid-active`, `--slotted-tone-success-solid-active`, `--slotted-tone-warning-solid-active`
54
54
 
55
55
  ## Examples
56
56
 
package/docs/button.json CHANGED
@@ -10,6 +10,7 @@
10
10
  "tone": [
11
11
  "accent",
12
12
  "secondary",
13
+ "neutral",
13
14
  "success",
14
15
  "warning",
15
16
  "danger"
@@ -27,6 +28,10 @@
27
28
  "shape": [
28
29
  "square",
29
30
  "circle"
31
+ ],
32
+ "justify": [
33
+ "center",
34
+ "between"
30
35
  ]
31
36
  },
32
37
  "members": {
@@ -38,6 +43,7 @@
38
43
  "size": "md",
39
44
  "type": "button",
40
45
  "fullWidth": false,
46
+ "justify": "center",
41
47
  "disabled": false,
42
48
  "focusableWhenDisabled": false,
43
49
  "loading": false,
@@ -73,6 +79,7 @@
73
79
  "variant": "solid",
74
80
  "size": "md",
75
81
  "fullWidth": false,
82
+ "justify": "center",
76
83
  "disabled": false
77
84
  },
78
85
  "capabilities": [
@@ -138,6 +145,7 @@
138
145
  "size": "md",
139
146
  "type": "button",
140
147
  "fullWidth": false,
148
+ "justify": "center",
141
149
  "disabled": false,
142
150
  "focusableWhenDisabled": false,
143
151
  "loading": false,
@@ -182,7 +190,7 @@
182
190
  "part": "root",
183
191
  "element": "the button element you write",
184
192
  "required": true,
185
- "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-full-width, data-disabled and data-loading when they apply."
193
+ "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-justify, and data-full-width, data-disabled and data-loading when they apply."
186
194
  },
187
195
  {
188
196
  "part": "start",
@@ -212,10 +220,10 @@
212
220
  "api": [
213
221
  {
214
222
  "name": "tone",
215
- "type": "accent | secondary | success | warning | danger",
223
+ "type": "accent | secondary | neutral | success | warning | danger",
216
224
  "defaultValue": "accent",
217
225
  "appliesTo": "SlButton",
218
- "description": "The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does."
226
+ "description": "The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does."
219
227
  },
220
228
  {
221
229
  "name": "variant",
@@ -252,6 +260,13 @@
252
260
  "appliesTo": "SlButton",
253
261
  "description": "Fills the inline size of the container."
254
262
  },
263
+ {
264
+ "name": "justify",
265
+ "type": "center | between",
266
+ "defaultValue": "center",
267
+ "appliesTo": "SlButton",
268
+ "description": "Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document."
269
+ },
255
270
  {
256
271
  "name": "disabled",
257
272
  "type": "boolean",
@@ -326,7 +341,7 @@
326
341
  "part": "root",
327
342
  "element": "the anchor element you write",
328
343
  "required": true,
329
- "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-full-width and data-disabled when they apply."
344
+ "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-justify, and data-full-width and data-disabled when they apply."
330
345
  },
331
346
  {
332
347
  "part": "start",
@@ -357,10 +372,10 @@
357
372
  },
358
373
  {
359
374
  "name": "tone",
360
- "type": "accent | secondary | success | warning | danger",
375
+ "type": "accent | secondary | neutral | success | warning | danger",
361
376
  "defaultValue": "accent",
362
377
  "appliesTo": "SlButtonLink",
363
- "description": "The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does."
378
+ "description": "The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does."
364
379
  },
365
380
  {
366
381
  "name": "variant",
@@ -397,6 +412,13 @@
397
412
  "appliesTo": "SlButtonLink",
398
413
  "description": "Fills the inline size of the container."
399
414
  },
415
+ {
416
+ "name": "justify",
417
+ "type": "center | between",
418
+ "defaultValue": "center",
419
+ "appliesTo": "SlButtonLink",
420
+ "description": "Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document."
421
+ },
400
422
  {
401
423
  "name": "disabled",
402
424
  "type": "boolean",
@@ -450,10 +472,10 @@
450
472
  },
451
473
  {
452
474
  "name": "tone",
453
- "type": "accent | secondary | success | warning | danger",
475
+ "type": "accent | secondary | neutral | success | warning | danger",
454
476
  "defaultValue": "secondary",
455
477
  "appliesTo": "SlIconButton",
456
- "description": "The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does."
478
+ "description": "The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does."
457
479
  },
458
480
  {
459
481
  "name": "variant",
@@ -562,7 +584,7 @@
562
584
  "part": "root",
563
585
  "element": "the button element you write",
564
586
  "required": true,
565
- "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-full-width, data-disabled, data-loading and data-pressed when they apply."
587
+ "purpose": "The control. Carries data-ui=\"button\", data-tone, data-variant and data-size. It also carries data-justify, and data-full-width, data-disabled, data-loading and data-pressed when they apply."
566
588
  },
567
589
  {
568
590
  "part": "start",
@@ -592,10 +614,10 @@
592
614
  "api": [
593
615
  {
594
616
  "name": "tone",
595
- "type": "accent | secondary | success | warning | danger",
617
+ "type": "accent | secondary | neutral | success | warning | danger",
596
618
  "defaultValue": "secondary",
597
619
  "appliesTo": "SlToggleButton",
598
- "description": "The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does."
620
+ "description": "The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does."
599
621
  },
600
622
  {
601
623
  "name": "variant",
@@ -632,6 +654,13 @@
632
654
  "appliesTo": "SlToggleButton",
633
655
  "description": "Fills the inline size of the container."
634
656
  },
657
+ {
658
+ "name": "justify",
659
+ "type": "center | between",
660
+ "defaultValue": "center",
661
+ "appliesTo": "SlToggleButton",
662
+ "description": "Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document."
663
+ },
635
664
  {
636
665
  "name": "disabled",
637
666
  "type": "boolean",
@@ -762,6 +791,11 @@
762
791
  "--slotted-tone-danger-solid-active",
763
792
  "--slotted-tone-danger-solid-hover",
764
793
  "--slotted-tone-danger-text",
794
+ "--slotted-tone-neutral-on-solid",
795
+ "--slotted-tone-neutral-solid",
796
+ "--slotted-tone-neutral-solid-active",
797
+ "--slotted-tone-neutral-solid-hover",
798
+ "--slotted-tone-neutral-text",
765
799
  "--slotted-tone-secondary-on-solid",
766
800
  "--slotted-tone-secondary-solid",
767
801
  "--slotted-tone-secondary-solid-active",
package/docs/button.md CHANGED
@@ -90,12 +90,13 @@ export class ButtonBasic {
90
90
 
91
91
  | Name | Type | Default | Applies to | Description |
92
92
  | --- | --- | --- | --- | --- |
93
- | `tone` | `accent \| secondary \| success \| warning \| danger` | accent | SlButton | The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does. |
93
+ | `tone` | `accent \| secondary \| neutral \| success \| warning \| danger` | accent | SlButton | The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does. |
94
94
  | `variant` | `solid \| outline \| ghost` | solid | SlButton | How the tone is painted: solid, outline or ghost. |
95
95
  | `size` | `sm \| md \| lg` | md | SlButton | The step of the control scale. Each step reads the --slotted-control-* tokens, so the density of the theme sets the height. |
96
96
  | `start` | `[slButtonStart]` | — | SlButton | Content projected before the label, such as an icon, on the element you mark with slButtonStart. It mirrors in a right-to-left document. |
97
97
  | `end` | `[slButtonEnd]` | — | SlButton | Content projected after the label, on the element you mark with slButtonEnd. It mirrors in a right-to-left document. |
98
98
  | `fullWidth` | `boolean` | false | SlButton | Fills the inline size of the container. |
99
+ | `justify` | `center \| between` | center | SlButton | Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document. |
99
100
  | `disabled` | `boolean` | false | SlButton | Refuses the action and marks the control unavailable. On its own, it sets the native disabled property, which also removes the control from the tab sequence. |
100
101
  | `focusableWhenDisabled` | `boolean` | false | SlButton | Keeps a disabled control in the tab sequence: aria-disabled replaces the native property, and activation is still refused. |
101
102
  | `loading` | `boolean` | false | SlButton | Refuses activation, keeps focus, and shows a progress indicator named by messages.loading. |
@@ -109,12 +110,13 @@ export class ButtonBasic {
109
110
  | Name | Type | Default | Applies to | Description |
110
111
  | --- | --- | --- | --- | --- |
111
112
  | `href` | `string` | — | SlButtonLink | The destination. A disabled SlButtonLink does not render it. |
112
- | `tone` | `accent \| secondary \| success \| warning \| danger` | accent | SlButtonLink | The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does. |
113
+ | `tone` | `accent \| secondary \| neutral \| success \| warning \| danger` | accent | SlButtonLink | The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does. |
113
114
  | `variant` | `solid \| outline \| ghost` | solid | SlButtonLink | How the tone is painted: solid, outline or ghost. |
114
115
  | `size` | `sm \| md \| lg` | md | SlButtonLink | The step of the control scale. Each step reads the --slotted-control-* tokens, so the density of the theme sets the height. |
115
116
  | `start` | `[slButtonStart]` | — | SlButtonLink | Content projected before the label, such as an icon, on the element you mark with slButtonStart. It mirrors in a right-to-left document. |
116
117
  | `end` | `[slButtonEnd]` | — | SlButtonLink | Content projected after the label, on the element you mark with slButtonEnd. It mirrors in a right-to-left document. |
117
118
  | `fullWidth` | `boolean` | false | SlButtonLink | Fills the inline size of the container. |
119
+ | `justify` | `center \| between` | center | SlButtonLink | Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document. |
118
120
  | `disabled` | `boolean` | false | SlButtonLink | Removes the href and refuses activation. The link stays focusable with role="link" and aria-disabled. |
119
121
 
120
122
  ### iconButton
@@ -122,7 +124,7 @@ export class ButtonBasic {
122
124
  | Name | Type | Default | Applies to | Description |
123
125
  | --- | --- | --- | --- | --- |
124
126
  | `aria-label \| aria-labelledby` | `string` | required | SlIconButton | The accessible name. Required, because an icon supplies no text. |
125
- | `tone` | `accent \| secondary \| success \| warning \| danger` | secondary | SlIconButton | The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does. |
127
+ | `tone` | `accent \| secondary \| neutral \| success \| warning \| danger` | secondary | SlIconButton | The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does. |
126
128
  | `variant` | `solid \| outline \| ghost` | ghost | SlIconButton | How the tone is painted: solid, outline or ghost. |
127
129
  | `size` | `sm \| md \| lg` | md | SlIconButton | The step of the control scale. Each step reads the --slotted-control-* tokens, so the density of the theme sets the height. |
128
130
  | `shape` | `square \| circle` | square | SlIconButton | The corners of the control: square keeps the radius of the control scale, circle rounds it fully. Both are as wide as they are tall. |
@@ -140,12 +142,13 @@ export class ButtonBasic {
140
142
 
141
143
  | Name | Type | Default | Applies to | Description |
142
144
  | --- | --- | --- | --- | --- |
143
- | `tone` | `accent \| secondary \| success \| warning \| danger` | secondary | SlToggleButton | The semantic colour: accent for the primary action, secondary for a neutral one, and success, warning or danger for what the action does. |
145
+ | `tone` | `accent \| secondary \| neutral \| success \| warning \| danger` | secondary | SlToggleButton | The semantic colour: accent for the primary action, secondary for a neutral one, neutral for a primary action drawn in ink where the accent is kept for data, and success, warning or danger for what the action does. |
144
146
  | `variant` | `solid \| outline \| ghost` | outline | SlToggleButton | How the tone is painted: solid, outline or ghost. |
145
147
  | `size` | `sm \| md \| lg` | md | SlToggleButton | The step of the control scale. Each step reads the --slotted-control-* tokens, so the density of the theme sets the height. |
146
148
  | `start` | `[slButtonStart]` | — | SlToggleButton | Content projected before the label, such as an icon, on the element you mark with slButtonStart. It mirrors in a right-to-left document. |
147
149
  | `end` | `[slButtonEnd]` | — | SlToggleButton | Content projected after the label, on the element you mark with slButtonEnd. It mirrors in a right-to-left document. |
148
150
  | `fullWidth` | `boolean` | false | SlToggleButton | Fills the inline size of the container. |
151
+ | `justify` | `center \| between` | center | SlToggleButton | Where the content sits along the inline axis: center keeps the label and end together in the middle; between sets the label at the start and end at the inline end, as a field trigger reads, with start beside the label. It mirrors in a right-to-left document. |
149
152
  | `disabled` | `boolean` | false | SlToggleButton | Refuses the action and marks the control unavailable. On its own, it sets the native disabled property, which also removes the control from the tab sequence. |
150
153
  | `focusableWhenDisabled` | `boolean` | false | SlToggleButton | Keeps a disabled control in the tab sequence: aria-disabled replaces the native property, and activation is still refused. |
151
154
  | `loading` | `boolean` | false | SlToggleButton | Refuses activation, keeps focus, and shows a progress indicator named by messages.loading. |
@@ -160,10 +163,11 @@ export class ButtonBasic {
160
163
 
161
164
  | Axis | Values | Default |
162
165
  | --- | --- | --- |
163
- | `tone` | `accent`, `secondary`, `success`, `warning`, `danger` | `accent`, `secondary` |
166
+ | `tone` | `accent`, `secondary`, `neutral`, `success`, `warning`, `danger` | `accent`, `secondary` |
164
167
  | `variant` | `solid`, `outline`, `ghost` | `solid`, `ghost`, `outline` |
165
168
  | `size` | `sm`, `md`, `lg` | `md` |
166
169
  | `shape` | `square`, `circle` | `square` |
170
+ | `justify` | `center`, `between` | `center` |
167
171
 
168
172
  ## Rules
169
173
 
@@ -193,7 +197,7 @@ export class ButtonBasic {
193
197
 
194
198
  ## Tokens
195
199
 
196
- `--slotted-border-subtle`, `--slotted-border-width-thin`, `--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-duration-loop`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-line-height-sm`, `--slotted-radius-full`, `--slotted-space-2`, `--slotted-target-min`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-accent-on-solid`, `--slotted-tone-accent-solid`, `--slotted-tone-accent-solid-active`, `--slotted-tone-accent-solid-hover`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-text`, `--slotted-tone-danger-on-solid`, `--slotted-tone-danger-solid`, `--slotted-tone-danger-solid-active`, `--slotted-tone-danger-solid-hover`, `--slotted-tone-danger-text`, `--slotted-tone-secondary-on-solid`, `--slotted-tone-secondary-solid`, `--slotted-tone-secondary-solid-active`, `--slotted-tone-secondary-solid-hover`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`, `--slotted-tone-secondary-text`, `--slotted-tone-success-on-solid`, `--slotted-tone-success-solid`, `--slotted-tone-success-solid-active`, `--slotted-tone-success-solid-hover`, `--slotted-tone-success-text`, `--slotted-tone-warning-on-solid`, `--slotted-tone-warning-solid`, `--slotted-tone-warning-solid-active`, `--slotted-tone-warning-solid-hover`, `--slotted-tone-warning-text`
200
+ `--slotted-border-subtle`, `--slotted-border-width-thin`, `--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-duration-loop`, `--slotted-focus-ring-color`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-line-height-sm`, `--slotted-radius-full`, `--slotted-space-2`, `--slotted-target-min`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-accent-on-solid`, `--slotted-tone-accent-solid`, `--slotted-tone-accent-solid-active`, `--slotted-tone-accent-solid-hover`, `--slotted-tone-accent-subtle-active`, `--slotted-tone-accent-subtle-hover`, `--slotted-tone-accent-text`, `--slotted-tone-danger-on-solid`, `--slotted-tone-danger-solid`, `--slotted-tone-danger-solid-active`, `--slotted-tone-danger-solid-hover`, `--slotted-tone-danger-text`, `--slotted-tone-neutral-on-solid`, `--slotted-tone-neutral-solid`, `--slotted-tone-neutral-solid-active`, `--slotted-tone-neutral-solid-hover`, `--slotted-tone-neutral-text`, `--slotted-tone-secondary-on-solid`, `--slotted-tone-secondary-solid`, `--slotted-tone-secondary-solid-active`, `--slotted-tone-secondary-solid-hover`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`, `--slotted-tone-secondary-text`, `--slotted-tone-success-on-solid`, `--slotted-tone-success-solid`, `--slotted-tone-success-solid-active`, `--slotted-tone-success-solid-hover`, `--slotted-tone-success-text`, `--slotted-tone-warning-on-solid`, `--slotted-tone-warning-solid`, `--slotted-tone-warning-solid-active`, `--slotted-tone-warning-solid-hover`, `--slotted-tone-warning-text`
197
201
 
198
202
  ## Examples
199
203
 
@@ -260,6 +260,13 @@
260
260
  "appliesTo": "SlCalendar",
261
261
  "description": "The view it opens on."
262
262
  },
263
+ {
264
+ "name": "granularity",
265
+ "type": "'day' | 'month'",
266
+ "defaultValue": "day",
267
+ "appliesTo": "SlCalendar",
268
+ "description": "What a choice is. month opens on the months of a year and never shows the day grid: a month cell is the value, written as the first day of that month, the arrow keys move one month or one row of four, Home and End reach January and December, Page Up and Page Down move a year, and Enter or Space chooses. A month the bounds leave no day of carries aria-disabled."
269
+ },
263
270
  {
264
271
  "name": "min",
265
272
  "type": "PlainDate",
package/docs/calendar.md CHANGED
@@ -53,6 +53,7 @@ Excerpt — not a complete module
53
53
  | `months` | `number` | 1 | SlCalendar | How many months are drawn side by side. They wrap when they do not fit; nothing is withdrawn. |
54
54
  | `view` | `'day' \| 'month' \| 'year'` | day | SlCalendar | Which grid is showing. Present means the consumer owns it; defaultView sets the starting one. |
55
55
  | `defaultView` | `'day' \| 'month' \| 'year'` | day | SlCalendar | The view it opens on. |
56
+ | `granularity` | `'day' \| 'month'` | day | SlCalendar | What a choice is. month opens on the months of a year and never shows the day grid: a month cell is the value, written as the first day of that month, the arrow keys move one month or one row of four, Home and End reach January and December, Page Up and Page Down move a year, and Enter or Space chooses. A month the bounds leave no day of carries aria-disabled. |
56
57
  | `min` | `PlainDate` | — | SlCalendar | The earliest date the reader may reach. An arrow that would leave the range stops at the edge. |
57
58
  | `max` | `PlainDate` | — | SlCalendar | The latest date the reader may reach. |
58
59
  | `isDateUnavailable` | `(date: PlainDate) => boolean` | — | SlCalendar | Refuses particular dates. A refused date stays focusable and cannot be chosen. |
package/docs/chart.json CHANGED
@@ -202,6 +202,7 @@
202
202
  "tooltip-marker",
203
203
  "tooltip-label",
204
204
  "tooltip-value",
205
+ "tooltip-note",
205
206
  "tooltip-total",
206
207
  "skeleton",
207
208
  "empty",
@@ -418,6 +419,12 @@
418
419
  "required": false,
419
420
  "purpose": "The value in the series’ format, with the share of the whole on a pie."
420
421
  },
422
+ {
423
+ "part": "tooltip-note",
424
+ "element": "div",
425
+ "required": false,
426
+ "purpose": "The label of an upright line on this category, under the title. A label the plot had no room to draw is read here."
427
+ },
421
428
  {
422
429
  "part": "tooltip-total",
423
430
  "element": "div",
package/docs/chart.md CHANGED
@@ -62,6 +62,7 @@ Excerpt — not a complete module
62
62
  | `tooltip-marker` | span | no |
63
63
  | `tooltip-label` | span | no |
64
64
  | `tooltip-value` | span | no |
65
+ | `tooltip-note` | div | no |
65
66
  | `tooltip-total` | div | no |
66
67
  | `skeleton` | div | no |
67
68
  | `empty` | div | no |
@@ -45,6 +45,10 @@
45
45
  "formatOn": [
46
46
  "change",
47
47
  "commit"
48
+ ],
49
+ "appearance": [
50
+ "control",
51
+ "display"
48
52
  ]
49
53
  },
50
54
  "members": {
@@ -61,7 +65,8 @@
61
65
  "formatOn": "change",
62
66
  "currencyDisplay": "symbol",
63
67
  "wheel": false,
64
- "allowEmpty": false
68
+ "allowEmpty": false,
69
+ "appearance": "control"
65
70
  },
66
71
  "capabilities": [
67
72
  "value",
@@ -85,6 +90,7 @@
85
90
  ],
86
91
  "parts": [
87
92
  "root",
93
+ "symbol",
88
94
  "input",
89
95
  "start",
90
96
  "end",
@@ -115,6 +121,12 @@
115
121
  "required": true,
116
122
  "purpose": "The control. Holds the formatted amount, the identifier, aria-valuenow in major units and aria-valuetext as the reader sees it. It is type=\"text\" because type=\"number\" empties itself whenever the text is not a valid floating-point number. exportAs=\"slCurrencyFieldInput\" reaches inputElement, increment() and decrement()."
117
123
  },
124
+ {
125
+ "part": "symbol",
126
+ "element": "span",
127
+ "required": false,
128
+ "purpose": "The currency mark at the display appearance, drawn apart from the digits on the side the locale writes it, muted at the xl step. The input then holds the amount alone and its aria-valuetext carries the mark. Absent under currencyDisplay none and at the control appearance."
129
+ },
118
130
  {
119
131
  "part": "start",
120
132
  "element": "the element carrying slCurrencyFieldStart",
@@ -195,6 +207,13 @@
195
207
  "appliesTo": "slCurrencyField, provideCurrencyFieldDefaults",
196
208
  "description": "When the text takes the locale’s shape under entry=\"natural\". change regroups on every keystroke; commit holds the reader’s own text until blur, Enter or a step. Cents-first entry generates the text after every edit, so it decides nothing there"
197
209
  },
210
+ {
211
+ "name": "appearance",
212
+ "type": "'control' | 'display'",
213
+ "defaultValue": "control",
214
+ "appliesTo": "slCurrencyField",
215
+ "description": "A field among fields, or the headline amount of an entry sheet: the 4xl step, the mark apart and muted, a rule under the amount instead of a box. size and variant do not apply to display"
216
+ },
198
217
  {
199
218
  "name": "align",
200
219
  "type": "'end' | 'start'",
@@ -446,6 +465,7 @@
446
465
  },
447
466
  "tokens": [
448
467
  "--slotted-border-subtle",
468
+ "--slotted-border-width-thin",
449
469
  "--slotted-control-border-color",
450
470
  "--slotted-control-border-width",
451
471
  "--slotted-control-font-family",
@@ -482,6 +502,7 @@
482
502
  "--slotted-currency-field-disabled-background",
483
503
  "--slotted-currency-field-disabled-border-color",
484
504
  "--slotted-currency-field-disabled-color",
505
+ "--slotted-currency-field-display-font-size",
485
506
  "--slotted-currency-field-hover-border-color",
486
507
  "--slotted-currency-field-icon-size-min",
487
508
  "--slotted-currency-field-invalid-border-color",
@@ -503,6 +524,9 @@
503
524
  "--slotted-currency-field-subtle-background",
504
525
  "--slotted-currency-field-subtle-border-color",
505
526
  "--slotted-currency-field-subtle-hover-background",
527
+ "--slotted-currency-field-symbol-color",
528
+ "--slotted-currency-field-symbol-font-size",
529
+ "--slotted-currency-field-underline-color",
506
530
  "--slotted-disabled-background",
507
531
  "--slotted-disabled-border",
508
532
  "--slotted-disabled-foreground",
@@ -510,10 +534,17 @@
510
534
  "--slotted-focus-ring-color-invalid",
511
535
  "--slotted-focus-ring-offset",
512
536
  "--slotted-focus-ring-width",
537
+ "--slotted-font-size-4xl",
538
+ "--slotted-font-size-xl",
539
+ "--slotted-font-weight-medium",
540
+ "--slotted-font-weight-regular",
541
+ "--slotted-letter-spacing-tighter",
542
+ "--slotted-line-height-4xl",
513
543
  "--slotted-radius-none",
514
544
  "--slotted-radius-xs",
515
545
  "--slotted-space-1",
516
546
  "--slotted-space-2",
547
+ "--slotted-space-3",
517
548
  "--slotted-surface-sunken",
518
549
  "--slotted-target-comfortable",
519
550
  "--slotted-target-min",
@@ -38,6 +38,7 @@ Excerpt — not a complete module
38
38
  | --- | --- | --- |
39
39
  | `root` | the element carrying slCurrencyField | yes |
40
40
  | `input` | input[slCurrencyFieldInput], as text with role="spinbutton" | yes |
41
+ | `symbol` | span | no |
41
42
  | `start` | the element carrying slCurrencyFieldStart | no |
42
43
  | `end` | the element carrying slCurrencyFieldEnd | no |
43
44
  | `scrub` | any element carrying slCurrencyFieldScrub, inside an adornment | no |
@@ -55,6 +56,7 @@ Excerpt — not a complete module
55
56
  | `defaultValue` | `number \| null` | — | slCurrencyFieldInput | What an uncontrolled control starts from, read once. A Reactive Form writes over it through ControlValueAccessor |
56
57
  | `entry` | `'cents' \| 'natural'` | cents | slCurrencyFieldInput, provideCurrencyFieldDefaults | How the reader types. cents is the cash register: digits enter at the minor unit and shift left, the separator is never typed and the caret has one legal position. natural is the spreadsheet, and the model number-field uses. The frame paints what the control resolved |
57
58
  | `formatOn` | `'change' \| 'commit'` | change | slCurrencyField, provideCurrencyFieldDefaults | When the text takes the locale’s shape under entry="natural". change regroups on every keystroke; commit holds the reader’s own text until blur, Enter or a step. Cents-first entry generates the text after every edit, so it decides nothing there |
59
+ | `appearance` | `'control' \| 'display'` | control | slCurrencyField | A field among fields, or the headline amount of an entry sheet: the 4xl step, the mark apart and muted, a rule under the amount instead of a box. size and variant do not apply to display |
58
60
  | `align` | `'end' \| 'start'` | end | slCurrencyField, provideCurrencyFieldDefaults | Which edge the amount is set against. end by default: a column of amounts is compared on its last digit, and the cents-first caret already lives there |
59
61
  | `locale` | `string` | the language in force | slCurrencyFieldInput | BCP 47. It decides the separators, where the symbol goes and the numbering system — never the symbol itself, which is the currency’s |
60
62
  | `format` | `Intl.NumberFormatOptions` | — | slCurrencyFieldInput | Any other Intl option: currencySign for accounting parentheses, signDisplay, useGrouping, roundingMode. Every key here wins over the family’s own; style and currency are the family’s |
@@ -107,6 +109,7 @@ Excerpt — not a complete module
107
109
  | `clamp` | `blur`, `strict`, `none` | `blur` |
108
110
  | `currencyDisplay` | `symbol`, `narrowSymbol`, `code`, `name`, `none` | `symbol` |
109
111
  | `formatOn` | `change`, `commit` | `change` |
112
+ | `appearance` | `control`, `display` | `control` |
110
113
 
111
114
  ## Rules
112
115
 
@@ -121,7 +124,7 @@ Excerpt — not a complete module
121
124
 
122
125
  ## Tokens
123
126
 
124
- `--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-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-inner-size-lg`, `--slotted-control-inner-size-md`, `--slotted-control-inner-size-sm`, `--slotted-control-invalid-edge-width`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-shadow-focus-geometry`, `--slotted-control-surface`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-currency-field-action-size`, `--slotted-currency-field-adornment-color`, `--slotted-currency-field-background`, `--slotted-currency-field-border-color`, `--slotted-currency-field-color`, `--slotted-currency-field-disabled-background`, `--slotted-currency-field-disabled-border-color`, `--slotted-currency-field-disabled-color`, `--slotted-currency-field-hover-border-color`, `--slotted-currency-field-icon-size-min`, `--slotted-currency-field-invalid-border-color`, `--slotted-currency-field-invalid-edge-width`, `--slotted-currency-field-invalid-focus-ring-color`, `--slotted-currency-field-placeholder-color`, `--slotted-currency-field-plain-hover-background`, `--slotted-currency-field-radius`, `--slotted-currency-field-readonly-background`, `--slotted-currency-field-readonly-border-color`, `--slotted-currency-field-scrub-active-color`, `--slotted-currency-field-shadow`, `--slotted-currency-field-stepper-active-background`, `--slotted-currency-field-stepper-color`, `--slotted-currency-field-stepper-disabled-background`, `--slotted-currency-field-stepper-disabled-color`, `--slotted-currency-field-stepper-hover-background`, `--slotted-currency-field-stepper-size`, `--slotted-currency-field-subtle-background`, `--slotted-currency-field-subtle-border-color`, `--slotted-currency-field-subtle-hover-background`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-focus-ring-color`, `--slotted-focus-ring-color-invalid`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-radius-none`, `--slotted-radius-xs`, `--slotted-space-1`, `--slotted-space-2`, `--slotted-surface-sunken`, `--slotted-target-comfortable`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-danger-border`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
127
+ `--slotted-border-subtle`, `--slotted-border-width-thin`, `--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-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-inner-size-lg`, `--slotted-control-inner-size-md`, `--slotted-control-inner-size-sm`, `--slotted-control-invalid-edge-width`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-shadow-focus-geometry`, `--slotted-control-surface`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-currency-field-action-size`, `--slotted-currency-field-adornment-color`, `--slotted-currency-field-background`, `--slotted-currency-field-border-color`, `--slotted-currency-field-color`, `--slotted-currency-field-disabled-background`, `--slotted-currency-field-disabled-border-color`, `--slotted-currency-field-disabled-color`, `--slotted-currency-field-display-font-size`, `--slotted-currency-field-hover-border-color`, `--slotted-currency-field-icon-size-min`, `--slotted-currency-field-invalid-border-color`, `--slotted-currency-field-invalid-edge-width`, `--slotted-currency-field-invalid-focus-ring-color`, `--slotted-currency-field-placeholder-color`, `--slotted-currency-field-plain-hover-background`, `--slotted-currency-field-radius`, `--slotted-currency-field-readonly-background`, `--slotted-currency-field-readonly-border-color`, `--slotted-currency-field-scrub-active-color`, `--slotted-currency-field-shadow`, `--slotted-currency-field-stepper-active-background`, `--slotted-currency-field-stepper-color`, `--slotted-currency-field-stepper-disabled-background`, `--slotted-currency-field-stepper-disabled-color`, `--slotted-currency-field-stepper-hover-background`, `--slotted-currency-field-stepper-size`, `--slotted-currency-field-subtle-background`, `--slotted-currency-field-subtle-border-color`, `--slotted-currency-field-subtle-hover-background`, `--slotted-currency-field-symbol-color`, `--slotted-currency-field-symbol-font-size`, `--slotted-currency-field-underline-color`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-focus-ring-color`, `--slotted-focus-ring-color-invalid`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-font-size-4xl`, `--slotted-font-size-xl`, `--slotted-font-weight-medium`, `--slotted-font-weight-regular`, `--slotted-letter-spacing-tighter`, `--slotted-line-height-4xl`, `--slotted-radius-none`, `--slotted-radius-xs`, `--slotted-space-1`, `--slotted-space-2`, `--slotted-space-3`, `--slotted-surface-sunken`, `--slotted-target-comfortable`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-danger-border`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
125
128
 
126
129
  ## Examples
127
130
 
@@ -127,7 +127,7 @@
127
127
  "type": "PlainDate | null",
128
128
  "defaultValue": "—",
129
129
  "appliesTo": "SlDateField",
130
- "description": "The date the control shows. Present means the consumer owns it: the control asks and waits rather than moving it."
130
+ "description": "The date the control shows. Present means the consumer owns it: the control asks and waits rather than moving it. PlainDate is exported by @slotted/core/date. parseISODate(text) returns a PlainDate or null, and toISODate(date) returns 'YYYY-MM-DD'."
131
131
  },
132
132
  {
133
133
  "name": "defaultValue",
@@ -136,6 +136,13 @@
136
136
  "appliesTo": "SlDateField",
137
137
  "description": "The date the control starts from when nobody else writes one. Read once, in ngOnInit, because Angular binds inputs after it constructs a component."
138
138
  },
139
+ {
140
+ "name": "granularity",
141
+ "type": "'day' | 'month'",
142
+ "defaultValue": "day",
143
+ "appliesTo": "SlDateField",
144
+ "description": "What the control holds. month shows the month and the year segments in the locale’s order, takes the first day of the month as its value, and submits YYYY-MM through name."
145
+ },
139
146
  {
140
147
  "name": "min",
141
148
  "type": "PlainDate",
@@ -40,8 +40,9 @@ Excerpt — not a complete module
40
40
 
41
41
  | Name | Type | Default | Applies to | Description |
42
42
  | --- | --- | --- | --- | --- |
43
- | `value` | `PlainDate \| null` | — | SlDateField | The date the control shows. Present means the consumer owns it: the control asks and waits rather than moving it. |
43
+ | `value` | `PlainDate \| null` | — | SlDateField | The date the control shows. Present means the consumer owns it: the control asks and waits rather than moving it. PlainDate is exported by @slotted/core/date. parseISODate(text) returns a PlainDate or null, and toISODate(date) returns 'YYYY-MM-DD'. |
44
44
  | `defaultValue` | `PlainDate \| null` | — | SlDateField | The date the control starts from when nobody else writes one. Read once, in ngOnInit, because Angular binds inputs after it constructs a component. |
45
+ | `granularity` | `'day' \| 'month'` | day | SlDateField | What the control holds. month shows the month and the year segments in the locale’s order, takes the first day of the month as its value, and submits YYYY-MM through name. |
45
46
  | `min` | `PlainDate` | — | SlDateField | The earliest date the control accepts. Reported through each segment’s aria-valuemin, and as the slottedDateRange form error. |
46
47
  | `max` | `PlainDate` | — | SlDateField | The latest date the control accepts, on the same terms as min. |
47
48
  | `isDateUnavailable` | `(date: PlainDate) => boolean` | — | SlDateField | Refuses particular dates — a weekend, a holiday, a day already booked. Reported as the slottedDateUnavailable form error. |
@@ -877,6 +877,42 @@ export class DatePickerInvoiceDue {
877
877
  }
878
878
  ```
879
879
 
880
+ ### iso-date.ts
881
+
882
+ Example
883
+
884
+ ```ts
885
+ import { Component, computed, signal } from '@angular/core';
886
+ import type { CalendarValue } from '@slotted/angular/calendar';
887
+ import { SlDatePicker } from '@slotted/angular/date-picker';
888
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
889
+ import { isPlainDate, parseISODate, toISODate } from '@slotted/core/date';
890
+
891
+ @Component({
892
+ selector: 'app-date-picker-iso-date',
893
+ imports: [SlDatePicker, SlField, SlFieldDescription, SlFieldLabel],
894
+ template: `
895
+ <div slField>
896
+ <label slFieldLabel>Statement date</label>
897
+ <div slDatePicker [value]="date()" (valueChange)="set($event.value)"></div>
898
+ <span slFieldDescription>{{ summary() }}</span>
899
+ </div>
900
+ `,
901
+ })
902
+ export class DatePickerIsoDate {
903
+ /* The API carries the date as text; the picker holds a PlainDate. */
904
+ protected readonly iso = signal('2026-10-19');
905
+ protected readonly date = computed(() => parseISODate(this.iso()));
906
+ protected readonly summary = computed(() =>
907
+ this.iso() === '' ? 'No date sent.' : `The API receives ${this.iso()}.`,
908
+ );
909
+
910
+ protected set(value: CalendarValue): void {
911
+ this.iso.set(isPlainDate(value) ? toISODate(value) : '');
912
+ }
913
+ }
914
+ ```
915
+
880
916
  ### locale.ts
881
917
 
882
918
  Example