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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/package.json +1 -1
  2. package/src/accordion/accordion.css +10 -10
  3. package/src/action-bar/action-bar.css +31 -32
  4. package/src/action-sheet/action-sheet.css +36 -36
  5. package/src/alert/alert.css +35 -35
  6. package/src/app-shell/app-shell.css +280 -299
  7. package/src/aspect-ratio/aspect-ratio.css +9 -9
  8. package/src/attachment/attachment.css +91 -99
  9. package/src/avatar/avatar.css +41 -41
  10. package/src/avatar-group/avatar-group.css +21 -22
  11. package/src/badge/badge.css +37 -37
  12. package/src/breadcrumb/breadcrumb.css +37 -37
  13. package/src/button/button.css +88 -69
  14. package/src/button-group/button-group.css +69 -73
  15. package/src/calendar/calendar.css +93 -103
  16. package/src/card/card.css +54 -61
  17. package/src/carousel/carousel.css +150 -161
  18. package/src/cascader/cascader.css +147 -151
  19. package/src/chart/chart.css +225 -240
  20. package/src/checkbox/checkbox.css +119 -124
  21. package/src/checkbox-group/checkbox-group.css +7 -7
  22. package/src/code-block/code-block.css +81 -85
  23. package/src/collapsible/collapsible.css +69 -76
  24. package/src/color-picker/color-picker.css +83 -91
  25. package/src/column-manager/column-manager.css +106 -114
  26. package/src/combobox/combobox.css +99 -101
  27. package/src/command-palette/command-palette.css +84 -90
  28. package/src/container/container.css +24 -24
  29. package/src/context-menu/context-menu.css +8 -8
  30. package/src/currency-field/currency-field.css +99 -104
  31. package/src/dashboard-grid/dashboard-grid.css +104 -107
  32. package/src/data-grid/data-grid.css +458 -456
  33. package/src/data-grid/data-grid.tokens.json +2 -0
  34. package/src/data-list/data-list.css +67 -69
  35. package/src/date-field/date-field.css +50 -50
  36. package/src/date-picker/date-picker.css +40 -42
  37. package/src/date-range-picker/date-range-picker.css +114 -118
  38. package/src/datetime-field/datetime-field.css +73 -78
  39. package/src/datetime-picker/datetime-picker.css +61 -63
  40. package/src/datetime-range-picker/datetime-range-picker.css +149 -156
  41. package/src/description-list/description-list.css +61 -64
  42. package/src/detail-panel/detail-panel.css +70 -70
  43. package/src/dialog/dialog.css +300 -148
  44. package/src/divider/divider.css +18 -18
  45. package/src/drawer/drawer.css +186 -209
  46. package/src/entity-picker/entity-picker.css +220 -239
  47. package/src/event-calendar/event-calendar.css +343 -385
  48. package/src/field/field.css +74 -78
  49. package/src/field-group/field-group.css +22 -25
  50. package/src/filter-bar/filter-bar.css +193 -209
  51. package/src/form/form.css +21 -24
  52. package/src/fullscreen/fullscreen.css +24 -25
  53. package/src/grid/grid.css +28 -28
  54. package/src/highlight/highlight.css +6 -6
  55. package/src/hover-card/hover-card.css +6 -6
  56. package/src/icon/icon.css +15 -15
  57. package/src/image/image.css +39 -39
  58. package/src/import-export-center/import-export-center.css +135 -156
  59. package/src/inline/inline.css +27 -27
  60. package/src/inline-message/inline-message.css +28 -28
  61. package/src/kbd/kbd.css +26 -26
  62. package/src/link/link.css +15 -15
  63. package/src/list/list.css +20 -20
  64. package/src/list-item/list-item.css +66 -66
  65. package/src/listbox/listbox.css +56 -59
  66. package/src/loading-overlay/loading-overlay.css +75 -92
  67. package/src/markdown/markdown.css +17 -17
  68. package/src/menu/menu.css +63 -65
  69. package/src/menubar/menubar.css +13 -13
  70. package/src/message/message.css +174 -202
  71. package/src/message-scroller/message-scroller.css +41 -42
  72. package/src/multi-select/multi-select.css +131 -137
  73. package/src/navigation-menu/navigation-menu.css +167 -188
  74. package/src/notification-center/notification-center.css +134 -148
  75. package/src/number-field/number-field.css +76 -81
  76. package/src/otp-input/otp-input.css +48 -48
  77. package/src/page/page.css +23 -23
  78. package/src/page-header/page-header.css +219 -280
  79. package/src/pagination/pagination.css +68 -72
  80. package/src/popover/popover.css +40 -49
  81. package/src/progress-indicator/progress-indicator.css +85 -90
  82. package/src/prompt-composer/prompt-composer.css +94 -99
  83. package/src/prose/prose.css +71 -75
  84. package/src/radio-group/radio-group.css +98 -103
  85. package/src/rating/rating.css +132 -132
  86. package/src/result-state/result-state.css +74 -77
  87. package/src/saved-views/saved-views.css +41 -47
  88. package/src/scroll-area/scroll-area.css +32 -35
  89. package/src/section/section.css +16 -16
  90. package/src/segmented-control/segmented-control.css +77 -79
  91. package/src/select/select.css +113 -115
  92. package/src/side-navigation/side-navigation.css +170 -180
  93. package/src/skeleton/skeleton.css +47 -48
  94. package/src/slider/slider.css +86 -88
  95. package/src/sparkline/sparkline.css +32 -32
  96. package/src/spinner/spinner.css +4 -4
  97. package/src/split-button/split-button.css +26 -31
  98. package/src/splitter/splitter.css +35 -35
  99. package/src/stack/stack.css +24 -24
  100. package/src/stat-card/stat-card.css +102 -103
  101. package/src/status-indicator/status-indicator.css +28 -28
  102. package/src/stepper/stepper.css +58 -62
  103. package/src/switch/switch.css +86 -92
  104. package/src/table/table.css +189 -198
  105. package/src/table-of-contents/table-of-contents.css +51 -54
  106. package/src/tabs/tabs.css +143 -162
  107. package/src/tag/tag.css +67 -71
  108. package/src/tags-input/tags-input.css +124 -74
  109. package/src/tags-input/tags-input.tokens.json +6 -1
  110. package/src/text-field/text-field.css +108 -126
  111. package/src/textarea/textarea.css +26 -26
  112. package/src/time-field/time-field.css +67 -67
  113. package/src/time-picker/time-picker.css +56 -58
  114. package/src/time-range-picker/time-range-picker.css +126 -133
  115. package/src/timeline/timeline.css +244 -266
  116. package/src/toast/toast.css +81 -90
  117. package/src/toggle/toggle.css +29 -33
  118. package/src/toggle-group/toggle-group.css +67 -71
  119. package/src/toolbar/toolbar.css +30 -35
  120. package/src/tooltip/tooltip.css +26 -26
  121. package/src/top-navigation/top-navigation.css +243 -259
  122. package/src/tour/tour.css +51 -60
  123. package/src/transfer/transfer.css +160 -164
  124. package/src/tree/tree.css +103 -111
  125. package/src/typography/typography.css +36 -36
  126. package/src/upload/upload.css +224 -224
  127. package/src/visually-hidden/visually-hidden.css +1 -1
  128. package/src/wizard/wizard.css +185 -197
