@slotted/styles 0.1.0-beta.1 → 0.1.0-beta.11

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 (180) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +35 -42
  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 +149 -68
  17. package/src/button/button.tokens.json +10 -0
  18. package/src/button-group/button-group.css +79 -74
  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 +103 -90
  36. package/src/command-palette/command-palette.tokens.json +1 -0
  37. package/src/container/container.css +24 -24
  38. package/src/context-menu/context-menu.css +8 -8
  39. package/src/currency-field/currency-field.css +210 -88
  40. package/src/currency-field/currency-field.tokens.json +13 -0
  41. package/src/dashboard-grid/dashboard-grid.css +148 -116
  42. package/src/data-grid/data-grid.css +535 -470
  43. package/src/data-grid/data-grid.tokens.json +4 -0
  44. package/src/data-list/data-list.css +81 -70
  45. package/src/data-list/data-list.tokens.json +2 -1
  46. package/src/date-field/date-field.css +55 -52
  47. package/src/date-field/date-field.tokens.json +1 -0
  48. package/src/date-picker/date-picker.css +40 -42
  49. package/src/date-range-picker/date-range-picker.css +114 -118
  50. package/src/datetime-field/datetime-field.css +78 -80
  51. package/src/datetime-field/datetime-field.tokens.json +1 -0
  52. package/src/datetime-picker/datetime-picker.css +61 -63
  53. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  54. package/src/description-list/description-list.css +61 -64
  55. package/src/detail-panel/detail-panel.css +86 -71
  56. package/src/detail-panel/detail-panel.tokens.json +2 -0
  57. package/src/dialog/dialog.css +372 -153
  58. package/src/dialog/dialog.tokens.json +6 -0
  59. package/src/divider/divider.css +18 -18
  60. package/src/drawer/drawer.css +205 -210
  61. package/src/drawer/drawer.tokens.json +1 -0
  62. package/src/entity-picker/entity-picker.css +238 -241
  63. package/src/entity-picker/entity-picker.tokens.json +1 -0
  64. package/src/event-calendar/event-calendar.css +343 -385
  65. package/src/field/field.css +74 -78
  66. package/src/field-group/field-group.css +22 -25
  67. package/src/filter-bar/filter-bar.css +193 -209
  68. package/src/form/form.css +34 -24
  69. package/src/form/form.tokens.json +1 -0
  70. package/src/fullscreen/fullscreen.css +24 -25
  71. package/src/grid/grid.css +28 -28
  72. package/src/highlight/highlight.css +6 -6
  73. package/src/hover-card/hover-card.css +6 -6
  74. package/src/icon/icon.css +19 -15
  75. package/src/icon/icon.tokens.json +1 -0
  76. package/src/image/image.css +39 -39
  77. package/src/import-export-center/import-export-center.css +135 -156
  78. package/src/inline/inline.css +27 -27
  79. package/src/inline-message/inline-message.css +52 -28
  80. package/src/inline-message/inline-message.tokens.json +4 -0
  81. package/src/kbd/kbd.css +30 -26
  82. package/src/link/link.css +15 -15
  83. package/src/list/list.css +44 -17
  84. package/src/list/list.tokens.json +4 -0
  85. package/src/list-item/list-item.css +80 -66
  86. package/src/list-item/list-item.tokens.json +7 -0
  87. package/src/listbox/listbox.css +56 -59
  88. package/src/loading-overlay/loading-overlay.css +75 -92
  89. package/src/markdown/markdown.css +17 -17
  90. package/src/menu/menu.css +83 -63
  91. package/src/menubar/menubar.css +13 -13
  92. package/src/message/message.css +182 -202
  93. package/src/message/message.tokens.json +5 -0
  94. package/src/message-scroller/message-scroller.css +41 -42
  95. package/src/multi-select/multi-select.css +152 -145
  96. package/src/multi-select/multi-select.tokens.json +1 -0
  97. package/src/navigation-menu/navigation-menu.css +167 -188
  98. package/src/notification-center/notification-center.css +140 -148
  99. package/src/notification-center/notification-center.tokens.json +3 -0
  100. package/src/number-field/number-field.css +84 -83
  101. package/src/number-field/number-field.tokens.json +1 -0
  102. package/src/otp-input/otp-input.css +67 -57
  103. package/src/otp-input/otp-input.tokens.json +1 -0
  104. package/src/page/page.css +39 -23
  105. package/src/page/page.tokens.json +1 -0
  106. package/src/page-header/page-header.css +323 -283
  107. package/src/page-header/page-header.tokens.json +5 -0
  108. package/src/pagination/pagination.css +68 -72
  109. package/src/popover/popover.css +40 -49
  110. package/src/progress-indicator/progress-indicator.css +177 -120
  111. package/src/progress-indicator/progress-indicator.tokens.json +1 -1
  112. package/src/prompt-composer/prompt-composer.css +221 -102
  113. package/src/prompt-composer/prompt-composer.tokens.json +15 -0
  114. package/src/prose/prose.css +71 -75
  115. package/src/radio-group/radio-group.css +98 -103
  116. package/src/rating/rating.css +136 -132
  117. package/src/rating/rating.tokens.json +1 -0
  118. package/src/result-state/result-state.css +74 -77
  119. package/src/runtime-properties.mjs +2 -0
  120. package/src/saved-views/saved-views.css +41 -47
  121. package/src/scroll-area/scroll-area.css +39 -32
  122. package/src/section/section.css +161 -41
  123. package/src/section/section.tokens.json +7 -2
  124. package/src/segmented-control/segmented-control.css +254 -97
  125. package/src/segmented-control/segmented-control.tokens.json +15 -11
  126. package/src/select/select.css +118 -117
  127. package/src/select/select.tokens.json +1 -0
  128. package/src/side-navigation/side-navigation.css +179 -182
  129. package/src/side-navigation/side-navigation.tokens.json +1 -0
  130. package/src/skeleton/skeleton.css +47 -48
  131. package/src/slider/slider.css +86 -88
  132. package/src/sparkline/sparkline.css +62 -40
  133. package/src/sparkline/sparkline.tokens.json +2 -0
  134. package/src/spinner/spinner.css +83 -180
  135. package/src/spinner/spinner.tokens.json +0 -1
  136. package/src/split-button/split-button.css +30 -31
  137. package/src/split-button/split-button.tokens.json +1 -0
  138. package/src/splitter/splitter.css +35 -35
  139. package/src/stack/stack.css +24 -24
  140. package/src/stat-card/stat-card.css +341 -224
  141. package/src/stat-card/stat-card.tokens.json +3 -0
  142. package/src/status-indicator/status-indicator.css +28 -28
  143. package/src/stepper/stepper.css +58 -62
  144. package/src/switch/switch.css +86 -92
  145. package/src/table/table.css +310 -165
  146. package/src/table/table.tokens.json +6 -0
  147. package/src/table-of-contents/table-of-contents.css +51 -54
  148. package/src/tabs/tabs.css +337 -302
  149. package/src/tabs/tabs.tokens.json +8 -5
  150. package/src/tag/tag.css +79 -71
  151. package/src/tag/tag.tokens.json +9 -0
  152. package/src/tags-input/tags-input.css +145 -82
  153. package/src/tags-input/tags-input.tokens.json +7 -1
  154. package/src/text-field/text-field.css +132 -136
  155. package/src/text-field/text-field.tokens.json +1 -0
  156. package/src/textarea/textarea.css +31 -28
  157. package/src/textarea/textarea.tokens.json +1 -0
  158. package/src/time-field/time-field.css +72 -69
  159. package/src/time-field/time-field.tokens.json +1 -0
  160. package/src/time-picker/time-picker.css +56 -58
  161. package/src/time-range-picker/time-range-picker.css +126 -133
  162. package/src/timeline/timeline.css +254 -266
  163. package/src/timeline/timeline.tokens.json +5 -0
  164. package/src/toast/toast.css +108 -90
  165. package/src/toast/toast.tokens.json +6 -0
  166. package/src/toggle/toggle.css +62 -25
  167. package/src/toggle/toggle.tokens.json +8 -0
  168. package/src/toggle-group/toggle-group.css +106 -60
  169. package/src/toggle-group/toggle-group.tokens.json +10 -0
  170. package/src/toolbar/toolbar.css +30 -35
  171. package/src/tooltip/tooltip.css +26 -26
  172. package/src/top-navigation/top-navigation.css +243 -259
  173. package/src/tour/tour.css +51 -60
  174. package/src/transfer/transfer.css +160 -164
  175. package/src/tree/tree.css +103 -111
  176. package/src/typography/typography.css +40 -36
  177. package/src/typography/typography.tokens.json +1 -0
  178. package/src/upload/upload.css +224 -224
  179. package/src/visually-hidden/visually-hidden.css +1 -1
  180. package/src/wizard/wizard.css +185 -197
