@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
package/src/icon/icon.css CHANGED
@@ -11,7 +11,7 @@
11
11
  * this family. An instance overrides that container through `data-size`,
12
12
  * which sets the same token on the element itself.
13
13
  */
14
- [data-ui='icon'] {
14
+ [data-ui-icon] {
15
15
  --_size: var(--slotted-icon-size, var(--slotted-control-icon-size-md, 16px));
16
16
 
17
17
  align-items: center;
@@ -58,8 +58,8 @@
58
58
  * is on the child and not on the box, because `vertical-align` above reads
59
59
  * `cap` from the text the box sits in.
60
60
  */
61
- [data-ui='icon'] > *,
62
- [data-ui='icon'] svg {
61
+ [data-ui-icon] > *,
62
+ [data-ui-icon] svg {
63
63
  block-size: 100%;
64
64
  display: block;
65
65
  font-size: var(--_size);
@@ -72,19 +72,19 @@
72
72
  * the type it sits in, because sixteen pixels inside a display heading is
73
73
  * not an icon.
74
74
  */
75
- [data-ui='icon'][data-size='text'] {
75
+ [data-ui-icon][data-size='text'] {
76
76
  --slotted-icon-size: 1em;
77
77
  }
78
78
 
79
- [data-ui='icon'][data-size='sm'] {
79
+ [data-ui-icon][data-size='sm'] {
80
80
  --slotted-icon-size: var(--slotted-control-icon-size-sm, 14px);
81
81
  }
82
82
 
83
- [data-ui='icon'][data-size='md'] {
83
+ [data-ui-icon][data-size='md'] {
84
84
  --slotted-icon-size: var(--slotted-control-icon-size-md, 16px);
85
85
  }
86
86
 
87
- [data-ui='icon'][data-size='lg'] {
87
+ [data-ui-icon][data-size='lg'] {
88
88
  --slotted-icon-size: var(--slotted-control-icon-size-lg, 18px);
89
89
  }
90
90
 
@@ -95,31 +95,35 @@
95
95
  * `stroke="currentColor"` and filled artwork declares `fill="currentColor"`,
96
96
  * and imposing either would break the other.
97
97
  */
98
- [data-ui='icon'][data-tone='default'] {
98
+ [data-ui-icon][data-tone='default'] {
99
99
  color: var(--slotted-text, CanvasText);
100
100
  }
101
101
 
102
- [data-ui='icon'][data-tone='muted'] {
102
+ [data-ui-icon][data-tone='muted'] {
103
103
  color: var(--slotted-text-muted, GrayText);
104
104
  }
105
105
 
106
- [data-ui='icon'][data-tone='accent'] {
106
+ [data-ui-icon][data-tone='accent'] {
107
107
  color: var(--slotted-tone-accent-text, LinkText);
108
108
  }
109
109
 
110
- [data-ui='icon'][data-tone='success'] {
110
+ [data-ui-icon][data-tone='success'] {
111
111
  color: var(--slotted-tone-success-text, CanvasText);
112
112
  }
113
113
 
114
- [data-ui='icon'][data-tone='warning'] {
114
+ [data-ui-icon][data-tone='info'] {
115
+ color: var(--slotted-tone-info-text, CanvasText);
116
+ }
117
+
118
+ [data-ui-icon][data-tone='warning'] {
115
119
  color: var(--slotted-tone-warning-text, CanvasText);
116
120
  }
117
121
 
118
- [data-ui='icon'][data-tone='danger'] {
122
+ [data-ui-icon][data-tone='danger'] {
119
123
  color: var(--slotted-tone-danger-text, CanvasText);
120
124
  }
121
125
 
122
- [data-ui='icon'][data-tone='inverse'] {
126
+ [data-ui-icon][data-tone='inverse'] {
123
127
  color: var(--slotted-text-inverse, Canvas);
124
128
  }
125
129
 
@@ -130,7 +134,7 @@
130
134
  * right-to-left page has to read the directionality that actually applies to
131
135
  * it.
132
136
  */
133
- [data-ui='icon'][data-directional]:dir(rtl) {
137
+ [data-ui-icon][data-directional]:dir(rtl) {
134
138
  scale: -1 1;
135
139
  }
136
140
  }
@@ -9,6 +9,7 @@
9
9
  "--slotted-text-muted",
10
10
  "--slotted-tone-accent-text",
11
11
  "--slotted-tone-danger-text",
12
+ "--slotted-tone-info-text",
12
13
  "--slotted-tone-success-text",
13
14
  "--slotted-tone-warning-text"
14
15
  ]
@@ -20,7 +20,7 @@
20
20
  * `height` on the element, or `ratio` on the root, are the two ways to
21
21
  * decide, and both reserve the box before the first byte arrives.
22
22
  */
23
- [data-ui='image'][data-part='root'] {
23
+ [data-ui-image][data-part-root] {
24
24
  --_fit: cover;
25
25
  --_position: var(--slotted-image-position, center);
26
26
  --_radius: var(--slotted-image-radius, var(--slotted-radius-none, 0px));
@@ -106,7 +106,7 @@
106
106
  * stood 0.016 pixels tall above the picture instead of over it (measured
107
107
  * with hover forced on the `interactive` scene).
108
108
  */
109
- [data-ui='image'][data-part='root'] > * {
109
+ [data-ui-image][data-part-root] > * {
110
110
  grid-area: 1 / 1;
111
111
  min-inline-size: 0;
112
112
  }
@@ -121,7 +121,7 @@
121
121
  * picture keeps its intrinsic height; the family does not measure the
122
122
  * parent to do otherwise.
123
123
  */
124
- [data-ui='image'][data-part='root'][data-layout='fill'] {
124
+ [data-ui-image][data-part-root][data-layout='fill'] {
125
125
  block-size: 100%;
126
126
  inline-size: 100%;
127
127
  }
@@ -134,7 +134,7 @@
134
134
  * pushed the caption under the picture out of the item (measured in the
135
135
  * first capture of the `in-context` scene).
136
136
  */
137
- [data-ui='image'][data-part='root'][data-layout='framed'] {
137
+ [data-ui-image][data-part-root][data-layout='framed'] {
138
138
  inline-size: 100%;
139
139
  }
140
140
 
@@ -145,19 +145,19 @@
145
145
  * the blurred preview both read, so the preview is cropped exactly where
146
146
  * the picture will be. `cover` is stated in the base rule.
147
147
  */
148
- [data-ui='image'][data-part='root'][data-fit='contain'] {
148
+ [data-ui-image][data-part-root][data-fit='contain'] {
149
149
  --_fit: contain;
150
150
  }
151
151
 
152
- [data-ui='image'][data-part='root'][data-fit='fill'] {
152
+ [data-ui-image][data-part-root][data-fit='fill'] {
153
153
  --_fit: fill;
154
154
  }
155
155
 
156
- [data-ui='image'][data-part='root'][data-fit='none'] {
156
+ [data-ui-image][data-part-root][data-fit='none'] {
157
157
  --_fit: none;
158
158
  }
159
159
 
160
- [data-ui='image'][data-part='root'][data-fit='scale-down'] {
160
+ [data-ui-image][data-part-root][data-fit='scale-down'] {
161
161
  --_fit: scale-down;
162
162
  }
163
163
 
@@ -170,41 +170,41 @@
170
170
  * page is mirrored. `center` is stated in the base rule; `custom` is the
171
171
  * token written on the instance, read there.
172
172
  */
173
- [data-ui='image'][data-part='root'][data-position='top'] {
173
+ [data-ui-image][data-part-root][data-position='top'] {
174
174
  --_position: top;
175
175
  }
176
176
 
177
- [data-ui='image'][data-part='root'][data-position='bottom'] {
177
+ [data-ui-image][data-part-root][data-position='bottom'] {
178
178
  --_position: bottom;
179
179
  }
180
180
 
181
- [data-ui='image'][data-part='root'][data-position='start'] {
181
+ [data-ui-image][data-part-root][data-position='start'] {
182
182
  --_position: left;
183
183
  }
184
184
 
185
- [data-ui='image'][data-part='root'][data-position='end'] {
185
+ [data-ui-image][data-part-root][data-position='end'] {
186
186
  --_position: right;
187
187
  }
188
188
 
189
- [data-ui='image'][data-part='root'][data-position='start']:dir(rtl) {
189
+ [data-ui-image][data-part-root][data-position='start']:dir(rtl) {
190
190
  --_position: right;
191
191
  }
192
192
 
193
- [data-ui='image'][data-part='root'][data-position='end']:dir(rtl) {
193
+ [data-ui-image][data-part-root][data-position='end']:dir(rtl) {
194
194
  --_position: left;
195
195
  }
196
196
 
197
197
  /* ── Radius ───────────────────────────────────────────────────────────── */
198
198
 
199
- [data-ui='image'][data-part='root'][data-radius='sm'] {
199
+ [data-ui-image][data-part-root][data-radius='sm'] {
200
200
  --_radius: var(--slotted-image-radius, var(--slotted-radius-sm, 4px));
201
201
  }
202
202
 
203
- [data-ui='image'][data-part='root'][data-radius='md'] {
203
+ [data-ui-image][data-part-root][data-radius='md'] {
204
204
  --_radius: var(--slotted-image-radius, var(--slotted-radius-md, 6px));
205
205
  }
206
206
 
207
- [data-ui='image'][data-part='root'][data-radius='lg'] {
207
+ [data-ui-image][data-part-root][data-radius='lg'] {
208
208
  --_radius: var(--slotted-image-radius, var(--slotted-radius-lg, 8px));
209
209
  }
210
210
 
@@ -216,7 +216,7 @@
216
216
  * everywhere else. Drawn as the inset ring the base rule already holds, so
217
217
  * the picture is the same size with the edge as without it.
218
218
  */
219
- [data-ui='image'][data-part='root'][data-bordered] {
219
+ [data-ui-image][data-part-root][data-bordered] {
220
220
  --_edge: var(--slotted-border-subtle, ButtonBorder);
221
221
  }
222
222
 
@@ -228,7 +228,7 @@
228
228
  * last and so painted last, and takes no pointer, so a press on the edge
229
229
  * is a press on the link the root may be.
230
230
  */
231
- [data-ui='image'][data-part='root']::after {
231
+ [data-ui-image][data-part-root]::after {
232
232
  border-radius: inherit;
233
233
  box-shadow: inset 0 0 0 var(--_edge-width) var(--_edge);
234
234
  content: '';
@@ -244,7 +244,7 @@
244
244
  * takes its box away, so the `<img>` inside it is the grid item and every
245
245
  * rule below reaches it the same way with sources and without.
246
246
  */
247
- [data-ui='image'] [data-part='picture'] {
247
+ [data-ui-image] [data-part-picture] {
248
248
  display: contents;
249
249
  }
250
250
 
@@ -262,7 +262,7 @@
262
262
  * own `contain` — `aspect-ratio` reserves without cropping, and this
263
263
  * family is the one that decides to.
264
264
  */
265
- [data-ui='image'][data-part='root'] [data-part='image'] {
265
+ [data-ui-image][data-part-root] [data-part-image] {
266
266
  block-size: auto;
267
267
  display: block;
268
268
  grid-area: 1 / 1;
@@ -274,13 +274,13 @@
274
274
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
275
275
  }
276
276
 
277
- [data-ui='image'][data-part='root'][data-layout='fill'] [data-part='image'],
278
- [data-ui='image'][data-part='root'][data-layout='framed'] [data-part='image'] {
277
+ [data-ui-image][data-part-root][data-layout='fill'] [data-part-image],
278
+ [data-ui-image][data-part-root][data-layout='framed'] [data-part-image] {
279
279
  block-size: 100%;
280
280
  inline-size: 100%;
281
281
  }
282
282
 
283
- [data-ui='image'][data-part='root'][data-status='loaded'] [data-part='image'] {
283
+ [data-ui-image][data-part-root][data-status='loaded'] [data-part-image] {
284
284
  opacity: 1;
285
285
  }
286
286
 
@@ -290,7 +290,7 @@
290
290
  * width of the sentence (measured in the `error` scene). The element stays
291
291
  * in the tree with its name and takes no box; the fallback is the box.
292
292
  */
293
- [data-ui='image'][data-part='root'][data-status='error'] [data-part='image'] {
293
+ [data-ui-image][data-part-root][data-status='error'] [data-part-image] {
294
294
  block-size: 0;
295
295
  inline-size: 0;
296
296
  min-block-size: 0;
@@ -306,7 +306,7 @@
306
306
  * flicker. It never takes a pointer: a press on a loading thumbnail is a
307
307
  * press on the link the root may be.
308
308
  */
309
- [data-ui='image'][data-part='root'] [data-part='placeholder'] {
309
+ [data-ui-image][data-part-root] [data-part-placeholder] {
310
310
  background-color: var(--_ground);
311
311
  block-size: 100%;
312
312
  box-shadow: var(--_ground-edge);
@@ -327,7 +327,7 @@
327
327
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-standard);
328
328
  }
329
329
 
330
- [data-ui='image'][data-part='root'][data-placeholder='none'] [data-part='placeholder'] {
330
+ [data-ui-image][data-part-root][data-placeholder='none'] [data-part-placeholder] {
331
331
  background-color: transparent;
332
332
  box-shadow: none;
333
333
  }
@@ -342,7 +342,7 @@
342
342
  * blur's, in a length rather than a scale step, because a scale step is a
343
343
  * distance between things and this is how far a pixel bleeds.
344
344
  */
345
- [data-ui='image'][data-part='root'][data-placeholder='blur'] [data-part='placeholder'] > img {
345
+ [data-ui-image][data-part-root][data-placeholder='blur'] [data-part-placeholder] > img {
346
346
  block-size: 100%;
347
347
  display: block;
348
348
  filter: blur(var(--slotted-image-placeholder-blur, 1.25rem));
@@ -352,11 +352,11 @@
352
352
  transform: scale(1.08);
353
353
  }
354
354
 
355
- [data-ui='image'][data-part='root'][data-status='loaded'] [data-part='placeholder'] {
355
+ [data-ui-image][data-part-root][data-status='loaded'] [data-part-placeholder] {
356
356
  opacity: 0;
357
357
  }
358
358
 
359
- [data-ui='image'][data-part='root'][data-status='error'] [data-part='placeholder'] {
359
+ [data-ui-image][data-part-root][data-status='error'] [data-part-placeholder] {
360
360
  visibility: hidden;
361
361
  }
362
362
 
@@ -368,7 +368,7 @@
368
368
  * while the picture is fine. Given a minimum of its own because a picture
369
369
  * that reserved nothing and then failed has no box, and a glyph needs one.
370
370
  */
371
- [data-ui='image'][data-part='root'] [data-part='fallback'] {
371
+ [data-ui-image][data-part-root] [data-part-fallback] {
372
372
  /**
373
373
  * The mark a picture leaves behind: the binding draws `image-off` in an
374
374
  * `Icon` unless the consumer projected content of their own, which
@@ -383,7 +383,7 @@
383
383
  display: none;
384
384
  }
385
385
 
386
- [data-ui='image'][data-part='root'][data-status='error'] [data-part='fallback'] {
386
+ [data-ui-image][data-part-root][data-status='error'] [data-part-fallback] {
387
387
  background-color: var(--_ground);
388
388
  block-size: 100%;
389
389
  box-shadow: var(--_ground-edge);
@@ -412,15 +412,15 @@
412
412
  * that belongs to the control that holds the picture — but a `<button
413
413
  * disabled>` is the platform's, and a weak state holds itself back for it.
414
414
  */
415
- [data-ui='image'][data-part='root']:any-link,
416
- button[data-ui='image'][data-part='root'],
417
- [data-ui='image'][data-part='root'][tabindex] {
415
+ [data-ui-image][data-part-root]:any-link,
416
+ button[data-ui-image][data-part-root],
417
+ [data-ui-image][data-part-root][tabindex] {
418
418
  cursor: pointer;
419
419
  }
420
420
 
421
- [data-ui='image'][data-part='root']:any-link:not([data-disabled]):hover,
422
- button[data-ui='image'][data-part='root']:not(:disabled):hover,
423
- [data-ui='image'][data-part='root'][tabindex]:not([data-disabled]):hover {
421
+ [data-ui-image][data-part-root]:any-link:not([data-disabled]):hover,
422
+ button[data-ui-image][data-part-root]:not(:disabled):hover,
423
+ [data-ui-image][data-part-root][tabindex]:not([data-disabled]):hover {
424
424
  --_edge: var(--slotted-border-strong, CanvasText);
425
425
  /* Two pixels rather than one: a hairline over a photograph's own bright
426
426
  edge is not a hover anyone sees, and the ring is inset, so the width
@@ -433,7 +433,7 @@
433
433
  * missing the first time a consumer makes a picture a link. Drawn outside
434
434
  * the box at the theme's offset, over whatever the picture is on.
435
435
  */
436
- [data-ui='image'][data-part='root']:focus-visible {
436
+ [data-ui-image][data-part-root]:focus-visible {
437
437
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
438
438
  outline-offset: var(--slotted-focus-ring-offset, 2px);
439
439
  }