@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,66 @@
1
+ [
2
+ "--slotted-border-subtle",
3
+ "--slotted-border-width-thin",
4
+ "--slotted-control-font-size-md",
5
+ "--slotted-control-gap-md",
6
+ "--slotted-control-icon-size-md",
7
+ "--slotted-control-padding-inline-md",
8
+ "--slotted-control-radius",
9
+ "--slotted-control-transition-duration",
10
+ "--slotted-control-transition-easing",
11
+ "--slotted-description-list-cell-padding-block",
12
+ "--slotted-description-list-cell-padding-inline",
13
+ "--slotted-description-list-clamp",
14
+ "--slotted-description-list-color",
15
+ "--slotted-description-list-column-gap",
16
+ "--slotted-description-list-control-color",
17
+ "--slotted-description-list-control-color-complete",
18
+ "--slotted-description-list-control-color-hover",
19
+ "--slotted-description-list-control-surface-active",
20
+ "--slotted-description-list-control-surface-hover",
21
+ "--slotted-description-list-font-family",
22
+ "--slotted-description-list-font-size",
23
+ "--slotted-description-list-frame-radius",
24
+ "--slotted-description-list-glyph-size",
25
+ "--slotted-description-list-group-gap",
26
+ "--slotted-description-list-hint-color",
27
+ "--slotted-description-list-hint-font-size",
28
+ "--slotted-description-list-line-height",
29
+ "--slotted-description-list-placeholder-color",
30
+ "--slotted-description-list-radius",
31
+ "--slotted-description-list-row-gap",
32
+ "--slotted-description-list-rule-color",
33
+ "--slotted-description-list-stack-gap",
34
+ "--slotted-description-list-surface",
35
+ "--slotted-description-list-term-color",
36
+ "--slotted-description-list-term-min",
37
+ "--slotted-description-list-term-surface",
38
+ "--slotted-description-list-term-weight",
39
+ "--slotted-description-list-term-width",
40
+ "--slotted-description-list-toggle-color",
41
+ "--slotted-description-list-underline-offset",
42
+ "--slotted-focus-ring-color",
43
+ "--slotted-focus-ring-offset",
44
+ "--slotted-focus-ring-width",
45
+ "--slotted-font-family-sans",
46
+ "--slotted-font-size-xs",
47
+ "--slotted-font-weight-medium",
48
+ "--slotted-font-weight-regular",
49
+ "--slotted-line-height-md",
50
+ "--slotted-line-height-xs",
51
+ "--slotted-radius-md",
52
+ "--slotted-space-1",
53
+ "--slotted-space-2",
54
+ "--slotted-space-3",
55
+ "--slotted-space-4",
56
+ "--slotted-surface",
57
+ "--slotted-surface-sunken",
58
+ "--slotted-target-comfortable",
59
+ "--slotted-target-min",
60
+ "--slotted-text",
61
+ "--slotted-text-muted",
62
+ "--slotted-tone-accent-text",
63
+ "--slotted-tone-secondary-subtle-active",
64
+ "--slotted-tone-secondary-subtle-hover",
65
+ "--slotted-tone-success-text"
66
+ ]
@@ -0,0 +1,329 @@
1
+ @layer slotted.components {
2
+ /**
3
+ * One record on screen. The top is `page-header`'s, the strip is `tabs`'s,
4
+ * a stacked unit is `section`'s, the waiting shape is `skeleton`'s and the
5
+ * column the content stands in is `container`'s; what this stylesheet
6
+ * draws is the two columns of the body, the rhythm between sections, the
7
+ * tabpanel a section becomes under `layout=tabs`, the message a missing
8
+ * record leaves, and the footer that stays.
9
+ *
10
+ * article ─────────────────────────────────────────────┐
11
+ * │ page-header (its own sticky rule; the strip in its │
12
+ * │ tabs slot) │
13
+ * ├─ body ▸ container ───────────────────────────────────┤
14
+ * │ banner │
15
+ * │ columns ▸ main ▸ section … │ aside │
16
+ * │ message (in place of columns under status ≠ ready) │
17
+ * ├─ footer (sticky at the bottom) ───────────────────── ┤
18
+ * └──────────────────────────────────────────────────────┘
19
+ *
20
+ * The root is the query container and the columns are three elements in, so
21
+ * the query can change their tracks (`docs/build-briefing.md`, _Decisions
22
+ * already taken_). The container between them is what aligns the body
23
+ * with the header's own container in every host: inside a page both read
24
+ * the page's width and inset, and in a drawer both fill it at one rem.
25
+ *
26
+ * Every part is reached from the part that owns it with a child
27
+ * combinator, because the content is other families — a section has a
28
+ * `body`, a description-list has a `description`, a result-state has a
29
+ * `message` — and a descendant rule would restyle theirs.
30
+ */
31
+ [data-ui='detail-panel'] {
32
+ --_text: var(--slotted-text, CanvasText);
33
+ --_muted: var(--slotted-text-muted, GrayText);
34
+ --_rule: var(--slotted-detail-panel-border, var(--slotted-border-subtle, ButtonBorder));
35
+ /**
36
+ * The ground the sticky footer paints, so what scrolls under it is
37
+ * covered. Inside a page it is the page's own; outside, the surface.
38
+ */
39
+ --_ground: var(--slotted-page-ground, var(--slotted-surface, Canvas));
40
+ /**
41
+ * The aside's track. Sixteen rem is Primer's minimum pane — 256 pixels,
42
+ * enough for a label and a name on one line — and the steps either side
43
+ * are two rem apart, which is what one type step moves a two-word label
44
+ * by. There is no token for a column's width; `drawer` states its extents
45
+ * the same way.
46
+ */
47
+ --_aside-size: var(--slotted-detail-panel-aside-size-md, 16rem);
48
+ /** Between the two columns, and between the aside's rule and its text. */
49
+ --_gap: var(--slotted-detail-panel-gap-md, var(--slotted-space-8, 1.5rem));
50
+ /** Between two stacked sections, and between the banner and the body. */
51
+ --_rhythm: var(--slotted-detail-panel-rhythm, var(--slotted-space-8, 1.5rem));
52
+ /**
53
+ * Above the first thing in the column and below the last. A step more
54
+ * than the gap a section gives its own header, because the page-header's
55
+ * pill of controls straddles the chrome's edge and hangs half its height
56
+ * into the column: at a step less the first eyebrow met the pill.
57
+ */
58
+ --_inset-block: var(--slotted-detail-panel-inset-block-md, var(--slotted-space-8, 1.5rem));
59
+ --_rule-size: var(--slotted-border-width-thin, 1px);
60
+
61
+ color: var(--_text);
62
+ container-name: detail-panel;
63
+ container-type: inline-size;
64
+ display: flex;
65
+ flex-direction: column;
66
+ font-family: var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);
67
+ min-inline-size: 0;
68
+ position: relative;
69
+ }
70
+
71
+ [data-ui='detail-panel'][data-size='sm'] {
72
+ --_aside-size: var(--slotted-detail-panel-aside-size-sm, 14rem);
73
+ --_gap: var(--slotted-detail-panel-gap-sm, var(--slotted-space-7, 1.25rem));
74
+ --_inset-block: var(--slotted-detail-panel-inset-block-sm, var(--slotted-space-7, 1.25rem));
75
+ }
76
+
77
+ [data-ui='detail-panel'][data-size='lg'] {
78
+ --_aside-size: var(--slotted-detail-panel-aside-size-lg, 18rem);
79
+ --_gap: var(--slotted-detail-panel-gap-lg, var(--slotted-space-9, 2rem));
80
+ --_inset-block: var(--slotted-detail-panel-inset-block-lg, var(--slotted-space-9, 2rem));
81
+ }
82
+
83
+ /**
84
+ * The root is the scroll container: a pane of a split, a card with a
85
+ * height. The page-header then sticks inside it, and a flex parent may
86
+ * shrink it, which `min-block-size: 0` is what allows. `overscroll-behavior`
87
+ * keeps a wheel at the end of the record from scrolling the page behind.
88
+ */
89
+ [data-ui='detail-panel'][data-scroll='self'] {
90
+ block-size: 100%;
91
+ min-block-size: 0;
92
+ overflow: auto;
93
+ overscroll-behavior: contain;
94
+ }
95
+
96
+ /* ── The column ──────────────────────────────────────────────────────── */
97
+
98
+ /**
99
+ * The body takes the vertical inset and grows to push the footer to the
100
+ * bottom when the record is shorter than its host. Inside it the container
101
+ * is `container`'s own grid — its children land in the content track — so
102
+ * the banner, the columns and the message share one column and one rhythm.
103
+ */
104
+ [data-ui='detail-panel'] > [data-part='body'] {
105
+ display: flex;
106
+ flex: 1 0 auto;
107
+ flex-direction: column;
108
+ min-inline-size: 0;
109
+ padding-block: var(--_inset-block);
110
+ }
111
+
112
+ [data-ui='detail-panel'] > [data-part='body'] > [data-ui='container'] {
113
+ row-gap: var(--_rhythm);
114
+ }
115
+
116
+ [data-ui='detail-panel'] > [data-part='body'] > [data-ui='container'] > [data-part='banner'] {
117
+ min-inline-size: 0;
118
+ }
119
+
120
+ /* ── The columns ─────────────────────────────────────────────────────── */
121
+
122
+ [data-ui='detail-panel'] > [data-part='body'] > [data-ui='container'] > [data-part='columns'] {
123
+ display: grid;
124
+ gap: var(--_gap);
125
+ grid-template-columns: minmax(0, 1fr);
126
+ min-inline-size: 0;
127
+ }
128
+
129
+ [data-ui='detail-panel']
130
+ > [data-part='body']
131
+ > [data-ui='container']
132
+ > [data-part='columns']
133
+ > [data-part='main'] {
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: var(--_rhythm);
137
+ min-inline-size: 0;
138
+ }
139
+
140
+ /**
141
+ * Narrow, the aside follows the main column in the flow with a rule above
142
+ * it — the reading order it already has. `overflow-wrap` is for the value
143
+ * with no spaces, an identifier or a URL, which would otherwise widen the
144
+ * column past the record.
145
+ */
146
+ [data-ui='detail-panel']
147
+ > [data-part='body']
148
+ > [data-ui='container']
149
+ > [data-part='columns']
150
+ > [data-part='aside'] {
151
+ border-block-start: var(--_rule-size) solid var(--_rule);
152
+ min-inline-size: 0;
153
+ overflow-wrap: anywhere;
154
+ padding-block-start: var(--_gap);
155
+ }
156
+
157
+ /**
158
+ * Above 600 pixels of the root's own width the aside stands beside the
159
+ * body in the column its axis names, separated by a rule at the gap's
160
+ * distance from both. The text-to-rule and the main-to-rule distances are
161
+ * the same number, so the rule reads as the middle of the gap rather than
162
+ * as an edge of the aside.
163
+ */
164
+ @container detail-panel (min-width: 600px) {
165
+ [data-ui='detail-panel'] > [data-part='body'] > [data-ui='container'] > [data-part='columns'] {
166
+ grid-template-columns: minmax(0, 1fr) var(--_aside-size);
167
+ }
168
+
169
+ [data-ui='detail-panel'][data-aside='start']
170
+ > [data-part='body']
171
+ > [data-ui='container']
172
+ > [data-part='columns'] {
173
+ grid-template-columns: var(--_aside-size) minmax(0, 1fr);
174
+ }
175
+
176
+ [data-ui='detail-panel'][data-aside='none']
177
+ > [data-part='body']
178
+ > [data-ui='container']
179
+ > [data-part='columns'] {
180
+ grid-template-columns: minmax(0, 1fr);
181
+ }
182
+
183
+ [data-ui='detail-panel']
184
+ > [data-part='body']
185
+ > [data-ui='container']
186
+ > [data-part='columns']
187
+ > [data-part='aside'] {
188
+ border-block-start: 0;
189
+ border-inline-start: var(--_rule-size) solid var(--_rule);
190
+ padding-block-start: 0;
191
+ padding-inline-start: var(--_gap);
192
+ }
193
+
194
+ [data-ui='detail-panel'][data-aside='start']
195
+ > [data-part='body']
196
+ > [data-ui='container']
197
+ > [data-part='columns']
198
+ > [data-part='aside'] {
199
+ border-inline-end: var(--_rule-size) solid var(--_rule);
200
+ border-inline-start: 0;
201
+ order: -1;
202
+ padding-inline-end: var(--_gap);
203
+ padding-inline-start: 0;
204
+ }
205
+ }
206
+
207
+ /* ── A section ───────────────────────────────────────────────────────── */
208
+
209
+ /**
210
+ * A hash link or a programmatic `section` lands the unit under the page
211
+ * chrome rather than behind it: the page-header republishes where its
212
+ * chrome ends, and the section reads it.
213
+ */
214
+ [data-ui='detail-panel']
215
+ > [data-part='body']
216
+ > [data-ui='container']
217
+ > [data-part='columns']
218
+ > [data-part='main']
219
+ > [data-part='section'] {
220
+ min-inline-size: 0;
221
+ scroll-margin-block-start: var(--slotted-page-sticky-top, 0px);
222
+ }
223
+
224
+ /**
225
+ * Under `layout=tabs` the section is the tabpanel of the strip's tab.
226
+ * `[hidden]` carries `display: none` from the user-agent sheet at a
227
+ * specificity any rule here would beat, so the attribute is restated.
228
+ */
229
+ [data-ui='detail-panel']
230
+ > [data-part='body']
231
+ > [data-ui='container']
232
+ > [data-part='columns']
233
+ > [data-part='main']
234
+ > [data-part='section'][hidden] {
235
+ display: none;
236
+ }
237
+
238
+ /**
239
+ * The panel is in the page's tab sequence, which is where `Tab` from the
240
+ * strip goes. Its ring is the library's outward one, as `tabs` draws on its
241
+ * own panel: the section holds the consumer's content and has no inset of
242
+ * its own, so an inset ring would be drawn through its first line.
243
+ */
244
+ [data-ui='detail-panel']
245
+ > [data-part='body']
246
+ > [data-ui='container']
247
+ > [data-part='columns']
248
+ > [data-part='main']
249
+ > [data-part='section'][role='tabpanel']:focus-visible {
250
+ outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
251
+ outline-offset: var(--slotted-focus-ring-offset, 2px);
252
+ }
253
+
254
+ /**
255
+ * A section arriving under `tabs` fades in — the one transition drawn on
256
+ * content rather than on a control, and the same one `tabs` draws on its
257
+ * panel, because the section is the thing that changed. Under `stacked`
258
+ * nothing arrives, so nothing moves.
259
+ */
260
+ [data-ui='detail-panel'][data-layout='tabs']
261
+ > [data-part='body']
262
+ > [data-ui='container']
263
+ > [data-part='columns']
264
+ > [data-part='main']
265
+ > [data-part='section']:not([hidden]) {
266
+ animation: slotted-detail-panel-section-in var(--slotted-duration-short)
267
+ var(--slotted-easing-enter);
268
+ }
269
+
270
+ @keyframes slotted-detail-panel-section-in {
271
+ from {
272
+ opacity: 0;
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Under `tabs` the section has no heading — the tab is its name — and its
278
+ * own controls sit in a row at the inline end, above the content, where a
279
+ * stacked section's actions column would have put them.
280
+ */
281
+ [data-ui='detail-panel']
282
+ > [data-part='body']
283
+ > [data-ui='container']
284
+ > [data-part='columns']
285
+ > [data-part='main']
286
+ > [data-part='section']
287
+ > [data-part='section-actions'] {
288
+ align-items: center;
289
+ display: flex;
290
+ flex-wrap: wrap;
291
+ gap: var(--slotted-control-gap-md, 8px);
292
+ justify-content: flex-end;
293
+ margin-block-end: var(--slotted-space-5, 0.75rem);
294
+ }
295
+
296
+ /* ── The message ─────────────────────────────────────────────────────── */
297
+
298
+ /**
299
+ * In place of the columns when the record is not there. Tall enough that a
300
+ * result-state reads as the record's absence rather than as a note under
301
+ * the header: four of the largest space step, which is the height of a
302
+ * short record.
303
+ */
304
+ [data-ui='detail-panel'] > [data-part='body'] > [data-ui='container'] > [data-part='message'] {
305
+ display: grid;
306
+ min-block-size: calc(4 * var(--slotted-space-12, 4rem));
307
+ min-inline-size: 0;
308
+ place-items: center;
309
+ }
310
+
311
+ /* ── The footer ──────────────────────────────────────────────────────── */
312
+
313
+ /**
314
+ * Stays at the bottom of whatever scrolls, under the chrome a page
315
+ * publishes there, painted so the content passing under it is covered.
316
+ * `margin-block-start: auto` puts it at the bottom of a record shorter
317
+ * than its host, and the container inside aligns its actions with the
318
+ * column above.
319
+ */
320
+ [data-ui='detail-panel'] > [data-part='footer'] {
321
+ background-color: var(--_ground);
322
+ border-block-start: var(--_rule-size) solid var(--_rule);
323
+ inset-block-end: var(--slotted-page-sticky-bottom, 0px);
324
+ margin-block-start: auto;
325
+ padding-block: var(--slotted-space-4, 0.5rem);
326
+ position: sticky;
327
+ z-index: var(--slotted-z-index-sticky, 100);
328
+ }
329
+ }
@@ -0,0 +1,33 @@
1
+ [
2
+ "--slotted-border-subtle",
3
+ "--slotted-border-width-thin",
4
+ "--slotted-control-gap-md",
5
+ "--slotted-detail-panel-aside-size-lg",
6
+ "--slotted-detail-panel-aside-size-md",
7
+ "--slotted-detail-panel-aside-size-sm",
8
+ "--slotted-detail-panel-border",
9
+ "--slotted-detail-panel-gap-lg",
10
+ "--slotted-detail-panel-gap-md",
11
+ "--slotted-detail-panel-gap-sm",
12
+ "--slotted-detail-panel-inset-block-lg",
13
+ "--slotted-detail-panel-inset-block-md",
14
+ "--slotted-detail-panel-inset-block-sm",
15
+ "--slotted-detail-panel-rhythm",
16
+ "--slotted-duration-short",
17
+ "--slotted-easing-enter",
18
+ "--slotted-focus-ring-color",
19
+ "--slotted-focus-ring-offset",
20
+ "--slotted-focus-ring-width",
21
+ "--slotted-font-family-sans",
22
+ "--slotted-page-ground",
23
+ "--slotted-space-12",
24
+ "--slotted-space-4",
25
+ "--slotted-space-5",
26
+ "--slotted-space-7",
27
+ "--slotted-space-8",
28
+ "--slotted-space-9",
29
+ "--slotted-surface",
30
+ "--slotted-text",
31
+ "--slotted-text-muted",
32
+ "--slotted-z-index-sticky"
33
+ ]