@slotted/styles 0.1.0-beta.0 → 0.1.0-beta.10

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 (176) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +31 -32
  4. package/src/action-sheet/action-sheet.css +36 -36
  5. package/src/alert/alert.css +43 -35
  6. package/src/alert/alert.tokens.json +5 -0
  7. package/src/app-shell/app-shell.css +356 -301
  8. package/src/aspect-ratio/aspect-ratio.css +9 -9
  9. package/src/attachment/attachment.css +91 -99
  10. package/src/avatar/avatar.css +71 -41
  11. package/src/avatar/avatar.tokens.json +7 -0
  12. package/src/avatar-group/avatar-group.css +21 -22
  13. package/src/badge/badge.css +45 -37
  14. package/src/badge/badge.tokens.json +5 -0
  15. package/src/breadcrumb/breadcrumb.css +37 -37
  16. package/src/button/button.css +139 -64
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +76 -72
  19. package/src/button-group/button-group.tokens.json +2 -0
  20. package/src/calendar/calendar.css +93 -103
  21. package/src/card/card.css +54 -61
  22. package/src/carousel/carousel.css +150 -161
  23. package/src/cascader/cascader.css +152 -153
  24. package/src/cascader/cascader.tokens.json +1 -0
  25. package/src/chart/chart.css +242 -239
  26. package/src/chart/chart.tokens.json +1 -0
  27. package/src/checkbox/checkbox.css +119 -124
  28. package/src/checkbox-group/checkbox-group.css +7 -7
  29. package/src/code-block/code-block.css +81 -85
  30. package/src/collapsible/collapsible.css +69 -76
  31. package/src/color-picker/color-picker.css +83 -91
  32. package/src/column-manager/column-manager.css +106 -114
  33. package/src/combobox/combobox.css +132 -107
  34. package/src/combobox/combobox.tokens.json +1 -0
  35. package/src/command-palette/command-palette.css +84 -90
  36. package/src/container/container.css +24 -24
  37. package/src/context-menu/context-menu.css +8 -8
  38. package/src/currency-field/currency-field.css +210 -88
  39. package/src/currency-field/currency-field.tokens.json +13 -0
  40. package/src/dashboard-grid/dashboard-grid.css +148 -116
  41. package/src/data-grid/data-grid.css +504 -469
  42. package/src/data-grid/data-grid.tokens.json +2 -0
  43. package/src/data-list/data-list.css +81 -70
  44. package/src/data-list/data-list.tokens.json +2 -1
  45. package/src/date-field/date-field.css +55 -52
  46. package/src/date-field/date-field.tokens.json +1 -0
  47. package/src/date-picker/date-picker.css +40 -42
  48. package/src/date-range-picker/date-range-picker.css +114 -118
  49. package/src/datetime-field/datetime-field.css +78 -80
  50. package/src/datetime-field/datetime-field.tokens.json +1 -0
  51. package/src/datetime-picker/datetime-picker.css +61 -63
  52. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  53. package/src/description-list/description-list.css +61 -64
  54. package/src/detail-panel/detail-panel.css +70 -70
  55. package/src/dialog/dialog.css +334 -153
  56. package/src/dialog/dialog.tokens.json +5 -0
  57. package/src/divider/divider.css +18 -18
  58. package/src/drawer/drawer.css +186 -209
  59. package/src/entity-picker/entity-picker.css +238 -241
  60. package/src/entity-picker/entity-picker.tokens.json +1 -0
  61. package/src/event-calendar/event-calendar.css +343 -385
  62. package/src/field/field.css +74 -78
  63. package/src/field-group/field-group.css +22 -25
  64. package/src/filter-bar/filter-bar.css +193 -209
  65. package/src/form/form.css +34 -24
  66. package/src/form/form.tokens.json +1 -0
  67. package/src/fullscreen/fullscreen.css +24 -25
  68. package/src/grid/grid.css +28 -28
  69. package/src/highlight/highlight.css +6 -6
  70. package/src/hover-card/hover-card.css +6 -6
  71. package/src/icon/icon.css +19 -15
  72. package/src/icon/icon.tokens.json +1 -0
  73. package/src/image/image.css +39 -39
  74. package/src/import-export-center/import-export-center.css +135 -156
  75. package/src/inline/inline.css +27 -27
  76. package/src/inline-message/inline-message.css +52 -28
  77. package/src/inline-message/inline-message.tokens.json +4 -0
  78. package/src/kbd/kbd.css +30 -26
  79. package/src/link/link.css +15 -15
  80. package/src/list/list.css +44 -17
  81. package/src/list/list.tokens.json +4 -0
  82. package/src/list-item/list-item.css +80 -66
  83. package/src/list-item/list-item.tokens.json +7 -0
  84. package/src/listbox/listbox.css +56 -59
  85. package/src/loading-overlay/loading-overlay.css +75 -92
  86. package/src/markdown/markdown.css +17 -17
  87. package/src/menu/menu.css +83 -63
  88. package/src/menubar/menubar.css +13 -13
  89. package/src/message/message.css +182 -202
  90. package/src/message/message.tokens.json +5 -0
  91. package/src/message-scroller/message-scroller.css +41 -42
  92. package/src/multi-select/multi-select.css +152 -145
  93. package/src/multi-select/multi-select.tokens.json +1 -0
  94. package/src/navigation-menu/navigation-menu.css +167 -188
  95. package/src/notification-center/notification-center.css +140 -148
  96. package/src/notification-center/notification-center.tokens.json +3 -0
  97. package/src/number-field/number-field.css +84 -83
  98. package/src/number-field/number-field.tokens.json +1 -0
  99. package/src/otp-input/otp-input.css +67 -57
  100. package/src/otp-input/otp-input.tokens.json +1 -0
  101. package/src/page/page.css +23 -23
  102. package/src/page-header/page-header.css +268 -281
  103. package/src/page-header/page-header.tokens.json +1 -0
  104. package/src/pagination/pagination.css +68 -72
  105. package/src/popover/popover.css +40 -49
  106. package/src/progress-indicator/progress-indicator.css +177 -120
  107. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  108. package/src/prompt-composer/prompt-composer.css +221 -102
  109. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  110. package/src/prose/prose.css +71 -75
  111. package/src/radio-group/radio-group.css +98 -103
  112. package/src/rating/rating.css +136 -132
  113. package/src/rating/rating.tokens.json +1 -0
  114. package/src/result-state/result-state.css +74 -77
  115. package/src/runtime-properties.mjs +2 -0
  116. package/src/saved-views/saved-views.css +41 -47
  117. package/src/scroll-area/scroll-area.css +39 -32
  118. package/src/section/section.css +161 -41
  119. package/src/section/section.tokens.json +7 -2
  120. package/src/segmented-control/segmented-control.css +254 -97
  121. package/src/segmented-control/segmented-control.tokens.json +15 -11
  122. package/src/select/select.css +118 -117
  123. package/src/select/select.tokens.json +1 -0
  124. package/src/side-navigation/side-navigation.css +179 -182
  125. package/src/side-navigation/side-navigation.tokens.json +1 -0
  126. package/src/skeleton/skeleton.css +47 -48
  127. package/src/slider/slider.css +86 -88
  128. package/src/sparkline/sparkline.css +62 -40
  129. package/src/sparkline/sparkline.tokens.json +2 -0
  130. package/src/spinner/spinner.css +39 -182
  131. package/src/spinner/spinner.tokens.json +0 -2
  132. package/src/split-button/split-button.css +30 -31
  133. package/src/split-button/split-button.tokens.json +1 -0
  134. package/src/splitter/splitter.css +35 -35
  135. package/src/stack/stack.css +24 -24
  136. package/src/stat-card/stat-card.css +341 -224
  137. package/src/stat-card/stat-card.tokens.json +3 -0
  138. package/src/status-indicator/status-indicator.css +28 -28
  139. package/src/stepper/stepper.css +58 -62
  140. package/src/switch/switch.css +86 -92
  141. package/src/table/table.css +310 -165
  142. package/src/table/table.tokens.json +6 -0
  143. package/src/table-of-contents/table-of-contents.css +51 -54
  144. package/src/tabs/tabs.css +330 -302
  145. package/src/tabs/tabs.tokens.json +8 -5
  146. package/src/tag/tag.css +79 -71
  147. package/src/tag/tag.tokens.json +9 -0
  148. package/src/tags-input/tags-input.css +145 -82
  149. package/src/tags-input/tags-input.tokens.json +7 -1
  150. package/src/text-field/text-field.css +132 -136
  151. package/src/text-field/text-field.tokens.json +1 -0
  152. package/src/textarea/textarea.css +31 -28
  153. package/src/textarea/textarea.tokens.json +1 -0
  154. package/src/time-field/time-field.css +72 -69
  155. package/src/time-field/time-field.tokens.json +1 -0
  156. package/src/time-picker/time-picker.css +56 -58
  157. package/src/time-range-picker/time-range-picker.css +126 -133
  158. package/src/timeline/timeline.css +254 -266
  159. package/src/timeline/timeline.tokens.json +5 -0
  160. package/src/toast/toast.css +89 -90
  161. package/src/toast/toast.tokens.json +5 -0
  162. package/src/toggle/toggle.css +62 -25
  163. package/src/toggle/toggle.tokens.json +8 -0
  164. package/src/toggle-group/toggle-group.css +106 -60
  165. package/src/toggle-group/toggle-group.tokens.json +10 -0
  166. package/src/toolbar/toolbar.css +30 -35
  167. package/src/tooltip/tooltip.css +26 -26
  168. package/src/top-navigation/top-navigation.css +243 -259
  169. package/src/tour/tour.css +51 -60
  170. package/src/transfer/transfer.css +160 -164
  171. package/src/tree/tree.css +103 -111
  172. package/src/typography/typography.css +40 -36
  173. package/src/typography/typography.tokens.json +1 -0
  174. package/src/upload/upload.css +224 -224
  175. package/src/visually-hidden/visually-hidden.css +1 -1
  176. package/src/wizard/wizard.css +185 -197
