@slotted/styles 0.0.0-stage → 0.1.0-beta.1

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -2
  3. package/package.json +276 -3
  4. package/src/accordion/accordion.css +96 -0
  5. package/src/accordion/accordion.tokens.json +14 -0
  6. package/src/action-bar/action-bar.css +455 -0
  7. package/src/action-bar/action-bar.tokens.json +50 -0
  8. package/src/action-sheet/action-sheet.css +462 -0
  9. package/src/action-sheet/action-sheet.tokens.json +59 -0
  10. package/src/alert/alert.css +764 -0
  11. package/src/alert/alert.tokens.json +77 -0
  12. package/src/app-shell/app-shell.css +1899 -0
  13. package/src/app-shell/app-shell.tokens.json +88 -0
  14. package/src/aspect-ratio/aspect-ratio.css +131 -0
  15. package/src/aspect-ratio/aspect-ratio.tokens.json +1 -0
  16. package/src/attachment/attachment.css +906 -0
  17. package/src/attachment/attachment.tokens.json +85 -0
  18. package/src/avatar/avatar.css +598 -0
  19. package/src/avatar/avatar.tokens.json +64 -0
  20. package/src/avatar-group/avatar-group.css +268 -0
  21. package/src/avatar-group/avatar-group.tokens.json +16 -0
  22. package/src/badge/badge.css +462 -0
  23. package/src/badge/badge.tokens.json +58 -0
  24. package/src/breadcrumb/breadcrumb.css +441 -0
  25. package/src/breadcrumb/breadcrumb.tokens.json +50 -0
  26. package/src/button/button.css +754 -0
  27. package/src/button/button.tokens.json +72 -0
  28. package/src/button-group/button-group.css +455 -0
  29. package/src/button-group/button-group.tokens.json +11 -0
  30. package/src/calendar/calendar.css +846 -0
  31. package/src/calendar/calendar.tokens.json +67 -0
  32. package/src/card/card.css +602 -0
  33. package/src/card/card.tokens.json +68 -0
  34. package/src/carousel/carousel.css +860 -0
  35. package/src/carousel/carousel.tokens.json +62 -0
  36. package/src/cascader/cascader.css +1320 -0
  37. package/src/cascader/cascader.tokens.json +103 -0
  38. package/src/chart/chart.css +1473 -0
  39. package/src/chart/chart.tokens.json +107 -0
  40. package/src/checkbox/checkbox.css +1011 -0
  41. package/src/checkbox/checkbox.tokens.json +102 -0
  42. package/src/checkbox-group/checkbox-group.css +70 -0
  43. package/src/checkbox-group/checkbox-group.tokens.json +6 -0
  44. package/src/code-block/code-block.css +555 -0
  45. package/src/code-block/code-block.tokens.json +69 -0
  46. package/src/collapsible/collapsible.css +546 -0
  47. package/src/collapsible/collapsible.tokens.json +55 -0
  48. package/src/color-picker/color-picker.css +607 -0
  49. package/src/color-picker/color-picker.tokens.json +58 -0
  50. package/src/column-manager/column-manager.css +452 -0
  51. package/src/column-manager/column-manager.tokens.json +43 -0
  52. package/src/combobox/combobox.css +1048 -0
  53. package/src/combobox/combobox.tokens.json +112 -0
  54. package/src/command-palette/command-palette.css +1000 -0
  55. package/src/command-palette/command-palette.tokens.json +75 -0
  56. package/src/container/container.css +198 -0
  57. package/src/container/container.tokens.json +18 -0
  58. package/src/context-menu/context-menu.css +104 -0
  59. package/src/context-menu/context-menu.tokens.json +11 -0
  60. package/src/currency-field/currency-field.css +787 -0
  61. package/src/currency-field/currency-field.tokens.json +80 -0
  62. package/src/dashboard-grid/dashboard-grid.css +748 -0
  63. package/src/dashboard-grid/dashboard-grid.tokens.json +67 -0
  64. package/src/data-grid/data-grid.css +2484 -0
  65. package/src/data-grid/data-grid.tokens.json +100 -0
  66. package/src/data-list/data-list.css +455 -0
  67. package/src/data-list/data-list.tokens.json +35 -0
  68. package/src/date-field/date-field.css +560 -0
  69. package/src/date-field/date-field.tokens.json +80 -0
  70. package/src/date-picker/date-picker.css +420 -0
  71. package/src/date-picker/date-picker.tokens.json +49 -0
  72. package/src/date-range-picker/date-range-picker.css +983 -0
  73. package/src/date-range-picker/date-range-picker.tokens.json +109 -0
  74. package/src/datetime-field/datetime-field.css +850 -0
  75. package/src/datetime-field/datetime-field.tokens.json +91 -0
  76. package/src/datetime-picker/datetime-picker.css +843 -0
  77. package/src/datetime-picker/datetime-picker.tokens.json +78 -0
  78. package/src/datetime-range-picker/datetime-range-picker.css +1375 -0
  79. package/src/datetime-range-picker/datetime-range-picker.tokens.json +135 -0
  80. package/src/description-list/description-list.css +675 -0
  81. package/src/description-list/description-list.tokens.json +66 -0
  82. package/src/detail-panel/detail-panel.css +329 -0
  83. package/src/detail-panel/detail-panel.tokens.json +33 -0
  84. package/src/dialog/dialog.css +968 -0
  85. package/src/dialog/dialog.tokens.json +66 -0
  86. package/src/divider/divider.css +131 -0
  87. package/src/divider/divider.tokens.json +18 -0
  88. package/src/drawer/drawer.css +1303 -0
  89. package/src/drawer/drawer.tokens.json +75 -0
  90. package/src/entity-picker/entity-picker.css +1367 -0
  91. package/src/entity-picker/entity-picker.tokens.json +118 -0
  92. package/src/event-calendar/event-calendar.css +2148 -0
  93. package/src/event-calendar/event-calendar.tokens.json +87 -0
  94. package/src/field/field.css +707 -0
  95. package/src/field/field.tokens.json +58 -0
  96. package/src/field-group/field-group.css +226 -0
  97. package/src/field-group/field-group.tokens.json +33 -0
  98. package/src/filter-bar/filter-bar.css +1306 -0
  99. package/src/filter-bar/filter-bar.tokens.json +78 -0
  100. package/src/form/form.css +218 -0
  101. package/src/form/form.tokens.json +32 -0
  102. package/src/fullscreen/fullscreen.css +376 -0
  103. package/src/fullscreen/fullscreen.tokens.json +50 -0
  104. package/src/grid/grid.css +173 -0
  105. package/src/grid/grid.tokens.json +20 -0
  106. package/src/highlight/highlight.css +135 -0
  107. package/src/highlight/highlight.tokens.json +16 -0
  108. package/src/hover-card/hover-card.css +93 -0
  109. package/src/hover-card/hover-card.tokens.json +17 -0
  110. package/src/icon/icon.css +136 -0
  111. package/src/icon/icon.tokens.json +14 -0
  112. package/src/image/image.css +449 -0
  113. package/src/image/image.tokens.json +27 -0
  114. package/src/import-export-center/import-export-center.css +1175 -0
  115. package/src/import-export-center/import-export-center.tokens.json +84 -0
  116. package/src/inline/inline.css +149 -0
  117. package/src/inline/inline.tokens.json +14 -0
  118. package/src/inline-message/inline-message.css +396 -0
  119. package/src/inline-message/inline-message.tokens.json +19 -0
  120. package/src/kbd/kbd.css +490 -0
  121. package/src/kbd/kbd.tokens.json +40 -0
  122. package/src/link/link.css +237 -0
  123. package/src/link/link.tokens.json +25 -0
  124. package/src/list/list.css +240 -0
  125. package/src/list/list.tokens.json +42 -0
  126. package/src/list-item/list-item.css +937 -0
  127. package/src/list-item/list-item.tokens.json +114 -0
  128. package/src/listbox/listbox.css +674 -0
  129. package/src/listbox/listbox.tokens.json +72 -0
  130. package/src/loading-overlay/loading-overlay.css +730 -0
  131. package/src/loading-overlay/loading-overlay.tokens.json +48 -0
  132. package/src/markdown/markdown.css +168 -0
  133. package/src/markdown/markdown.tokens.json +18 -0
  134. package/src/menu/menu.css +817 -0
  135. package/src/menu/menu.tokens.json +78 -0
  136. package/src/menubar/menubar.css +170 -0
  137. package/src/menubar/menubar.tokens.json +32 -0
  138. package/src/message/message.css +1453 -0
  139. package/src/message/message.tokens.json +85 -0
  140. package/src/message-scroller/message-scroller.css +371 -0
  141. package/src/message-scroller/message-scroller.tokens.json +47 -0
  142. package/src/multi-select/multi-select.css +1427 -0
  143. package/src/multi-select/multi-select.tokens.json +114 -0
  144. package/src/navigation-menu/navigation-menu.css +1029 -0
  145. package/src/navigation-menu/navigation-menu.tokens.json +70 -0
  146. package/src/notification-center/notification-center.css +856 -0
  147. package/src/notification-center/notification-center.tokens.json +84 -0
  148. package/src/number-field/number-field.css +794 -0
  149. package/src/number-field/number-field.tokens.json +80 -0
  150. package/src/otp-input/otp-input.css +525 -0
  151. package/src/otp-input/otp-input.tokens.json +69 -0
  152. package/src/page/page.css +179 -0
  153. package/src/page/page.tokens.json +20 -0
  154. package/src/page-header/page-header.css +1181 -0
  155. package/src/page-header/page-header.tokens.json +71 -0
  156. package/src/pagination/pagination.css +500 -0
  157. package/src/pagination/pagination.tokens.json +56 -0
  158. package/src/popover/popover.css +526 -0
  159. package/src/popover/popover.tokens.json +60 -0
  160. package/src/progress-indicator/progress-indicator.css +1584 -0
  161. package/src/progress-indicator/progress-indicator.tokens.json +50 -0
  162. package/src/prompt-composer/prompt-composer.css +680 -0
  163. package/src/prompt-composer/prompt-composer.tokens.json +99 -0
  164. package/src/prose/prose.css +733 -0
  165. package/src/prose/prose.tokens.json +79 -0
  166. package/src/radio-group/radio-group.css +778 -0
  167. package/src/radio-group/radio-group.tokens.json +103 -0
  168. package/src/rating/rating.css +1071 -0
  169. package/src/rating/rating.tokens.json +88 -0
  170. package/src/result-state/result-state.css +980 -0
  171. package/src/result-state/result-state.tokens.json +63 -0
  172. package/src/runtime-properties.mjs +321 -0
  173. package/src/saved-views/saved-views.css +394 -0
  174. package/src/saved-views/saved-views.tokens.json +41 -0
  175. package/src/scroll-area/scroll-area.css +481 -0
  176. package/src/scroll-area/scroll-area.tokens.json +15 -0
  177. package/src/section/section.css +177 -0
  178. package/src/section/section.tokens.json +39 -0
  179. package/src/segmented-control/segmented-control.css +564 -0
  180. package/src/segmented-control/segmented-control.tokens.json +67 -0
  181. package/src/select/select.css +1593 -0
  182. package/src/select/select.tokens.json +110 -0
  183. package/src/side-navigation/side-navigation.css +1096 -0
  184. package/src/side-navigation/side-navigation.tokens.json +87 -0
  185. package/src/skeleton/skeleton.css +431 -0
  186. package/src/skeleton/skeleton.tokens.json +29 -0
  187. package/src/slider/slider.css +792 -0
  188. package/src/slider/slider.tokens.json +75 -0
  189. package/src/sparkline/sparkline.css +282 -0
  190. package/src/sparkline/sparkline.tokens.json +45 -0
  191. package/src/spinner/spinner.css +224 -0
  192. package/src/spinner/spinner.tokens.json +8 -0
  193. package/src/split-button/split-button.css +253 -0
  194. package/src/split-button/split-button.tokens.json +12 -0
  195. package/src/splitter/splitter.css +336 -0
  196. package/src/splitter/splitter.tokens.json +24 -0
  197. package/src/stack/stack.css +128 -0
  198. package/src/stack/stack.tokens.json +14 -0
  199. package/src/stat-card/stat-card.css +641 -0
  200. package/src/stat-card/stat-card.tokens.json +95 -0
  201. package/src/status-indicator/status-indicator.css +481 -0
  202. package/src/status-indicator/status-indicator.tokens.json +38 -0
  203. package/src/stepper/stepper.css +629 -0
  204. package/src/stepper/stepper.tokens.json +72 -0
  205. package/src/switch/switch.css +703 -0
  206. package/src/switch/switch.tokens.json +75 -0
  207. package/src/table/table.css +1482 -0
  208. package/src/table/table.tokens.json +69 -0
  209. package/src/table-of-contents/table-of-contents.css +533 -0
  210. package/src/table-of-contents/table-of-contents.tokens.json +53 -0
  211. package/src/tabs/tabs.css +998 -0
  212. package/src/tabs/tabs.tokens.json +82 -0
  213. package/src/tag/tag.css +768 -0
  214. package/src/tag/tag.tokens.json +85 -0
  215. package/src/tags-input/tags-input.css +757 -0
  216. package/src/tags-input/tags-input.tokens.json +84 -0
  217. package/src/text-field/text-field.css +900 -0
  218. package/src/text-field/text-field.tokens.json +87 -0
  219. package/src/textarea/textarea.css +365 -0
  220. package/src/textarea/textarea.tokens.json +59 -0
  221. package/src/time-field/time-field.css +719 -0
  222. package/src/time-field/time-field.tokens.json +86 -0
  223. package/src/time-picker/time-picker.css +665 -0
  224. package/src/time-picker/time-picker.tokens.json +66 -0
  225. package/src/time-range-picker/time-range-picker.css +1287 -0
  226. package/src/time-range-picker/time-range-picker.tokens.json +134 -0
  227. package/src/timeline/timeline.css +1596 -0
  228. package/src/timeline/timeline.tokens.json +96 -0
  229. package/src/toast/toast.css +943 -0
  230. package/src/toast/toast.tokens.json +90 -0
  231. package/src/toggle/toggle.css +290 -0
  232. package/src/toggle/toggle.tokens.json +54 -0
  233. package/src/toggle-group/toggle-group.css +463 -0
  234. package/src/toggle-group/toggle-group.tokens.json +54 -0
  235. package/src/toolbar/toolbar.css +434 -0
  236. package/src/toolbar/toolbar.tokens.json +49 -0
  237. package/src/tooltip/tooltip.css +368 -0
  238. package/src/tooltip/tooltip.tokens.json +39 -0
  239. package/src/top-navigation/top-navigation.css +1287 -0
  240. package/src/top-navigation/top-navigation.tokens.json +91 -0
  241. package/src/tour/tour.css +680 -0
  242. package/src/tour/tour.tokens.json +67 -0
  243. package/src/transfer/transfer.css +571 -0
  244. package/src/transfer/transfer.tokens.json +49 -0
  245. package/src/tree/tree.css +1000 -0
  246. package/src/tree/tree.tokens.json +80 -0
  247. package/src/typography/typography.css +211 -0
  248. package/src/typography/typography.tokens.json +31 -0
  249. package/src/upload/upload.css +1706 -0
  250. package/src/upload/upload.tokens.json +123 -0
  251. package/src/visually-hidden/visually-hidden.css +52 -0
  252. package/src/visually-hidden/visually-hidden.tokens.json +1 -0
  253. package/src/wizard/wizard.css +740 -0
  254. package/src/wizard/wizard.tokens.json +63 -0