@@ -76,6 +76,11 @@
76
76
  "--slotted-tone-danger-solid",
77
77
  "--slotted-tone-danger-surface",
78
78
  "--slotted-tone-danger-text",
79
+ "--slotted-tone-info-border",
80
+ "--slotted-tone-info-on-solid",
81
+ "--slotted-tone-info-solid",
82
+ "--slotted-tone-info-surface",
83
+ "--slotted-tone-info-text",
79
84
  "--slotted-tone-secondary-border",
80
85
  "--slotted-tone-secondary-on-solid",
81
86
  "--slotted-tone-secondary-solid",
@@ -39,7 +39,7 @@
39
39
  * The stylesheet's part in it is that no rule assumes a role: the same
40
40
  * picture is drawn whether a reader hears the words or reads them.
41
41
  */
42
- [data-ui='toast'][data-part='root'] {
42
+ [data-ui-toast][data-part-root] {
43
43
  /**
44
44
  * The distance from the edge of the screen, and the greatest width a
45
45
  * message is allowed. The width is the smaller of the two, so at 320
@@ -93,7 +93,7 @@
93
93
  * demonstrable on a documentation page: everything else about it is the
94
94
  * same, including the placement, which now names the edges of the panel.
95
95
  */
96
- [data-ui='toast'][data-part='root'][data-attach='inline'] {
96
+ [data-ui-toast][data-part-root][data-attach='inline'] {
97
97
  position: absolute;
98
98
  }
99
99
 
@@ -104,19 +104,19 @@
104
104
  * an Arabic one. Sonner's `bottom-right` is `bottom-right` in both.
105
105
  */
106
106
 
107
- [data-ui='toast'][data-part='root'][data-placement^='top'] {
107
+ [data-ui-toast][data-part-root][data-placement^='top'] {
108
108
  inset-block-start: var(--_offset);
109
109
  }
110
110
 
111
- [data-ui='toast'][data-part='root'][data-placement^='bottom'] {
111
+ [data-ui-toast][data-part-root][data-placement^='bottom'] {
112
112
  inset-block-end: var(--_offset);
113
113
  }
114
114
 
115
- [data-ui='toast'][data-part='root'][data-placement$='-start'] {
115
+ [data-ui-toast][data-part-root][data-placement$='-start'] {
116
116
  inset-inline-start: var(--_offset);
117
117
  }
118
118
 
119
- [data-ui='toast'][data-part='root'][data-placement$='-end'] {
119
+ [data-ui-toast][data-part-root][data-placement$='-end'] {
120
120
  inset-inline-end: var(--_offset);
121
121
  }
122
122
 
@@ -125,8 +125,8 @@
125
125
  * divide what is left. It is the one centring that needs no transform, so
126
126
  * the transform stays free for the enter, the exit and the swipe.
127
127
  */
128
- [data-ui='toast'][data-part='root'][data-placement='top'],
129
- [data-ui='toast'][data-part='root'][data-placement='bottom'] {
128
+ [data-ui-toast][data-part-root][data-placement='top'],
129
+ [data-ui-toast][data-part-root][data-placement='bottom'] {
130
130
  inset-inline: var(--_offset);
131
131
  margin-inline: auto;
132
132
  }
@@ -139,7 +139,7 @@
139
139
  * order, which puts the newest nearest the edge of the screen — where the
140
140
  * reader's eye already is — without moving it in the accessibility tree.
141
141
  */
142
- [data-ui='toast'] > [data-part='list'] {
142
+ [data-ui-toast] > [data-part-list] {
143
143
  display: flex;
144
144
  flex-direction: column;
145
145
  gap: var(--_gap);
@@ -149,7 +149,7 @@
149
149
  pointer-events: none;
150
150
  }
151
151
 
152
- [data-ui='toast'][data-placement^='bottom'] > [data-part='list'] {
152
+ [data-ui-toast][data-placement^='bottom'] > [data-part-list] {
153
153
  flex-direction: column-reverse;
154
154
  }
155
155
 
@@ -162,7 +162,7 @@
162
162
  * focus already inside a message can cause, so no press meant for the page
163
163
  * lands on an empty region.
164
164
  */
165
- [data-ui='toast'][data-expanded] > [data-part='list'] {
165
+ [data-ui-toast][data-expanded] > [data-part-list] {
166
166
  pointer-events: auto;
167
167
  }
168
168
 
@@ -172,7 +172,7 @@
172
172
  * the message away, with the actions under the words rather than beside
173
173
  * them so a second row exists only when there are actions to put in it.
174
174
  */
175
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] {
175
+ [data-ui-toast] > [data-part-list] > [data-part-item] {
176
176
  /* The tone's five roles, defaulted to `accent`, restated by each tone
177
177
  below. Every one of them is a role the theme's contrast test measures. */
178
178
  --_solid: var(--slotted-tone-accent-solid);
@@ -302,11 +302,11 @@
302
302
  * shift is the same distance in the other direction rather than a second
303
303
  * number, so the two placements are one motion seen twice.
304
304
  */
305
- [data-ui='toast'][data-placement^='top'] > [data-part='list'] > [data-part='item'] {
305
+ [data-ui-toast][data-placement^='top'] > [data-part-list] > [data-part-item] {
306
306
  translate: 0 calc(-1 * var(--_enter-shift));
307
307
  }
308
308
 
309
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-open] {
309
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-open] {
310
310
  opacity: 1;
311
311
  translate: 0;
312
312
  transition:
@@ -325,7 +325,7 @@
325
325
  * is left, which is WCAG 2.2 SC 1.4.1 as well as a preference.
326
326
  */
327
327
 
328
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-tone='accent'] {
328
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='accent'] {
329
329
  --_solid: var(--slotted-tone-accent-solid);
330
330
  --_on-solid: var(--slotted-tone-accent-on-solid);
331
331
  --_tone-surface: var(--slotted-tone-accent-surface);
@@ -333,7 +333,7 @@
333
333
  --_tone-text: var(--slotted-tone-accent-text);
334
334
  }
335
335
 
336
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-tone='secondary'] {
336
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='secondary'] {
337
337
  --_solid: var(--slotted-tone-secondary-solid);
338
338
  --_on-solid: var(--slotted-tone-secondary-on-solid);
339
339
  --_tone-surface: var(--slotted-tone-secondary-surface);
@@ -341,7 +341,7 @@
341
341
  --_tone-text: var(--slotted-tone-secondary-text);
342
342
  }
343
343
 
344
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-tone='success'] {
344
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='success'] {
345
345
  --_solid: var(--slotted-tone-success-solid);
346
346
  --_on-solid: var(--slotted-tone-success-on-solid);
347
347
  --_tone-surface: var(--slotted-tone-success-surface);
@@ -349,7 +349,15 @@
349
349
  --_tone-text: var(--slotted-tone-success-text);
350
350
  }
351
351
 
352
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-tone='warning'] {
352
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='info'] {
353
+ --_solid: var(--slotted-tone-info-solid);
354
+ --_on-solid: var(--slotted-tone-info-on-solid);
355
+ --_tone-surface: var(--slotted-tone-info-surface);
356
+ --_tone-border: var(--slotted-tone-info-border);
357
+ --_tone-text: var(--slotted-tone-info-text);
358
+ }
359
+
360
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='warning'] {
353
361
  --_solid: var(--slotted-tone-warning-solid);
354
362
  --_on-solid: var(--slotted-tone-warning-on-solid);
355
363
  --_tone-surface: var(--slotted-tone-warning-surface);
@@ -357,7 +365,7 @@
357
365
  --_tone-text: var(--slotted-tone-warning-text);
358
366
  }
359
367
 
360
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-tone='danger'] {
368
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-tone='danger'] {
361
369
  --_solid: var(--slotted-tone-danger-solid);
362
370
  --_on-solid: var(--slotted-tone-danger-on-solid);
363
371
  --_tone-surface: var(--slotted-tone-danger-surface);
@@ -373,7 +381,26 @@
373
381
  * tone is in the mark and in nothing else, which is enough — it is the
374
382
  * silhouette that survives forced colours anyway.
375
383
  */
376
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-variant='soft'] {
384
+ /**
385
+ * A theme that paints the raised message with a surface that has alpha blurs
386
+ * what passes under it: `--slotted-toast-backdrop-filter`, `none` unless set.
387
+ * Only `raised` floats over content it does not own; `soft` and `solid` are
388
+ * tone grounds. A reader who asked for less transparency gets no filter, and
389
+ * under forced colours the ground is the system's.
390
+ */
391
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-variant='raised'] {
392
+ -webkit-backdrop-filter: var(--slotted-toast-backdrop-filter, none);
393
+ backdrop-filter: var(--slotted-toast-backdrop-filter, none);
394
+ }
395
+
396
+ @media (prefers-reduced-transparency: reduce), (forced-colors: active) {
397
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-variant='raised'] {
398
+ -webkit-backdrop-filter: none;
399
+ backdrop-filter: none;
400
+ }
401
+ }
402
+
403
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-variant='soft'] {
377
404
  --_ground: var(--_tone-surface);
378
405
  --_edge: var(--_tone-border);
379
406
  /* The tone's own text on the tone's own surface is the pair the theme
@@ -383,7 +410,7 @@
383
410
  --_ink-muted: var(--_tone-text);
384
411
  }
385
412
 
386
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-variant='solid'] {
413
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-variant='solid'] {
387
414
  --_ground: var(--_solid);
388
415
  --_edge: var(--_solid);
389
416
  --_ink: var(--_on-solid);
@@ -426,7 +453,7 @@
426
453
  * message waiting on a promise with no mark of its own draws none, and the
427
454
  * box stays, so the layout does not jump when the spinner becomes a tick.
428
455
  */
429
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='icon'] {
456
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-icon] {
430
457
  --slotted-icon-size: calc(var(--_mark-size) * 12 / 11);
431
458
  /**
432
459
  * The loading mark is `progress-indicator`'s contained loader, and these
@@ -466,7 +493,7 @@
466
493
  * to be clamped too, or an unbreakable word in the title sizes the track to
467
494
  * itself and the words run past the box that holds them.
468
495
  */
469
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='content'] {
496
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-content] {
470
497
  /* The other half of the mark's baseline group: see the mark above. */
471
498
  align-self: baseline;
472
499
  display: grid;
@@ -489,11 +516,7 @@
489
516
  * `Zwischenspeicherung` set the track to 183 pixels inside a box of 155, and
490
517
  * the words stood outside the message in every scheme.
491
518
  */
492
- [data-ui='toast']
493
- > [data-part='list']
494
- > [data-part='item']
495
- > [data-part='content']
496
- > [data-part='title'] {
519
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-content] > [data-part-title] {
497
520
  font-family: var(
498
521
  --slotted-toast-title-font-family,
499
522
  var(
@@ -507,11 +530,11 @@
507
530
  overflow-wrap: anywhere;
508
531
  }
509
532
 
510
- [data-ui='toast']
511
- > [data-part='list']
512
- > [data-part='item']
513
- > [data-part='content']
514
- > [data-part='description'] {
533
+ [data-ui-toast]
534
+ > [data-part-list]
535
+ > [data-part-item]
536
+ > [data-part-content]
537
+ > [data-part-description] {
515
538
  color: var(--_ink-muted);
516
539
  margin: 0;
517
540
  min-inline-size: 0;
@@ -525,7 +548,7 @@
525
548
  * the consumer's own buttons: `button` already owns what a button is, and
526
549
  * naming one of two controls `cancel` would privilege one arrangement.
527
550
  */
528
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='actions'] {
551
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-actions] {
529
552
  align-items: center;
530
553
  display: flex;
531
554
  flex-wrap: wrap;
@@ -543,7 +566,7 @@
543
566
  * margin box is exactly one line and the inset above the message equals the
544
567
  * inset below.
545
568
  */
546
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close'] {
569
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close] {
547
570
  /* The cross is the binding's `Glyph` in an `icon` box at the glyph size
548
571
  the formula for this box reads. */
549
572
  --slotted-icon-size: var(--_glyph-size);
@@ -579,11 +602,11 @@
579
602
 
580
603
  /* `:enabled` is the guard the shared state test requires, and the reason it
581
604
  exists: a control the browser has already refused answers no pointer. */
582
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']:enabled:hover {
605
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:enabled:hover {
583
606
  background-color: var(--_state-hover);
584
607
  }
585
608
 
586
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']:enabled:active {
609
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:enabled:active {
587
610
  background-color: var(--_state-active);
588
611
  }
589
612
 
@@ -592,11 +615,11 @@
592
615
  44 pixels, and the ground and the ring stay square. The message clips its
593
616
  overflow, so the target ends at the message's padding edge. */
594
617
  @media (pointer: coarse) {
595
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close'] {
618
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close] {
596
619
  position: relative;
597
620
  }
598
621
 
599
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']::after {
622
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]::after {
600
623
  content: '';
601
624
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
602
625
  position: absolute;
@@ -611,8 +634,8 @@
611
634
  * it exists because `F6` sends the keyboard here — a message the reader
612
635
  * cannot see they have arrived at is a message they cannot act on.
613
636
  */
614
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']:focus-visible,
615
- [data-ui='toast'] > [data-part='list'] > [data-part='item']:focus-visible {
637
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:focus-visible,
638
+ [data-ui-toast] > [data-part-list] > [data-part-item]:focus-visible {
616
639
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
617
640
  }
618
641
 
@@ -621,7 +644,7 @@
621
644
  * the remaining-time bar has to stop at the rounded corner — and a ring
622
645
  * outside a control at that corner would be cut in half by it.
623
646
  */
624
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']:focus-visible {
647
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:focus-visible {
625
648
  outline-offset: calc(-1 * var(--slotted-focus-ring-width, 2px));
626
649
  }
627
650
 
@@ -630,7 +653,7 @@
630
653
  * of the screen, and read on the box itself the ring was a thick blue border
631
654
  * rather than a ring around a card.
632
655
  */
633
- [data-ui='toast'] > [data-part='list'] > [data-part='item']:focus-visible {
656
+ [data-ui-toast] > [data-part-list] > [data-part-item]:focus-visible {
634
657
  outline-offset: var(--slotted-focus-ring-offset, 2px);
635
658
  }
636
659
 
@@ -643,10 +666,10 @@
643
666
  * fill, so a solid message adds a halo one ring-width wide just inside it,
644
667
  * in the ink its own words are in, for the ring to be read against.
645
668
  */
646
- [data-ui='toast']
647
- > [data-part='list']
648
- > [data-part='item'][data-variant='solid']
649
- > [data-part='close']:focus-visible {
669
+ [data-ui-toast]
670
+ > [data-part-list]
671
+ > [data-part-item][data-variant='solid']
672
+ > [data-part-close]:focus-visible {
650
673
  box-shadow: inset 0 0 0 calc(2 * var(--slotted-focus-ring-width, 2px)) var(--_on-solid);
651
674
  }
652
675
 
@@ -664,7 +687,7 @@
664
687
  * from the inline start in every writing direction with no origin to mirror.
665
688
  * The box is positioned, so nothing it does moves a word.
666
689
  */
667
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='progress'] {
690
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-progress] {
668
691
  animation-duration: var(--slotted-toast-duration, var(--slotted-duration-long));
669
692
  animation-fill-mode: forwards;
670
693
  animation-name: slotted-toast-countdown;
@@ -688,10 +711,10 @@
688
711
  * the one ink the contrast test holds against it, held back so it reads as a
689
712
  * measure rather than as a second border.
690
713
  */
691
- [data-ui='toast']
692
- > [data-part='list']
693
- > [data-part='item'][data-variant='solid']
694
- > [data-part='progress'] {
714
+ [data-ui-toast]
715
+ > [data-part-list]
716
+ > [data-part-item][data-variant='solid']
717
+ > [data-part-progress] {
695
718
  background-color: var(--_on-solid);
696
719
  opacity: 0.7;
697
720
  }
@@ -730,12 +753,12 @@
730
753
  * back in opacity, and the front one, which is the one being read, is at
731
754
  * full strength.
732
755
  */
733
- [data-ui='toast'][data-stacking='stack'] > [data-part='list'] {
756
+ [data-ui-toast][data-stacking='stack'] > [data-part-list] {
734
757
  display: block;
735
758
  position: relative;
736
759
  }
737
760
 
738
- [data-ui='toast'][data-stacking='stack'] > [data-part='list'] > [data-part='item'] {
761
+ [data-ui-toast][data-stacking='stack'] > [data-part-list] > [data-part-item] {
739
762
  block-size: var(--slotted-toast-front-height, auto);
740
763
  inset-inline: 0;
741
764
  position: absolute;
@@ -756,20 +779,20 @@
756
779
  * everything behind it share one strength: below that the pile is a stack of
757
780
  * ghosts, and only the front two edges are showing anyway.
758
781
  */
759
- [data-ui='toast'][data-stacking='stack'] > [data-part='list'] > [data-part='item'][data-open] {
782
+ [data-ui-toast][data-stacking='stack'] > [data-part-list] > [data-part-item][data-open] {
760
783
  opacity: calc(1 - min(var(--slotted-toast-index, 0), 2) * var(--_stack-fade));
761
784
  }
762
785
 
763
- [data-ui='toast'][data-stacking='stack'][data-placement^='bottom']
764
- > [data-part='list']
765
- > [data-part='item'] {
786
+ [data-ui-toast][data-stacking='stack'][data-placement^='bottom']
787
+ > [data-part-list]
788
+ > [data-part-item] {
766
789
  inset-block-end: 0;
767
790
  translate: 0 calc(-1 * var(--slotted-toast-index, 0) * var(--_stack-step));
768
791
  }
769
792
 
770
- [data-ui='toast'][data-stacking='stack'][data-placement^='top']
771
- > [data-part='list']
772
- > [data-part='item'] {
793
+ [data-ui-toast][data-stacking='stack'][data-placement^='top']
794
+ > [data-part-list]
795
+ > [data-part-item] {
773
796
  inset-block-start: 0;
774
797
  translate: 0 calc(var(--slotted-toast-index, 0) * var(--_stack-step));
775
798
  }
@@ -779,9 +802,7 @@
779
802
  * column, and the gap between two of them is the region's own gap — the
780
803
  * offset script writes already carries it.
781
804
  */
782
- [data-ui='toast'][data-stacking='stack'][data-expanded]
783
- > [data-part='list']
784
- > [data-part='item'] {
805
+ [data-ui-toast][data-stacking='stack'][data-expanded] > [data-part-list] > [data-part-item] {
785
806
  block-size: var(--slotted-toast-height, auto);
786
807
  }
787
808
 
@@ -793,25 +814,25 @@
793
814
  * messages hang from the list's edge at `placement`, so the list grows away
794
815
  * from that edge and nothing it holds moves.
795
816
  */
796
- [data-ui='toast'][data-stacking='stack'][data-expanded] > [data-part='list'] {
817
+ [data-ui-toast][data-stacking='stack'][data-expanded] > [data-part-list] {
797
818
  block-size: var(--slotted-toast-stack-height, auto);
798
819
  }
799
820
 
800
- [data-ui='toast'][data-stacking='stack'][data-expanded]
801
- > [data-part='list']
802
- > [data-part='item'][data-open] {
821
+ [data-ui-toast][data-stacking='stack'][data-expanded]
822
+ > [data-part-list]
823
+ > [data-part-item][data-open] {
803
824
  opacity: 1;
804
825
  }
805
826
 
806
- [data-ui='toast'][data-stacking='stack'][data-expanded][data-placement^='bottom']
807
- > [data-part='list']
808
- > [data-part='item'] {
827
+ [data-ui-toast][data-stacking='stack'][data-expanded][data-placement^='bottom']
828
+ > [data-part-list]
829
+ > [data-part-item] {
809
830
  translate: 0 calc(-1 * var(--slotted-toast-stack-offset, 0px));
810
831
  }
811
832
 
812
- [data-ui='toast'][data-stacking='stack'][data-expanded][data-placement^='top']
813
- > [data-part='list']
814
- > [data-part='item'] {
833
+ [data-ui-toast][data-stacking='stack'][data-expanded][data-placement^='top']
834
+ > [data-part-list]
835
+ > [data-part-item] {
815
836
  translate: 0 var(--slotted-toast-stack-offset, 0px);
816
837
  }
817
838
 
@@ -821,11 +842,11 @@
821
842
  * `min()` is what turns an index into that rule without a rule per depth —
822
843
  * the front message resolves to one and every other to zero.
823
844
  */
824
- [data-ui='toast'][data-stacking='stack'] > [data-part='list'] > [data-part='item'] > * {
845
+ [data-ui-toast][data-stacking='stack'] > [data-part-list] > [data-part-item] > * {
825
846
  transition: opacity var(--slotted-duration-medium) var(--slotted-easing-standard);
826
847
  }
827
848
 
828
- [data-ui='toast'][data-stacking='stack']:not([data-expanded]) [data-part='item'] > * {
849
+ [data-ui-toast][data-stacking='stack']:not([data-expanded]) [data-part-item] > * {
829
850
  opacity: calc(1 - min(1, var(--slotted-toast-index, 0)));
830
851
  }
831
852
 
@@ -837,7 +858,7 @@
837
858
  * message follows it exactly, with no transition in the way: a drag that
838
859
  * lags the finger reads as a stuck interface.
839
860
  */
840
- [data-ui='toast'] > [data-part='list'] > [data-part='item'][data-dragging] {
861
+ [data-ui-toast] > [data-part-list] > [data-part-item][data-dragging] {
841
862
  cursor: grabbing;
842
863
  transition: none;
843
864
  translate: var(--slotted-toast-swipe-x, 0px) var(--slotted-toast-swipe-y, 0px);
@@ -846,7 +867,7 @@
846
867
  user-select: none;
847
868
  }
848
869
 
849
- [data-ui='toast'][data-swipe='true'] > [data-part='list'] > [data-part='item'] {
870
+ [data-ui-toast][data-swipe='true'] > [data-part-list] > [data-part-item] {
850
871
  touch-action: none;
851
872
  }
852
873
 
@@ -859,7 +880,7 @@
859
880
  * container condition.
860
881
  */
861
882
  @container slotted-toast (max-width: 20rem) {
862
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] {
883
+ [data-ui-toast] > [data-part-list] > [data-part-item] {
863
884
  --_inset-block: var(--slotted-toast-padding-block, var(--slotted-space-4, 0.5rem));
864
885
  --_inset-inline: var(--slotted-toast-padding-inline, var(--slotted-space-5, 0.75rem));
865
886
  }
@@ -870,7 +891,7 @@
870
891
  * the control, and `button` already ships `fullWidth` for a consumer who
871
892
  * wants otherwise.
872
893
  */
873
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='actions'] {
894
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-actions] {
874
895
  align-items: flex-start;
875
896
  flex-direction: column;
876
897
  }
@@ -885,11 +906,11 @@
885
906
  * own fill and a transparent border is not a colour the system remaps.
886
907
  */
887
908
  @media (forced-colors: active) {
888
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] {
909
+ [data-ui-toast] > [data-part-list] > [data-part-item] {
889
910
  border-color: CanvasText;
890
911
  }
891
912
 
892
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='icon'] {
913
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-icon] {
893
914
  color: CanvasText;
894
915
  }
895
916
 
@@ -897,15 +918,12 @@
897
918
  * The control's glyph is stroked in `currentcolor`, so giving the control
898
919
  * a system colour repaints it, and the mark's slot the same.
899
920
  */
900
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close'] {
921
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close] {
901
922
  color: CanvasText;
902
923
  }
903
924
 
904
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='close']:enabled:hover,
905
- [data-ui='toast']
906
- > [data-part='list']
907
- > [data-part='item']
908
- > [data-part='close']:enabled:active {
925
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:enabled:hover,
926
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-close]:enabled:active {
909
927
  background-color: Highlight;
910
928
  color: HighlightText;
911
929
  }
@@ -914,7 +932,7 @@
914
932
  * A bar of system ink under every message, shortening, is a moving line
915
933
  * with no colour to say what it belongs to. The message still expires.
916
934
  */
917
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='progress'] {
935
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-progress] {
918
936
  background-color: CanvasText;
919
937
  opacity: 1;
920
938
  }
@@ -935,7 +953,7 @@
935
953
  * reached over the declared one, and the `timing` scene froze at 80 per cent.
936
954
  */
937
955
  @media (prefers-reduced-motion: reduce) {
938
- [data-ui='toast'] > [data-part='list'] > [data-part='item'] > [data-part='progress'] {
956
+ [data-ui-toast] > [data-part-list] > [data-part-item] > [data-part-progress] {
939
957
  animation-name: none;
940
958
  inline-size: 100%;
941
959
  }
@@ -36,6 +36,7 @@
36
36
  "--slotted-text",
37
37
  "--slotted-text-muted",
38
38
  "--slotted-toast-actions-gap",
39
+ "--slotted-toast-backdrop-filter",
39
40
  "--slotted-toast-border-color",
40
41
  "--slotted-toast-border-width",
41
42
  "--slotted-toast-close-radius",
@@ -71,6 +72,11 @@
71
72
  "--slotted-tone-danger-solid",
72
73
  "--slotted-tone-danger-surface",
73
74
  "--slotted-tone-danger-text",
75
+ "--slotted-tone-info-border",
76
+ "--slotted-tone-info-on-solid",
77
+ "--slotted-tone-info-solid",
78
+ "--slotted-tone-info-surface",
79
+ "--slotted-tone-info-text",
74
80
  "--slotted-tone-secondary-border",
75
81
  "--slotted-tone-secondary-on-solid",
76
82
  "--slotted-tone-secondary-solid",