@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
@@ -5,7 +5,7 @@
5
5
  * The group arranges the checkboxes and holds the value; every box draws
6
6
  * itself, because `checkbox` is the family beside this one rather than a part
7
7
  * of it. Nothing here selects into that family: a rule reaching
8
- * `[data-ui='checkbox']` from this stylesheet would make one family's DOM part
8
+ * `[data-ui-checkbox]` from this stylesheet would make one family's DOM part
9
9
  * of another's contract, and moving a box inside a wrapper would then change
10
10
  * its appearance with no test to notice.
11
11
  *
@@ -14,7 +14,7 @@
14
14
  * named group, and a second one named by the same legend is the same group
15
15
  * announced twice.
16
16
  */
17
- [data-ui='checkbox-group'][data-part='root'] {
17
+ [data-ui-checkbox-group][data-part-root] {
18
18
  --_gap: var(--slotted-control-gap-md, 8px);
19
19
 
20
20
  display: flex;
@@ -33,7 +33,7 @@
33
33
  * the same stated reason: two choices have to read as further apart than a
34
34
  * box and its own label.
35
35
  */
36
- [data-ui='checkbox-group'][data-part='root']:has([data-part='description']) {
36
+ [data-ui-checkbox-group][data-part-root]:has([data-part-description]) {
37
37
  row-gap: var(--slotted-checkbox-group-gap, calc(var(--_gap) * 2));
38
38
  }
39
39
 
@@ -41,7 +41,7 @@
41
41
  * Horizontal wraps rather than scrolls or clips. A row of choices that runs
42
42
  * past the container is a row whose last option nobody can see.
43
43
  */
44
- [data-ui='checkbox-group'][data-part='root'][data-orientation='horizontal'] {
44
+ [data-ui-checkbox-group][data-part-root][data-orientation='horizontal'] {
45
45
  /** Twice the control gap: two choices have to read as further apart than a
46
46
  box and its own label. */
47
47
  column-gap: calc(var(--_gap) * 2);
@@ -56,15 +56,15 @@
56
56
  * them through the binding rather than through a descendant selector.
57
57
  */
58
58
 
59
- [data-ui='checkbox-group'][data-part='root'][data-size='sm'] {
59
+ [data-ui-checkbox-group][data-part-root][data-size='sm'] {
60
60
  --_gap: var(--slotted-control-gap-sm, 6px);
61
61
  }
62
62
 
63
- [data-ui='checkbox-group'][data-part='root'][data-size='md'] {
63
+ [data-ui-checkbox-group][data-part-root][data-size='md'] {
64
64
  --_gap: var(--slotted-control-gap-md, 8px);
65
65
  }
66
66
 
67
- [data-ui='checkbox-group'][data-part='root'][data-size='lg'] {
67
+ [data-ui-checkbox-group][data-part-root][data-size='lg'] {
68
68
  --_gap: var(--slotted-control-gap-lg, 8px);
69
69
  }
70
70
  }
@@ -13,7 +13,7 @@
13
13
  * The type does not follow density; the inset and the gutter do. Code at
14
14
  * `dense` is still read one character at a time.
15
15
  */
16
- [data-ui='code-block'] {
16
+ [data-ui-code-block] {
17
17
  --_ground: var(--slotted-code-block-surface, var(--slotted-surface-sunken, Canvas));
18
18
  --_edge: var(--slotted-code-block-border-color, var(--slotted-border-subtle, GrayText));
19
19
  --_ink: var(--slotted-code-block-color, var(--slotted-text, CanvasText));
@@ -63,7 +63,7 @@
63
63
  * page's direction while the code below keeps its own, so a title reads in
64
64
  * the reader's language and the code in its own.
65
65
  */
66
- [data-ui='code-block'] > [data-part='header'] {
66
+ [data-ui-code-block] > [data-part-header] {
67
67
  align-items: center;
68
68
  border-block-end: var(--slotted-border-width-thin, 1px) solid var(--_edge);
69
69
  display: flex;
@@ -76,7 +76,7 @@
76
76
  }
77
77
 
78
78
  /* The file's kind, an `Icon` the binding draws from the name's extension. */
79
- [data-ui='code-block'] > [data-part='header'] > [data-part='icon'] {
79
+ [data-ui-code-block] > [data-part-header] > [data-part-icon] {
80
80
  --slotted-icon-size: var(--_icon);
81
81
 
82
82
  block-size: var(--_icon);
@@ -86,7 +86,7 @@
86
86
  inline-size: var(--_icon);
87
87
  }
88
88
 
89
- [data-ui='code-block'] > [data-part='header'] > [data-part='title'] {
89
+ [data-ui-code-block] > [data-part-header] > [data-part-title] {
90
90
  font-family: var(--slotted-code-block-font-family, var(--slotted-font-family-mono, monospace));
91
91
  min-inline-size: 0;
92
92
  overflow: hidden;
@@ -94,7 +94,7 @@
94
94
  white-space: nowrap;
95
95
  }
96
96
 
97
- [data-ui='code-block'] > [data-part='header'] > [data-part='language'] {
97
+ [data-ui-code-block] > [data-part-header] > [data-part-language] {
98
98
  color: var(--_muted);
99
99
  font-size: var(--slotted-font-size-xs, 0.75rem);
100
100
  letter-spacing: 0.02em;
@@ -102,19 +102,19 @@
102
102
  text-transform: uppercase;
103
103
  }
104
104
 
105
- [data-ui='code-block'] > [data-part='header'] > [data-part='title'] + [data-part='language'],
106
- [data-ui='code-block'] > [data-part='header'] > [data-part='icon'] + [data-part='language'] {
105
+ [data-ui-code-block] > [data-part-header] > [data-part-title] + [data-part-language],
106
+ [data-ui-code-block] > [data-part-header] > [data-part-icon] + [data-part-language] {
107
107
  margin-inline-start: auto;
108
108
  }
109
109
 
110
- [data-ui='code-block'] > [data-part='header'] > [data-part='actions'] {
110
+ [data-ui-code-block] > [data-part-header] > [data-part-actions] {
111
111
  align-items: center;
112
112
  display: flex;
113
113
  gap: var(--slotted-space-1, 0.125rem);
114
114
  margin-inline-start: auto;
115
115
  }
116
116
 
117
- [data-ui='code-block'] > [data-part='header'] > [data-part='language'] + [data-part='actions'] {
117
+ [data-ui-code-block] > [data-part-header] > [data-part-language] + [data-part-actions] {
118
118
  margin-inline-start: var(--slotted-space-3, 0.375rem);
119
119
  }
120
120
 
@@ -123,7 +123,7 @@
123
123
  * inline end of the first line, on the ground's own colour, so the code
124
124
  * beneath them is still there when the pointer leaves.
125
125
  */
126
- [data-ui='code-block'] > [data-part='actions'] {
126
+ [data-ui-code-block] > [data-part-actions] {
127
127
  align-items: center;
128
128
  background-color: var(--_ground);
129
129
  border-radius: var(--slotted-control-radius, 4px);
@@ -138,7 +138,7 @@
138
138
  /* ── The two controls, description-list's ────────────────────────────── */
139
139
 
140
140
  /* Each holds an `Icon`: text-wrap, and copy that turns to a check once done. */
141
- [data-ui='code-block'] :is([data-part='copy'], [data-part='wrap']) {
141
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap]) {
142
142
  --slotted-icon-size: var(--_icon);
143
143
 
144
144
  align-items: center;
@@ -164,48 +164,45 @@
164
164
  reaches 44 pixels, and the ground and the ring stay square. The two
165
165
  stand two pixels apart, so neither reaches across the edge they share. */
166
166
  @media (pointer: coarse) {
167
- [data-ui='code-block'] :is([data-part='copy'], [data-part='wrap']) {
167
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap]) {
168
168
  position: relative;
169
169
  }
170
170
 
171
- [data-ui='code-block'] :is([data-part='copy'], [data-part='wrap'])::before {
171
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap])::before {
172
172
  content: '';
173
173
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
174
174
  position: absolute;
175
175
  }
176
176
 
177
- [data-ui='code-block'] [data-part='wrap']:has(+ [data-part='copy'])::before {
177
+ [data-ui-code-block] [data-part-wrap]:has(+ [data-part-copy])::before {
178
178
  inset-inline-end: 0;
179
179
  }
180
180
 
181
- [data-ui='code-block'] [data-part='wrap'] + [data-part='copy']::before {
181
+ [data-ui-code-block] [data-part-wrap] + [data-part-copy]::before {
182
182
  inset-inline-start: 0;
183
183
  }
184
184
  }
185
185
 
186
- [data-ui='code-block']
187
- :is([data-part='copy'], [data-part='wrap']):enabled:not([data-complete]):hover {
186
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap]):enabled:not([data-complete]):hover {
188
187
  background-color: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
189
188
  color: var(--_ink);
190
189
  }
191
190
 
192
- [data-ui='code-block']
193
- :is([data-part='copy'], [data-part='wrap']):enabled:not([data-complete]):active {
191
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap]):enabled:not([data-complete]):active {
194
192
  background-color: var(--slotted-tone-secondary-subtle-active, ButtonFace);
195
193
  }
196
194
 
197
- [data-ui='code-block'] [data-part='wrap'][data-pressed] {
195
+ [data-ui-code-block] [data-part-wrap][data-pressed] {
198
196
  background-color: var(--slotted-tone-accent-surface, Canvas);
199
197
  color: var(--slotted-tone-accent-text, CanvasText);
200
198
  }
201
199
 
202
200
  /** A copy that finished: the mark changes as well as the colour, and returns on its own. */
203
- [data-ui='code-block'] [data-part='copy'][data-complete] {
201
+ [data-ui-code-block] [data-part-copy][data-complete] {
204
202
  color: var(--slotted-tone-success-text, CanvasText);
205
203
  }
206
204
 
207
- [data-ui='code-block']
208
- :is([data-part='copy'], [data-part='wrap'], [data-part='reveal']):focus-visible {
205
+ [data-ui-code-block] :is([data-part-copy], [data-part-wrap], [data-part-reveal]):focus-visible {
209
206
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
210
207
  outline-offset: var(--slotted-focus-ring-offset, 2px);
211
208
  }
@@ -217,27 +214,27 @@
217
214
  * The block's radius reaches it through `inherit`, and the mask
218
215
  * scroll-area draws at an overflowing edge is what a wide line fades into.
219
216
  */
220
- [data-ui='code-block'] > [data-part='body'] {
217
+ [data-ui-code-block] > [data-part-body] {
221
218
  border-radius: 0 0 var(--_radius) var(--_radius);
222
219
  min-inline-size: 0;
223
220
  }
224
221
 
225
- [data-ui='code-block'] > [data-part='body']:first-child {
222
+ [data-ui-code-block] > [data-part-body]:first-child {
226
223
  border-radius: var(--_radius);
227
224
  }
228
225
 
229
- [data-ui='code-block'] > [data-part='body'][data-max-lines] > [data-part='viewport'] {
226
+ [data-ui-code-block] > [data-part-body][data-max-lines] > [data-part-viewport] {
230
227
  max-block-size: calc(
231
228
  var(--slotted-code-block-max-lines) * var(--_line) + var(--_inset-block) * 2
232
229
  );
233
230
  }
234
231
 
235
- [data-ui='code-block'] > [data-part='body'] > [data-part='viewport']:focus-visible {
232
+ [data-ui-code-block] > [data-part-body] > [data-part-viewport]:focus-visible {
236
233
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
237
234
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
238
235
  }
239
236
 
240
- [data-ui='code-block'] [data-part='pre'] {
237
+ [data-ui-code-block] [data-part-pre] {
241
238
  /**
242
239
  * Code reads left to right whatever the page does: the order of the
243
240
  * characters is what the code means. `prose` decided it for a fence.
@@ -251,13 +248,13 @@
251
248
  white-space: pre;
252
249
  }
253
250
 
254
- [data-ui='code-block'][data-wrap] [data-part='pre'] {
251
+ [data-ui-code-block][data-wrap] [data-part-pre] {
255
252
  min-inline-size: 0;
256
253
  overflow-wrap: anywhere;
257
254
  white-space: pre-wrap;
258
255
  }
259
256
 
260
- [data-ui='code-block'] [data-part='code'] {
257
+ [data-ui-code-block] [data-part-code] {
261
258
  display: grid;
262
259
  font: inherit;
263
260
  grid-template-columns: minmax(0, 1fr);
@@ -272,7 +269,7 @@
272
269
  * own leading whitespace — the binding measures it once into
273
270
  * `--slotted-code-block-indent`, in characters.
274
271
  */
275
- [data-ui='code-block'] [data-part='line'] {
272
+ [data-ui-code-block] [data-part-line] {
276
273
  --_indent: calc(var(--slotted-code-block-indent, 0) * 1ch);
277
274
  box-sizing: border-box;
278
275
  display: grid;
@@ -282,21 +279,21 @@
282
279
  position: relative;
283
280
  }
284
281
 
285
- [data-ui='code-block'][data-line-numbers] [data-part='line'] {
282
+ [data-ui-code-block][data-line-numbers] [data-part-line] {
286
283
  --_number: var(--_gutter);
287
284
  padding-inline-start: 0;
288
285
  }
289
286
 
290
287
  /** The number is in the DOM whether or not it is drawn, so turning numbers on moves no line. */
291
- [data-ui='code-block']:not([data-line-numbers]) [data-part='number'] {
288
+ [data-ui-code-block]:not([data-line-numbers]) [data-part-number] {
292
289
  display: none;
293
290
  }
294
291
 
295
- [data-ui='code-block'][data-marks] [data-part='line'] {
292
+ [data-ui-code-block][data-marks] [data-part-line] {
296
293
  --_marker: var(--slotted-space-6, 1rem);
297
294
  }
298
295
 
299
- [data-ui='code-block'] [data-part='number'] {
296
+ [data-ui-code-block] [data-part-number] {
300
297
  color: var(--_muted);
301
298
  font-variant-numeric: tabular-nums;
302
299
  grid-column: 1;
@@ -305,65 +302,65 @@
305
302
  user-select: none;
306
303
  }
307
304
 
308
- [data-ui='code-block'] [data-part='marker'] {
305
+ [data-ui-code-block] [data-part-marker] {
309
306
  grid-column: 2;
310
307
  text-align: center;
311
308
  user-select: none;
312
309
  }
313
310
 
314
- [data-ui='code-block'] [data-part='line'] > [data-part='token'],
315
- [data-ui='code-block'] [data-part='line'] > [data-part='text'] {
311
+ [data-ui-code-block] [data-part-line] > [data-part-token],
312
+ [data-ui-code-block] [data-part-line] > [data-part-text] {
316
313
  grid-column: 3;
317
314
  }
318
315
 
319
316
  /** The tokens flow as one inline run inside the third column. */
320
- [data-ui='code-block'] [data-part='line'] > [data-part='text'] {
317
+ [data-ui-code-block] [data-part-line] > [data-part-text] {
321
318
  display: block;
322
319
  min-inline-size: 0;
323
320
  }
324
321
 
325
- [data-ui='code-block'][data-wrap] [data-part='line'] > [data-part='text'] {
322
+ [data-ui-code-block][data-wrap] [data-part-line] > [data-part-text] {
326
323
  padding-inline-start: var(--_indent);
327
324
  text-indent: calc(var(--_indent) * -1);
328
325
  }
329
326
 
330
327
  /* ── Scopes ─────────────────────────────────────────────────────────── */
331
328
 
332
- [data-ui='code-block'] [data-token='comment'] {
329
+ [data-ui-code-block] [data-token='comment'] {
333
330
  color: var(--slotted-code-comment, var(--slotted-text-muted, GrayText));
334
331
  font-style: italic;
335
332
  }
336
- [data-ui='code-block'] [data-token='keyword'] {
333
+ [data-ui-code-block] [data-token='keyword'] {
337
334
  color: var(--slotted-code-keyword, var(--slotted-text, CanvasText));
338
335
  }
339
- [data-ui='code-block'] [data-token='string'] {
336
+ [data-ui-code-block] [data-token='string'] {
340
337
  color: var(--slotted-code-string, var(--slotted-text, CanvasText));
341
338
  }
342
- [data-ui='code-block'] [data-token='number'] {
339
+ [data-ui-code-block] [data-token='number'] {
343
340
  color: var(--slotted-code-number, var(--slotted-text, CanvasText));
344
341
  }
345
- [data-ui='code-block'] [data-token='function'] {
342
+ [data-ui-code-block] [data-token='function'] {
346
343
  color: var(--slotted-code-function, var(--slotted-text, CanvasText));
347
344
  }
348
- [data-ui='code-block'] [data-token='type'] {
345
+ [data-ui-code-block] [data-token='type'] {
349
346
  color: var(--slotted-code-type, var(--slotted-text, CanvasText));
350
347
  }
351
- [data-ui='code-block'] [data-token='variable'] {
348
+ [data-ui-code-block] [data-token='variable'] {
352
349
  color: var(--slotted-code-variable, var(--slotted-text, CanvasText));
353
350
  }
354
- [data-ui='code-block'] [data-token='property'] {
351
+ [data-ui-code-block] [data-token='property'] {
355
352
  color: var(--slotted-code-property, var(--slotted-text, CanvasText));
356
353
  }
357
- [data-ui='code-block'] [data-token='punctuation'] {
354
+ [data-ui-code-block] [data-token='punctuation'] {
358
355
  color: var(--slotted-code-punctuation, var(--slotted-text, CanvasText));
359
356
  }
360
- [data-ui='code-block'] [data-token='tag'] {
357
+ [data-ui-code-block] [data-token='tag'] {
361
358
  color: var(--slotted-code-tag, var(--slotted-text, CanvasText));
362
359
  }
363
- [data-ui='code-block'] [data-token='attribute'] {
360
+ [data-ui-code-block] [data-token='attribute'] {
364
361
  color: var(--slotted-code-attribute, var(--slotted-text, CanvasText));
365
362
  }
366
- [data-ui='code-block'] [data-token='constant'] {
363
+ [data-ui-code-block] [data-token='constant'] {
367
364
  color: var(--slotted-code-constant, var(--slotted-text, CanvasText));
368
365
  }
369
366
 
@@ -374,13 +371,13 @@
374
371
  * diff pair. The sign is text in a gutter nobody can select, so it never
375
372
  * reaches a clipboard.
376
373
  */
377
- [data-ui='code-block'] [data-part='line'][data-mark] {
374
+ [data-ui-code-block] [data-part-line][data-mark] {
378
375
  --_tone: var(--slotted-tone-accent-text, CanvasText);
379
376
  background-color: color-mix(in srgb, var(--_tone) calc(var(--_tint) * 100%), transparent);
380
377
  }
381
378
 
382
- [data-ui='code-block']
383
- [data-part='line']:is(
379
+ [data-ui-code-block]
380
+ [data-part-line]:is(
384
381
  [data-mark='highlight'],
385
382
  [data-mark='error'],
386
383
  [data-mark='warning']
@@ -393,33 +390,33 @@
393
390
  position: absolute;
394
391
  }
395
392
 
396
- [data-ui='code-block'] [data-part='line'][data-mark='add'] {
393
+ [data-ui-code-block] [data-part-line][data-mark='add'] {
397
394
  --_tone: var(--slotted-tone-success-text, CanvasText);
398
395
  }
399
396
 
400
- [data-ui='code-block'] [data-part='line'][data-mark='remove'] {
397
+ [data-ui-code-block] [data-part-line][data-mark='remove'] {
401
398
  --_tone: var(--slotted-tone-danger-text, CanvasText);
402
399
  }
403
400
 
404
- [data-ui='code-block'] [data-part='line'][data-mark='error'] {
401
+ [data-ui-code-block] [data-part-line][data-mark='error'] {
405
402
  --_tone: var(--slotted-tone-danger-text, CanvasText);
406
403
  }
407
404
 
408
- [data-ui='code-block'] [data-part='line'][data-mark='warning'] {
405
+ [data-ui-code-block] [data-part-line][data-mark='warning'] {
409
406
  --_tone: var(--slotted-tone-warning-text, CanvasText);
410
407
  }
411
408
 
412
- [data-ui='code-block'] [data-part='line'][data-mark='add'] > [data-part='marker']::before {
409
+ [data-ui-code-block] [data-part-line][data-mark='add'] > [data-part-marker]::before {
413
410
  color: var(--_tone);
414
411
  content: '+';
415
412
  }
416
413
 
417
- [data-ui='code-block'] [data-part='line'][data-mark='remove'] > [data-part='marker']::before {
414
+ [data-ui-code-block] [data-part-line][data-mark='remove'] > [data-part-marker]::before {
418
415
  color: var(--_tone);
419
416
  content: '−';
420
417
  }
421
418
 
422
- [data-ui='code-block'] [data-part='line'][data-mark='remove'] > [data-part='text'] {
419
+ [data-ui-code-block] [data-part-line][data-mark='remove'] > [data-part-text] {
423
420
  opacity: 0.72;
424
421
  }
425
422
 
@@ -430,7 +427,7 @@
430
427
  * reduced motion with the transition; the dim stays, because it is the
431
428
  * information.
432
429
  */
433
- [data-ui='code-block'] [data-part='line'][data-dim] {
430
+ [data-ui-code-block] [data-part-line][data-dim] {
434
431
  color: var(--_muted);
435
432
  filter: blur(1px);
436
433
  transition:
@@ -438,19 +435,18 @@
438
435
  color var(--slotted-duration-medium) var(--slotted-easing-standard);
439
436
  }
440
437
 
441
- [data-ui='code-block'] [data-part='line'][data-dim] [data-part='token'] {
438
+ [data-ui-code-block] [data-part-line][data-dim] [data-part-token] {
442
439
  color: inherit;
443
440
  }
444
441
 
445
- [data-ui='code-block']:not([data-loading]):is(:hover, :focus-within)
446
- [data-part='line'][data-dim] {
442
+ [data-ui-code-block]:not([data-loading]):is(:hover, :focus-within) [data-part-line][data-dim] {
447
443
  color: var(--_ink);
448
444
  filter: none;
449
445
  }
450
446
 
451
- [data-ui='code-block']:not([data-loading]):is(:hover, :focus-within)
452
- [data-part='line'][data-dim]
453
- [data-part='token'] {
447
+ [data-ui-code-block]:not([data-loading]):is(:hover, :focus-within)
448
+ [data-part-line][data-dim]
449
+ [data-part-token] {
454
450
  color: revert-layer;
455
451
  }
456
452
 
@@ -461,9 +457,9 @@
461
457
  * hidden lines stay in the DOM and in a selection. Revealed, the limit
462
458
  * goes and the control reads "show less".
463
459
  */
464
- [data-ui='code-block'][data-collapse]:not([data-revealed])
465
- > [data-part='body']
466
- > [data-part='viewport'] {
460
+ [data-ui-code-block][data-collapse]:not([data-revealed])
461
+ > [data-part-body]
462
+ > [data-part-viewport] {
467
463
  --_visible: calc(var(--slotted-code-block-collapse) * var(--_line) + var(--_inset-block));
468
464
  mask-image: linear-gradient(
469
465
  to bottom,
@@ -474,7 +470,7 @@
474
470
  overflow-y: hidden;
475
471
  }
476
472
 
477
- [data-ui='code-block'] > [data-part='reveal'] {
473
+ [data-ui-code-block] > [data-part-reveal] {
478
474
  appearance: none;
479
475
  background: none;
480
476
  border: 0;
@@ -492,63 +488,63 @@
492
488
  }
493
489
 
494
490
  /** The control is flush with the block's edge, so its ring is drawn inside it and takes the block's corners. */
495
- [data-ui='code-block'] > [data-part='reveal']:focus-visible {
491
+ [data-ui-code-block] > [data-part-reveal]:focus-visible {
496
492
  border-end-end-radius: var(--_radius);
497
493
  border-end-start-radius: var(--_radius);
498
494
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
499
495
  }
500
496
 
501
- [data-ui='code-block'] > [data-part='reveal']:enabled:hover {
497
+ [data-ui-code-block] > [data-part-reveal]:enabled:hover {
502
498
  background-color: var(--slotted-tone-accent-subtle-hover, ButtonFace);
503
499
  }
504
500
 
505
- [data-ui='code-block'] > [data-part='reveal']:enabled:active {
501
+ [data-ui-code-block] > [data-part-reveal]:enabled:active {
506
502
  background-color: var(--slotted-tone-accent-subtle-active, ButtonFace);
507
503
  }
508
504
 
509
505
  /* ── Loading, empty ─────────────────────────────────────────────────── */
510
506
 
511
- [data-ui='code-block'][data-loading] [data-part='code'] {
507
+ [data-ui-code-block][data-loading] [data-part-code] {
512
508
  gap: var(--slotted-space-3, 0.375rem);
513
509
  padding-inline: var(--_inset-inline);
514
510
  }
515
511
 
516
- [data-ui='code-block'][data-loading] [data-part='code'] > [data-ui='skeleton'] {
512
+ [data-ui-code-block][data-loading] [data-part-code] > [data-ui-skeleton] {
517
513
  block-size: var(--_font-size);
518
514
  }
519
515
 
520
516
  @media (prefers-reduced-motion: reduce) {
521
- [data-ui='code-block'] [data-part='line'][data-dim] {
517
+ [data-ui-code-block] [data-part-line][data-dim] {
522
518
  filter: none;
523
519
  }
524
520
  }
525
521
 
526
522
  @media (forced-colors: active) {
527
523
  /* The system owns the palette: a mark keeps its bar and its sign and loses its tint; the dim goes. */
528
- [data-ui='code-block'] [data-part='line'][data-mark] {
524
+ [data-ui-code-block] [data-part-line][data-mark] {
529
525
  background-color: transparent;
530
526
  }
531
527
 
532
- [data-ui='code-block'] [data-part='line'][data-dim] {
528
+ [data-ui-code-block] [data-part-line][data-dim] {
533
529
  color: inherit;
534
530
  filter: none;
535
531
  }
536
532
  }
537
533
 
538
534
  @media print {
539
- [data-ui='code-block'] [data-part='pre'] {
535
+ [data-ui-code-block] [data-part-pre] {
540
536
  min-inline-size: 0;
541
537
  overflow-wrap: anywhere;
542
538
  white-space: pre-wrap;
543
539
  }
544
540
 
545
- [data-ui='code-block'][data-collapse] > [data-part='body'] > [data-part='viewport'] {
541
+ [data-ui-code-block][data-collapse] > [data-part-body] > [data-part-viewport] {
546
542
  mask-image: none;
547
543
  max-block-size: none;
548
544
  }
549
545
 
550
- [data-ui='code-block'] > [data-part='reveal'],
551
- [data-ui='code-block'] [data-part='wrap'] {
546
+ [data-ui-code-block] > [data-part-reveal],
547
+ [data-ui-code-block] [data-part-wrap] {
552
548
  display: none;
553
549
  }
554
550
  }