@@ -18,7 +18,7 @@
18
18
  * order is the browser's locale rather than the application's. The value
19
19
  * reaches a form through a hidden input carrying `YYYY-MM-DDTHH:mm:ss`.
20
20
  */
21
- [data-ui='datetime-field'][data-part='root'] {
21
+ [data-ui-datetime-field][data-part-root] {
22
22
  /**
23
23
  * Type, height, inline padding, gap and glyph size come from the control
24
24
  * scales — the only ones the theme restates per density — so a datetime in
@@ -89,7 +89,7 @@
89
89
  * begin from it — the arithmetic `text-field` records, holding at every step
90
90
  * and every density.
91
91
  */
92
- [data-ui='datetime-field'][data-part='root']:has(> [data-part='clear']:last-child) {
92
+ [data-ui-datetime-field][data-part-root]:has(> [data-part-clear]:last-child) {
93
93
  padding-inline-end: max(
94
94
  0px,
95
95
  calc(var(--_padding-inline) - (var(--_action-size) - var(--_icon-size)) / 2)
@@ -111,7 +111,7 @@
111
111
  * the focus. Each half stays one flex item, so the value never breaks
112
112
  * inside a date or inside a time.
113
113
  */
114
- [data-ui='datetime-field'] [data-part='segments'] {
114
+ [data-ui-datetime-field] [data-part-segments] {
115
115
  align-items: center;
116
116
  column-gap: var(--_half-gap);
117
117
  /* It says what it is before it is pressed. A datetime is typed, so the
@@ -137,7 +137,7 @@
137
137
  * a field that had done nothing but inherit. The isolation keeps the decision
138
138
  * inside the half, so the frame around it still reads with the document.
139
139
  */
140
- [data-ui='datetime-field'] [data-part='half'] {
140
+ [data-ui-datetime-field] [data-part-half] {
141
141
  align-items: center;
142
142
  direction: ltr;
143
143
  display: flex;
@@ -158,7 +158,7 @@
158
158
  * the document — which is the reason every other family in this library
159
159
  * reaches for it too.
160
160
  */
161
- [data-ui='datetime-field'] [data-part='segments']:dir(rtl) {
161
+ [data-ui-datetime-field] [data-part-segments]:dir(rtl) {
162
162
  justify-content: flex-end;
163
163
  }
164
164
 
@@ -169,7 +169,7 @@
169
169
  * single digit becomes two: `1ch` is the advance of a digit in a tabular
170
170
  * face, and `--_digits` is how many the field can hold.
171
171
  */
172
- [data-ui='datetime-field'] [data-part='segment'] {
172
+ [data-ui-datetime-field] [data-part-segment] {
173
173
  --_digits: 2;
174
174
 
175
175
  background-color: transparent;
@@ -206,7 +206,7 @@
206
206
 
207
207
  /* The one field with four digits rather than two. Stated here rather than in
208
208
  the markup, so a year is the same width in both bindings and the harness. */
209
- [data-ui='datetime-field'] [data-part='segment'][data-field='year'] {
209
+ [data-ui-datetime-field] [data-part-segment][data-field='year'] {
210
210
  --_digits: 4;
211
211
  }
212
212
 
@@ -217,7 +217,7 @@
217
217
  * first of those, and a floor clips none of them. The digit face is dropped
218
218
  * here for the same reason: tabular figures inside a word letter-space it.
219
219
  */
220
- [data-ui='datetime-field'] [data-part='segment'][data-field='dayPeriod'] {
220
+ [data-ui-datetime-field] [data-part-segment][data-field='dayPeriod'] {
221
221
  font-variant-numeric: normal;
222
222
  min-inline-size: var(--slotted-datetime-field-period-min-inline-size, 2ch);
223
223
  /* An abbreviation, in whatever case the locale itself writes it. */
@@ -231,7 +231,7 @@
231
231
  * rather than in English — and a value being typed has to keep saying what
232
232
  * is missing.
233
233
  */
234
- [data-ui='datetime-field'] [data-part='segment'][data-placeholder] {
234
+ [data-ui-datetime-field] [data-part-segment][data-placeholder] {
235
235
  color: var(--slotted-datetime-field-placeholder-color, var(--slotted-text-muted, GrayText));
236
236
  }
237
237
 
@@ -240,7 +240,7 @@
240
240
  * name already carries the whole value in words, so a screen reader reading
241
241
  * "slash" between two numbers would be reading punctuation aloud.
242
242
  */
243
- [data-ui='datetime-field'] [data-part='literal'] {
243
+ [data-ui-datetime-field] [data-part-literal] {
244
244
  color: var(--slotted-datetime-field-literal-color, var(--slotted-text-muted, GrayText));
245
245
  flex: 0 0 auto;
246
246
  /* Its own bidi run: a colon between two numbers takes the paragraph's
@@ -258,7 +258,7 @@
258
258
  * whitespace is not drawn at all, and the row's column gap separates the
259
259
  * halves instead.
260
260
  */
261
- [data-ui='datetime-field'] [data-part='literal'][data-boundary] {
261
+ [data-ui-datetime-field] [data-part-literal][data-boundary] {
262
262
  margin-inline-end: 0;
263
263
  }
264
264
 
@@ -273,7 +273,7 @@
273
273
  * It is a real `input`, so a mobile keyboard opens and the platform supplies
274
274
  * every text-editing key the reader already knows.
275
275
  */
276
- [data-ui='datetime-field'] [data-part='duration'] {
276
+ [data-ui-datetime-field] [data-part-duration] {
277
277
  appearance: none;
278
278
  background-color: transparent;
279
279
  border: 0;
@@ -297,11 +297,11 @@
297
297
 
298
298
  /* Left-to-right content in a right-to-left field still sits at the reading
299
299
  edge, which is the treatment every form gives a phone number or an IBAN. */
300
- [data-ui='datetime-field'] [data-part='duration']:dir(rtl) {
300
+ [data-ui-datetime-field] [data-part-duration]:dir(rtl) {
301
301
  text-align: right;
302
302
  }
303
303
 
304
- [data-ui='datetime-field'] [data-part='duration']::placeholder {
304
+ [data-ui-datetime-field] [data-part-duration]::placeholder {
305
305
  color: var(--slotted-datetime-field-placeholder-color, var(--slotted-text-muted, GrayText));
306
306
  }
307
307
 
@@ -313,7 +313,7 @@
313
313
  * library already has for "and then"; it is direction-sensitive, so it turns
314
314
  * with the document rather than pointing out of it.
315
315
  */
316
- [data-ui='datetime-field'] [data-part='preview'] {
316
+ [data-ui-datetime-field] [data-part-preview] {
317
317
  /**
318
318
  * One line box, not a flex row. The chevron sits *in* the line rather than
319
319
  * beside it, which is the only way it can be aligned to the text at all —
@@ -351,7 +351,7 @@
351
351
  * marked `directional`: it points along the reading direction, so the `icon`
352
352
  * family turns it in a right-to-left context.
353
353
  */
354
- [data-ui='datetime-field'] [data-part='preview'] > [data-ui='icon'] {
354
+ [data-ui-datetime-field] [data-part-preview] > [data-ui-icon] {
355
355
  --slotted-icon-size: var(--_mark);
356
356
 
357
357
  /**
@@ -377,7 +377,7 @@
377
377
  * preview whenever it differs from today — and this rule only lifts the date
378
378
  * out of the surrounding time so the eye lands on the part that moved.
379
379
  */
380
- [data-ui='datetime-field'] [data-part='preview'][data-rolls-day] > [data-part='preview-date'] {
380
+ [data-ui-datetime-field] [data-part-preview][data-rolls-day] > [data-part-preview-date] {
381
381
  color: var(--slotted-datetime-field-preview-day-color, var(--slotted-tone-accent-text));
382
382
  font-weight: var(--slotted-font-weight-semibold, 600);
383
383
  }
@@ -388,7 +388,7 @@
388
388
  * border is the accent the preview is written in, so the two marks are one
389
389
  * statement rather than two.
390
390
  */
391
- [data-ui='datetime-field'][data-part='root'][data-relative] {
391
+ [data-ui-datetime-field][data-part-root][data-relative] {
392
392
  border-color: var(
393
393
  --slotted-datetime-field-relative-border-color,
394
394
  var(--slotted-tone-accent-border)
@@ -401,7 +401,7 @@
401
401
  * holding an `md` control is a field and a control disagreeing about one row.
402
402
  */
403
403
 
404
- [data-ui='datetime-field'][data-part='root'][data-size='sm'] {
404
+ [data-ui-datetime-field][data-part-root][data-size='sm'] {
405
405
  --_font-size: var(--slotted-control-font-size-sm, 12px);
406
406
  --_height: var(--slotted-control-height-sm, 30px);
407
407
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
@@ -409,7 +409,7 @@
409
409
  --_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));
410
410
  }
411
411
 
412
- [data-ui='datetime-field'][data-part='root'][data-size='md'] {
412
+ [data-ui-datetime-field][data-part-root][data-size='md'] {
413
413
  --_font-size: var(--slotted-control-font-size-md, 13px);
414
414
  --_height: var(--slotted-control-height-md, 34px);
415
415
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -417,7 +417,7 @@
417
417
  --_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));
418
418
  }
419
419
 
420
- [data-ui='datetime-field'][data-part='root'][data-size='lg'] {
420
+ [data-ui-datetime-field][data-part-root][data-size='lg'] {
421
421
  --_font-size: var(--slotted-control-font-size-lg, 14px);
422
422
  --_height: var(--slotted-control-height-lg, 38px);
423
423
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
@@ -431,7 +431,7 @@
431
431
  * shows one frame twice rather than two frames.
432
432
  */
433
433
 
434
- [data-ui='datetime-field'][data-part='root'][data-variant='subtle'] {
434
+ [data-ui-datetime-field][data-part-root][data-variant='subtle'] {
435
435
  background-color: var(
436
436
  --slotted-datetime-field-subtle-background,
437
437
  var(--slotted-surface-sunken, Canvas)
@@ -442,7 +442,7 @@
442
442
  );
443
443
  }
444
444
 
445
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'] {
445
+ [data-ui-datetime-field][data-part-root][data-variant='plain'] {
446
446
  background-color: transparent;
447
447
  border-color: transparent;
448
448
  border-radius: var(--slotted-radius-none, 0px);
@@ -455,8 +455,8 @@
455
455
  * the value: an adornment annotates, and a reader looking for the datetime
456
456
  * should not have to step over it.
457
457
  */
458
- [data-ui='datetime-field'] > [data-part='start'],
459
- [data-ui='datetime-field'] > [data-part='end'] {
458
+ [data-ui-datetime-field] > [data-part-start],
459
+ [data-ui-datetime-field] > [data-part-end] {
460
460
  --slotted-icon-size: var(--_icon-size);
461
461
 
462
462
  align-items: center;
@@ -468,8 +468,8 @@
468
468
  unicode-bidi: plaintext;
469
469
  }
470
470
 
471
- [data-ui='datetime-field'] > [data-part='start'] > svg,
472
- [data-ui='datetime-field'] > [data-part='end'] > svg {
471
+ [data-ui-datetime-field] > [data-part-start] > svg,
472
+ [data-ui-datetime-field] > [data-part-end] > svg {
473
473
  block-size: var(--_icon-size);
474
474
  inline-size: var(--_icon-size);
475
475
  }
@@ -481,7 +481,7 @@
481
481
  * page. It empties both halves: half a value is not a value this family
482
482
  * holds.
483
483
  */
484
- [data-ui='datetime-field'] > [data-part='clear'] {
484
+ [data-ui-datetime-field] > [data-part-clear] {
485
485
  align-items: center;
486
486
  appearance: none;
487
487
  background-color: transparent;
@@ -511,7 +511,7 @@
511
511
  * larger one alone, which is the correction `docs/token-foundation.md`
512
512
  * leaves to the family rather than to the theme.
513
513
  */
514
- [data-ui='datetime-field'] > [data-part='clear']::after {
514
+ [data-ui-datetime-field] > [data-part-clear]::after {
515
515
  content: '';
516
516
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
517
517
  position: absolute;
@@ -522,28 +522,28 @@
522
522
  the hit area above grows to 44 pixels around them. After an end
523
523
  adornment — a picker's trigger — it does not reach back across it. */
524
524
  @media (pointer: coarse) {
525
- [data-ui='datetime-field'] > [data-part='clear']::after {
525
+ [data-ui-datetime-field] > [data-part-clear]::after {
526
526
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
527
527
  }
528
528
 
529
- [data-ui='datetime-field'] > [data-part='end'] + [data-part='clear']::after {
529
+ [data-ui-datetime-field] > [data-part-end] + [data-part-clear]::after {
530
530
  inset-inline-start: 0;
531
531
  }
532
532
  }
533
533
 
534
534
  /* The cross is drawn at the control's own icon step. */
535
- [data-ui='datetime-field'] > [data-part='clear'] {
535
+ [data-ui-datetime-field] > [data-part-clear] {
536
536
  --slotted-icon-size: var(--_icon-size);
537
537
  }
538
538
 
539
- [data-ui='datetime-field'] > [data-part='clear']:hover:not(:disabled):not([data-disabled]) {
539
+ [data-ui-datetime-field] > [data-part-clear]:hover:not(:disabled):not([data-disabled]) {
540
540
  background-color: var(
541
541
  --slotted-datetime-field-action-hover-background,
542
542
  var(--slotted-tone-secondary-subtle-hover)
543
543
  );
544
544
  }
545
545
 
546
- [data-ui='datetime-field'] > [data-part='clear']:active:not(:disabled):not([data-disabled]) {
546
+ [data-ui-datetime-field] > [data-part-clear]:active:not(:disabled):not([data-disabled]) {
547
547
  background-color: var(
548
548
  --slotted-datetime-field-action-active-background,
549
549
  var(--slotted-tone-secondary-subtle-active)
@@ -556,7 +556,7 @@
556
556
  * and a ring around the whole frame would sit still while focus moved inside
557
557
  * it.
558
558
  */
559
- [data-ui='datetime-field'] > [data-part='clear']:focus-visible {
559
+ [data-ui-datetime-field] > [data-part-clear]:focus-visible {
560
560
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
561
561
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
562
562
  }
@@ -567,7 +567,7 @@
567
567
  * one it can meet, which is the order `STATE_PRECEDENCE` sets.
568
568
  */
569
569
 
570
- [data-ui='datetime-field'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
570
+ [data-ui-datetime-field][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
571
571
  [data-invalid]
572
572
  ):not([data-incomplete]) {
573
573
  border-color: var(
@@ -576,16 +576,16 @@
576
576
  );
577
577
  }
578
578
 
579
- [data-ui='datetime-field'][data-part='root'][data-variant='subtle']:hover:not(
580
- [data-disabled]
581
- ):not([data-readonly]):not([data-invalid]) {
579
+ [data-ui-datetime-field][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
580
+ [data-readonly]
581
+ ):not([data-invalid]) {
582
582
  background-color: var(
583
583
  --slotted-datetime-field-subtle-hover-background,
584
584
  var(--slotted-tone-secondary-subtle-hover)
585
585
  );
586
586
  }
587
587
 
588
- [data-ui='datetime-field'][data-part='root'][data-variant='plain']:hover:not([data-disabled]):not(
588
+ [data-ui-datetime-field][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
589
589
  [data-readonly]
590
590
  ):not([data-invalid]) {
591
591
  background-color: var(
@@ -624,7 +624,7 @@
624
624
  * reminder — louder at rest than `invalid` is, for a state that is weaker
625
625
  * than it.
626
626
  */
627
- [data-ui='datetime-field'][data-part='root'][data-incomplete]:not([data-disabled]):not(
627
+ [data-ui-datetime-field][data-part-root][data-incomplete]:not([data-disabled]):not(
628
628
  [data-readonly]
629
629
  ):not([data-invalid]):not(:focus-within) {
630
630
  border-color: var(
@@ -649,12 +649,12 @@
649
649
  * had before the press. The expression is an `input` and takes the frame's
650
650
  * ring the same way from the other side.
651
651
  */
652
- [data-ui='datetime-field'][data-part='root']:has([data-part='segment']:focus),
653
- [data-ui='datetime-field'][data-part='root']:has([data-part='duration']:focus) {
652
+ [data-ui-datetime-field][data-part-root]:has([data-part-segment]:focus),
653
+ [data-ui-datetime-field][data-part-root]:has([data-part-duration]:focus) {
654
654
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
655
655
  var(--slotted-focus-ring-color, Highlight);
656
656
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
657
- outline-offset: var(--slotted-focus-ring-offset, 2px);
657
+ outline-offset: var(--slotted-control-focus-ring-offset, var(--slotted-focus-ring-offset, 2px));
658
658
  }
659
659
 
660
660
  /**
@@ -664,17 +664,13 @@
664
664
  * shadow that appears only under focus is a cell that changes size when it
665
665
  * is used.
666
666
  */
667
- [data-ui='datetime-field'][data-part='root'][data-variant='plain']:has(
668
- [data-part='segment']:focus
669
- ),
670
- [data-ui='datetime-field'][data-part='root'][data-variant='plain']:has(
671
- [data-part='duration']:focus
672
- ) {
667
+ [data-ui-datetime-field][data-part-root][data-variant='plain']:has([data-part-segment]:focus),
668
+ [data-ui-datetime-field][data-part-root][data-variant='plain']:has([data-part-duration]:focus) {
673
669
  box-shadow: none;
674
670
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
675
671
  }
676
672
 
677
- [data-ui='datetime-field'] [data-part='segment']:focus {
673
+ [data-ui-datetime-field] [data-part-segment]:focus {
678
674
  background-color: var(
679
675
  --slotted-datetime-field-segment-focus-background,
680
676
  var(--slotted-tone-accent-solid)
@@ -691,7 +687,7 @@
691
687
  * The ring is retargeted rather than repainted, so the frame's outline, the
692
688
  * shadow under it and the ring on the clear button all move at once.
693
689
  */
694
- [data-ui='datetime-field'][data-part='root'][data-invalid] {
690
+ [data-ui-datetime-field][data-part-root][data-invalid] {
695
691
  --slotted-focus-ring-color: var(
696
692
  --slotted-datetime-field-invalid-focus-ring-color,
697
693
  var(--slotted-focus-ring-color-invalid, Highlight)
@@ -719,19 +715,19 @@
719
715
  box-shadow: var(--_invalid-edge);
720
716
  }
721
717
 
722
- [data-ui='datetime-field'][data-part='root'][data-invalid]:has([data-part='segment']:focus),
723
- [data-ui='datetime-field'][data-part='root'][data-invalid]:has([data-part='duration']:focus) {
718
+ [data-ui-datetime-field][data-part-root][data-invalid]:has([data-part-segment]:focus),
719
+ [data-ui-datetime-field][data-part-root][data-invalid]:has([data-part-duration]:focus) {
724
720
  box-shadow:
725
721
  var(--_invalid-edge),
726
722
  var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
727
723
  var(--slotted-focus-ring-color, Highlight);
728
724
  }
729
725
 
730
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
731
- [data-part='segment']:focus
726
+ [data-ui-datetime-field][data-part-root][data-variant='plain'][data-invalid]:has(
727
+ [data-part-segment]:focus
732
728
  ),
733
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
734
- [data-part='duration']:focus
729
+ [data-ui-datetime-field][data-part-root][data-variant='plain'][data-invalid]:has(
730
+ [data-part-duration]:focus
735
731
  ) {
736
732
  /* The ring lies inside the box here, over the border and an edge as wide as
737
733
  it; the edge reaches past the ring. */
@@ -749,25 +745,28 @@
749
745
  * control draws its ring double, which a valid ring is not.
750
746
  */
751
747
  @media (forced-colors: active) {
752
- [data-ui='datetime-field'][data-part='root'][data-invalid] {
748
+ [data-ui-datetime-field][data-part-root][data-invalid] {
753
749
  outline: var(--_invalid-edge-width) solid CanvasText;
754
750
  outline-offset: calc(
755
751
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
756
752
  );
757
753
  }
758
754
 
759
- [data-ui='datetime-field'][data-part='root'][data-invalid]:has([data-part='segment']:focus),
760
- [data-ui='datetime-field'][data-part='root'][data-invalid]:has([data-part='duration']:focus) {
755
+ [data-ui-datetime-field][data-part-root][data-invalid]:has([data-part-segment]:focus),
756
+ [data-ui-datetime-field][data-part-root][data-invalid]:has([data-part-duration]:focus) {
761
757
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
762
758
  var(--slotted-focus-ring-color, Highlight);
763
- outline-offset: var(--slotted-focus-ring-offset, 2px);
759
+ outline-offset: var(
760
+ --slotted-control-focus-ring-offset,
761
+ var(--slotted-focus-ring-offset, 2px)
762
+ );
764
763
  }
765
764
 
766
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
767
- [data-part='segment']:focus
765
+ [data-ui-datetime-field][data-part-root][data-variant='plain'][data-invalid]:has(
766
+ [data-part-segment]:focus
768
767
  ),
769
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
770
- [data-part='duration']:focus
768
+ [data-ui-datetime-field][data-part-root][data-variant='plain'][data-invalid]:has(
769
+ [data-part-duration]:focus
771
770
  ) {
772
771
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
773
772
  var(--slotted-focus-ring-color, Highlight);
@@ -782,13 +781,13 @@
782
781
  * mistakable for disabled: the value is still real and still submitted. The
783
782
  * ground says "not yours to change" and the ink says nothing at all.
784
783
  */
785
- [data-ui='datetime-field'][data-part='root'][data-readonly],
786
- [data-ui='datetime-field'][data-part='root'][data-readonly] [data-part='segments'],
787
- [data-ui='datetime-field'][data-part='root'][data-readonly] [data-part='segment'] {
784
+ [data-ui-datetime-field][data-part-root][data-readonly],
785
+ [data-ui-datetime-field][data-part-root][data-readonly] [data-part-segments],
786
+ [data-ui-datetime-field][data-part-root][data-readonly] [data-part-segment] {
788
787
  cursor: default;
789
788
  }
790
789
 
791
- [data-ui='datetime-field'][data-part='root'][data-readonly] {
790
+ [data-ui-datetime-field][data-part-root][data-readonly] {
792
791
  background-color: var(
793
792
  --slotted-datetime-field-readonly-background,
794
793
  var(--slotted-tone-secondary-subtle-hover)
@@ -800,7 +799,7 @@
800
799
  * datetime nobody can read is a field nobody can check, and a disabled form
801
800
  * still has to say what it holds.
802
801
  */
803
- [data-ui='datetime-field'][data-part='root'][data-disabled] {
802
+ [data-ui-datetime-field][data-part-root][data-disabled] {
804
803
  background-color: var(
805
804
  --slotted-datetime-field-disabled-background,
806
805
  var(--slotted-disabled-background)
@@ -815,23 +814,22 @@
815
814
  cursor: not-allowed;
816
815
  }
817
816
 
818
- [data-ui='datetime-field'][data-part='root'][data-disabled] [data-part='segments'],
819
- [data-ui='datetime-field'][data-part='root'][data-disabled] [data-part='segment'] {
817
+ [data-ui-datetime-field][data-part-root][data-disabled] [data-part-segments],
818
+ [data-ui-datetime-field][data-part-root][data-disabled] [data-part-segment] {
820
819
  cursor: not-allowed;
821
820
  }
822
821
 
823
- [data-ui='datetime-field'][data-part='root'][data-disabled] > [data-part='start'],
824
- [data-ui='datetime-field'][data-part='root'][data-disabled] > [data-part='end'],
825
- [data-ui='datetime-field'][data-part='root'][data-disabled] [data-part='literal'],
826
- [data-ui='datetime-field'][data-part='root'][data-disabled]
827
- [data-part='segment'][data-placeholder] {
822
+ [data-ui-datetime-field][data-part-root][data-disabled] > [data-part-start],
823
+ [data-ui-datetime-field][data-part-root][data-disabled] > [data-part-end],
824
+ [data-ui-datetime-field][data-part-root][data-disabled] [data-part-literal],
825
+ [data-ui-datetime-field][data-part-root][data-disabled] [data-part-segment][data-placeholder] {
828
826
  color: var(--slotted-disabled-foreground);
829
827
  }
830
828
 
831
829
  @media (forced-colors: active) {
832
830
  /* A transparent border has no system colour to be remapped to, so the
833
831
  `plain` control would lose its only edge where an edge matters most. */
834
- [data-ui='datetime-field'][data-part='root'][data-variant='plain'] {
832
+ [data-ui-datetime-field][data-part-root][data-variant='plain'] {
835
833
  border-color: ButtonBorder;
836
834
  }
837
835
 
@@ -839,7 +837,7 @@
839
837
  modes that are told apart by tone need a second signal. The expression
840
838
  borrows the highlight; the incomplete frame borrows the thicker border
841
839
  the system reserves for something asking to be finished. */
842
- [data-ui='datetime-field'][data-part='root'][data-relative] {
840
+ [data-ui-datetime-field][data-part-root][data-relative] {
843
841
  border-color: Highlight;
844
842
  }
845
843
 
@@ -2,6 +2,7 @@
2
2
  "--slotted-border-subtle",
3
3
  "--slotted-control-border-color",
4
4
  "--slotted-control-border-width",
5
+ "--slotted-control-focus-ring-offset",
5
6
  "--slotted-control-font-family",
6
7
  "--slotted-control-font-size-lg",
7
8
  "--slotted-control-font-size-md",