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

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,394 @@
1
+ @layer slotted.components {
2
+ /**
3
+ * The named views of a grid, and the one in use.
4
+ *
5
+ * root ▸ trigger (name · modified · chevron) · revert
6
+ *
7
+ * panel (in the popover)
8
+ * ┌──────────────────────────────────────┐
9
+ * │ list ▸ item ▸ apply (✓ name ⌖) actions│
10
+ * │ item ▸ form | confirm │
11
+ * │ form (save as) │
12
+ * │ footer ▸ Save as new view… · Save │
13
+ * └──────────────────────────────────────┘
14
+ *
15
+ * The panel is portalled out of the root, so it carries the family's
16
+ * `data-ui` itself — the answer `filter-bar`'s rule and `table`'s filter
17
+ * panel already give — and the locals below are declared on both. The
18
+ * buttons, the field and the menu inside are their families', reached
19
+ * with child combinators so a `label` or a `root` of theirs is never
20
+ * restyled.
21
+ */
22
+ [data-ui='saved-views'] {
23
+ --_text: var(--slotted-text, CanvasText);
24
+ --_muted: var(--slotted-text-muted, GrayText);
25
+ --_hover: var(--slotted-tone-secondary-subtle-hover, ButtonFace);
26
+ --_active: var(--slotted-tone-secondary-subtle-active, ButtonFace);
27
+ --_height: var(--slotted-control-height-md, 34px);
28
+ --_height-sm: var(--slotted-control-height-sm, 30px);
29
+ --_padding-inline: var(--slotted-control-padding-inline-md, 13px);
30
+ --_gap: var(--slotted-control-gap-md, 8px);
31
+ --_font-size: var(--slotted-control-font-size-md, 13px);
32
+ --_icon-size: var(--slotted-control-icon-size-md, 16px);
33
+ --_icon-size-sm: var(--slotted-control-icon-size-sm, 14px);
34
+ --_radius: var(--slotted-control-radius, 4px);
35
+ --_duration: var(--slotted-control-transition-duration);
36
+ --_easing: var(--slotted-control-transition-easing);
37
+
38
+ box-sizing: border-box;
39
+ color: var(--_text);
40
+ font-family: var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif);
41
+ font-size: var(--_font-size);
42
+ line-height: var(--slotted-line-height-md, 1.5);
43
+ }
44
+
45
+ /* ── The row on the page ─────────────────────────────────────────────── */
46
+
47
+ /**
48
+ * The trigger and revert on one row that wraps: at 240 pixels the revert
49
+ * control drops under the trigger rather than pushing it out of the box.
50
+ */
51
+ [data-ui='saved-views'][data-part='root'] {
52
+ display: inline-flex;
53
+ flex-wrap: wrap;
54
+ align-items: center;
55
+ gap: var(--slotted-space-3, 0.375rem);
56
+ min-inline-size: 0;
57
+ max-inline-size: 100%;
58
+ }
59
+
60
+ /**
61
+ * A control at rest, as a select's closed control is: the resting edge, the
62
+ * control shadow and the control surface, so the view in use reads as a
63
+ * value the reader can change rather than as a heading.
64
+ */
65
+ [data-ui='saved-views'] > [data-part='trigger'] {
66
+ display: inline-flex;
67
+ align-items: center;
68
+ gap: var(--_gap);
69
+ box-sizing: border-box;
70
+ min-inline-size: 0;
71
+ max-inline-size: 100%;
72
+ min-block-size: var(--_height);
73
+ margin: 0;
74
+ padding-block: 0;
75
+ padding-inline: var(--_padding-inline);
76
+ border: var(--slotted-control-border-width, 1px) solid
77
+ var(--slotted-control-border-color, ButtonBorder);
78
+ border-radius: var(--_radius);
79
+ background: var(--slotted-control-surface, Canvas);
80
+ box-shadow: var(--slotted-control-shadow, none);
81
+ color: var(--_text);
82
+ font: inherit;
83
+ font-weight: var(--slotted-font-weight-medium, 500);
84
+ cursor: pointer;
85
+ transition: background-color var(--_duration) var(--_easing);
86
+ }
87
+
88
+ /** Truncated on one line; the whole name stays in the DOM and in the button's name. */
89
+ [data-ui='saved-views'] > [data-part='trigger'] > [data-label] {
90
+ min-inline-size: 0;
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ white-space: nowrap;
94
+ }
95
+
96
+ /** The chevron, an `icon` after the name, turning over while the layer is open. */
97
+ [data-ui='saved-views'] > [data-part='trigger'] > [data-ui='icon'] {
98
+ margin-inline-end: calc(var(--slotted-space-2, 0.25rem) * -1);
99
+ color: var(--_muted);
100
+ transition: rotate var(--_duration) var(--_easing);
101
+ }
102
+
103
+ [data-ui='saved-views'][data-open] > [data-part='trigger'] > [data-ui='icon'] {
104
+ rotate: 180deg;
105
+ }
106
+
107
+ [data-ui='saved-views'] > [data-part='trigger']:hover:not(:disabled) {
108
+ background: var(--_hover);
109
+ }
110
+
111
+ [data-ui='saved-views'] > [data-part='trigger']:active:not(:disabled) {
112
+ background: var(--_active);
113
+ transition-duration: var(--slotted-duration-instant);
114
+ }
115
+
116
+ /**
117
+ * The mark: a dot in the accent solid and the word, in the muted ink and
118
+ * the regular weight, so the name stays the loudest thing in the control
119
+ * and the state is never colour alone.
120
+ */
121
+ [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified'] {
122
+ display: inline-flex;
123
+ flex: none;
124
+ align-items: center;
125
+ gap: var(--slotted-space-2, 0.25rem);
126
+ color: var(--_muted);
127
+ /* The trigger's own size: the type scale's small step is larger than the
128
+ control's text at dense, and the mark outgrew the name it qualifies. */
129
+ font-size: inherit;
130
+ font-weight: var(--slotted-font-weight-regular, 400);
131
+ }
132
+
133
+ [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified']::before {
134
+ content: '';
135
+ flex: none;
136
+ inline-size: var(--slotted-space-4, 0.5rem);
137
+ block-size: var(--slotted-space-4, 0.5rem);
138
+ border-radius: var(--slotted-radius-full, 9999px);
139
+ background-color: var(--slotted-tone-accent-solid);
140
+ }
141
+
142
+ /** Revert: a ghost control with the counter-clockwise arrow, at the trigger's height. */
143
+ [data-ui='saved-views'] > [data-part='revert'] {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ gap: var(--slotted-space-3, 0.375rem);
147
+ box-sizing: border-box;
148
+ min-block-size: var(--_height);
149
+ margin: 0;
150
+ padding-block: 0;
151
+ padding-inline: var(--slotted-space-4, 0.5rem);
152
+ border: var(--slotted-control-border-width, 1px) solid transparent;
153
+ border-radius: var(--_radius);
154
+ background: transparent;
155
+ color: var(--slotted-tone-accent-text, LinkText);
156
+ font: inherit;
157
+ font-weight: var(--slotted-font-weight-medium, 500);
158
+ cursor: pointer;
159
+ transition: background-color var(--_duration) var(--_easing);
160
+ }
161
+
162
+ [data-ui='saved-views'] > [data-part='revert']:hover:not(:disabled) {
163
+ background: var(--slotted-tone-accent-subtle-hover, ButtonFace);
164
+ }
165
+
166
+ [data-ui='saved-views'] > [data-part='revert']:active:not(:disabled) {
167
+ background: var(--slotted-tone-accent-subtle-active, ButtonFace);
168
+ transition-duration: var(--slotted-duration-instant);
169
+ }
170
+
171
+ [data-ui='saved-views'] > [data-part='trigger']:focus-visible,
172
+ [data-ui='saved-views'] > [data-part='revert']:focus-visible {
173
+ outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
174
+ outline-offset: var(--slotted-focus-ring-offset, 2px);
175
+ }
176
+
177
+ /* ── The panel ───────────────────────────────────────────────────────── */
178
+
179
+ /**
180
+ * A width of its own, for the reason `filter-bar`'s editor has one: a
181
+ * popover shrink-wraps, and a list that took the width of its longest name
182
+ * would change width as views are renamed. The padding keeps a row's hover
183
+ * ground off the popover's rounded edge.
184
+ */
185
+ [data-ui='saved-views'][data-part='panel'] {
186
+ display: grid;
187
+ /* One track that grows to the token and gives way to zero: the panel's
188
+ min-content is nothing and its max-content the token, so a popover
189
+ with less room than 18rem narrows the panel instead of clipping it. */
190
+ grid-template-columns: minmax(0, var(--slotted-saved-views-panel-inline-size, 18rem));
191
+ gap: var(--slotted-space-4, 0.5rem);
192
+ max-inline-size: 100%;
193
+ padding: var(--slotted-space-2, 0.25rem);
194
+ }
195
+
196
+ [data-ui='saved-views'][data-part='panel'] > [data-part='list'] {
197
+ display: grid;
198
+ gap: var(--slotted-space-1, 0.125rem);
199
+ margin: 0;
200
+ padding: 0;
201
+ list-style: none;
202
+ }
203
+
204
+ /** A row: the view's name across, its actions at the inline end. */
205
+ [data-ui='saved-views'][data-part='panel'] > [data-part='list'] > [data-part='item'] {
206
+ display: grid;
207
+ grid-template-columns: minmax(0, 1fr) auto;
208
+ align-items: start;
209
+ gap: var(--slotted-space-1, 0.125rem);
210
+ margin: 0;
211
+ }
212
+
213
+ [data-ui='saved-views'][data-part='panel']
214
+ > [data-part='list']
215
+ > [data-part='item'][data-editing] {
216
+ grid-template-columns: minmax(0, 1fr);
217
+ }
218
+
219
+ /**
220
+ * The view's name as a row-wide button: a column for the check the view in
221
+ * use carries, the name, then the default mark right after the name, on
222
+ * its first line.
223
+ * The check's column is reserved on every row, so the names line up: the
224
+ * binding draws the check on the view in use alone, and the name keeps the
225
+ * second column whether the check stands before it or not.
226
+ */
227
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply'] {
228
+ display: grid;
229
+ grid-template-columns: var(--_icon-size-sm) minmax(0, max-content) auto;
230
+ justify-content: start;
231
+ align-content: center;
232
+ /* The marks beside the name share its baseline: an empty box offers its
233
+ bottom edge, and each mark moves down from there onto the text band. */
234
+ align-items: baseline;
235
+ column-gap: var(--slotted-space-4, 0.5rem);
236
+ box-sizing: border-box;
237
+ inline-size: 100%;
238
+ min-block-size: var(--_height-sm);
239
+ margin: 0;
240
+ padding-block: var(--slotted-space-2, 0.25rem);
241
+ padding-inline: var(--slotted-space-4, 0.5rem);
242
+ border: 0;
243
+ border-radius: var(--_radius);
244
+ background: transparent;
245
+ color: var(--_text);
246
+ font: inherit;
247
+ text-align: start;
248
+ cursor: pointer;
249
+ transition: background-color var(--_duration) var(--_easing);
250
+ }
251
+
252
+ /**
253
+ * The check, an `icon` on the name's first line and on its text rather than
254
+ * its line box (`docs/build-briefing.md`, Decisions already taken). Its
255
+ * bottom sits on the baseline; the translate lowers it by half its size less
256
+ * half the band, the midpoint of cap height and x-height, so its centre is
257
+ * the band's.
258
+ */
259
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-ui='icon'] {
260
+ color: var(--slotted-tone-accent-text);
261
+ translate: 0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);
262
+ }
263
+
264
+ [data-ui='saved-views'][data-part='panel']
265
+ [data-part='item'][data-current]
266
+ > [data-part='apply'] {
267
+ font-weight: var(--slotted-font-weight-medium, 500);
268
+ }
269
+
270
+ /** A long name wraps inside the row; nothing is cut. */
271
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-label] {
272
+ grid-column: 2;
273
+ min-inline-size: 0;
274
+ overflow-wrap: anywhere;
275
+ }
276
+
277
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply']:hover:not(:disabled),
278
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions']:hover:not(:disabled) {
279
+ background: var(--_hover);
280
+ }
281
+
282
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply']:active:not(:disabled),
283
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions']:active:not(:disabled) {
284
+ background: var(--_active);
285
+ transition-duration: var(--slotted-duration-instant);
286
+ }
287
+
288
+ /** The pin: the view a visit opens on. The word beside it is for the ear only. */
289
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply'] > [data-part='default-mark'] {
290
+ /* A flex box, so the pin `icon` inside is laid out as an item and not on
291
+ a line of its own that would stand taller than the mark. */
292
+ display: flex;
293
+ position: relative;
294
+ inline-size: var(--_icon-size-sm);
295
+ block-size: var(--_icon-size-sm);
296
+ /* A mark of the name, not a third column: half the row's gap from it. */
297
+ margin-inline-start: calc(var(--slotted-space-2, 0.25rem) - var(--slotted-space-4, 0.5rem));
298
+ translate: 0 calc(var(--_icon-size-sm) / 2 - (1cap + 1ex) / 4);
299
+ color: var(--_muted);
300
+ }
301
+
302
+ [data-ui='saved-views'][data-part='panel']
303
+ [data-part='default-mark']
304
+ > span:not([data-ui='icon']) {
305
+ position: absolute;
306
+ inline-size: 1px;
307
+ block-size: 1px;
308
+ overflow: hidden;
309
+ clip-path: inset(50%);
310
+ white-space: nowrap;
311
+ }
312
+
313
+ /**
314
+ * The row's menu: a square at the small control height with the ellipsis
315
+ * `icon`, muted at rest and on the text ink under the pointer.
316
+ */
317
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions'] {
318
+ display: inline-grid;
319
+ place-items: center;
320
+ box-sizing: border-box;
321
+ inline-size: var(--_height-sm);
322
+ block-size: var(--_height-sm);
323
+ margin: 0;
324
+ padding: 0;
325
+ border: 0;
326
+ border-radius: var(--_radius);
327
+ background: transparent;
328
+ color: var(--_muted);
329
+ cursor: pointer;
330
+ transition:
331
+ background-color var(--_duration) var(--_easing),
332
+ color var(--_duration) var(--_easing);
333
+ }
334
+
335
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions'][data-open],
336
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions']:hover:not(:disabled) {
337
+ color: var(--_text);
338
+ }
339
+
340
+ /** Drawn inward: the rows sit one space step apart and an outward ring would cross the next. */
341
+ [data-ui='saved-views'][data-part='panel'] [data-part='apply']:focus-visible,
342
+ [data-ui='saved-views'][data-part='panel'] [data-part='actions']:focus-visible {
343
+ outline: var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);
344
+ outline-offset: calc(var(--slotted-focus-ring-offset, 2px) * -1);
345
+ }
346
+
347
+ /* ── Forms, confirmation, footer ─────────────────────────────────────── */
348
+
349
+ /**
350
+ * The name form, in a row for a rename and above the footer for a new
351
+ * view; and the confirmation, in the row being deleted. Both stand on the
352
+ * sunken surface so the row reads as one being edited.
353
+ */
354
+ [data-ui='saved-views'][data-part='panel'] [data-part='form'],
355
+ [data-ui='saved-views'][data-part='panel'] [data-part='confirm'] {
356
+ display: grid;
357
+ gap: var(--slotted-space-4, 0.5rem);
358
+ margin: 0;
359
+ padding: var(--slotted-space-4, 0.5rem);
360
+ border-radius: var(--_radius);
361
+ background: var(--slotted-surface-sunken, Canvas);
362
+ }
363
+
364
+ [data-ui='saved-views'][data-part='panel'] [data-part='confirm'] > p {
365
+ margin: 0;
366
+ overflow-wrap: anywhere;
367
+ }
368
+
369
+ [data-ui='saved-views'][data-part='panel']
370
+ :is([data-part='form'], [data-part='confirm'])
371
+ > [data-buttons] {
372
+ display: flex;
373
+ flex-wrap: wrap;
374
+ justify-content: flex-end;
375
+ gap: var(--slotted-space-3, 0.375rem);
376
+ }
377
+
378
+ /** Save as new view… then Save, at the inline end, under a rule. */
379
+ [data-ui='saved-views'][data-part='panel'] > [data-part='footer'] {
380
+ display: flex;
381
+ flex-wrap: wrap;
382
+ justify-content: flex-end;
383
+ gap: var(--slotted-space-3, 0.375rem);
384
+ padding-block-start: var(--slotted-space-4, 0.5rem);
385
+ border-block-start: var(--slotted-border-width-thin, 1px) solid
386
+ var(--slotted-border-subtle, transparent);
387
+ }
388
+
389
+ @media (forced-colors: active) {
390
+ [data-ui='saved-views'] > [data-part='trigger'] > [data-part='modified']::before {
391
+ forced-color-adjust: none;
392
+ }
393
+ }
394
+ }
@@ -0,0 +1,41 @@
1
+ [
2
+ "--slotted-border-subtle",
3
+ "--slotted-border-width-thin",
4
+ "--slotted-control-border-color",
5
+ "--slotted-control-border-width",
6
+ "--slotted-control-font-size-md",
7
+ "--slotted-control-gap-md",
8
+ "--slotted-control-height-md",
9
+ "--slotted-control-height-sm",
10
+ "--slotted-control-icon-size-md",
11
+ "--slotted-control-icon-size-sm",
12
+ "--slotted-control-padding-inline-md",
13
+ "--slotted-control-radius",
14
+ "--slotted-control-shadow",
15
+ "--slotted-control-surface",
16
+ "--slotted-control-transition-duration",
17
+ "--slotted-control-transition-easing",
18
+ "--slotted-duration-instant",
19
+ "--slotted-focus-ring-color",
20
+ "--slotted-focus-ring-offset",
21
+ "--slotted-focus-ring-width",
22
+ "--slotted-font-family-sans",
23
+ "--slotted-font-weight-medium",
24
+ "--slotted-font-weight-regular",
25
+ "--slotted-line-height-md",
26
+ "--slotted-radius-full",
27
+ "--slotted-saved-views-panel-inline-size",
28
+ "--slotted-space-1",
29
+ "--slotted-space-2",
30
+ "--slotted-space-3",
31
+ "--slotted-space-4",
32
+ "--slotted-surface-sunken",
33
+ "--slotted-text",
34
+ "--slotted-text-muted",
35
+ "--slotted-tone-accent-solid",
36
+ "--slotted-tone-accent-subtle-active",
37
+ "--slotted-tone-accent-subtle-hover",
38
+ "--slotted-tone-accent-text",
39
+ "--slotted-tone-secondary-subtle-active",
40
+ "--slotted-tone-secondary-subtle-hover"
41
+ ]