@slotted/styles 0.1.0-beta.7 → 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 +312 -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 +157 -172
  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
@@ -14,7 +14,7 @@
14
14
  * are the composer inside a form — a comment, a reply — and keep the
15
15
  * geometry of a one-line control.
16
16
  */
17
- [data-ui='prompt-composer'][data-part='root'] {
17
+ [data-ui-prompt-composer][data-part-root] {
18
18
  --_font-size: var(--slotted-control-font-size-md, 13px);
19
19
  --_height: var(--slotted-control-height-md, 34px);
20
20
  --_icon-size: var(--slotted-control-icon-size-md, 16px);
@@ -82,14 +82,14 @@
82
82
  outline-color var(--slotted-duration-medium) var(--slotted-easing-standard);
83
83
  }
84
84
 
85
- [data-ui='prompt-composer'][data-part='root'][data-size='sm'] {
85
+ [data-ui-prompt-composer][data-part-root][data-size='sm'] {
86
86
  --_font-size: var(--slotted-control-font-size-sm, 12px);
87
87
  --_height: var(--slotted-control-height-sm, 30px);
88
88
  --_icon-size: var(--slotted-control-icon-size-sm, 14px);
89
89
  --_inner-size: var(--slotted-control-inner-size-sm, 22px);
90
90
  }
91
91
 
92
- [data-ui='prompt-composer'][data-part='root'][data-size='lg'] {
92
+ [data-ui-prompt-composer][data-part-root][data-size='lg'] {
93
93
  --_font-size: var(--slotted-control-font-size-lg, 14px);
94
94
  --_height: var(--slotted-control-height-lg, 38px);
95
95
  --_icon-size: var(--slotted-control-icon-size-lg, 18px);
@@ -110,7 +110,7 @@
110
110
  * card's corner, and a card's corner around a round send draws two curves
111
111
  * that do not agree.
112
112
  */
113
- [data-ui='prompt-composer'][data-part='root'][data-variant='raised'] {
113
+ [data-ui-prompt-composer][data-part-root][data-variant='raised'] {
114
114
  --_button: calc(var(--_inner-size) + var(--slotted-space-2, 0.25rem));
115
115
  --_inset: var(--slotted-space-4, 0.5rem);
116
116
  --_padding-block: calc(var(--_inset) + var(--slotted-space-2, 0.25rem));
@@ -123,7 +123,7 @@
123
123
  );
124
124
  }
125
125
 
126
- [data-ui='prompt-composer'][data-part='root'][data-variant='subtle'] {
126
+ [data-ui-prompt-composer][data-part-root][data-variant='subtle'] {
127
127
  background-color: var(
128
128
  --slotted-prompt-composer-subtle-background,
129
129
  var(--slotted-surface-sunken, Canvas)
@@ -141,7 +141,7 @@
141
141
  * script measures a line. The band below stays where the reader's thumb
142
142
  * expects it.
143
143
  */
144
- [data-ui='prompt-composer'] > [data-part='input'] {
144
+ [data-ui-prompt-composer] > [data-part-input] {
145
145
  appearance: none;
146
146
  background: transparent;
147
147
  border: 0;
@@ -171,11 +171,11 @@
171
171
  unicode-bidi: plaintext;
172
172
  }
173
173
 
174
- [data-ui='prompt-composer'] > [data-part='input']::placeholder {
174
+ [data-ui-prompt-composer] > [data-part-input]::placeholder {
175
175
  color: var(--slotted-prompt-composer-placeholder-color, var(--slotted-text-muted, GrayText));
176
176
  }
177
177
 
178
- [data-ui='prompt-composer'] > [data-part='input']::selection {
178
+ [data-ui-prompt-composer] > [data-part-input]::selection {
179
179
  background-color: var(
180
180
  --slotted-prompt-composer-selection-background,
181
181
  var(--slotted-tone-accent-surface, Highlight)
@@ -183,14 +183,13 @@
183
183
  }
184
184
 
185
185
  /* A band above the value gives it back the block padding it already has. */
186
- [data-ui='prompt-composer'] > [data-part='header'] + [data-part='input'] {
186
+ [data-ui-prompt-composer] > [data-part-header] + [data-part-input] {
187
187
  padding-block-start: var(--_inset);
188
188
  }
189
189
 
190
190
  /* The band below sits on the last line: the value keeps its own air above
191
191
  the text and hands the air below it to the band's inset. */
192
- [data-ui='prompt-composer'][data-variant='raised']
193
- > [data-part='input']:has(+ [data-part='footer']) {
192
+ [data-ui-prompt-composer][data-variant='raised'] > [data-part-input]:has(+ [data-part-footer]) {
194
193
  padding-block-end: var(--slotted-space-2, 0.25rem);
195
194
  }
196
195
 
@@ -201,7 +200,7 @@
201
200
  * does not: the send stays on the line, and a narrow composer gives up the
202
201
  * space between the tools first.
203
202
  */
204
- [data-ui='prompt-composer'] > :is([data-part='header'], [data-part='footer']) {
203
+ [data-ui-prompt-composer] > :is([data-part-header], [data-part-footer]) {
205
204
  --slotted-icon-size: var(--_icon-size);
206
205
  --slotted-control-inner-size: var(--_button);
207
206
 
@@ -212,19 +211,19 @@
212
211
  padding: var(--_inset);
213
212
  }
214
213
 
215
- [data-ui='prompt-composer'] > [data-part='header'] {
214
+ [data-ui-prompt-composer] > [data-part-header] {
216
215
  flex-wrap: wrap;
217
216
  padding-block-end: 0;
218
217
  }
219
218
 
220
219
  /* A strip of attachments is the width the band has and scrolls inside it;
221
220
  a flex item otherwise keeps its content's width and crosses the frame. */
222
- [data-ui='prompt-composer'] > [data-part='header'] > * {
221
+ [data-ui-prompt-composer] > [data-part-header] > * {
223
222
  max-inline-size: 100%;
224
223
  min-inline-size: 0;
225
224
  }
226
225
 
227
- [data-ui='prompt-composer'] > [data-part='footer'] {
226
+ [data-ui-prompt-composer] > [data-part-footer] {
228
227
  flex-wrap: nowrap;
229
228
  padding-block-start: 0;
230
229
  }
@@ -237,9 +236,9 @@
237
236
  * padded when named by their own words, the rule `text-field` set; round
238
237
  * in the chat composer, a pill when they carry words.
239
238
  */
240
- [data-ui='prompt-composer']
241
- > :is([data-part='header'], [data-part='footer'])
242
- > :is([data-part='action'], [data-part='attach']) {
239
+ [data-ui-prompt-composer]
240
+ > :is([data-part-header], [data-part-footer])
241
+ > :is([data-part-action], [data-part-attach]) {
243
242
  align-items: center;
244
243
  appearance: none;
245
244
  background-color: transparent;
@@ -266,9 +265,9 @@
266
265
  -webkit-tap-highlight-color: transparent;
267
266
  }
268
267
 
269
- [data-ui='prompt-composer']
270
- > :is([data-part='header'], [data-part='footer'])
271
- > [data-part='action']:not([aria-label], [aria-labelledby]) {
268
+ [data-ui-prompt-composer]
269
+ > :is([data-part-header], [data-part-footer])
270
+ > [data-part-action]:not([aria-label], [aria-labelledby]) {
272
271
  color: var(--slotted-prompt-composer-action-label-color, var(--slotted-text, CanvasText));
273
272
  font-weight: var(--slotted-font-weight-medium, 500);
274
273
  padding-inline: var(--slotted-space-3, 0.375rem);
@@ -286,9 +285,9 @@
286
285
  * translate puts its centre at `(1cap + 1ex) / 4` above the baseline — the
287
286
  * midpoint of the capitals' and the lowercase letters' own centres.
288
287
  */
289
- [data-ui='prompt-composer']
290
- > :is([data-part='header'], [data-part='footer'])
291
- > [data-part='action']:not([aria-label], [aria-labelledby]) {
288
+ [data-ui-prompt-composer]
289
+ > :is([data-part-header], [data-part-footer])
290
+ > [data-part-action]:not([aria-label], [aria-labelledby]) {
292
291
  align-content: center;
293
292
  align-items: baseline;
294
293
  display: inline-grid;
@@ -296,64 +295,64 @@
296
295
  justify-content: center;
297
296
  }
298
297
 
299
- [data-ui='prompt-composer']
300
- > :is([data-part='header'], [data-part='footer'])
301
- > [data-part='action']:not([aria-label], [aria-labelledby])
302
- > [data-ui='icon'] {
298
+ [data-ui-prompt-composer]
299
+ > :is([data-part-header], [data-part-footer])
300
+ > [data-part-action]:not([aria-label], [aria-labelledby])
301
+ > [data-ui-icon] {
303
302
  margin-block-start: calc((1cap + 1ex) / 4 - var(--_icon-size) / 2);
304
303
  translate: 0 calc(var(--_icon-size) / 2 - (1cap + 1ex) / 4);
305
304
  }
306
305
 
307
306
  /* A pill carries its words a step further from its round ends. */
308
- [data-ui='prompt-composer'][data-variant='raised']
309
- > :is([data-part='header'], [data-part='footer'])
310
- > [data-part='action']:not([aria-label], [aria-labelledby]) {
307
+ [data-ui-prompt-composer][data-variant='raised']
308
+ > :is([data-part-header], [data-part-footer])
309
+ > [data-part-action]:not([aria-label], [aria-labelledby]) {
311
310
  padding-inline: var(--slotted-space-4, 0.5rem);
312
311
  }
313
312
 
314
313
  /* The target, recovered outside the paint: 24 pixels on a mouse, 44 on a
315
314
  finger, and never across the edge two buttons share. */
316
- [data-ui='prompt-composer']
317
- > :is([data-part='header'], [data-part='footer'])
318
- > :is([data-part='action'], [data-part='attach'], [data-part='submit'])::after {
315
+ [data-ui-prompt-composer]
316
+ > :is([data-part-header], [data-part-footer])
317
+ > :is([data-part-action], [data-part-attach], [data-part-submit])::after {
319
318
  content: '';
320
319
  inset: min(0px, calc((100% - var(--slotted-target-min, 24px)) / 2));
321
320
  position: absolute;
322
321
  }
323
322
 
324
323
  @media (pointer: coarse) {
325
- [data-ui='prompt-composer']
326
- > :is([data-part='header'], [data-part='footer'])
327
- > :is([data-part='action'], [data-part='attach'], [data-part='submit'])::after {
324
+ [data-ui-prompt-composer]
325
+ > :is([data-part-header], [data-part-footer])
326
+ > :is([data-part-action], [data-part-attach], [data-part-submit])::after {
328
327
  inset: min(0px, calc((100% - var(--slotted-target-comfortable, 44px)) / 2));
329
328
  }
330
329
 
331
- [data-ui='prompt-composer']
332
- > :is([data-part='header'], [data-part='footer'])
333
- > :is([data-part='action'], [data-part='attach']):has(+ *)::after {
330
+ [data-ui-prompt-composer]
331
+ > :is([data-part-header], [data-part-footer])
332
+ > :is([data-part-action], [data-part-attach]):has(+ *)::after {
334
333
  inset-inline-end: 0;
335
334
  }
336
335
 
337
- [data-ui='prompt-composer']
338
- > :is([data-part='header'], [data-part='footer'])
336
+ [data-ui-prompt-composer]
337
+ > :is([data-part-header], [data-part-footer])
339
338
  > *
340
- + :is([data-part='action'], [data-part='attach'], [data-part='submit'])::after {
339
+ + :is([data-part-action], [data-part-attach], [data-part-submit])::after {
341
340
  inset-inline-start: 0;
342
341
  }
343
342
  }
344
343
 
345
- [data-ui='prompt-composer']
346
- > :is([data-part='header'], [data-part='footer'])
347
- > :is([data-part='action'], [data-part='attach']):hover:not(:disabled, [aria-expanded='true']) {
344
+ [data-ui-prompt-composer]
345
+ > :is([data-part-header], [data-part-footer])
346
+ > :is([data-part-action], [data-part-attach]):hover:not(:disabled, [aria-expanded='true']) {
348
347
  background-color: var(
349
348
  --slotted-prompt-composer-action-hover-background,
350
349
  var(--slotted-tone-secondary-subtle-hover)
351
350
  );
352
351
  }
353
352
 
354
- [data-ui='prompt-composer']
355
- > :is([data-part='header'], [data-part='footer'])
356
- > :is([data-part='action'], [data-part='attach']):is(:active, [aria-expanded='true']):not(
353
+ [data-ui-prompt-composer]
354
+ > :is([data-part-header], [data-part-footer])
355
+ > :is([data-part-action], [data-part-attach]):is(:active, [aria-expanded='true']):not(
357
356
  :disabled
358
357
  ) {
359
358
  background-color: var(
@@ -362,9 +361,9 @@
362
361
  );
363
362
  }
364
363
 
365
- [data-ui='prompt-composer']
366
- > :is([data-part='header'], [data-part='footer'])
367
- > :is([data-part='action'], [data-part='attach']):disabled {
364
+ [data-ui-prompt-composer]
365
+ > :is([data-part-header], [data-part-footer])
366
+ > :is([data-part-action], [data-part-attach]):disabled {
368
367
  color: var(--slotted-disabled-foreground);
369
368
  cursor: not-allowed;
370
369
  }
@@ -377,7 +376,7 @@
377
376
  * The mark and the ring share one grid cell, so the stop square stands in
378
377
  * the middle of the ring that says an answer is still arriving.
379
378
  */
380
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit'] {
379
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit] {
381
380
  /* Alone, the ring is the glyph's size and stands where the arrow stood;
382
381
  around the stop square it grows to the disc (below). */
383
382
  --slotted-spinner-size: var(--_icon-size);
@@ -412,15 +411,15 @@
412
411
  -webkit-tap-highlight-color: transparent;
413
412
  }
414
413
 
415
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit'] > * {
414
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit] > * {
416
415
  grid-area: 1 / 1;
417
416
  }
418
417
 
419
418
  /* Named by its own word — Comentar, Publicar — the send is a padded pill at
420
419
  the same height; named by aria-label it is the round mark. */
421
- [data-ui='prompt-composer']
422
- > [data-part='footer']
423
- > [data-part='submit']:not([aria-label], [aria-labelledby]) {
420
+ [data-ui-prompt-composer]
421
+ > [data-part-footer]
422
+ > [data-part-submit]:not([aria-label], [aria-labelledby]) {
424
423
  border-radius: var(--_action-radius);
425
424
  font: inherit;
426
425
  font-weight: var(--slotted-font-weight-medium, 500);
@@ -429,7 +428,7 @@
429
428
  padding-inline: var(--slotted-space-5, 0.75rem);
430
429
  }
431
430
 
432
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit']:hover:not(:disabled) {
431
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit]:hover:not(:disabled) {
433
432
  background-color: var(
434
433
  --slotted-prompt-composer-submit-hover-background,
435
434
  var(--slotted-tone-accent-solid-hover, Highlight)
@@ -441,16 +440,16 @@
441
440
  * the button going in; the ground darkens a further step. A padded send
442
441
  * holds its words, so it takes the ground alone (R7).
443
442
  */
444
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit']:active:not(:disabled) {
443
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit]:active:not(:disabled) {
445
444
  background-color: var(
446
445
  --slotted-prompt-composer-submit-active-background,
447
446
  var(--slotted-tone-accent-solid-active, Highlight)
448
447
  );
449
448
  }
450
449
 
451
- [data-ui='prompt-composer']
452
- > [data-part='footer']
453
- > [data-part='submit']:is([aria-label], [aria-labelledby]):active:not(:disabled) {
450
+ [data-ui-prompt-composer]
451
+ > [data-part-footer]
452
+ > [data-part-submit]:is([aria-label], [aria-labelledby]):active:not(:disabled) {
454
453
  scale: 0.9;
455
454
  }
456
455
 
@@ -459,23 +458,23 @@
459
458
  * over it: a hint of the movement the press will start, and nothing else
460
459
  * in the frame moves.
461
460
  */
462
- [data-ui='prompt-composer']
463
- > [data-part='footer']
464
- > [data-part='submit']
465
- > [data-ui='icon']:has([data-glyph='arrow-up']) {
461
+ [data-ui-prompt-composer]
462
+ > [data-part-footer]
463
+ > [data-part-submit]
464
+ > [data-ui-icon]:has([data-glyph='arrow-up']) {
466
465
  transition: translate var(--slotted-duration-short) var(--slotted-easing-standard);
467
466
  }
468
467
 
469
- [data-ui='prompt-composer']
470
- > [data-part='footer']
471
- > [data-part='submit']:hover:not(:disabled)
472
- > [data-ui='icon']:has([data-glyph='arrow-up']) {
468
+ [data-ui-prompt-composer]
469
+ > [data-part-footer]
470
+ > [data-part-submit]:hover:not(:disabled)
471
+ > [data-ui-icon]:has([data-glyph='arrow-up']) {
473
472
  translate: 0 calc(var(--slotted-border-width-thin, 1px) * -1);
474
473
  }
475
474
 
476
475
  /* Nothing to send: a quiet disc in the disabled ground, the arrow still
477
476
  legible, so the reader sees where the send will be before it wakes. */
478
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit']:disabled {
477
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit]:disabled {
479
478
  background-color: var(
480
479
  --slotted-prompt-composer-submit-disabled-background,
481
480
  var(--slotted-disabled-background)
@@ -486,9 +485,7 @@
486
485
 
487
486
  /* While the request travels the button is busy, not unavailable: the ring
488
487
  stands where the arrow stood and the ground keeps the accent. */
489
- [data-ui='prompt-composer'][data-status='submitted']
490
- > [data-part='footer']
491
- > [data-part='submit'] {
488
+ [data-ui-prompt-composer][data-status='submitted'] > [data-part-footer] > [data-part-submit] {
492
489
  background-color: var(
493
490
  --slotted-prompt-composer-submit-background,
494
491
  var(--slotted-tone-accent-solid, Highlight)
@@ -502,9 +499,7 @@
502
499
 
503
500
  /* The ring around the stop square is drawn inside the disc, a stroke in
504
501
  from its edge, so the disc keeps its outline. */
505
- [data-ui='prompt-composer'][data-status='streaming']
506
- > [data-part='footer']
507
- > [data-part='submit'] {
502
+ [data-ui-prompt-composer][data-status='streaming'] > [data-part-footer] > [data-part-submit] {
508
503
  --slotted-spinner-size: calc(var(--_button) - 2 * var(--slotted-space-1, 2px));
509
504
  --slotted-icon-size: calc(var(--_icon-size) * 3 / 4);
510
505
  }
@@ -515,10 +510,10 @@
515
510
  * transparent, on the entering curve. The old mark is gone in the same
516
511
  * frame.
517
512
  */
518
- [data-ui='prompt-composer']
519
- > [data-part='footer']
520
- > [data-part='submit']
521
- > :is([data-ui='icon'], [data-ui='spinner']) {
513
+ [data-ui-prompt-composer]
514
+ > [data-part-footer]
515
+ > [data-part-submit]
516
+ > :is([data-ui-icon], [data-ui-spinner]) {
522
517
  transition:
523
518
  opacity var(--slotted-duration-short) var(--slotted-easing-enter),
524
519
  scale var(--slotted-duration-short) var(--slotted-easing-enter),
@@ -526,10 +521,10 @@
526
521
  }
527
522
 
528
523
  @starting-style {
529
- [data-ui='prompt-composer']
530
- > [data-part='footer']
531
- > [data-part='submit']
532
- > :is([data-ui='icon'], [data-ui='spinner']) {
524
+ [data-ui-prompt-composer]
525
+ > [data-part-footer]
526
+ > [data-part-submit]
527
+ > :is([data-ui-icon], [data-ui-spinner]) {
533
528
  opacity: 0;
534
529
  scale: 0.8;
535
530
  }
@@ -539,21 +534,21 @@
539
534
  inner control does: four pixels from the frame, an outward ring would
540
535
  land on the frame's edge. The solid send keeps it outside, where the
541
536
  ring stands against the frame's ground rather than against the accent. */
542
- [data-ui='prompt-composer']
543
- > :is([data-part='header'], [data-part='footer'])
544
- > :is([data-part='action'], [data-part='attach']):focus-visible {
537
+ [data-ui-prompt-composer]
538
+ > :is([data-part-header], [data-part-footer])
539
+ > :is([data-part-action], [data-part-attach]):focus-visible {
545
540
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
546
541
  outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
547
542
  }
548
543
 
549
- [data-ui='prompt-composer'] > [data-part='footer'] > [data-part='submit']:focus-visible {
544
+ [data-ui-prompt-composer] > [data-part-footer] > [data-part-submit]:focus-visible {
550
545
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
551
546
  outline-offset: var(--slotted-focus-ring-offset, 2px);
552
547
  }
553
548
 
554
549
  /* ── States of the frame ─────────────────────────────────────────────── */
555
550
 
556
- [data-ui='prompt-composer'][data-part='root']:hover:not([data-disabled]):not([data-readonly]):not(
551
+ [data-ui-prompt-composer][data-part-root]:hover:not([data-disabled]):not([data-readonly]):not(
557
552
  [data-invalid]
558
553
  ):not([data-drop-target]) {
559
554
  border-color: var(
@@ -569,7 +564,7 @@
569
564
  * the theme's large shadow, because a surface that is being written on
570
565
  * comes forward.
571
566
  */
572
- [data-ui='prompt-composer'][data-part='root']:has(> [data-part='input']:focus-visible) {
567
+ [data-ui-prompt-composer][data-part-root]:has(> [data-part-input]:focus-visible) {
573
568
  box-shadow: var(--_lift-focus);
574
569
  outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
575
570
  outline-offset: var(--slotted-focus-ring-offset, 2px);
@@ -583,11 +578,11 @@
583
578
  * moment. The dashed edge is a pseudo-element rather than an outline: the
584
579
  * outline is the focus ring's, and the two can be on at once.
585
580
  */
586
- [data-ui='prompt-composer'][data-part='root'] {
581
+ [data-ui-prompt-composer][data-part-root] {
587
582
  position: relative;
588
583
  }
589
584
 
590
- [data-ui='prompt-composer'][data-part='root']::before {
585
+ [data-ui-prompt-composer][data-part-root]::before {
591
586
  /* Unthemed, the dashed edge disappears rather than shouting in a system
592
587
  colour; the wash and the frame's edge still say where the drop lands. */
593
588
  border: var(--slotted-border-width-medium, 1.5px) dashed
@@ -606,12 +601,12 @@
606
601
  transition: opacity var(--slotted-duration-short) var(--slotted-easing-exit);
607
602
  }
608
603
 
609
- [data-ui='prompt-composer'][data-part='root'][data-drop-target]::before {
604
+ [data-ui-prompt-composer][data-part-root][data-drop-target]::before {
610
605
  opacity: 1;
611
606
  transition-timing-function: var(--slotted-easing-enter);
612
607
  }
613
608
 
614
- [data-ui='prompt-composer'][data-part='root'][data-drop-target] {
609
+ [data-ui-prompt-composer][data-part-root][data-drop-target] {
615
610
  background-color: var(
616
611
  --slotted-prompt-composer-drop-background,
617
612
  var(--slotted-tone-accent-surface, Canvas)
@@ -622,7 +617,7 @@
622
617
  );
623
618
  }
624
619
 
625
- [data-ui='prompt-composer'][data-part='root'][data-invalid] {
620
+ [data-ui-prompt-composer][data-part-root][data-invalid] {
626
621
  --slotted-focus-ring-color: var(
627
622
  --slotted-prompt-composer-invalid-focus-ring-color,
628
623
  var(--slotted-focus-ring-color-invalid, Highlight)
@@ -646,7 +641,7 @@
646
641
  * the large one in `raised` — and forced colours, which remove shadows, keep
647
642
  * a border. Nothing moves: the box is out of flow.
648
643
  */
649
- [data-ui='prompt-composer'][data-part='root'][data-invalid]::after {
644
+ [data-ui-prompt-composer][data-part-root][data-invalid]::after {
650
645
  border: var(--_invalid-edge-width) solid
651
646
  var(--slotted-prompt-composer-invalid-border-color, var(--slotted-tone-danger-border));
652
647
  border-radius: max(0px, calc(var(--_radius) - var(--slotted-control-border-width, 1px)));
@@ -656,7 +651,7 @@
656
651
  position: absolute;
657
652
  }
658
653
 
659
- [data-ui='prompt-composer'][data-part='root'][data-readonly] {
654
+ [data-ui-prompt-composer][data-part-root][data-readonly] {
660
655
  background-color: var(
661
656
  --slotted-prompt-composer-readonly-background,
662
657
  var(--slotted-tone-secondary-subtle-hover)
@@ -664,7 +659,7 @@
664
659
  cursor: default;
665
660
  }
666
661
 
667
- [data-ui='prompt-composer'][data-part='root'][data-disabled] {
662
+ [data-ui-prompt-composer][data-part-root][data-disabled] {
668
663
  background-color: var(
669
664
  --slotted-prompt-composer-disabled-background,
670
665
  var(--slotted-disabled-background)