@@ -15,7 +15,7 @@
15
15
  * sunken surface, with each widget a raised card on it; the page decides
16
16
  * that ground, and every mark below is drawn to read on it.
17
17
  */
18
- [data-ui='dashboard-grid'] {
18
+ [data-ui-dashboard-grid] {
19
19
  --_gap: var(--slotted-dashboard-grid-gap, var(--slotted-space-6, 1rem));
20
20
  --_row: var(--slotted-dashboard-grid-row-size, 4.5rem);
21
21
  --_cols: var(--_dg-columns-expanded, 12);
@@ -29,7 +29,7 @@
29
29
  min-inline-size: 0;
30
30
  }
31
31
 
32
- [data-ui='dashboard-grid'] > [data-part='grid'] {
32
+ [data-ui-dashboard-grid] > [data-part-grid] {
33
33
  display: grid;
34
34
  gap: var(--_gap);
35
35
  grid-auto-rows: var(--_row);
@@ -43,8 +43,8 @@
43
43
  }
44
44
 
45
45
  /* `display: grid` above would otherwise override the attribute. */
46
- [data-ui='dashboard-grid'] [data-part='grid'][hidden],
47
- [data-ui='dashboard-grid'] [data-part='widget'][hidden] {
46
+ [data-ui-dashboard-grid] [data-part-grid][hidden],
47
+ [data-ui-dashboard-grid] [data-part-widget][hidden] {
48
48
  display: none;
49
49
  }
50
50
 
@@ -52,14 +52,14 @@
52
52
  * In the expanded class every widget stands at its own cell. The DOM holds
53
53
  * them by row, then column, so the order a reader walks is the picture's.
54
54
  */
55
- [data-ui='dashboard-grid'] :is([data-part='widget'], [data-part='placeholder']) {
55
+ [data-ui-dashboard-grid] :is([data-part-widget], [data-part-placeholder]) {
56
56
  grid-column: var(--_dg-x, auto) / span var(--_dg-w, 4);
57
57
  grid-row: var(--_dg-y, auto) / span var(--_dg-h, 2);
58
58
  min-block-size: 0;
59
59
  min-inline-size: 0;
60
60
  }
61
61
 
62
- [data-ui='dashboard-grid'] [data-part='widget'] {
62
+ [data-ui-dashboard-grid] [data-part-widget] {
63
63
  display: flex;
64
64
  position: relative;
65
65
  }
@@ -72,29 +72,29 @@
72
72
  * CSS refuses a custom property in a container condition.
73
73
  */
74
74
  @container dashboard-grid (width < 1024px) {
75
- [data-ui='dashboard-grid'] > [data-part='grid'] {
75
+ [data-ui-dashboard-grid] > [data-part-grid] {
76
76
  --_cols: var(--_dg-columns-medium, 6);
77
77
  }
78
78
 
79
- [data-ui='dashboard-grid'] :is([data-part='widget'], [data-part='placeholder']) {
79
+ [data-ui-dashboard-grid] :is([data-part-widget], [data-part-placeholder]) {
80
80
  grid-column: auto / span var(--_dg-span-medium, 3);
81
81
  grid-row: auto / span var(--_dg-h, 2);
82
82
  }
83
83
  }
84
84
 
85
85
  @container dashboard-grid (width < 600px) {
86
- [data-ui='dashboard-grid'] > [data-part='grid'] {
86
+ [data-ui-dashboard-grid] > [data-part-grid] {
87
87
  --_cols: var(--_dg-columns-compact, 1);
88
88
 
89
89
  grid-auto-rows: auto;
90
90
  }
91
91
 
92
- [data-ui='dashboard-grid'] :is([data-part='widget'], [data-part='placeholder']) {
92
+ [data-ui-dashboard-grid] :is([data-part-widget], [data-part-placeholder]) {
93
93
  grid-column: 1 / -1;
94
94
  grid-row: auto;
95
95
  }
96
96
 
97
- [data-ui='dashboard-grid'] [data-part='placeholder'] {
97
+ [data-ui-dashboard-grid] [data-part-placeholder] {
98
98
  min-block-size: calc(var(--_row) * 2);
99
99
  }
100
100
  }
@@ -107,14 +107,14 @@
107
107
  * than the cell grows into it, so a chart or a figure uses the height the
108
108
  * reader gave the widget rather than stopping at its own size step.
109
109
  */
110
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-ui='card'] {
110
+ [data-ui-dashboard-grid] [data-part-widget] > [data-ui-card] {
111
111
  flex: 1 1 auto;
112
112
  min-block-size: 0;
113
113
  min-inline-size: 0;
114
114
  transition: box-shadow var(--slotted-duration-medium) var(--slotted-easing-standard);
115
115
  }
116
116
 
117
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-ui='card'] > [data-part='body'] {
117
+ [data-ui-dashboard-grid] [data-part-widget] > [data-ui-card] > [data-part-body] {
118
118
  /* A chart's plot takes whatever height the widget leaves it, down to a
119
119
  floor of one and a half rows, instead of its own size step. */
120
120
  --slotted-chart-plot-block-size: calc(var(--_row) * 1.5);
@@ -128,11 +128,11 @@
128
128
  /* The content grows into a taller cell and never shrinks under its own
129
129
  height: shrunk, it overflowed its own box, and the body scrolled only that
130
130
  overflow, so its last rows and the end padding stayed out of reach. */
131
- [data-ui='dashboard-grid']
132
- [data-part='widget']
133
- > [data-ui='card']
134
- > [data-part='body']
135
- > :not([data-part='busy-indicator']) {
131
+ [data-ui-dashboard-grid]
132
+ [data-part-widget]
133
+ > [data-ui-card]
134
+ > [data-part-body]
135
+ > :not([data-part-busy-indicator]) {
136
136
  flex: 1 0 auto;
137
137
  }
138
138
 
@@ -141,7 +141,7 @@
141
141
  * medium step, semibold, two lines and then an ellipsis. The clamp never
142
142
  * removes a word from the DOM, and the article is named by the whole of it.
143
143
  */
144
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='title'] {
144
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-title] {
145
145
  -webkit-box-orient: vertical;
146
146
  color: var(--slotted-dashboard-grid-title-color, var(--slotted-text, CanvasText));
147
147
  display: -webkit-box;
@@ -165,7 +165,7 @@
165
165
  overflow-wrap: anywhere;
166
166
  }
167
167
 
168
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='description'] {
168
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-description] {
169
169
  color: var(--slotted-dashboard-grid-description-color, var(--slotted-text-muted, GrayText));
170
170
  font-size: var(--slotted-font-size-sm, 0.75rem);
171
171
  line-height: var(--slotted-line-height-sm, 1.5);
@@ -175,7 +175,7 @@
175
175
 
176
176
  /* The corner of the header: the consumer's actions, then the way to the
177
177
  widget's own page, on the title's row without adding to its height. */
178
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='actions'] {
178
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-actions] {
179
179
  flex-wrap: nowrap;
180
180
  gap: var(--slotted-space-1, 0.125rem);
181
181
  margin-block: calc(
@@ -199,19 +199,19 @@
199
199
  * its own: the family does not know what the body holds, but does know its
200
200
  * box — the grid fixed it.
201
201
  */
202
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='skeleton'] {
202
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-skeleton] {
203
203
  display: flex;
204
204
  flex-direction: column;
205
205
  min-block-size: var(--slotted-space-12, 4rem);
206
206
  }
207
207
 
208
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='skeleton'] > [data-ui='skeleton'] {
208
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-skeleton] > [data-ui-skeleton] {
209
209
  block-size: auto;
210
210
  flex: 1 1 auto;
211
211
  inline-size: 100%;
212
212
  }
213
213
 
214
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='message'] {
214
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-message] {
215
215
  align-content: center;
216
216
  display: grid;
217
217
  justify-items: center;
@@ -222,7 +222,7 @@
222
222
  * the body, where Grafana draws its panel's. It is aria-hidden: the article
223
223
  * carries `aria-busy`, which is the fact, and the line is only its picture.
224
224
  */
225
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='busy-indicator'] {
225
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-busy-indicator] {
226
226
  background-color: var(--_accent);
227
227
  block-size: var(--slotted-border-width-medium, 2px);
228
228
  inset-block-start: 0;
@@ -233,7 +233,7 @@
233
233
  }
234
234
 
235
235
  @media (prefers-reduced-motion: no-preference) {
236
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='busy-indicator'] {
236
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-busy-indicator] {
237
237
  animation: slotted-dashboard-grid-busy var(--slotted-duration-loop-slow) linear infinite;
238
238
  background-color: transparent;
239
239
  background-image: linear-gradient(to right, transparent, var(--_accent) 50%, transparent);
@@ -244,7 +244,7 @@
244
244
  }
245
245
 
246
246
  @media (prefers-reduced-motion: reduce) {
247
- [data-ui='dashboard-grid'] [data-part='widget'] [data-part='busy-indicator'] {
247
+ [data-ui-dashboard-grid] [data-part-widget] [data-part-busy-indicator] {
248
248
  animation: none;
249
249
  }
250
250
  }
@@ -266,7 +266,7 @@
266
266
  * the card's hairline and the smallest lift — so on the sunken page it reads
267
267
  * as a tool laid over the dashboard rather than a stripe cut into it.
268
268
  */
269
- [data-ui='dashboard-grid'] > [data-part='edit-bar'] {
269
+ [data-ui-dashboard-grid] > [data-part-edit-bar] {
270
270
  align-items: center;
271
271
  background-color: var(
272
272
  --slotted-dashboard-grid-edit-bar-background,
@@ -284,19 +284,19 @@
284
284
  }
285
285
 
286
286
  @starting-style {
287
- [data-ui='dashboard-grid'] > [data-part='edit-bar'] {
287
+ [data-ui-dashboard-grid] > [data-part-edit-bar] {
288
288
  opacity: 0;
289
289
  translate: 0 calc(var(--slotted-space-4, 0.5rem) * -1);
290
290
  }
291
291
  }
292
292
 
293
- [data-ui='dashboard-grid'] > [data-part='edit-bar'] {
293
+ [data-ui-dashboard-grid] > [data-part-edit-bar] {
294
294
  transition:
295
295
  opacity var(--slotted-duration-medium) var(--slotted-easing-enter),
296
296
  translate var(--slotted-duration-medium) var(--slotted-easing-enter);
297
297
  }
298
298
 
299
- [data-ui='dashboard-grid'] > [data-part='edit-bar'] > [data-part='edit-status'] {
299
+ [data-ui-dashboard-grid] > [data-part-edit-bar] > [data-part-edit-status] {
300
300
  color: var(--slotted-text-muted, GrayText);
301
301
  flex: 1 1 20rem;
302
302
  font-size: var(--slotted-font-size-sm, 0.75rem);
@@ -305,7 +305,7 @@
305
305
  min-inline-size: 0;
306
306
  }
307
307
 
308
- [data-ui='dashboard-grid'] > [data-part='edit-bar'] > [data-part='edit-actions'] {
308
+ [data-ui-dashboard-grid] > [data-part-edit-bar] > [data-part-edit-actions] {
309
309
  align-items: center;
310
310
  display: flex;
311
311
  flex-wrap: wrap;
@@ -325,7 +325,7 @@
325
325
  * dot that shows marks a free cell; a dot on the crossing of two gaps
326
326
  * showed between cards and under them, where no widget can land.
327
327
  */
328
- [data-ui='dashboard-grid'] > [data-part='grid']::before {
328
+ [data-ui-dashboard-grid] > [data-part-grid]::before {
329
329
  background-image: radial-gradient(
330
330
  circle at calc((100% - var(--_gap)) / 2) calc((100% - var(--_gap)) / 2),
331
331
  var(--slotted-dashboard-grid-lattice-color, var(--slotted-border-strong, currentColor))
@@ -341,27 +341,27 @@
341
341
  transition: opacity var(--slotted-duration-medium) var(--slotted-easing-standard);
342
342
  }
343
343
 
344
- [data-ui='dashboard-grid'][data-editing] > [data-part='grid'] {
344
+ [data-ui-dashboard-grid][data-editing] > [data-part-grid] {
345
345
  min-block-size: calc(var(--_row) * 2 + var(--_gap));
346
346
  }
347
347
 
348
- [data-ui='dashboard-grid'][data-editing] > [data-part='grid']::before {
348
+ [data-ui-dashboard-grid][data-editing] > [data-part-grid]::before {
349
349
  opacity: 0.7;
350
350
  }
351
351
 
352
352
  /* While a widget is carried or pulled the lattice is what it snaps to, so
353
353
  it comes forward. The attribute is on the grid, in the compound it styles:
354
354
  a browser invalidates by attribute name, and on the root ahead of
355
- `> [data-part='grid']` it restyled every element with a `data-part`
355
+ `> [data-part-grid]` it restyled every element with a `data-part`
356
356
  under the root as a widget was picked up and as it was dropped. */
357
- [data-ui='dashboard-grid'] > [data-part='grid'][data-gesture]::before {
357
+ [data-ui-dashboard-grid] > [data-part-grid][data-gesture]::before {
358
358
  opacity: 1;
359
359
  }
360
360
 
361
361
  /* Below the expanded class the widgets flow, so no cell is a place to drop
362
362
  on and the lattice would be specks in the gaps. */
363
363
  @container dashboard-grid (width < 1024px) {
364
- [data-ui='dashboard-grid'] > [data-part='grid']::before {
364
+ [data-ui-dashboard-grid] > [data-part-grid]::before {
365
365
  display: none;
366
366
  }
367
367
  }
@@ -370,20 +370,20 @@
370
370
 
371
371
  /* The whole card is a place to pick the widget up from; its controls keep
372
372
  their own cursor because each is its own target. */
373
- [data-ui='dashboard-grid'][data-editing] [data-part='widget'][data-movable] > [data-ui='card'] {
373
+ [data-ui-dashboard-grid][data-editing] [data-part-widget][data-movable] > [data-ui-card] {
374
374
  cursor: grab;
375
375
  }
376
376
 
377
- [data-ui='dashboard-grid'][data-editing]
378
- [data-part='widget'][data-movable]
379
- > [data-ui='card']
377
+ [data-ui-dashboard-grid][data-editing]
378
+ [data-part-widget][data-movable]
379
+ > [data-ui-card]
380
380
  :is(a, button, input, select, textarea, [tabindex]) {
381
381
  cursor: auto;
382
382
  }
383
383
 
384
- [data-ui='dashboard-grid'][data-editing]
385
- [data-part='widget']:not([data-loading]):hover
386
- > [data-ui='card'] {
384
+ [data-ui-dashboard-grid][data-editing]
385
+ [data-part-widget]:not([data-loading]):hover
386
+ > [data-ui-card] {
387
387
  box-shadow: var(--slotted-shadow-sm);
388
388
  }
389
389
 
@@ -395,7 +395,7 @@
395
395
  * pill is drawn on the raised surface with the control's own edge, so it
396
396
  * reads as part of the card rather than as a button beside it.
397
397
  */
398
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle'] {
398
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle] {
399
399
  --_pill-inline: var(--slotted-dashboard-grid-handle-inline-size, 2.25rem);
400
400
  --_pill-block: var(--slotted-dashboard-grid-handle-block-size, 1rem);
401
401
 
@@ -430,7 +430,7 @@
430
430
  }
431
431
 
432
432
  @starting-style {
433
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle'] {
433
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle] {
434
434
  opacity: 0;
435
435
  translate: 0 var(--slotted-space-3, 0.375rem);
436
436
  }
@@ -438,7 +438,7 @@
438
438
 
439
439
  /* The pill is small to the eye and not to the hand: the hit area reaches
440
440
  the target floor on both axes. */
441
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle']::before {
441
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle]::before {
442
442
  content: '';
443
443
  inset: calc((var(--slotted-target-min, 24px) - var(--_pill-block)) / -2)
444
444
  calc(var(--slotted-space-4, 0.5rem) * -1);
@@ -446,28 +446,28 @@
446
446
  }
447
447
 
448
448
  /* The grip is an `icon` the binding draws; the pill gives it its size. */
449
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle'] > [data-ui='icon'] {
449
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle] > [data-ui-icon] {
450
450
  --slotted-icon-size: var(--slotted-dashboard-grid-handle-glyph-size, 0.875rem);
451
451
  }
452
452
 
453
- [data-ui='dashboard-grid'][data-editing]
454
- [data-part='widget']:not([data-loading]):hover
455
- > [data-part='handle'] {
453
+ [data-ui-dashboard-grid][data-editing]
454
+ [data-part-widget]:not([data-loading]):hover
455
+ > [data-part-handle] {
456
456
  border-color: var(--slotted-border-strong, ButtonBorder);
457
457
  color: var(--slotted-text, CanvasText);
458
458
  }
459
459
 
460
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle']:focus-visible {
460
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle]:focus-visible {
461
461
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
462
462
  outline-offset: var(--slotted-focus-ring-offset, 2px);
463
463
  }
464
464
 
465
465
  /* Carried, or its menu open: the pill takes the accent, the one mark on the
466
466
  page that says which widget the reader has in hand. */
467
- [data-ui='dashboard-grid']
468
- [data-part='widget']:is([data-dragging], [data-resizing])
469
- > [data-part='handle'],
470
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle'][aria-expanded='true'] {
467
+ [data-ui-dashboard-grid]
468
+ [data-part-widget]:is([data-dragging], [data-resizing])
469
+ > [data-part-handle],
470
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle][aria-expanded='true'] {
471
471
  background-color: var(--_accent);
472
472
  border-color: var(--_accent);
473
473
  color: var(--slotted-tone-accent-on-solid, HighlightText);
@@ -482,7 +482,7 @@
482
482
  * are quiet until the widget is under the pointer, and always shown to a
483
483
  * finger, which has no hover.
484
484
  */
485
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='resize-handle'] {
485
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-resize-handle] {
486
486
  --_hit: var(--slotted-dashboard-grid-resize-hit, 0.75rem);
487
487
  --_mark: var(--slotted-border-strong, currentColor);
488
488
 
@@ -493,30 +493,30 @@
493
493
  z-index: 2;
494
494
  }
495
495
 
496
- [data-ui='dashboard-grid'][data-editing]
497
- [data-part='widget']:not([data-loading]):hover
498
- > [data-part='resize-handle'],
499
- [data-ui='dashboard-grid'][data-editing]
500
- [data-part='widget']:focus-within
501
- > [data-part='resize-handle'],
502
- [data-ui='dashboard-grid'] [data-part='widget'][data-resizing] > [data-part='resize-handle'] {
496
+ [data-ui-dashboard-grid][data-editing]
497
+ [data-part-widget]:not([data-loading]):hover
498
+ > [data-part-resize-handle],
499
+ [data-ui-dashboard-grid][data-editing]
500
+ [data-part-widget]:focus-within
501
+ > [data-part-resize-handle],
502
+ [data-ui-dashboard-grid] [data-part-widget][data-resizing] > [data-part-resize-handle] {
503
503
  opacity: 1;
504
504
  }
505
505
 
506
506
  @media (pointer: coarse) {
507
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='resize-handle'] {
507
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-resize-handle] {
508
508
  --_hit: var(--slotted-target-comfortable, 44px);
509
509
 
510
510
  opacity: 1;
511
511
  }
512
512
 
513
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='handle'] {
513
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-handle] {
514
514
  --_pill-inline: var(--slotted-dashboard-grid-handle-inline-size-coarse, 2.75rem);
515
515
  --_pill-block: var(--slotted-dashboard-grid-handle-block-size-coarse, 1.25rem);
516
516
  }
517
517
  }
518
518
 
519
- [data-ui='dashboard-grid'] [data-part='resize-handle']::before {
519
+ [data-ui-dashboard-grid] [data-part-resize-handle]::before {
520
520
  background-color: var(--_mark);
521
521
  border-radius: var(--slotted-radius-full, 9999px);
522
522
  content: '';
@@ -529,68 +529,67 @@
529
529
  inline-size var(--slotted-duration-short) var(--slotted-easing-standard);
530
530
  }
531
531
 
532
- [data-ui='dashboard-grid']
533
- [data-part='resize-handle']:is([data-edge='start'], [data-edge='end']) {
532
+ [data-ui-dashboard-grid] [data-part-resize-handle]:is([data-edge='start'], [data-edge='end']) {
534
533
  cursor: ew-resize;
535
534
  inline-size: var(--_hit);
536
535
  inset-block: calc(var(--_radius) + var(--_hit) / 2);
537
536
  }
538
537
 
539
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='start'] {
538
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='start'] {
540
539
  inset-inline-start: calc(var(--_hit) / -2);
541
540
  }
542
541
 
543
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='end'] {
542
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='end'] {
544
543
  inset-inline-end: calc(var(--_hit) / -2);
545
544
  }
546
545
 
547
- [data-ui='dashboard-grid']
548
- [data-part='resize-handle']:is([data-edge='start'], [data-edge='end'])::before {
546
+ [data-ui-dashboard-grid]
547
+ [data-part-resize-handle]:is([data-edge='start'], [data-edge='end'])::before {
549
548
  block-size: var(--slotted-dashboard-grid-resize-pill, 1.75rem);
550
549
  inline-size: var(--slotted-border-width-thick, 3px);
551
550
  }
552
551
 
553
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom'] {
552
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom'] {
554
553
  block-size: var(--_hit);
555
554
  cursor: ns-resize;
556
555
  inset-block-end: calc(var(--_hit) / -2);
557
556
  inset-inline: calc(var(--_radius) + var(--_hit) / 2);
558
557
  }
559
558
 
560
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom']::before {
559
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom']::before {
561
560
  block-size: var(--slotted-border-width-thick, 3px);
562
561
  inline-size: var(--slotted-dashboard-grid-resize-pill, 1.75rem);
563
562
  }
564
563
 
565
- [data-ui='dashboard-grid']
566
- [data-part='resize-handle']:is([data-edge='bottom-start'], [data-edge='bottom-end']) {
564
+ [data-ui-dashboard-grid]
565
+ [data-part-resize-handle]:is([data-edge='bottom-start'], [data-edge='bottom-end']) {
567
566
  block-size: calc(var(--_hit) * 1.5);
568
567
  inline-size: calc(var(--_hit) * 1.5);
569
568
  inset-block-end: calc(var(--_hit) / -2);
570
569
  }
571
570
 
572
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-end'] {
571
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-end'] {
573
572
  cursor: nwse-resize;
574
573
  inset-inline-end: calc(var(--_hit) / -2);
575
574
  }
576
575
 
577
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-start'] {
576
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-start'] {
578
577
  cursor: nesw-resize;
579
578
  inset-inline-start: calc(var(--_hit) / -2);
580
579
  }
581
580
 
582
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-end']:dir(rtl) {
581
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-end']:dir(rtl) {
583
582
  cursor: nesw-resize;
584
583
  }
585
584
 
586
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-start']:dir(rtl) {
585
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-start']:dir(rtl) {
587
586
  cursor: nwse-resize;
588
587
  }
589
588
 
590
589
  /* The corner mark is an arc on the card's own corner: a quarter of a ring
591
590
  whose radius is the card's, drawn over the card's edge. */
592
- [data-ui='dashboard-grid']
593
- [data-part='resize-handle']:is([data-edge='bottom-start'], [data-edge='bottom-end'])::before {
591
+ [data-ui-dashboard-grid]
592
+ [data-part-resize-handle]:is([data-edge='bottom-start'], [data-edge='bottom-end'])::before {
594
593
  background-color: transparent;
595
594
  block-size: var(--_radius);
596
595
  border-block-end: var(--slotted-border-width-thick, 3px) solid var(--_mark);
@@ -601,13 +600,13 @@
601
600
  margin: 0;
602
601
  }
603
602
 
604
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-end']::before {
603
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-end']::before {
605
604
  border-end-end-radius: var(--_radius);
606
605
  border-inline-end: var(--slotted-border-width-thick, 3px) solid var(--_mark);
607
606
  inset-inline-end: calc(var(--_hit) / 2 - var(--slotted-border-width-thin, 1px));
608
607
  }
609
608
 
610
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-edge='bottom-start']::before {
609
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-edge='bottom-start']::before {
611
610
  border-end-start-radius: var(--_radius);
612
611
  border-inline-start: var(--slotted-border-width-thick, 3px) solid var(--_mark);
613
612
  inset-inline-start: calc(var(--_hit) / 2 - var(--slotted-border-width-thin, 1px));
@@ -615,21 +614,21 @@
615
614
 
616
615
  /* Under the pointer, and while it is pulled, the mark takes the accent and
617
616
  the edge pill grows, so the reader sees which side answers. */
618
- [data-ui='dashboard-grid'] [data-part='resize-handle']:not([data-disabled]):hover,
619
- [data-ui='dashboard-grid'] [data-part='resize-handle'][data-active] {
617
+ [data-ui-dashboard-grid] [data-part-resize-handle]:not([data-disabled]):hover,
618
+ [data-ui-dashboard-grid] [data-part-resize-handle][data-active] {
620
619
  --_mark: var(--_accent);
621
620
  }
622
621
 
623
- [data-ui='dashboard-grid']
624
- [data-part='resize-handle']:is([data-edge='start'], [data-edge='end']):is(
622
+ [data-ui-dashboard-grid]
623
+ [data-part-resize-handle]:is([data-edge='start'], [data-edge='end']):is(
625
624
  :not([data-disabled]):hover,
626
625
  [data-active]
627
626
  )::before {
628
627
  block-size: var(--slotted-dashboard-grid-resize-pill-active, 2.75rem);
629
628
  }
630
629
 
631
- [data-ui='dashboard-grid']
632
- [data-part='resize-handle'][data-edge='bottom']:is(
630
+ [data-ui-dashboard-grid]
631
+ [data-part-resize-handle][data-edge='bottom']:is(
633
632
  :not([data-disabled]):hover,
634
633
  [data-active]
635
634
  )::before {
@@ -639,9 +638,9 @@
639
638
  /* The medium class flows the widgets, so a widget's start is where the one
640
639
  before it ends: there is no start edge to pull. */
641
640
  @container dashboard-grid (width < 1024px) {
642
- [data-ui='dashboard-grid']
643
- [data-part='widget']
644
- > [data-part='resize-handle']:is([data-edge='start'], [data-edge='bottom-start']) {
641
+ [data-ui-dashboard-grid]
642
+ [data-part-widget]
643
+ > [data-part-resize-handle]:is([data-edge='start'], [data-edge='bottom-start']) {
645
644
  display: none;
646
645
  }
647
646
  }
@@ -649,7 +648,7 @@
649
648
  /* A phone reads a dashboard as one column as tall as its content: there is
650
649
  no size to pull, only an order to change. */
651
650
  @container dashboard-grid (width < 600px) {
652
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='resize-handle'] {
651
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-resize-handle] {
653
652
  display: none;
654
653
  }
655
654
  }
@@ -665,7 +664,7 @@
665
664
  * would land in is the placeholder, and the widgets around it make room as
666
665
  * the placeholder moves.
667
666
  */
668
- [data-ui='dashboard-grid'] [data-part='widget']:is([data-dragging], [data-resizing]) {
667
+ [data-ui-dashboard-grid] [data-part-widget]:is([data-dragging], [data-resizing]) {
669
668
  grid-column: auto;
670
669
  grid-row: auto;
671
670
  position: absolute;
@@ -674,14 +673,14 @@
674
673
 
675
674
  /* Picked up: lifted by the largest shadow on the scale. It is not scaled —
676
675
  a card of text grown by two per cent is two per cent blurred (R7). */
677
- [data-ui='dashboard-grid'] [data-part='widget'][data-dragging] {
676
+ [data-ui-dashboard-grid] [data-part-widget][data-dragging] {
678
677
  cursor: grabbing;
679
678
  }
680
679
 
681
680
  /* A shadow is dark on a dark page, so the widget in hand also takes a
682
681
  hairline of the accent: in the dark scheme it is what lifts the card, and
683
682
  in the light one it says which card is held. */
684
- [data-ui='dashboard-grid'] [data-part='widget'][data-dragging] > [data-ui='card'] {
683
+ [data-ui-dashboard-grid] [data-part-widget][data-dragging] > [data-ui-card] {
685
684
  box-shadow:
686
685
  var(--slotted-shadow-lg),
687
686
  0 0 0 var(--slotted-border-width-thin, 1px)
@@ -689,7 +688,7 @@
689
688
  }
690
689
 
691
690
  /* Pulled: the card follows the pointer at any size, lifted a step less. */
692
- [data-ui='dashboard-grid'] [data-part='widget'][data-resizing] > [data-ui='card'] {
691
+ [data-ui-dashboard-grid] [data-part-widget][data-resizing] > [data-ui-card] {
693
692
  box-shadow:
694
693
  var(--slotted-shadow-md),
695
694
  0 0 0 var(--slotted-border-width-thin, 1px)
@@ -702,7 +701,7 @@
702
701
  * No dashes and no fill that competes with the widget over it — it is a
703
702
  * shape the reader aims at, not a second object.
704
703
  */
705
- [data-ui='dashboard-grid'] > [data-part='grid'] > [data-part='placeholder'] {
704
+ [data-ui-dashboard-grid] > [data-part-grid] > [data-part-placeholder] {
706
705
  background-color: color-mix(in oklab, var(--_accent) 10%, transparent);
707
706
  border: var(--slotted-border-width-thin, 1px) solid
708
707
  color-mix(in oklab, var(--_accent) 55%, transparent);
@@ -716,7 +715,7 @@
716
715
  * corner the reader is pulling: the only text on screen during the gesture,
717
716
  * where the eye already is.
718
717
  */
719
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='size-readout'] {
718
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-size-readout] {
720
719
  background-color: var(--_accent);
721
720
  border-radius: var(--slotted-radius-full, 9999px);
722
721
  box-shadow: var(--slotted-shadow-sm);
@@ -735,15 +734,13 @@
735
734
  z-index: 4;
736
735
  }
737
736
 
738
- [data-ui='dashboard-grid'] [data-part='widget'] > [data-part='size-readout'][data-edge='start'],
739
- [data-ui='dashboard-grid']
740
- [data-part='widget']
741
- > [data-part='size-readout'][data-edge='bottom-start'] {
737
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-size-readout][data-edge='start'],
738
+ [data-ui-dashboard-grid] [data-part-widget] > [data-part-size-readout][data-edge='bottom-start'] {
742
739
  inset-inline: var(--slotted-space-5, 0.75rem) auto;
743
740
  }
744
741
 
745
742
  /* A grid with nothing visible. */
746
- [data-ui='dashboard-grid'] > [data-part='empty'] {
743
+ [data-ui-dashboard-grid] > [data-part-empty] {
747
744
  min-block-size: calc(var(--_row) * 2 + var(--_gap));
748
745
  }
749
746
  }