@slotted/styles 0.1.0-beta.8 → 0.1.0-beta.9

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 (128) 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 +35 -35
  6. package/src/app-shell/app-shell.css +280 -299
  7. package/src/aspect-ratio/aspect-ratio.css +9 -9
  8. package/src/attachment/attachment.css +91 -99
  9. package/src/avatar/avatar.css +41 -41
  10. package/src/avatar-group/avatar-group.css +21 -22
  11. package/src/badge/badge.css +37 -37
  12. package/src/breadcrumb/breadcrumb.css +37 -37
  13. package/src/button/button.css +88 -69
  14. package/src/button-group/button-group.css +69 -73
  15. package/src/calendar/calendar.css +93 -103
  16. package/src/card/card.css +54 -61
  17. package/src/carousel/carousel.css +150 -161
  18. package/src/cascader/cascader.css +147 -151
  19. package/src/chart/chart.css +225 -240
  20. package/src/checkbox/checkbox.css +119 -124
  21. package/src/checkbox-group/checkbox-group.css +7 -7
  22. package/src/code-block/code-block.css +81 -85
  23. package/src/collapsible/collapsible.css +69 -76
  24. package/src/color-picker/color-picker.css +83 -91
  25. package/src/column-manager/column-manager.css +106 -114
  26. package/src/combobox/combobox.css +99 -101
  27. package/src/command-palette/command-palette.css +84 -90
  28. package/src/container/container.css +24 -24
  29. package/src/context-menu/context-menu.css +8 -8
  30. package/src/currency-field/currency-field.css +99 -104
  31. package/src/dashboard-grid/dashboard-grid.css +104 -107
  32. package/src/data-grid/data-grid.css +458 -456
  33. package/src/data-grid/data-grid.tokens.json +2 -0
  34. package/src/data-list/data-list.css +67 -69
  35. package/src/date-field/date-field.css +50 -50
  36. package/src/date-picker/date-picker.css +40 -42
  37. package/src/date-range-picker/date-range-picker.css +114 -118
  38. package/src/datetime-field/datetime-field.css +73 -78
  39. package/src/datetime-picker/datetime-picker.css +61 -63
  40. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  41. package/src/description-list/description-list.css +61 -64
  42. package/src/detail-panel/detail-panel.css +70 -70
  43. package/src/dialog/dialog.css +300 -148
  44. package/src/divider/divider.css +18 -18
  45. package/src/drawer/drawer.css +186 -209
  46. package/src/entity-picker/entity-picker.css +220 -239
  47. package/src/event-calendar/event-calendar.css +343 -385
  48. package/src/field/field.css +74 -78
  49. package/src/field-group/field-group.css +22 -25
  50. package/src/filter-bar/filter-bar.css +193 -209
  51. package/src/form/form.css +21 -24
  52. package/src/fullscreen/fullscreen.css +24 -25
  53. package/src/grid/grid.css +28 -28
  54. package/src/highlight/highlight.css +6 -6
  55. package/src/hover-card/hover-card.css +6 -6
  56. package/src/icon/icon.css +15 -15
  57. package/src/image/image.css +39 -39
  58. package/src/import-export-center/import-export-center.css +135 -156
  59. package/src/inline/inline.css +27 -27
  60. package/src/inline-message/inline-message.css +28 -28
  61. package/src/kbd/kbd.css +26 -26
  62. package/src/link/link.css +15 -15
  63. package/src/list/list.css +20 -20
  64. package/src/list-item/list-item.css +66 -66
  65. package/src/listbox/listbox.css +56 -59
  66. package/src/loading-overlay/loading-overlay.css +75 -92
  67. package/src/markdown/markdown.css +17 -17
  68. package/src/menu/menu.css +63 -65
  69. package/src/menubar/menubar.css +13 -13
  70. package/src/message/message.css +174 -202
  71. package/src/message-scroller/message-scroller.css +41 -42
  72. package/src/multi-select/multi-select.css +131 -137
  73. package/src/navigation-menu/navigation-menu.css +167 -188
  74. package/src/notification-center/notification-center.css +134 -148
  75. package/src/number-field/number-field.css +76 -81
  76. package/src/otp-input/otp-input.css +48 -48
  77. package/src/page/page.css +23 -23
  78. package/src/page-header/page-header.css +219 -280
  79. package/src/pagination/pagination.css +68 -72
  80. package/src/popover/popover.css +40 -49
  81. package/src/progress-indicator/progress-indicator.css +85 -90
  82. package/src/prompt-composer/prompt-composer.css +94 -99
  83. package/src/prose/prose.css +71 -75
  84. package/src/radio-group/radio-group.css +98 -103
  85. package/src/rating/rating.css +132 -132
  86. package/src/result-state/result-state.css +74 -77
  87. package/src/saved-views/saved-views.css +41 -47
  88. package/src/scroll-area/scroll-area.css +32 -35
  89. package/src/section/section.css +16 -16
  90. package/src/segmented-control/segmented-control.css +77 -79
  91. package/src/select/select.css +113 -115
  92. package/src/side-navigation/side-navigation.css +170 -180
  93. package/src/skeleton/skeleton.css +47 -48
  94. package/src/slider/slider.css +86 -88
  95. package/src/sparkline/sparkline.css +32 -32
  96. package/src/spinner/spinner.css +4 -4
  97. package/src/split-button/split-button.css +26 -31
  98. package/src/splitter/splitter.css +35 -35
  99. package/src/stack/stack.css +24 -24
  100. package/src/stat-card/stat-card.css +102 -103
  101. package/src/status-indicator/status-indicator.css +28 -28
  102. package/src/stepper/stepper.css +58 -62
  103. package/src/switch/switch.css +86 -92
  104. package/src/table/table.css +189 -198
  105. package/src/table-of-contents/table-of-contents.css +51 -54
  106. package/src/tabs/tabs.css +143 -162
  107. package/src/tag/tag.css +67 -71
  108. package/src/tags-input/tags-input.css +124 -74
  109. package/src/tags-input/tags-input.tokens.json +6 -1
  110. package/src/text-field/text-field.css +108 -126
  111. package/src/textarea/textarea.css +26 -26
  112. package/src/time-field/time-field.css +67 -67
  113. package/src/time-picker/time-picker.css +56 -58
  114. package/src/time-range-picker/time-range-picker.css +126 -133
  115. package/src/timeline/timeline.css +244 -266
  116. package/src/toast/toast.css +81 -90
  117. package/src/toggle/toggle.css +29 -33
  118. package/src/toggle-group/toggle-group.css +67 -71
  119. package/src/toolbar/toolbar.css +30 -35
  120. package/src/tooltip/tooltip.css +26 -26
  121. package/src/top-navigation/top-navigation.css +243 -259
  122. package/src/tour/tour.css +51 -60
  123. package/src/transfer/transfer.css +160 -164
  124. package/src/tree/tree.css +103 -111
  125. package/src/typography/typography.css +36 -36
  126. package/src/upload/upload.css +224 -224
  127. package/src/visually-hidden/visually-hidden.css +1 -1
  128. package/src/wizard/wizard.css +185 -197
