@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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * One entry of a `list`. The set decides four things — variant, size, marker
6
6
  * and inset — and hands each one down through the binding as a `data-`
7
- * attribute this sheet reads. **No selector here reaches `[data-ui='list']`,
7
+ * attribute this sheet reads. **No selector here reaches `[data-ui-list]`,
8
8
  * and none there reaches this family**, which is the rule `accordion` and
9
9
  * `collapsible` set for the same relationship.
10
10
  *
@@ -28,7 +28,7 @@
28
28
  * each part on the element the page wrote and React renders it as that
29
29
  * element, so the chain in the selectors is the chain in the document.
30
30
  */
31
- [data-ui='list-item'][data-part='root'] {
31
+ [data-ui-list-item][data-part-root] {
32
32
  /* Geometry. Every value is the control scale's, because a row is a
33
33
  control-sized thing: one theme decision retunes the rows, the buttons and
34
34
  the fields together, and `@media (pointer: coarse)` grows all three at
@@ -157,7 +157,7 @@
157
157
  * arrives inside every control token above; the two never multiply, because
158
158
  * this family reads the density-varying token and states no second scale.
159
159
  */
160
- [data-ui='list-item'][data-size='sm'] {
160
+ [data-ui-list-item][data-size='sm'] {
161
161
  --_min-block: var(
162
162
  --slotted-list-item-min-block-size-sm,
163
163
  var(--slotted-control-height-sm, 30px)
@@ -182,7 +182,7 @@
182
182
  );
183
183
  }
184
184
 
185
- [data-ui='list-item'][data-size='lg'] {
185
+ [data-ui-list-item][data-size='lg'] {
186
186
  --_min-block: var(
187
187
  --slotted-list-item-min-block-size-lg,
188
188
  var(--slotted-control-height-lg, 38px)
@@ -220,7 +220,7 @@
220
220
  * never fills a resting row, because a list of rows each filled with a tone
221
221
  * is a list nobody can read. The current row is not the tone's to move.
222
222
  */
223
- [data-ui='list-item'][data-tone='accent'] {
223
+ [data-ui-list-item][data-tone='accent'] {
224
224
  --_text: var(--slotted-tone-accent-text, CanvasText);
225
225
  --_subtle-hover: var(--slotted-tone-accent-subtle-hover, ButtonFace);
226
226
  --_subtle-active: var(--slotted-tone-accent-subtle-active, ButtonFace);
@@ -234,7 +234,7 @@
234
234
  --_selected-active: var(--_subtle-active);
235
235
  }
236
236
 
237
- [data-ui='list-item'][data-tone='success'] {
237
+ [data-ui-list-item][data-tone='success'] {
238
238
  --_text: var(--slotted-tone-success-text, CanvasText);
239
239
  --_subtle-hover: var(--slotted-tone-success-subtle-hover, ButtonFace);
240
240
  --_subtle-active: var(--slotted-tone-success-subtle-active, ButtonFace);
@@ -248,7 +248,21 @@
248
248
  --_selected-active: var(--_subtle-active);
249
249
  }
250
250
 
251
- [data-ui='list-item'][data-tone='warning'] {
251
+ [data-ui-list-item][data-tone='info'] {
252
+ --_text: var(--slotted-tone-info-text, CanvasText);
253
+ --_subtle-hover: var(--slotted-tone-info-subtle-hover, ButtonFace);
254
+ --_subtle-active: var(--slotted-tone-info-subtle-active, ButtonFace);
255
+ --_solid-hover: var(--slotted-tone-info-solid-hover, ButtonFace);
256
+ --_solid-active: var(--slotted-tone-info-solid-active, ButtonFace);
257
+ --_surface: var(--slotted-tone-info-surface, Canvas);
258
+ --_selected-edge: var(--slotted-tone-info-border, ButtonBorder);
259
+ --_selected-surface: var(--slotted-list-item-background-selected, var(--_surface));
260
+ --_selected-text: var(--slotted-tone-info-text, CanvasText);
261
+ --_selected-hover: var(--_subtle-hover);
262
+ --_selected-active: var(--_subtle-active);
263
+ }
264
+
265
+ [data-ui-list-item][data-tone='warning'] {
252
266
  --_text: var(--slotted-tone-warning-text, CanvasText);
253
267
  --_subtle-hover: var(--slotted-tone-warning-subtle-hover, ButtonFace);
254
268
  --_subtle-active: var(--slotted-tone-warning-subtle-active, ButtonFace);
@@ -262,7 +276,7 @@
262
276
  --_selected-active: var(--_subtle-active);
263
277
  }
264
278
 
265
- [data-ui='list-item'][data-tone='danger'] {
279
+ [data-ui-list-item][data-tone='danger'] {
266
280
  --_text: var(--slotted-tone-danger-text, CanvasText);
267
281
  --_subtle-hover: var(--slotted-tone-danger-subtle-hover, ButtonFace);
268
282
  --_subtle-active: var(--slotted-tone-danger-subtle-active, ButtonFace);
@@ -293,8 +307,8 @@
293
307
  * sits on the title's line in a row of three lines instead of floating in the
294
308
  * middle of the block.
295
309
  */
296
- [data-ui='list-item'][data-marker='bullet'] > [data-part='marker'],
297
- [data-ui='list-item'][data-marker='number']::before {
310
+ [data-ui-list-item][data-marker='bullet'] > [data-part-marker],
311
+ [data-ui-list-item][data-marker='number']::before {
298
312
  /* The mark sits on the title's first line and never in the middle of the
299
313
  block, whatever `align` says. `align` is about the leading visual — an
300
314
  avatar beside three lines of text belongs with the title or with the
@@ -329,7 +343,7 @@
329
343
  padding-block-start: var(--_pad-block);
330
344
  }
331
345
 
332
- [data-ui='list-item'][data-marker='bullet'] > [data-part='marker'] {
346
+ [data-ui-list-item][data-marker='bullet'] > [data-part-marker] {
333
347
  --slotted-icon-size: var(--_marker-size);
334
348
  justify-content: center;
335
349
  }
@@ -338,27 +352,27 @@
338
352
  middle of the part, because the part is one line and its padding tall and
339
353
  the dot has no baseline to sit on. Half the line less half the dot, so the
340
354
  dot stands between the baseline and the cap line rather than on either. */
341
- [data-ui='list-item'][data-marker='bullet'] > [data-part='marker'] > [data-ui='icon'] {
355
+ [data-ui-list-item][data-marker='bullet'] > [data-part-marker] > [data-ui-icon] {
342
356
  margin-block-start: calc(
343
357
  var(--_font-size) * var(--slotted-line-height-md, 1.5) * 0.5 - var(--_marker-size) * 0.5
344
358
  );
345
359
  }
346
360
 
347
- [data-ui='list-item'][data-marker='number']::before {
361
+ [data-ui-list-item][data-marker='number']::before {
348
362
  content: counter(slotted-list-item) '.';
349
363
  justify-content: end;
350
364
  }
351
365
 
352
366
  /* The mark already stands in its own gutter, so the box beside it gives up
353
367
  the padding it would otherwise repeat. */
354
- [data-ui='list-item']:is([data-marker='bullet'], [data-marker='number']) > [data-part='content'] {
368
+ [data-ui-list-item]:is([data-marker='bullet'], [data-marker='number']) > [data-part-content] {
355
369
  padding-inline-start: 0;
356
370
  }
357
371
 
358
372
  /* `inset` is the set's answer for a list inside a box that already pads its
359
373
  own content. The mark gives up its gutter with everything else. */
360
- [data-ui='list-item'][data-inset][data-marker='bullet'] > [data-part='marker'],
361
- [data-ui='list-item'][data-inset][data-marker='number']::before {
374
+ [data-ui-list-item][data-inset][data-marker='bullet'] > [data-part-marker],
375
+ [data-ui-list-item][data-inset][data-marker='number']::before {
362
376
  margin-inline-start: 0;
363
377
  }
364
378
 
@@ -375,7 +389,7 @@
375
389
  * consumer choosing between the three chooses an accessibility tree, never a
376
390
  * different picture.
377
391
  */
378
- [data-ui='list-item'] > [data-part='content'] {
392
+ [data-ui-list-item] > [data-part-content] {
379
393
  appearance: none;
380
394
  background-color: transparent;
381
395
  border: none;
@@ -420,20 +434,20 @@
420
434
  * `framed` clips its own corners at the set, so the first and last rows are
421
435
  * rounded by the box rather than by themselves.
422
436
  */
423
- [data-ui='list-item']:is([data-variant='ruled'], [data-variant='framed']) {
437
+ [data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']) {
424
438
  border-radius: 0;
425
439
  }
426
440
 
427
441
  /* A row whose whole box resolves somewhere, or runs a command, is a target
428
442
  and the pointer says so. A row that is only read keeps the arrow. */
429
- [data-ui='list-item']:not([data-disabled]) > :is(a, button)[data-part='content']:not(:disabled) {
443
+ [data-ui-list-item]:not([data-disabled]) > :is(a, button)[data-part-content]:not(:disabled) {
430
444
  cursor: pointer;
431
445
  }
432
446
 
433
447
  /* `inset` takes the row's inline padding away so a list inside a padded box
434
448
  lines its titles up with the box. The fill and the rule still run edge to
435
449
  edge, which is the half MUI's `disableGutters` leaves out. */
436
- [data-ui='list-item'][data-inset] > [data-part='content'] {
450
+ [data-ui-list-item][data-inset] > [data-part-content] {
437
451
  padding-inline: 0;
438
452
  }
439
453
 
@@ -443,11 +457,11 @@
443
457
  * the same decision `alignItems`; Angular Material derives it from counting
444
458
  * the lines, which is a count a translated string can change.
445
459
  */
446
- [data-ui='list-item'][data-align='start'] > [data-part='content'] {
460
+ [data-ui-list-item][data-align='start'] > [data-part-content] {
447
461
  align-items: start;
448
462
  }
449
463
 
450
- [data-ui='list-item'] > [data-part='content'] > [data-part='start'] {
464
+ [data-ui-list-item] > [data-part-content] > [data-part-start] {
451
465
  align-items: center;
452
466
  color: var(--_text);
453
467
  display: flex;
@@ -472,7 +486,7 @@
472
486
  * chooser is (CK1); the gap beside it is the row's control gap, the same
473
487
  * distance the chooser puts between its box and its own label.
474
488
  */
475
- [data-ui='list-item'] > [data-part='content'] > [data-part='start']:has(> [data-ui='checkbox']) {
489
+ [data-ui-list-item] > [data-part-content] > [data-part-start]:has(> [data-ui-checkbox]) {
476
490
  align-items: start;
477
491
  inline-size: var(--_control-size);
478
492
  min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
@@ -480,7 +494,7 @@
480
494
 
481
495
  /* A leading visual beside a three-line row sits on the title's line, and the
482
496
  line is the box's own, not the block's. */
483
- [data-ui='list-item'][data-align='start'] > [data-part='content'] > [data-part='start'] {
497
+ [data-ui-list-item][data-align='start'] > [data-part-content] > [data-part-start] {
484
498
  min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
485
499
  }
486
500
 
@@ -490,7 +504,7 @@
490
504
  * word, so a title that is one unbroken token — a URL, a commit hash — pushes
491
505
  * the metadata out of the row instead of breaking inside it.
492
506
  */
493
- [data-ui='list-item'] > [data-part='content'] > [data-part='body'] {
507
+ [data-ui-list-item] > [data-part-content] > [data-part-body] {
494
508
  display: flex;
495
509
  flex-direction: column;
496
510
  grid-area: body;
@@ -498,7 +512,7 @@
498
512
  row-gap: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
499
513
  }
500
514
 
501
- [data-ui='list-item'] > [data-part='content'] > [data-part='body'] > [data-part='label'] {
515
+ [data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-label] {
502
516
  color: inherit;
503
517
  font-size: var(--_font-size);
504
518
  font-weight: var(--slotted-list-item-font-weight, var(--slotted-font-weight-regular, 400));
@@ -514,7 +528,7 @@
514
528
  unicode-bidi: plaintext;
515
529
  }
516
530
 
517
- [data-ui='list-item'] > [data-part='content'] > [data-part='body'] > [data-part='description'] {
531
+ [data-ui-list-item] > [data-part-content] > [data-part-body] > [data-part-description] {
518
532
  color: var(--_muted);
519
533
  font-size: var(--slotted-list-item-description-font-size, var(--slotted-font-size-xs, 0.75rem));
520
534
  line-height: var(--slotted-line-height-sm, 1.45);
@@ -533,10 +547,10 @@
533
547
  * truncated string is still readable to assistive technology and still
534
548
  * reachable in full when the row is opened.
535
549
  */
536
- [data-ui='list-item'][data-truncate]
537
- > [data-part='content']
538
- > [data-part='body']
539
- > :is([data-part='label'], [data-part='description']) {
550
+ [data-ui-list-item][data-truncate]
551
+ > [data-part-content]
552
+ > [data-part-body]
553
+ > :is([data-part-label], [data-part-description]) {
540
554
  overflow: hidden;
541
555
  overflow-wrap: normal;
542
556
  text-overflow: ellipsis;
@@ -549,7 +563,7 @@
549
563
  * reader and part of its target for a pointer. Anything that acts is
550
564
  * `actions` instead.
551
565
  */
552
- [data-ui='list-item'] > [data-part='content'] > [data-part='end'] {
566
+ [data-ui-list-item] > [data-part-content] > [data-part-end] {
553
567
  align-items: center;
554
568
  color: var(--_muted);
555
569
  display: flex;
@@ -571,7 +585,7 @@
571
585
  * The box is above the row's own fill, so a control here is operable on a row
572
586
  * whose whole surface resolves somewhere else.
573
587
  */
574
- [data-ui='list-item'] > [data-part='actions'] {
588
+ [data-ui-list-item] > [data-part-actions] {
575
589
  align-items: center;
576
590
  /* The box counts its own inset (LI4). Below the breakpoint it takes the
577
591
  whole line and the row's inline inset on both sides, and read as
@@ -585,7 +599,7 @@
585
599
  position: relative;
586
600
  }
587
601
 
588
- [data-ui='list-item'][data-inset] > [data-part='actions'] {
602
+ [data-ui-list-item][data-inset] > [data-part-actions] {
589
603
  padding-inline-end: 0;
590
604
  }
591
605
 
@@ -595,7 +609,7 @@
595
609
  * the title's line, a row of two lines put its badge and its delete control
596
610
  * on two different lines — the one thing a trailing pair must not do.
597
611
  */
598
- [data-ui='list-item'][data-align='start'] > [data-part='actions'] {
612
+ [data-ui-list-item][data-align='start'] > [data-part-actions] {
599
613
  align-items: start;
600
614
  padding-block-start: var(--_pad-block);
601
615
  }
@@ -616,7 +630,7 @@
616
630
  * `framed` rules its rows exactly as `ruled` does; what it adds is the box
617
631
  * around them, and that box belongs to the set.
618
632
  */
619
- [data-ui='list-item']:is([data-variant='ruled'], [data-variant='framed']):not(:first-child) {
633
+ [data-ui-list-item]:is([data-variant='ruled'], [data-variant='framed']):not(:first-child) {
620
634
  /* A shadow rather than a border, and the reason is the pointer. A border is
621
635
  part of the row's box and outside the box that paints hover, so the top
622
636
  pixel of every ruled row answered nothing: the reader saw a one-pixel
@@ -636,7 +650,7 @@
636
650
  * drawn once, at row scale, so a list of cards and a list of rows are the
637
651
  * same family in two arrangements rather than two families.
638
652
  */
639
- [data-ui='list-item'][data-variant='separated'] {
653
+ [data-ui-list-item][data-variant='separated'] {
640
654
  --_fill: var(--slotted-list-item-background, var(--slotted-surface-raised, Canvas));
641
655
 
642
656
  border: var(--_rule-width) solid var(--_rule);
@@ -645,7 +659,7 @@
645
659
  /* The row's own corners clip the fill its content paints, so a hover wash
646
660
  inside a rounded row does not square off its edges. `clip` rather than
647
661
  `hidden`: a row is not a scroll container, and `hidden` would make it one. */
648
- [data-ui='list-item'][data-variant='separated'] {
662
+ [data-ui-list-item][data-variant='separated'] {
649
663
  overflow: clip;
650
664
  }
651
665
 
@@ -661,14 +675,14 @@
661
675
  * nothing to say about being pointed at, and washing it would promise an
662
676
  * interaction that never arrives.
663
677
  */
664
- [data-ui='list-item']:not([data-disabled]):not([data-loading]):has(
665
- > :is(a, button)[data-part='content']:not(:disabled):hover
678
+ [data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
679
+ > :is(a, button)[data-part-content]:not(:disabled):hover
666
680
  ) {
667
681
  --_fill: var(--_hover);
668
682
  }
669
683
 
670
- [data-ui='list-item']:not([data-disabled]):not([data-loading]):has(
671
- > :is(a, button)[data-part='content']:not(:disabled):active
684
+ [data-ui-list-item]:not([data-disabled]):not([data-loading]):has(
685
+ > :is(a, button)[data-part-content]:not(:disabled):active
672
686
  ) {
673
687
  --_fill: var(--_active);
674
688
  }
@@ -679,7 +693,7 @@
679
693
  * and on the last row it is drawn outside the page; a negative offset keeps
680
694
  * the whole ring on the row it is about.
681
695
  */
682
- [data-ui='list-item'] > [data-part='content']:focus-visible {
696
+ [data-ui-list-item] > [data-part-content]:focus-visible {
683
697
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
684
698
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
685
699
  }
@@ -694,7 +708,7 @@
694
708
  * announce for itself, so this is also the only one of the two the row says
695
709
  * out loud.
696
710
  */
697
- [data-ui='list-item'][data-current] {
711
+ [data-ui-list-item][data-current] {
698
712
  --_fill: var(--_current-surface);
699
713
  /* The edge is an inset shadow rather than a border, so the state changes
700
714
  no measurement and moves no text. It is what carries the state in
@@ -708,7 +722,7 @@
708
722
  * and the control the page puts in `start` — a `checkbox` — is what announces
709
723
  * it. `card` reached the same conclusion for the same reason.
710
724
  */
711
- [data-ui='list-item'][data-selected] {
725
+ [data-ui-list-item][data-selected] {
712
726
  /* A selected row that is hovered has to darken, not lighten. The resting
713
727
  fill is already the tone's subtle step, so the two pointer states move
714
728
  one step along the same subtle pair rather than staying where an
@@ -718,7 +732,7 @@
718
732
  --_active: var(--_selected-active);
719
733
  }
720
734
 
721
- [data-ui='list-item'][data-selected] {
735
+ [data-ui-list-item][data-selected] {
722
736
  --_fill: var(--_selected-surface);
723
737
  --_edge-shadow: inset 0 0 0 var(--_rule-width) var(--_selected-edge);
724
738
  }
@@ -732,8 +746,8 @@
732
746
  * and a rule drawn above the edge made its top two pixels in `high-contrast`,
733
747
  * where both are black.
734
748
  */
735
- [data-ui='list-item']:is([data-selected], [data-current]):not(:first-child),
736
- [data-ui='list-item']:is([data-selected], [data-current]) + [data-ui='list-item'] {
749
+ [data-ui-list-item]:is([data-selected], [data-current]):not(:first-child),
750
+ [data-ui-list-item]:is([data-selected], [data-current]) + [data-ui-list-item] {
737
751
  --_rule-shadow: 0 0 0 0 transparent;
738
752
  }
739
753
 
@@ -742,14 +756,14 @@
742
756
  them; both edges drawn made that line two pixels. The offsets are
743
757
  physical because `box-shadow` has no logical form, and the two sides are
744
758
  the same width, so the mirrored row is the same picture. */
745
- [data-ui='list-item'][data-selected] + [data-ui='list-item'][data-selected] {
759
+ [data-ui-list-item][data-selected] + [data-ui-list-item][data-selected] {
746
760
  --_edge-shadow:
747
761
  inset 0 calc(var(--_rule-width) * -1) 0 0 var(--_selected-edge),
748
762
  inset var(--_rule-width) 0 0 0 var(--_selected-edge),
749
763
  inset calc(var(--_rule-width) * -1) 0 0 0 var(--_selected-edge);
750
764
  }
751
765
 
752
- [data-ui='list-item'][data-selected] > [data-part='content'] {
766
+ [data-ui-list-item][data-selected] > [data-part-content] {
753
767
  color: var(--_selected-text);
754
768
  font-weight: var(
755
769
  --slotted-list-item-font-weight-selected,
@@ -757,7 +771,7 @@
757
771
  );
758
772
  }
759
773
 
760
- [data-ui='list-item'][data-current] > [data-part='content'] {
774
+ [data-ui-list-item][data-current] > [data-part-content] {
761
775
  font-weight: var(
762
776
  --slotted-list-item-font-weight-current,
763
777
  var(--slotted-font-weight-medium, 500)
@@ -776,14 +790,14 @@
776
790
  * No placeholder is drawn. `skeleton` owns placeholder geometry, and a second
777
791
  * answer to that question is what `collapsible` already refused.
778
792
  */
779
- [data-ui='list-item'][data-loading] {
793
+ [data-ui-list-item][data-loading] {
780
794
  /* One retarget rather than a rule per part: the title, the description, the
781
795
  metadata and the mark all read the same two custom properties, so the
782
796
  whole row recedes together and nothing changes size. */
783
797
  --_text: var(--_muted);
784
798
  }
785
799
 
786
- [data-ui='list-item'][data-loading] > [data-part='content'] {
800
+ [data-ui-list-item][data-loading] > [data-part-content] {
787
801
  cursor: progress;
788
802
  }
789
803
 
@@ -799,7 +813,7 @@
799
813
  * control can refuse an interaction, which is the rule `card` states for the
800
814
  * same shape.
801
815
  */
802
- [data-ui='list-item'][data-disabled] {
816
+ [data-ui-list-item][data-disabled] {
803
817
  /* Both, stated from one alias rather than one pointing at the other: a row
804
818
  that is loading retargets `--_text` at `--_muted`, and a disabled loading
805
819
  row would otherwise be a cycle CSS resolves by dropping both. Disabled is
@@ -812,7 +826,7 @@
812
826
  --_muted: var(--_disabled-ink);
813
827
  }
814
828
 
815
- [data-ui='list-item'][data-disabled] > [data-part='content'] {
829
+ [data-ui-list-item][data-disabled] > [data-part-content] {
816
830
  cursor: default;
817
831
  }
818
832
 
@@ -823,7 +837,7 @@
823
837
  * surface a selected row is filled with, so a disabled card and a selected
824
838
  * one were one rectangle told apart only by their edge.
825
839
  */
826
- [data-ui='list-item'][data-disabled][data-variant='separated'] {
840
+ [data-ui-list-item][data-disabled][data-variant='separated'] {
827
841
  --_fill: var(--slotted-surface-sunken, Canvas);
828
842
 
829
843
  border-color: var(--slotted-disabled-border, GrayText);
@@ -842,14 +856,14 @@
842
856
  * is invalid CSS — `docs/token-foundation.md` rule 4.
843
857
  */
844
858
  @container slotted-list-item (max-inline-size: 22rem) {
845
- [data-ui='list-item'] > [data-part='content'] {
859
+ [data-ui-list-item] > [data-part-content] {
846
860
  grid-template-areas:
847
861
  'start body'
848
862
  'start end';
849
863
  grid-template-columns: auto minmax(0, 1fr);
850
864
  }
851
865
 
852
- [data-ui='list-item'] > [data-part='content'] > [data-part='end'] {
866
+ [data-ui-list-item] > [data-part-content] > [data-part-end] {
853
867
  justify-content: start;
854
868
  margin-block-start: var(--slotted-list-item-body-gap, var(--slotted-space-1, 0.125rem));
855
869
  margin-inline-start: 0;
@@ -857,7 +871,7 @@
857
871
 
858
872
  /* The leading visual now spans two rows, so it stops being centred on the
859
873
  block and returns to the title's line. */
860
- [data-ui='list-item'] > [data-part='content'] > [data-part='start'] {
874
+ [data-ui-list-item] > [data-part-content] > [data-part-start] {
861
875
  align-self: start;
862
876
  min-block-size: calc(var(--_font-size) * var(--slotted-line-height-md, 1.5));
863
877
  }
@@ -871,14 +885,14 @@
871
885
  * They stay at the end of the row, where they were, and take the row's own
872
886
  * inline inset so they line up with the content above them.
873
887
  */
874
- [data-ui='list-item'] > [data-part='actions'] {
888
+ [data-ui-list-item] > [data-part-actions] {
875
889
  flex-basis: 100%;
876
890
  justify-content: flex-end;
877
891
  padding-block-end: var(--_pad-block);
878
892
  padding-inline: var(--_pad-inline);
879
893
  }
880
894
 
881
- [data-ui='list-item'][data-inset] > [data-part='actions'] {
895
+ [data-ui-list-item][data-inset] > [data-part-actions] {
882
896
  padding-inline: 0;
883
897
  }
884
898
 
@@ -891,13 +905,13 @@
891
905
  * keeps the line it had; a target that carries a word still takes its
892
906
  * own, because a word is what does not fit.
893
907
  */
894
- [data-ui='list-item'] > [data-part='actions']:not(:has(> :not([data-shape]))) {
908
+ [data-ui-list-item] > [data-part-actions]:not(:has(> :not([data-shape]))) {
895
909
  flex-basis: auto;
896
910
  padding-block-end: 0;
897
911
  padding-inline: 0 var(--_pad-inline);
898
912
  }
899
913
 
900
- [data-ui='list-item'][data-inset] > [data-part='actions']:not(:has(> :not([data-shape]))) {
914
+ [data-ui-list-item][data-inset] > [data-part-actions]:not(:has(> :not([data-shape]))) {
901
915
  padding-inline-end: 0;
902
916
  }
903
917
  }
@@ -916,11 +930,11 @@
916
930
  * resting one would be the same rectangle. Selection is the accent state,
917
931
  * and the system's own selected pair is what says so.
918
932
  */
919
- [data-ui='list-item'][data-selected] {
933
+ [data-ui-list-item][data-selected] {
920
934
  background-color: Highlight;
921
935
  }
922
936
 
923
- [data-ui='list-item'][data-selected] > [data-part='content'] {
937
+ [data-ui-list-item][data-selected] > [data-part-content] {
924
938
  color: HighlightText;
925
939
  }
926
940
 
@@ -929,7 +943,7 @@
929
943
  * colour, drawn inward so it changes no measurement: the inset shadow that
930
944
  * says it elsewhere is decoration the theme cannot reach (R1).
931
945
  */
932
- [data-ui='list-item'][data-current]:not([data-selected]) {
946
+ [data-ui-list-item][data-current]:not([data-selected]) {
933
947
  outline: var(--slotted-border-width-thin, 1px) solid Highlight;
934
948
  outline-offset: calc(-1 * var(--slotted-border-width-thin, 1px));
935
949
  }
@@ -91,6 +91,13 @@
91
91
  "--slotted-tone-danger-subtle-hover",
92
92
  "--slotted-tone-danger-surface",
93
93
  "--slotted-tone-danger-text",
94
+ "--slotted-tone-info-border",
95
+ "--slotted-tone-info-solid-active",
96
+ "--slotted-tone-info-solid-hover",
97
+ "--slotted-tone-info-subtle-active",
98
+ "--slotted-tone-info-subtle-hover",
99
+ "--slotted-tone-info-surface",
100
+ "--slotted-tone-info-text",
94
101
  "--slotted-tone-secondary-border",
95
102
  "--slotted-tone-secondary-solid-active",
96
103
  "--slotted-tone-secondary-solid-hover",