@@ -0,0 +1,100 @@
1
+ [
2
+ "--slotted-border-strong",
3
+ "--slotted-border-subtle",
4
+ "--slotted-border-width-thick",
5
+ "--slotted-border-width-thin",
6
+ "--slotted-control-font-family",
7
+ "--slotted-control-font-size-md",
8
+ "--slotted-control-font-size-sm",
9
+ "--slotted-control-gap-md",
10
+ "--slotted-control-height-md",
11
+ "--slotted-control-icon-size-md",
12
+ "--slotted-control-inner-size-sm",
13
+ "--slotted-control-invalid-edge-width",
14
+ "--slotted-control-padding-inline-md",
15
+ "--slotted-control-padding-inline-sm",
16
+ "--slotted-control-transition-duration",
17
+ "--slotted-control-transition-easing",
18
+ "--slotted-data-grid-band-surface",
19
+ "--slotted-data-grid-block-size",
20
+ "--slotted-data-grid-border-color",
21
+ "--slotted-data-grid-border-color-strong",
22
+ "--slotted-data-grid-border-width",
23
+ "--slotted-data-grid-cell-padding-block",
24
+ "--slotted-data-grid-cell-padding-inline",
25
+ "--slotted-data-grid-changed-surface",
26
+ "--slotted-data-grid-color",
27
+ "--slotted-data-grid-color-muted",
28
+ "--slotted-data-grid-control-radius",
29
+ "--slotted-data-grid-cursor-color",
30
+ "--slotted-data-grid-filter-operator-size",
31
+ "--slotted-data-grid-filter-panel-size",
32
+ "--slotted-data-grid-filter-panel-size-date",
33
+ "--slotted-data-grid-filter-panel-size-datetime",
34
+ "--slotted-data-grid-font-family",
35
+ "--slotted-data-grid-font-size",
36
+ "--slotted-data-grid-gap",
37
+ "--slotted-data-grid-head-block-size",
38
+ "--slotted-data-grid-header-surface",
39
+ "--slotted-data-grid-header-surface-hover",
40
+ "--slotted-data-grid-icon-size",
41
+ "--slotted-data-grid-indent",
42
+ "--slotted-data-grid-pin-shadow-color",
43
+ "--slotted-data-grid-pin-shadow-size",
44
+ "--slotted-data-grid-radius",
45
+ "--slotted-data-grid-range-surface",
46
+ "--slotted-data-grid-row-block-size",
47
+ "--slotted-data-grid-row-color-selected",
48
+ "--slotted-data-grid-row-max-block-size",
49
+ "--slotted-data-grid-row-surface-hover",
50
+ "--slotted-data-grid-row-surface-selected",
51
+ "--slotted-data-grid-row-surface-selected-hover",
52
+ "--slotted-data-grid-row-surface-stripe",
53
+ "--slotted-data-grid-shadow",
54
+ "--slotted-data-grid-sticky-offset",
55
+ "--slotted-data-grid-sticky-offset-end",
56
+ "--slotted-data-grid-surface",
57
+ "--slotted-disabled-foreground",
58
+ "--slotted-duration-long",
59
+ "--slotted-duration-loop",
60
+ "--slotted-duration-short",
61
+ "--slotted-easing-standard",
62
+ "--slotted-focus-ring-color",
63
+ "--slotted-focus-ring-color-invalid",
64
+ "--slotted-focus-ring-offset",
65
+ "--slotted-focus-ring-width",
66
+ "--slotted-font-size-xs",
67
+ "--slotted-font-weight-medium",
68
+ "--slotted-font-weight-regular",
69
+ "--slotted-font-weight-semibold",
70
+ "--slotted-ground",
71
+ "--slotted-line-height-md",
72
+ "--slotted-popover-gap",
73
+ "--slotted-popover-padding-block-sm",
74
+ "--slotted-popover-padding-inline-sm",
75
+ "--slotted-radius-md",
76
+ "--slotted-radius-sm",
77
+ "--slotted-scrim",
78
+ "--slotted-shadow-xs",
79
+ "--slotted-space-1",
80
+ "--slotted-space-2",
81
+ "--slotted-space-3",
82
+ "--slotted-space-4",
83
+ "--slotted-space-5",
84
+ "--slotted-space-6",
85
+ "--slotted-space-8",
86
+ "--slotted-surface",
87
+ "--slotted-surface-sunken",
88
+ "--slotted-target-comfortable",
89
+ "--slotted-target-min",
90
+ "--slotted-text",
91
+ "--slotted-text-muted",
92
+ "--slotted-tone-accent-border",
93
+ "--slotted-tone-accent-solid",
94
+ "--slotted-tone-accent-subtle-hover",
95
+ "--slotted-tone-accent-surface",
96
+ "--slotted-tone-accent-text",
97
+ "--slotted-tone-danger-border",
98
+ "--slotted-tone-secondary-subtle-hover",
99
+ "--slotted-z-index-sticky"
100
+ ]
@@ -0,0 +1,455 @@
1
+ @layer slotted.components {
2
+ /**
3
+ * ── The list of records ────────────────────────────────────────────────
4
+ *
5
+ * A small tabular set drawn as records. The set is `list`, each record is a
6
+ * `list-item`, and this sheet owns four things only: the bar above the set,
7
+ * the pairs of a record's fields, the target that covers a record, and the
8
+ * bar under the set. Everything a row already answers — its height at each
9
+ * density, its rule, its selected, current, disabled and loading grounds,
10
+ * its trailing column moving under the title below 22rem — is `list-item`'s,
11
+ * and this sheet does not restate it.
12
+ *
13
+ * The two composed families keep their own `data-part`. A part of this
14
+ * family is written on an element of its own, never on the `li`, so the row
15
+ * stays the row `list-item.css` recognises.
16
+ */
17
+ [data-ui='data-list'][data-part='root'] {
18
+ /* The pop-in's two measures (`data-grid.css`, the pop-in): a field is at
19
+ least nine rems, so two sit side by side from eighteen, and a field that
20
+ has the row to itself puts its label in a track of seven and a half. */
21
+ --_field-min: 9rem;
22
+ --_field-label-inline: 7.5rem;
23
+ --_pad-inline: var(--slotted-control-padding-inline-md, 13px);
24
+ --_gap: var(--slotted-control-gap-md, 8px);
25
+ --_muted: var(--slotted-text-muted, GrayText);
26
+ --_rule: var(--slotted-border-subtle, ButtonBorder);
27
+ --_rule-width: var(--slotted-border-width-thin, 1px);
28
+ --_transition: var(--slotted-duration-short) var(--slotted-easing-standard);
29
+
30
+ color: var(--slotted-text, CanvasText);
31
+ container: slotted-data-list / inline-size;
32
+ display: flex;
33
+ flex-direction: column;
34
+ font-family: var(--slotted-font-family-sans, sans-serif);
35
+ min-inline-size: 0;
36
+ }
37
+
38
+ [data-ui='data-list'][data-size='sm'] {
39
+ --_pad-inline: var(--slotted-control-padding-inline-sm, 10px);
40
+ --_gap: var(--slotted-control-gap-sm, 6px);
41
+ }
42
+
43
+ [data-ui='data-list'][data-size='lg'] {
44
+ --_pad-inline: var(--slotted-control-padding-inline-lg, 16px);
45
+ --_gap: var(--slotted-control-gap-lg, 8px);
46
+ }
47
+
48
+ /**
49
+ * ── The bar above the set ──────────────────────────────────────────────
50
+ *
51
+ * Select-all, the count and the sort control, on the row's own inset so the
52
+ * header's checkbox stands in the column every record's checkbox stands in.
53
+ * The rule under it is the set's first rule: a ruled list draws a line above
54
+ * every row but the first, and the header is what the first row sits under.
55
+ */
56
+ [data-ui='data-list'] > [data-part='header'] {
57
+ align-items: center;
58
+ box-shadow: 0 var(--_rule-width) 0 0 var(--_rule);
59
+ box-sizing: border-box;
60
+ column-gap: var(--_gap);
61
+ display: flex;
62
+ flex-wrap: wrap;
63
+ font-size: var(--slotted-control-font-size-sm, 12px);
64
+ line-height: var(--slotted-line-height-sm, 1.45);
65
+ min-block-size: var(--slotted-control-height-md, 34px);
66
+ padding-block: var(--slotted-space-2, 0.25rem);
67
+ padding-inline: var(--_pad-inline);
68
+ row-gap: var(--slotted-space-1, 0.125rem);
69
+ }
70
+
71
+ /* A plain list draws no rule between its rows, so the bar draws none under
72
+ itself either. */
73
+ [data-ui='data-list'][data-variant='plain'] > [data-part='header'] {
74
+ box-shadow: none;
75
+ }
76
+
77
+ /* A framed set carries its own edge; the bar sits outside it and the rule
78
+ would double the frame's top. */
79
+ [data-ui='data-list'][data-variant='framed'] > [data-part='header'] {
80
+ box-shadow: none;
81
+ padding-inline: calc(var(--_pad-inline) + var(--_rule-width));
82
+ }
83
+
84
+ [data-ui='data-list'] [data-part='select-all'] {
85
+ display: inline-flex;
86
+ flex: none;
87
+ }
88
+
89
+ [data-ui='data-list'] [data-part='count'] {
90
+ color: var(--_muted);
91
+ flex: 1 1 auto;
92
+ font-variant-numeric: tabular-nums;
93
+ min-inline-size: 0;
94
+ overflow-wrap: anywhere;
95
+ text-align: match-parent;
96
+ unicode-bidi: plaintext;
97
+ }
98
+
99
+ [data-ui='data-list'] [data-part='sort'] {
100
+ display: inline-flex;
101
+ flex: none;
102
+ margin-inline-start: auto;
103
+ /* The trigger is a `plain`-sized ghost button whose inset would push its
104
+ label off the row's end; pulling it back by the button's own inset
105
+ lines the chevron up with the trailing value of every record. */
106
+ margin-inline-end: calc(var(--slotted-control-padding-inline-sm, 10px) * -1);
107
+ }
108
+
109
+ /**
110
+ * The direction, drawn after the label: `table`'s own indicator, the
111
+ * chevron `Glyph` the binding draws in the button's `end` slot, turned a
112
+ * half turn for ascending. Without a key there is nothing to point at and
113
+ * the binding draws no mark.
114
+ */
115
+ [data-ui='data-list'] [data-part='sort'] [data-part='end'] > [data-ui='icon'] {
116
+ transition: transform var(--_transition);
117
+ }
118
+
119
+ [data-ui='data-list']
120
+ [data-part='sort'][data-direction='ascending']
121
+ [data-part='end']
122
+ > [data-ui='icon'] {
123
+ transform: rotate(180deg);
124
+ }
125
+
126
+ /**
127
+ * ── The record ─────────────────────────────────────────────────────────
128
+ *
129
+ * The row is the positioning context for the target that covers it. The
130
+ * controls a record holds stand above that target, so pressing a checkbox,
131
+ * a disclosure or an action presses that control and not the record.
132
+ */
133
+ [data-ui='data-list'] [data-ui='list-item'] {
134
+ position: relative;
135
+ }
136
+
137
+ [data-ui='data-list']
138
+ [data-ui='list-item']
139
+ :is(
140
+ [data-part='selection'],
141
+ [data-part='more'],
142
+ [data-part='field-value'] :is(a, button, input, select, textarea, [tabindex])
143
+ ),
144
+ [data-ui='data-list'] [data-ui='list-item'] > [data-part='actions'] {
145
+ position: relative;
146
+ z-index: 1;
147
+ }
148
+
149
+ [data-ui='data-list'] [data-part='selection'],
150
+ [data-ui='data-list'] [data-part='media'] {
151
+ align-items: center;
152
+ display: inline-flex;
153
+ flex: none;
154
+ }
155
+
156
+ /* Both in one leading column: the chooser first, the picture after it. */
157
+ [data-ui='data-list'] [data-part='selection'] + [data-part='media'] {
158
+ margin-inline-start: var(--_gap);
159
+ }
160
+
161
+ /**
162
+ * The title is the record's one destination or command. It is the row's
163
+ * `label` and nothing more to a reader — a link named by every field is a
164
+ * sentence nobody listens to twice — and its `::after` is the whole row to a
165
+ * pointer, which is where a phone reader's thumb lands.
166
+ */
167
+ [data-ui='data-list'] :is(a, button)[data-part='title'] {
168
+ appearance: none;
169
+ background: none;
170
+ border: 0;
171
+ color: inherit;
172
+ cursor: pointer;
173
+ font: inherit;
174
+ margin: 0;
175
+ padding: 0;
176
+ text-align: inherit;
177
+ text-decoration: none;
178
+ }
179
+
180
+ [data-ui='data-list'] :is(a, button)[data-part='title']::after {
181
+ border-radius: inherit;
182
+ content: '';
183
+ inset: 0;
184
+ position: absolute;
185
+ }
186
+
187
+ [data-ui='data-list'] :is(a, button)[data-part='title']:focus-visible {
188
+ outline: none;
189
+ }
190
+
191
+ /* The ring is drawn by the target, inside the row, as `list-item` draws it
192
+ on its own content: a row is full width, and an outward ring on the first
193
+ record of a framed set is drawn under the frame. */
194
+ [data-ui='data-list'] :is(a, button)[data-part='title']:focus-visible::after {
195
+ outline: var(--slotted-focus-ring-width, 2px) solid
196
+ var(--slotted-focus-ring-color, currentColor);
197
+ outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
198
+ }
199
+
200
+ [data-ui='data-list']
201
+ [data-ui='list-item']:not([data-disabled]):not([data-loading])
202
+ :is(a[href], button:not(:disabled))[data-part='title']:hover {
203
+ text-decoration: underline;
204
+ text-decoration-thickness: from-font;
205
+ text-underline-offset: 0.2em;
206
+ }
207
+
208
+ /**
209
+ * The row's pointer states, taken from the row. `list-item` washes a row
210
+ * whose content is the link or the button; here the target is the title and
211
+ * the content is a `div`, so the same two grounds are asked for from here —
212
+ * through the row's own `--_fill`, which already knows the tone and the
213
+ * selection it is painted over. Both hold back for `disabled` and `loading`.
214
+ */
215
+ [data-ui='data-list']
216
+ [data-ui='list-item']:not([data-disabled]):not([data-loading]):has(
217
+ [data-part='title']:is(a[href], button:not(:disabled)):hover
218
+ ) {
219
+ --_fill: var(--_hover, ButtonFace);
220
+ }
221
+
222
+ [data-ui='data-list']
223
+ [data-ui='list-item']:not([data-disabled]):not([data-loading]):has(
224
+ [data-part='title']:is(a[href], button:not(:disabled)):active
225
+ ) {
226
+ --_fill: var(--_active, ButtonFace);
227
+ }
228
+
229
+ [data-ui='data-list']
230
+ [data-ui='list-item']:is([data-disabled], [data-loading])
231
+ [data-part='title'] {
232
+ cursor: default;
233
+ }
234
+
235
+ /**
236
+ * The value read at a glance — a balance, a total — is the record's own ink
237
+ * and weight rather than `end`'s metadata grey: it is the figure a reader
238
+ * scans the column for. `--_text` is the row's ink at rest, which the row
239
+ * recedes itself while it loads or is disabled, and which a selection leaves
240
+ * alone, so a selected record keeps its figures in the page's ink.
241
+ */
242
+ [data-ui='data-list'] [data-part='trailing'] {
243
+ color: var(--_text, CanvasText);
244
+ font-variant-numeric: tabular-nums;
245
+ font-weight: var(--slotted-font-weight-medium, 500);
246
+ overflow-wrap: anywhere;
247
+ text-align: end;
248
+ }
249
+
250
+ /**
251
+ * ── The fields ─────────────────────────────────────────────────────────
252
+ *
253
+ * The pop-in's geometry, so a record reads the same in `data-grid` on a
254
+ * phone and here: as many columns of nine rems as the body holds, the label
255
+ * over the value. `description-list` answers the same pair at panel
256
+ * thresholds and gives a phone one stacked column; the contract says why the
257
+ * pair is drawn here instead.
258
+ */
259
+ /**
260
+ * The fields and their disclosure are children of the row's content box and
261
+ * take its grid from the text column to the end, under the trailing value
262
+ * as well as under the title: inside the text column the trailing figure
263
+ * took a hundred pixels from every line of fields, and a phone's record
264
+ * fell to one squeezed column with its dates broken in two. Below
265
+ * `list-item`'s 22rem the grid has two columns and `-1` still names its end.
266
+ */
267
+ [data-ui='data-list']
268
+ [data-ui='list-item']
269
+ > [data-part='content']
270
+ > :is([data-part='fields'], [data-part='more']) {
271
+ grid-column: 2 / -1;
272
+ }
273
+
274
+ /* Below `list-item`'s own 22rem the leading column holds only the chooser
275
+ and the picture, and the fields take the row from its start edge: indented
276
+ under them the fields of a 240-pixel record were eleven rems wide. The
277
+ pop-in makes the same move below 600 pixels. */
278
+ @container slotted-list-item (max-inline-size: 22rem) {
279
+ [data-ui='data-list']
280
+ [data-ui='list-item']
281
+ > [data-part='content']
282
+ > :is([data-part='fields'], [data-part='more']) {
283
+ grid-column: 1 / -1;
284
+ }
285
+ }
286
+
287
+ /* The box is a query container for its pairs. Its own tracks need no query:
288
+ `auto-fill` already gives one column below eighteen rems. */
289
+ [data-ui='data-list'] [data-part='fields'] {
290
+ column-gap: var(--slotted-space-4, 0.5rem);
291
+ container: slotted-data-list-fields / inline-size;
292
+ display: grid;
293
+ grid-template-columns: repeat(auto-fill, minmax(min(var(--_field-min), 100%), 1fr));
294
+ margin-block: var(--slotted-space-2, 0.25rem) 0;
295
+ margin-inline: 0;
296
+ padding: 0;
297
+ row-gap: var(--slotted-space-2, 0.25rem);
298
+ }
299
+
300
+ [data-ui='data-list'] [data-part='field'] {
301
+ display: flex;
302
+ flex-direction: column;
303
+ margin: 0;
304
+ min-inline-size: 0;
305
+ }
306
+
307
+ [data-ui='data-list'] [data-part='field-label'] {
308
+ color: var(--_muted, GrayText);
309
+ font-size: var(--slotted-font-size-xs, 0.75rem);
310
+ font-weight: var(--slotted-font-weight-regular, 400);
311
+ line-height: var(--slotted-line-height-xs, 1.4);
312
+ margin: 0;
313
+ /* A label breaks between its words and inside one only when the word
314
+ alone is wider than the track: `anywhere` broke `Created` into two. */
315
+ overflow-wrap: break-word;
316
+ }
317
+
318
+ /* The value is the row's own ink and size, and it wraps: a field has no
319
+ other way to show what it holds, so it never truncates. */
320
+ [data-ui='data-list'] [data-part='field-value'] {
321
+ color: var(--_text, CanvasText);
322
+ font-weight: var(--slotted-font-weight-regular, 400);
323
+ line-height: var(--slotted-line-height-md, 1.5);
324
+ margin: 0;
325
+ min-inline-size: 0;
326
+ overflow-wrap: anywhere;
327
+ /* A value in another script takes its own direction and leaves the pairs
328
+ around it alone, as `list-item`'s title does. `plaintext` also moves
329
+ `start` to the value's own direction, and an English value in a
330
+ right-to-left record was set against the far edge, away from its label;
331
+ `match-parent` keeps the column on the record's start. */
332
+ text-align: match-parent;
333
+ unicode-bidi: plaintext;
334
+ }
335
+
336
+ [data-ui='data-list'] [data-part='field-value'][data-numeric] {
337
+ font-variant-numeric: tabular-nums;
338
+ }
339
+
340
+ /* `—` is written by both bindings; the sheet only lowers its ink, the rule
341
+ `description-list` settled for the same mark. */
342
+ [data-ui='data-list'] [data-part='field-empty'] {
343
+ color: var(--_muted, GrayText);
344
+ }
345
+
346
+ /**
347
+ * One field to a line: the label beside the value, on the value's line. The
348
+ * label's track is the pop-in's seven and a half rems, capped at a third and a little more (35%)
349
+ * of the box, so a long label wraps and the value keeps its line. Below
350
+ * twelve rems that share is under four and a half, a label broke inside its own word
351
+ * and a date took two lines, so the pair returns to the label over the value.
352
+ */
353
+ @container slotted-data-list-fields (min-inline-size: 12rem) and (max-inline-size: 19rem) {
354
+ [data-ui='data-list'] [data-part='field'] {
355
+ align-items: baseline;
356
+ column-gap: var(--slotted-space-3, 0.375rem);
357
+ display: grid;
358
+ grid-template-columns: minmax(0, min(var(--_field-label-inline), 35%)) minmax(0, 1fr);
359
+ }
360
+ }
361
+
362
+ /**
363
+ * The disclosure for the fields past the first few. It is text rather than
364
+ * a control-sized button, because it belongs to the record's text; its box
365
+ * still reaches the 24-pixel target.
366
+ */
367
+ [data-ui='data-list'] [data-part='more'] {
368
+ align-items: center;
369
+ appearance: none;
370
+ background: none;
371
+ border: 0;
372
+ border-radius: var(--slotted-radius-sm, 4px);
373
+ color: var(--slotted-tone-accent-text, LinkText);
374
+ cursor: pointer;
375
+ display: inline-flex;
376
+ font: inherit;
377
+ font-size: var(--slotted-control-font-size-sm, 12px);
378
+ font-weight: var(--slotted-font-weight-medium, 500);
379
+ gap: var(--slotted-space-2, 0.25rem);
380
+ justify-self: start;
381
+ margin-block-start: var(--slotted-space-1, 0.125rem);
382
+ min-block-size: var(--slotted-target-min, 24px);
383
+ padding: 0;
384
+ }
385
+
386
+ /* The chevron is the `Glyph` the binding draws after the words; it turns a
387
+ half turn once the fields are shown. */
388
+ [data-ui='data-list'] [data-part='more'] > [data-ui='icon'] {
389
+ transition: transform var(--_transition);
390
+ }
391
+
392
+ [data-ui='data-list'] [data-part='more'][aria-expanded='true'] > [data-ui='icon'] {
393
+ transform: rotate(180deg);
394
+ }
395
+
396
+ [data-ui='data-list'] [data-part='more']:not(:disabled):hover {
397
+ text-decoration: underline;
398
+ text-decoration-thickness: from-font;
399
+ text-underline-offset: 0.2em;
400
+ }
401
+
402
+ [data-ui='data-list'] [data-part='more']:focus-visible {
403
+ outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
404
+ outline-offset: var(--slotted-focus-ring-offset, 2px);
405
+ }
406
+
407
+ [data-ui='data-list'] [data-ui='list-item'][data-disabled] [data-part='more'] {
408
+ color: var(--slotted-disabled-foreground, GrayText);
409
+ }
410
+
411
+ /**
412
+ * ── Refreshing, empty, loading, footer ─────────────────────────────────
413
+ *
414
+ * Over rows already shown the rows stay and recede, and nothing moves:
415
+ * `data-grid`'s rule for the same wait, at the same strength.
416
+ */
417
+ [data-ui='data-list'][aria-busy='true'] > [data-ui='list'] {
418
+ opacity: 0.55;
419
+ pointer-events: none;
420
+ transition: opacity var(--_transition);
421
+ }
422
+
423
+ [data-ui='data-list'] > [data-part='empty'] {
424
+ padding-block: var(--slotted-space-8, 1.5rem);
425
+ padding-inline: var(--_pad-inline);
426
+ }
427
+
428
+ [data-ui='data-list'] > [data-part='loader'] {
429
+ display: block;
430
+ }
431
+
432
+ /* A skeleton record's lines stand where the text will: the title's at the
433
+ title's size, the description's under it. */
434
+ [data-ui='data-list'] > [data-part='loader'] [data-part='field-value'] [data-ui='skeleton'] {
435
+ vertical-align: middle;
436
+ }
437
+
438
+ [data-ui='data-list'] > [data-part='footer'] {
439
+ align-items: center;
440
+ display: flex;
441
+ flex-wrap: wrap;
442
+ gap: var(--_gap);
443
+ justify-content: center;
444
+ padding-block: var(--slotted-space-4, 0.5rem);
445
+ padding-inline: var(--_pad-inline);
446
+ }
447
+
448
+ [data-ui='data-list'] > [data-part='footer']:empty {
449
+ display: none;
450
+ }
451
+
452
+ [data-ui='data-list'] [data-part='load-more'] {
453
+ display: inline-flex;
454
+ }
455
+ }
@@ -0,0 +1,35 @@
1
+ [
2
+ "--slotted-border-subtle",
3
+ "--slotted-border-width-thin",
4
+ "--slotted-control-font-size-sm",
5
+ "--slotted-control-gap-lg",
6
+ "--slotted-control-gap-md",
7
+ "--slotted-control-gap-sm",
8
+ "--slotted-control-height-md",
9
+ "--slotted-control-padding-inline-lg",
10
+ "--slotted-control-padding-inline-md",
11
+ "--slotted-control-padding-inline-sm",
12
+ "--slotted-disabled-foreground",
13
+ "--slotted-duration-short",
14
+ "--slotted-easing-standard",
15
+ "--slotted-focus-ring-color",
16
+ "--slotted-focus-ring-offset",
17
+ "--slotted-focus-ring-width",
18
+ "--slotted-font-family-sans",
19
+ "--slotted-font-size-xs",
20
+ "--slotted-font-weight-medium",
21
+ "--slotted-font-weight-regular",
22
+ "--slotted-line-height-md",
23
+ "--slotted-line-height-sm",
24
+ "--slotted-line-height-xs",
25
+ "--slotted-radius-sm",
26
+ "--slotted-space-1",
27
+ "--slotted-space-2",
28
+ "--slotted-space-3",
29
+ "--slotted-space-4",
30
+ "--slotted-space-8",
31
+ "--slotted-target-min",
32
+ "--slotted-text",
33
+ "--slotted-text-muted",
34
+ "--slotted-tone-accent-text"
35
+ ]