@@ -16,7 +16,7 @@
16
16
  * mirrors its state onto the frame rather than styling through, so a control
17
17
  * used outside a field looks the same as one inside it.
18
18
  */
19
- [data-ui='currency-field'][data-part='root'] {
19
+ [data-ui-currency-field][data-part-root] {
20
20
  /**
21
21
  * Type, height, inline padding, gap and glyph size all come from the
22
22
  * control scales — the only ones the theme restates per density — so an
@@ -126,7 +126,7 @@
126
126
  * the reader's eye, and under cents-first entry every keystroke rewrites the
127
127
  * whole string — so the setting matters more here than anywhere else.
128
128
  */
129
- [data-ui='currency-field'] > [data-part='input'] {
129
+ [data-ui-currency-field] > [data-part-input] {
130
130
  background-color: transparent;
131
131
  /* The frame's border box, not its content box: on a coarse pointer the frame
132
132
  is the touch target's height and the control it holds is too. Stretched
@@ -160,7 +160,7 @@
160
160
  unicode-bidi: plaintext;
161
161
  }
162
162
 
163
- [data-ui='currency-field'] > [data-part='input']::placeholder {
163
+ [data-ui-currency-field] > [data-part-input]::placeholder {
164
164
  color: var(--slotted-currency-field-placeholder-color, var(--slotted-text-muted, GrayText));
165
165
  text-overflow: ellipsis;
166
166
  }
@@ -176,19 +176,19 @@
176
176
  * means "the document's end edge, whatever the run inside is doing".
177
177
  */
178
178
 
179
- [data-ui='currency-field'][data-align='end'] > [data-part='input'] {
179
+ [data-ui-currency-field][data-align='end'] > [data-part-input] {
180
180
  text-align: right;
181
181
  }
182
182
 
183
- [data-ui='currency-field'][data-align='end']:dir(rtl) > [data-part='input'] {
183
+ [data-ui-currency-field][data-align='end']:dir(rtl) > [data-part-input] {
184
184
  text-align: left;
185
185
  }
186
186
 
187
- [data-ui='currency-field'][data-align='start'] > [data-part='input'] {
187
+ [data-ui-currency-field][data-align='start'] > [data-part-input] {
188
188
  text-align: left;
189
189
  }
190
190
 
191
- [data-ui='currency-field'][data-align='start']:dir(rtl) > [data-part='input'] {
191
+ [data-ui-currency-field][data-align='start']:dir(rtl) > [data-part-input] {
192
192
  text-align: right;
193
193
  }
194
194
 
@@ -198,7 +198,7 @@
198
198
  * control beside it. One library, one scale.
199
199
  */
200
200
 
201
- [data-ui='currency-field'][data-part='root'][data-size='sm'] {
201
+ [data-ui-currency-field][data-part-root][data-size='sm'] {
202
202
  --_font-size: var(--slotted-control-font-size-sm, 12px);
203
203
  --_height: var(--slotted-control-height-sm, 30px);
204
204
  --_padding-inline: var(--slotted-control-padding-inline-sm, 10px);
@@ -207,7 +207,7 @@
207
207
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
208
208
  }
209
209
 
210
- [data-ui='currency-field'][data-part='root'][data-size='md'] {
210
+ [data-ui-currency-field][data-part-root][data-size='md'] {
211
211
  --_font-size: var(--slotted-control-font-size-md, 13px);
212
212
  --_height: var(--slotted-control-height-md, 34px);
213
213
  --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
@@ -216,7 +216,7 @@
216
216
  --_inner-size: var(--slotted-control-inner-size-md, 24px);
217
217
  }
218
218
 
219
- [data-ui='currency-field'][data-part='root'][data-size='lg'] {
219
+ [data-ui-currency-field][data-part-root][data-size='lg'] {
220
220
  --_font-size: var(--slotted-control-font-size-lg, 14px);
221
221
  --_height: var(--slotted-control-height-lg, 38px);
222
222
  --_padding-inline: var(--slotted-control-padding-inline-lg, 16px);
@@ -232,7 +232,7 @@
232
232
  * nothing at rest, which is what a dense table of amounts needs.
233
233
  */
234
234
 
235
- [data-ui='currency-field'][data-part='root'][data-variant='subtle'] {
235
+ [data-ui-currency-field][data-part-root][data-variant='subtle'] {
236
236
  background-color: var(
237
237
  --slotted-currency-field-subtle-background,
238
238
  var(--slotted-surface-sunken, Canvas)
@@ -246,7 +246,7 @@
246
246
  /* No edge, no lift, no ground and no corner of its own: the cell it sits in
247
247
  is the box, the row is the ground, a cell has no corner, and the resting
248
248
  shadow would draw the cell where there is none. */
249
- [data-ui='currency-field'][data-part='root'][data-variant='plain'] {
249
+ [data-ui-currency-field][data-part-root][data-variant='plain'] {
250
250
  background-color: transparent;
251
251
  border-color: transparent;
252
252
  border-radius: var(--slotted-radius-none, 0px);
@@ -259,7 +259,7 @@
259
259
  * its only edge exactly where an edge matters most.
260
260
  */
261
261
  @media (forced-colors: active) {
262
- [data-ui='currency-field'][data-part='root'][data-variant='plain'] {
262
+ [data-ui-currency-field][data-part-root][data-variant='plain'] {
263
263
  border-color: ButtonBorder;
264
264
  }
265
265
  }
@@ -271,8 +271,8 @@
271
271
  * holds, is selected with it, is copied with it and is parsed back out of
272
272
  * it. This one is none of those things, which is the whole distinction.
273
273
  */
274
- [data-ui='currency-field'] > [data-part='start'],
275
- [data-ui='currency-field'] > [data-part='end'] {
274
+ [data-ui-currency-field] > [data-part-start],
275
+ [data-ui-currency-field] > [data-part-end] {
276
276
  align-items: center;
277
277
  color: var(--slotted-currency-field-adornment-color, var(--slotted-text-muted, GrayText));
278
278
  display: inline-flex;
@@ -290,8 +290,8 @@
290
290
  --slotted-icon-size: var(--_icon-size);
291
291
  }
292
292
 
293
- [data-ui='currency-field'] > [data-part='start'] > svg,
294
- [data-ui='currency-field'] > [data-part='end'] > svg {
293
+ [data-ui-currency-field] > [data-part-start] > svg,
294
+ [data-ui-currency-field] > [data-part-end] > svg {
295
295
  block-size: var(--_icon-size);
296
296
  inline-size: var(--_icon-size);
297
297
  }
@@ -302,8 +302,8 @@
302
302
  * advance width. An adornment that draws no glyph takes the margin the glyph
303
303
  * box already has, on both sides — the measurement `text-field` derived.
304
304
  */
305
- [data-ui='currency-field'] > [data-part='start']:not(:has(svg, img, [data-ui='icon'])),
306
- [data-ui='currency-field'] > [data-part='end']:not(:has(svg, img, [data-ui='icon'])) {
305
+ [data-ui-currency-field] > [data-part-start]:not(:has(svg, img, [data-ui-icon])),
306
+ [data-ui-currency-field] > [data-part-end]:not(:has(svg, img, [data-ui-icon])) {
307
307
  padding-inline: calc(var(--_icon-size) / 8);
308
308
  }
309
309
 
@@ -317,12 +317,11 @@
317
317
  * mark is not a button, it has no ground to change, and the cursor alone
318
318
  * said nothing a reader would look at.
319
319
  */
320
- [data-ui='currency-field']
321
- > :is([data-part='start'], [data-part='end']):has(> [data-part='scrub']) {
320
+ [data-ui-currency-field] > :is([data-part-start], [data-part-end]):has(> [data-part-scrub]) {
322
321
  align-self: stretch;
323
322
  }
324
323
 
325
- [data-ui='currency-field'] [data-part='scrub'] {
324
+ [data-ui-currency-field] [data-part-scrub] {
326
325
  align-items: center;
327
326
  align-self: stretch;
328
327
  cursor: ew-resize;
@@ -339,12 +338,12 @@
339
338
  -webkit-user-select: none;
340
339
  }
341
340
 
342
- [data-ui='currency-field']:not([data-disabled]):not([data-readonly])
343
- [data-part='scrub']:is(:hover, [data-scrubbing]) {
341
+ [data-ui-currency-field]:not([data-disabled]):not([data-readonly])
342
+ [data-part-scrub]:is(:hover, [data-scrubbing]) {
344
343
  color: var(--slotted-currency-field-scrub-active-color, var(--slotted-text, CanvasText));
345
344
  }
346
345
 
347
- [data-ui='currency-field']:is([data-disabled], [data-readonly]) [data-part='scrub'] {
346
+ [data-ui-currency-field]:is([data-disabled], [data-readonly]) [data-part-scrub] {
348
347
  cursor: default;
349
348
  touch-action: auto;
350
349
  }
@@ -357,9 +356,9 @@
357
356
  * `aria-controls`. Their glyphs are the `Glyph` element the binding
358
357
  * renders: a character is never an icon.
359
358
  */
360
- [data-ui='currency-field'] > [data-part='stepper'] > button,
361
- [data-ui='currency-field'] > [data-part='decrement'],
362
- [data-ui='currency-field'] > [data-part='increment'] {
359
+ [data-ui-currency-field] > [data-part-stepper] > button,
360
+ [data-ui-currency-field] > [data-part-decrement],
361
+ [data-ui-currency-field] > [data-part-increment] {
363
362
  align-items: center;
364
363
  appearance: none;
365
364
  background-color: transparent;
@@ -383,8 +382,8 @@
383
382
 
384
383
  /* The `icon` box inside each button is drawn at the control's own icon
385
384
  step rather than at the icon family's default. */
386
- [data-ui='currency-field'] [data-part='decrement'],
387
- [data-ui='currency-field'] [data-part='increment'] {
385
+ [data-ui-currency-field] [data-part-decrement],
386
+ [data-ui-currency-field] [data-part-increment] {
388
387
  --slotted-icon-size: var(--_icon-size);
389
388
  }
390
389
 
@@ -397,7 +396,7 @@
397
396
  * more do not change with the reading direction, where a chevron along the
398
397
  * inline axis would read as "previous" and "next" and would have to mirror.
399
398
  */
400
- [data-ui='currency-field'][data-stepper='stacked'] [data-part='increment'] > [data-ui='icon'] {
399
+ [data-ui-currency-field][data-stepper='stacked'] [data-part-increment] > [data-ui-icon] {
401
400
  rotate: 0.5turn;
402
401
  }
403
402
 
@@ -410,11 +409,11 @@
410
409
  * column and its halves are one surface. The paint gives the inset back to
411
410
  * the pointer: each half's hit area reaches the frame.
412
411
  */
413
- [data-ui='currency-field'][data-part='root'][data-stepper='stacked'] {
412
+ [data-ui-currency-field][data-part-root][data-stepper='stacked'] {
414
413
  padding-inline-end: 0;
415
414
  }
416
415
 
417
- [data-ui='currency-field'] > [data-part='stepper'] {
416
+ [data-ui-currency-field] > [data-part-stepper] {
418
417
  align-self: stretch;
419
418
  box-sizing: content-box;
420
419
  display: flex;
@@ -425,26 +424,26 @@
425
424
  padding-inline-end: var(--_column-inset);
426
425
  }
427
426
 
428
- [data-ui='currency-field'] > [data-part='stepper'] > button {
427
+ [data-ui-currency-field] > [data-part-stepper] > button {
429
428
  /* Two halves of the column, whatever the frame's height turns out to be. */
430
429
  block-size: 50%;
431
430
  border-radius: var(--_column-radius);
432
431
  inline-size: 100%;
433
432
  }
434
433
 
435
- [data-ui='currency-field']
436
- > [data-part='stepper']
437
- > :is([data-part='increment'], [data-part='decrement'])::after {
434
+ [data-ui-currency-field]
435
+ > [data-part-stepper]
436
+ > :is([data-part-increment], [data-part-decrement])::after {
438
437
  content: '';
439
438
  inset-inline: 0 calc(var(--_column-inset) * -1);
440
439
  position: absolute;
441
440
  }
442
441
 
443
- [data-ui='currency-field'] > [data-part='stepper'] > [data-part='increment']::after {
442
+ [data-ui-currency-field] > [data-part-stepper] > [data-part-increment]::after {
444
443
  inset-block: calc(var(--_column-inset) * -1) 0;
445
444
  }
446
445
 
447
- [data-ui='currency-field'] > [data-part='stepper'] > [data-part='decrement']::after {
446
+ [data-ui-currency-field] > [data-part-stepper] > [data-part-decrement]::after {
448
447
  inset-block: 0 calc(var(--_column-inset) * -1);
449
448
  }
450
449
 
@@ -459,7 +458,7 @@
459
458
  * percentage falls back to the `<svg>`'s own square, and two of them plus the
460
459
  * divider would stand taller than the value and grow the frame.
461
460
  */
462
- [data-ui='currency-field'] > [data-part='stepper'] > button > [data-ui='icon'] {
461
+ [data-ui-currency-field] > [data-part-stepper] > button > [data-ui-icon] {
463
462
  block-size: min(var(--_icon-size), 100%);
464
463
  contain: size;
465
464
  }
@@ -470,23 +469,23 @@
470
469
  * frame's padding is that inset on both sides. No rule divides a button from
471
470
  * the value: the ground it paints is its edge.
472
471
  */
473
- [data-ui='currency-field'][data-part='root'][data-stepper='split'] {
472
+ [data-ui-currency-field][data-part-root][data-stepper='split'] {
474
473
  gap: 0;
475
474
  padding-inline: var(--_inset);
476
475
  }
477
476
 
478
- [data-ui='currency-field'][data-stepper='split'] > [data-part='decrement'],
479
- [data-ui='currency-field'][data-stepper='split'] > [data-part='increment'] {
477
+ [data-ui-currency-field][data-stepper='split'] > [data-part-decrement],
478
+ [data-ui-currency-field][data-stepper='split'] > [data-part-increment] {
480
479
  block-size: var(--_action-size);
481
480
  border-radius: var(--_action-radius);
482
481
  inline-size: var(--_action-size);
483
482
  }
484
483
 
485
- [data-ui='currency-field'][data-stepper='split'] > [data-part='start'] {
484
+ [data-ui-currency-field][data-stepper='split'] > [data-part-start] {
486
485
  padding-inline-start: var(--_gap);
487
486
  }
488
487
 
489
- [data-ui='currency-field'][data-stepper='split'] > [data-part='end'] {
488
+ [data-ui-currency-field][data-stepper='split'] > [data-part-end] {
490
489
  padding-inline-end: var(--_gap);
491
490
  }
492
491
 
@@ -501,7 +500,7 @@
501
500
  * stepper beside it would otherwise be five pixels off every amount without
502
501
  * one — which is the comparison `align="end"` exists to make.
503
502
  */
504
- [data-ui='currency-field'][data-stepper='split'] > [data-part='input'] {
503
+ [data-ui-currency-field][data-stepper='split'] > [data-part-input] {
505
504
  padding-inline: var(--_padding-inline);
506
505
  }
507
506
 
@@ -511,8 +510,8 @@
511
510
  * 24 in both axes. This grows the target to the minimum and leaves a larger
512
511
  * one alone — the correction `docs/token-foundation.md` leaves to the family.
513
512
  */
514
- [data-ui='currency-field'][data-stepper='split'] > [data-part='decrement']::after,
515
- [data-ui='currency-field'][data-stepper='split'] > [data-part='increment']::after {
513
+ [data-ui-currency-field][data-stepper='split'] > [data-part-decrement]::after,
514
+ [data-ui-currency-field][data-stepper='split'] > [data-part-increment]::after {
516
515
  content: '';
517
516
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
518
517
  position: absolute;
@@ -528,14 +527,14 @@
528
527
  * value's edge and past the frame's.
529
528
  */
530
529
  @media (pointer: coarse) {
531
- [data-ui='currency-field'][data-stepper='split']
532
- > :is([data-part='decrement'], [data-part='increment'])::after {
530
+ [data-ui-currency-field][data-stepper='split']
531
+ > :is([data-part-decrement], [data-part-increment])::after {
533
532
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
534
533
  }
535
534
 
536
- [data-ui='currency-field']
537
- > [data-part='stepper']
538
- > :is([data-part='increment'], [data-part='decrement'])::after {
535
+ [data-ui-currency-field]
536
+ > [data-part-stepper]
537
+ > :is([data-part-increment], [data-part-decrement])::after {
539
538
  inset-inline: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
540
539
  }
541
540
  }
@@ -546,16 +545,16 @@
546
545
  * ones it can meet, which is the order `STATE_PRECEDENCE` sets.
547
546
  */
548
547
 
549
- [data-ui='currency-field'] [data-part='decrement']:hover:not(:disabled),
550
- [data-ui='currency-field'] [data-part='increment']:hover:not(:disabled) {
548
+ [data-ui-currency-field] [data-part-decrement]:hover:not(:disabled),
549
+ [data-ui-currency-field] [data-part-increment]:hover:not(:disabled) {
551
550
  background-color: var(
552
551
  --slotted-currency-field-stepper-hover-background,
553
552
  var(--slotted-tone-secondary-subtle-hover)
554
553
  );
555
554
  }
556
555
 
557
- [data-ui='currency-field'] [data-part='decrement']:active:not(:disabled),
558
- [data-ui='currency-field'] [data-part='increment']:active:not(:disabled) {
556
+ [data-ui-currency-field] [data-part-decrement]:active:not(:disabled),
557
+ [data-ui-currency-field] [data-part-increment]:active:not(:disabled) {
559
558
  background-color: var(
560
559
  --slotted-currency-field-stepper-active-background,
561
560
  var(--slotted-tone-secondary-subtle-active)
@@ -568,8 +567,8 @@
568
567
  * says it as well as the ink: the disabled foreground and the resting
569
568
  * stepper colour are two steps of one neutral.
570
569
  */
571
- [data-ui='currency-field'] [data-part='decrement']:disabled,
572
- [data-ui='currency-field'] [data-part='increment']:disabled {
570
+ [data-ui-currency-field] [data-part-decrement]:disabled,
571
+ [data-ui-currency-field] [data-part-increment]:disabled {
573
572
  background-color: var(
574
573
  --slotted-currency-field-stepper-disabled-background,
575
574
  var(--slotted-disabled-background)
@@ -583,15 +582,15 @@
583
582
  * touch and a screen-reader cursor activating one directly. It sits inside
584
583
  * the frame's own edge, so the ring never doubles the border.
585
584
  */
586
- [data-ui='currency-field'] [data-part='decrement']:focus-visible,
587
- [data-ui='currency-field'] [data-part='increment']:focus-visible {
585
+ [data-ui-currency-field] [data-part-decrement]:focus-visible,
586
+ [data-ui-currency-field] [data-part-increment]:focus-visible {
588
587
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
589
588
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
590
589
  }
591
590
 
592
591
  /* ── Frame states ─────────────────────────────────────────────────────── */
593
592
 
594
- [data-ui='currency-field'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
593
+ [data-ui-currency-field][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
595
594
  [data-invalid]
596
595
  ) {
597
596
  border-color: var(
@@ -600,16 +599,16 @@
600
599
  );
601
600
  }
602
601
 
603
- [data-ui='currency-field'][data-part='root'][data-variant='subtle']:hover:not(
604
- [data-disabled]
605
- ):not([data-readonly]):not([data-invalid]) {
602
+ [data-ui-currency-field][data-part-root][data-variant='subtle']:hover:not([data-disabled]):not(
603
+ [data-readonly]
604
+ ):not([data-invalid]) {
606
605
  background-color: var(
607
606
  --slotted-currency-field-subtle-hover-background,
608
607
  var(--slotted-tone-secondary-subtle-hover)
609
608
  );
610
609
  }
611
610
 
612
- [data-ui='currency-field'][data-part='root'][data-variant='plain']:hover:not([data-disabled]):not(
611
+ [data-ui-currency-field][data-part-root][data-variant='plain']:hover:not([data-disabled]):not(
613
612
  [data-readonly]
614
613
  ):not([data-invalid]) {
615
614
  background-color: var(
@@ -625,7 +624,7 @@
625
624
  * matches `:focus-visible` on a text input for a pointer press as well as for
626
625
  * a Tab, which is right for a control whose caret is the thing that moved.
627
626
  */
628
- [data-ui='currency-field'][data-part='root']:has(> [data-part='input']:focus-visible) {
627
+ [data-ui-currency-field][data-part-root]:has(> [data-part-input]:focus-visible) {
629
628
  /* The resting shadow, recoloured: the lift under the control and the ring
630
629
  around it are one colour, and the state decides which colour that is. */
631
630
  box-shadow: var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
@@ -641,8 +640,8 @@
641
640
  * shadow that appears only under focus is a cell that changes size when it
642
641
  * is used.
643
642
  */
644
- [data-ui='currency-field'][data-part='root'][data-variant='plain']:has(
645
- > [data-part='input']:focus-visible
643
+ [data-ui-currency-field][data-part-root][data-variant='plain']:has(
644
+ > [data-part-input]:focus-visible
646
645
  ) {
647
646
  box-shadow: none;
648
647
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
@@ -655,7 +654,7 @@
655
654
  * colour on the element moves the outline, the shadow and both steppers'
656
655
  * rings at once.
657
656
  */
658
- [data-ui='currency-field'][data-part='root'][data-invalid] {
657
+ [data-ui-currency-field][data-part-root][data-invalid] {
659
658
  --slotted-focus-ring-color: var(
660
659
  --slotted-currency-field-invalid-focus-ring-color,
661
660
  var(--slotted-focus-ring-color-invalid, Highlight)
@@ -683,17 +682,15 @@
683
682
  box-shadow: var(--_invalid-edge);
684
683
  }
685
684
 
686
- [data-ui='currency-field'][data-part='root'][data-invalid]:has(
687
- > [data-part='input']:focus-visible
688
- ) {
685
+ [data-ui-currency-field][data-part-root][data-invalid]:has(> [data-part-input]:focus-visible) {
689
686
  box-shadow:
690
687
  var(--_invalid-edge),
691
688
  var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px)
692
689
  var(--slotted-focus-ring-color, Highlight);
693
690
  }
694
691
 
695
- [data-ui='currency-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
696
- > [data-part='input']:focus-visible
692
+ [data-ui-currency-field][data-part-root][data-variant='plain'][data-invalid]:has(
693
+ > [data-part-input]:focus-visible
697
694
  ) {
698
695
  /* The ring lies inside the box here, over the border and an edge as wide as
699
696
  it; the edge reaches past the ring. */
@@ -711,23 +708,21 @@
711
708
  * control draws its ring double, which a valid ring is not.
712
709
  */
713
710
  @media (forced-colors: active) {
714
- [data-ui='currency-field'][data-part='root'][data-invalid] {
711
+ [data-ui-currency-field][data-part-root][data-invalid] {
715
712
  outline: var(--_invalid-edge-width) solid CanvasText;
716
713
  outline-offset: calc(
717
714
  -1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width))
718
715
  );
719
716
  }
720
717
 
721
- [data-ui='currency-field'][data-part='root'][data-invalid]:has(
722
- > [data-part='input']:focus-visible
723
- ) {
718
+ [data-ui-currency-field][data-part-root][data-invalid]:has(> [data-part-input]:focus-visible) {
724
719
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
725
720
  var(--slotted-focus-ring-color, Highlight);
726
721
  outline-offset: var(--slotted-focus-ring-offset, 2px);
727
722
  }
728
723
 
729
- [data-ui='currency-field'][data-part='root'][data-variant='plain'][data-invalid]:has(
730
- > [data-part='input']:focus-visible
724
+ [data-ui-currency-field][data-part-root][data-variant='plain'][data-invalid]:has(
725
+ > [data-part-input]:focus-visible
731
726
  ) {
732
727
  outline: calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double
733
728
  var(--slotted-focus-ring-color, Highlight);
@@ -743,7 +738,7 @@
743
738
  * ground says "not yours to change", the edge steps down to the separator
744
739
  * weight, and the ink stays at full strength.
745
740
  */
746
- [data-ui='currency-field'][data-part='root'][data-readonly] {
741
+ [data-ui-currency-field][data-part-root][data-readonly] {
747
742
  background-color: var(
748
743
  --slotted-currency-field-readonly-background,
749
744
  var(--slotted-tone-secondary-subtle-hover)
@@ -760,8 +755,8 @@
760
755
  * because a control can be disabled by something that never told it so: a
761
756
  * disabled `fieldset` disables every control inside it.
762
757
  */
763
- [data-ui='currency-field'][data-part='root'][data-disabled],
764
- [data-ui='currency-field'][data-part='root']:has(> [data-part='input']:disabled) {
758
+ [data-ui-currency-field][data-part-root][data-disabled],
759
+ [data-ui-currency-field][data-part-root]:has(> [data-part-input]:disabled) {
765
760
  background-color: var(
766
761
  --slotted-currency-field-disabled-background,
767
762
  var(--slotted-disabled-background)
@@ -780,8 +775,8 @@
780
775
  * Muted to the colour the theme measures rather than faded by opacity: an
781
776
  * amount nobody can read is a field nobody can check.
782
777
  */
783
- [data-ui='currency-field'][data-part='root'][data-disabled] > [data-part='start'],
784
- [data-ui='currency-field'][data-part='root'][data-disabled] > [data-part='end'] {
778
+ [data-ui-currency-field][data-part-root][data-disabled] > [data-part-start],
779
+ [data-ui-currency-field][data-part-root][data-disabled] > [data-part-end] {
785
780
  color: var(--slotted-disabled-foreground);
786
781
  }
787
782
 
@@ -796,7 +791,7 @@
796
791
  * digits; elsewhere the control takes the line and `align` places the
797
792
  * amount in it.
798
793
  */
799
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] {
794
+ [data-ui-currency-field][data-part-root][data-appearance='display'] {
800
795
  --_font-size: var(
801
796
  --slotted-currency-field-display-font-size,
802
797
  var(--slotted-font-size-4xl, 2rem)
@@ -813,7 +808,7 @@
813
808
  line-height: var(--slotted-line-height-4xl, 1.2);
814
809
  }
815
810
 
816
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] > [data-part='symbol'] {
811
+ [data-ui-currency-field][data-part-root][data-appearance='display'] > [data-part-symbol] {
817
812
  color: var(--slotted-currency-field-symbol-color, var(--slotted-text-muted, GrayText));
818
813
  flex: none;
819
814
  font-size: var(
@@ -824,18 +819,18 @@
824
819
  letter-spacing: 0;
825
820
  }
826
821
 
827
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] > [data-part='input'] {
822
+ [data-ui-currency-field][data-part-root][data-appearance='display'] > [data-part-input] {
828
823
  align-self: auto;
829
824
  margin-block: 0;
830
825
  }
831
826
 
832
827
  @supports (field-sizing: content) {
833
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] {
828
+ [data-ui-currency-field][data-part-root][data-appearance='display'] {
834
829
  inline-size: fit-content;
835
830
  max-inline-size: 100%;
836
831
  }
837
832
 
838
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] > [data-part='input'] {
833
+ [data-ui-currency-field][data-part-root][data-appearance='display'] > [data-part-input] {
839
834
  field-sizing: content;
840
835
  flex: 0 1 auto;
841
836
  min-inline-size: 1ch;
@@ -847,7 +842,7 @@
847
842
  * and doubles, which is the focus indicator; invalid, it takes the danger
848
843
  * colour. No ground, no corner and no resting lift.
849
844
  */
850
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] {
845
+ [data-ui-currency-field][data-part-root][data-appearance='display'] {
851
846
  background-color: transparent;
852
847
  border-color: transparent;
853
848
  border-block-end-color: var(
@@ -859,8 +854,8 @@
859
854
  padding-inline: 0;
860
855
  }
861
856
 
862
- [data-ui='currency-field'][data-part='root'][data-appearance='display']:has(
863
- > [data-part='input']:focus-visible
857
+ [data-ui-currency-field][data-part-root][data-appearance='display']:has(
858
+ > [data-part-input]:focus-visible
864
859
  ) {
865
860
  border-block-end-color: var(--slotted-text, CanvasText);
866
861
  box-shadow: inset 0 calc(-1 * var(--slotted-border-width-thin, 1px)) 0
@@ -868,39 +863,39 @@
868
863
  outline: none;
869
864
  }
870
865
 
871
- [data-ui='currency-field'][data-part='root'][data-appearance='display'][data-invalid] {
866
+ [data-ui-currency-field][data-part-root][data-appearance='display'][data-invalid] {
872
867
  border-block-end-color: var(--slotted-tone-danger-border, CanvasText);
873
868
  box-shadow: none;
874
869
  }
875
870
 
876
- [data-ui='currency-field'][data-part='root'][data-appearance='display'][data-invalid]:has(
877
- > [data-part='input']:focus-visible
871
+ [data-ui-currency-field][data-part-root][data-appearance='display'][data-invalid]:has(
872
+ > [data-part-input]:focus-visible
878
873
  ) {
879
874
  box-shadow: inset 0 calc(-1 * var(--_invalid-edge-width)) 0 var(--_invalid-edge-color);
880
875
  }
881
876
 
882
- [data-ui='currency-field'][data-part='root'][data-appearance='display']:has(
883
- > [data-part='input']:disabled
877
+ [data-ui-currency-field][data-part-root][data-appearance='display']:has(
878
+ > [data-part-input]:disabled
884
879
  ) {
885
880
  border-block-end-color: var(--slotted-disabled-border, GrayText);
886
881
  }
887
882
 
888
883
  @media (forced-colors: active) {
889
- [data-ui='currency-field'][data-part='root'][data-appearance='display'] {
884
+ [data-ui-currency-field][data-part-root][data-appearance='display'] {
890
885
  border-block-end-color: ButtonBorder;
891
886
  }
892
887
 
893
888
  /* A shadow is not painted under forced colours, so the doubled rule of
894
889
  focus is a wider border there. */
895
- [data-ui='currency-field'][data-part='root'][data-appearance='display']:has(
896
- > [data-part='input']:focus-visible
890
+ [data-ui-currency-field][data-part-root][data-appearance='display']:has(
891
+ > [data-part-input]:focus-visible
897
892
  ) {
898
893
  border-block-end-color: Highlight;
899
894
  border-block-end-width: calc(2 * var(--slotted-border-width-thin, 1px));
900
895
  }
901
896
 
902
- [data-ui='currency-field'][data-part='root'][data-appearance='display'][data-invalid]:has(
903
- > [data-part='input']:focus-visible
897
+ [data-ui-currency-field][data-part-root][data-appearance='display'][data-invalid]:has(
898
+ > [data-part-input]:focus-visible
904
899
  ) {
905
900
  border-block-end-color: Highlight;
906
901
  border-block-end-width: calc(