@wzrhine/react 0.0.0-stage → 0.2.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 (289) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -3
  4. package/dist/advanced.css +398 -0
  5. package/dist/archive.css +704 -0
  6. package/dist/command.css +671 -0
  7. package/dist/components/Accordion.d.ts +82 -0
  8. package/dist/components/Accordion.d.ts.map +1 -0
  9. package/dist/components/Accordion.js +19 -0
  10. package/dist/components/Accordion.js.map +1 -0
  11. package/dist/components/Alert.d.ts +63 -0
  12. package/dist/components/Alert.d.ts.map +1 -0
  13. package/dist/components/Alert.js +29 -0
  14. package/dist/components/Alert.js.map +1 -0
  15. package/dist/components/AlertDialog.d.ts +49 -0
  16. package/dist/components/AlertDialog.d.ts.map +1 -0
  17. package/dist/components/AlertDialog.js +122 -0
  18. package/dist/components/AlertDialog.js.map +1 -0
  19. package/dist/components/ArchiveCard.d.ts +58 -0
  20. package/dist/components/ArchiveCard.d.ts.map +1 -0
  21. package/dist/components/ArchiveCard.js +40 -0
  22. package/dist/components/ArchiveCard.js.map +1 -0
  23. package/dist/components/Badge.d.ts +17 -0
  24. package/dist/components/Badge.d.ts.map +1 -0
  25. package/dist/components/Badge.js +16 -0
  26. package/dist/components/Badge.js.map +1 -0
  27. package/dist/components/Breadcrumb.d.ts +48 -0
  28. package/dist/components/Breadcrumb.d.ts.map +1 -0
  29. package/dist/components/Breadcrumb.js +55 -0
  30. package/dist/components/Breadcrumb.js.map +1 -0
  31. package/dist/components/Button.d.ts +33 -0
  32. package/dist/components/Button.d.ts.map +1 -0
  33. package/dist/components/Button.js +24 -0
  34. package/dist/components/Button.js.map +1 -0
  35. package/dist/components/Checkbox.d.ts +81 -0
  36. package/dist/components/Checkbox.d.ts.map +1 -0
  37. package/dist/components/Checkbox.js +34 -0
  38. package/dist/components/Checkbox.js.map +1 -0
  39. package/dist/components/Collapsible.d.ts +47 -0
  40. package/dist/components/Collapsible.d.ts.map +1 -0
  41. package/dist/components/Collapsible.js +12 -0
  42. package/dist/components/Collapsible.js.map +1 -0
  43. package/dist/components/Combobox.d.ts +74 -0
  44. package/dist/components/Combobox.d.ts.map +1 -0
  45. package/dist/components/Combobox.js +61 -0
  46. package/dist/components/Combobox.js.map +1 -0
  47. package/dist/components/CommandPalette.d.ts +77 -0
  48. package/dist/components/CommandPalette.d.ts.map +1 -0
  49. package/dist/components/CommandPalette.js +150 -0
  50. package/dist/components/CommandPalette.js.map +1 -0
  51. package/dist/components/ContextMenu.d.ts +31 -0
  52. package/dist/components/ContextMenu.d.ts.map +1 -0
  53. package/dist/components/ContextMenu.js +25 -0
  54. package/dist/components/ContextMenu.js.map +1 -0
  55. package/dist/components/DataTable.d.ts +83 -0
  56. package/dist/components/DataTable.d.ts.map +1 -0
  57. package/dist/components/DataTable.js +97 -0
  58. package/dist/components/DataTable.js.map +1 -0
  59. package/dist/components/Dialog.d.ts +49 -0
  60. package/dist/components/Dialog.d.ts.map +1 -0
  61. package/dist/components/Dialog.js +48 -0
  62. package/dist/components/Dialog.js.map +1 -0
  63. package/dist/components/Drawer.d.ts +56 -0
  64. package/dist/components/Drawer.d.ts.map +1 -0
  65. package/dist/components/Drawer.js +92 -0
  66. package/dist/components/Drawer.js.map +1 -0
  67. package/dist/components/EmptyState.d.ts +39 -0
  68. package/dist/components/EmptyState.d.ts.map +1 -0
  69. package/dist/components/EmptyState.js +19 -0
  70. package/dist/components/EmptyState.js.map +1 -0
  71. package/dist/components/Field.d.ts +37 -0
  72. package/dist/components/Field.d.ts.map +1 -0
  73. package/dist/components/Field.js +12 -0
  74. package/dist/components/Field.js.map +1 -0
  75. package/dist/components/Fieldset.d.ts +25 -0
  76. package/dist/components/Fieldset.d.ts.map +1 -0
  77. package/dist/components/Fieldset.js +17 -0
  78. package/dist/components/Fieldset.js.map +1 -0
  79. package/dist/components/FileDropZone.d.ts +60 -0
  80. package/dist/components/FileDropZone.d.ts.map +1 -0
  81. package/dist/components/FileDropZone.js +121 -0
  82. package/dist/components/FileDropZone.js.map +1 -0
  83. package/dist/components/Form.d.ts +22 -0
  84. package/dist/components/Form.d.ts.map +1 -0
  85. package/dist/components/Form.js +20 -0
  86. package/dist/components/Form.js.map +1 -0
  87. package/dist/components/Icon.d.ts +25 -0
  88. package/dist/components/Icon.d.ts.map +1 -0
  89. package/dist/components/Icon.js +38 -0
  90. package/dist/components/Icon.js.map +1 -0
  91. package/dist/components/IconButton.d.ts +25 -0
  92. package/dist/components/IconButton.d.ts.map +1 -0
  93. package/dist/components/IconButton.js +14 -0
  94. package/dist/components/IconButton.js.map +1 -0
  95. package/dist/components/Input.d.ts +24 -0
  96. package/dist/components/Input.d.ts.map +1 -0
  97. package/dist/components/Input.js +15 -0
  98. package/dist/components/Input.js.map +1 -0
  99. package/dist/components/Menu.d.ts +66 -0
  100. package/dist/components/Menu.d.ts.map +1 -0
  101. package/dist/components/Menu.js +34 -0
  102. package/dist/components/Menu.js.map +1 -0
  103. package/dist/components/MetadataList.d.ts +51 -0
  104. package/dist/components/MetadataList.d.ts.map +1 -0
  105. package/dist/components/MetadataList.js +25 -0
  106. package/dist/components/MetadataList.js.map +1 -0
  107. package/dist/components/NumberField.d.ts +54 -0
  108. package/dist/components/NumberField.d.ts.map +1 -0
  109. package/dist/components/NumberField.js +27 -0
  110. package/dist/components/NumberField.js.map +1 -0
  111. package/dist/components/Pagination.d.ts +40 -0
  112. package/dist/components/Pagination.d.ts.map +1 -0
  113. package/dist/components/Pagination.js +64 -0
  114. package/dist/components/Pagination.js.map +1 -0
  115. package/dist/components/Popover.d.ts +49 -0
  116. package/dist/components/Popover.d.ts.map +1 -0
  117. package/dist/components/Popover.js +14 -0
  118. package/dist/components/Popover.js.map +1 -0
  119. package/dist/components/Progress.d.ts +57 -0
  120. package/dist/components/Progress.d.ts.map +1 -0
  121. package/dist/components/Progress.js +31 -0
  122. package/dist/components/Progress.js.map +1 -0
  123. package/dist/components/Radio.d.ts +68 -0
  124. package/dist/components/Radio.d.ts.map +1 -0
  125. package/dist/components/Radio.js +18 -0
  126. package/dist/components/Radio.js.map +1 -0
  127. package/dist/components/RecordHeader.d.ts +53 -0
  128. package/dist/components/RecordHeader.d.ts.map +1 -0
  129. package/dist/components/RecordHeader.js +19 -0
  130. package/dist/components/RecordHeader.js.map +1 -0
  131. package/dist/components/ResizeHandle.d.ts +32 -0
  132. package/dist/components/ResizeHandle.d.ts.map +1 -0
  133. package/dist/components/ResizeHandle.js +33 -0
  134. package/dist/components/ResizeHandle.js.map +1 -0
  135. package/dist/components/ScrollArea.d.ts +60 -0
  136. package/dist/components/ScrollArea.d.ts.map +1 -0
  137. package/dist/components/ScrollArea.js +63 -0
  138. package/dist/components/ScrollArea.js.map +1 -0
  139. package/dist/components/Select.d.ts +39 -0
  140. package/dist/components/Select.d.ts.map +1 -0
  141. package/dist/components/Select.js +24 -0
  142. package/dist/components/Select.js.map +1 -0
  143. package/dist/components/Separator.d.ts +26 -0
  144. package/dist/components/Separator.d.ts.map +1 -0
  145. package/dist/components/Separator.js +22 -0
  146. package/dist/components/Separator.js.map +1 -0
  147. package/dist/components/Skeleton.d.ts +31 -0
  148. package/dist/components/Skeleton.d.ts.map +1 -0
  149. package/dist/components/Skeleton.js +17 -0
  150. package/dist/components/Skeleton.js.map +1 -0
  151. package/dist/components/Slider.d.ts +65 -0
  152. package/dist/components/Slider.d.ts.map +1 -0
  153. package/dist/components/Slider.js +30 -0
  154. package/dist/components/Slider.js.map +1 -0
  155. package/dist/components/Spinner.d.ts +23 -0
  156. package/dist/components/Spinner.d.ts.map +1 -0
  157. package/dist/components/Spinner.js +13 -0
  158. package/dist/components/Spinner.js.map +1 -0
  159. package/dist/components/SplitButton.d.ts +59 -0
  160. package/dist/components/SplitButton.d.ts.map +1 -0
  161. package/dist/components/SplitButton.js +30 -0
  162. package/dist/components/SplitButton.js.map +1 -0
  163. package/dist/components/Stat.d.ts +53 -0
  164. package/dist/components/Stat.d.ts.map +1 -0
  165. package/dist/components/Stat.js +23 -0
  166. package/dist/components/Stat.js.map +1 -0
  167. package/dist/components/StatusBadge.d.ts +19 -0
  168. package/dist/components/StatusBadge.d.ts.map +1 -0
  169. package/dist/components/StatusBadge.js +8 -0
  170. package/dist/components/StatusBadge.js.map +1 -0
  171. package/dist/components/StatusIndicator.d.ts +29 -0
  172. package/dist/components/StatusIndicator.d.ts.map +1 -0
  173. package/dist/components/StatusIndicator.js +8 -0
  174. package/dist/components/StatusIndicator.js.map +1 -0
  175. package/dist/components/Surface.d.ts +29 -0
  176. package/dist/components/Surface.d.ts.map +1 -0
  177. package/dist/components/Surface.js +8 -0
  178. package/dist/components/Surface.js.map +1 -0
  179. package/dist/components/Switch.d.ts +22 -0
  180. package/dist/components/Switch.d.ts.map +1 -0
  181. package/dist/components/Switch.js +11 -0
  182. package/dist/components/Switch.js.map +1 -0
  183. package/dist/components/Tabs.d.ts +45 -0
  184. package/dist/components/Tabs.d.ts.map +1 -0
  185. package/dist/components/Tabs.js +49 -0
  186. package/dist/components/Tabs.js.map +1 -0
  187. package/dist/components/Text.d.ts +33 -0
  188. package/dist/components/Text.d.ts.map +1 -0
  189. package/dist/components/Text.js +21 -0
  190. package/dist/components/Text.js.map +1 -0
  191. package/dist/components/Textarea.d.ts +54 -0
  192. package/dist/components/Textarea.d.ts.map +1 -0
  193. package/dist/components/Textarea.js +31 -0
  194. package/dist/components/Textarea.js.map +1 -0
  195. package/dist/components/Timeline.d.ts +35 -0
  196. package/dist/components/Timeline.d.ts.map +1 -0
  197. package/dist/components/Timeline.js +13 -0
  198. package/dist/components/Timeline.js.map +1 -0
  199. package/dist/components/Toast.d.ts +67 -0
  200. package/dist/components/Toast.d.ts.map +1 -0
  201. package/dist/components/Toast.js +94 -0
  202. package/dist/components/Toast.js.map +1 -0
  203. package/dist/components/Tooltip.d.ts +26 -0
  204. package/dist/components/Tooltip.d.ts.map +1 -0
  205. package/dist/components/Tooltip.js +15 -0
  206. package/dist/components/Tooltip.js.map +1 -0
  207. package/dist/components/Tree.d.ts +28 -0
  208. package/dist/components/Tree.d.ts.map +1 -0
  209. package/dist/components/Tree.js +129 -0
  210. package/dist/components/Tree.js.map +1 -0
  211. package/dist/components/VisuallyHidden.d.ts +17 -0
  212. package/dist/components/VisuallyHidden.d.ts.map +1 -0
  213. package/dist/components/VisuallyHidden.js +12 -0
  214. package/dist/components/VisuallyHidden.js.map +1 -0
  215. package/dist/components/Workbench.d.ts +31 -0
  216. package/dist/components/Workbench.d.ts.map +1 -0
  217. package/dist/components/Workbench.js +71 -0
  218. package/dist/components/Workbench.js.map +1 -0
  219. package/dist/components/fieldParts.d.ts +17 -0
  220. package/dist/components/fieldParts.d.ts.map +1 -0
  221. package/dist/components/fieldParts.js +22 -0
  222. package/dist/components/fieldParts.js.map +1 -0
  223. package/dist/components/meter-utils.d.ts +15 -0
  224. package/dist/components/meter-utils.d.ts.map +1 -0
  225. package/dist/components/meter-utils.js +15 -0
  226. package/dist/components/meter-utils.js.map +1 -0
  227. package/dist/components/navigation.d.ts +38 -0
  228. package/dist/components/navigation.d.ts.map +1 -0
  229. package/dist/components/navigation.js +96 -0
  230. package/dist/components/navigation.js.map +1 -0
  231. package/dist/components/pagination-utils.d.ts +10 -0
  232. package/dist/components/pagination-utils.d.ts.map +1 -0
  233. package/dist/components/pagination-utils.js +36 -0
  234. package/dist/components/pagination-utils.js.map +1 -0
  235. package/dist/components.css +678 -0
  236. package/dist/data.css +600 -0
  237. package/dist/disclosure.css +93 -0
  238. package/dist/drawer.css +226 -0
  239. package/dist/feedback.css +454 -0
  240. package/dist/forms.css +533 -0
  241. package/dist/index.d.ts +129 -0
  242. package/dist/index.d.ts.map +1 -0
  243. package/dist/index.js +67 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/motion/lifecycle.d.ts +44 -0
  246. package/dist/motion/lifecycle.d.ts.map +1 -0
  247. package/dist/motion/lifecycle.js +73 -0
  248. package/dist/motion/lifecycle.js.map +1 -0
  249. package/dist/motion/presence.d.ts +69 -0
  250. package/dist/motion/presence.d.ts.map +1 -0
  251. package/dist/motion/presence.js +103 -0
  252. package/dist/motion/presence.js.map +1 -0
  253. package/dist/motion/presets.d.ts +63 -0
  254. package/dist/motion/presets.d.ts.map +1 -0
  255. package/dist/motion/presets.js +30 -0
  256. package/dist/motion/presets.js.map +1 -0
  257. package/dist/motion/resolve.d.ts +31 -0
  258. package/dist/motion/resolve.d.ts.map +1 -0
  259. package/dist/motion/resolve.js +40 -0
  260. package/dist/motion/resolve.js.map +1 -0
  261. package/dist/motion/useRhineMotion.d.ts +19 -0
  262. package/dist/motion/useRhineMotion.d.ts.map +1 -0
  263. package/dist/motion/useRhineMotion.js +19 -0
  264. package/dist/motion/useRhineMotion.js.map +1 -0
  265. package/dist/motion/visibility.d.ts +6 -0
  266. package/dist/motion/visibility.d.ts.map +1 -0
  267. package/dist/motion/visibility.js +31 -0
  268. package/dist/motion/visibility.js.map +1 -0
  269. package/dist/overlays.css +465 -0
  270. package/dist/provider/RhineProvider.d.ts +65 -0
  271. package/dist/provider/RhineProvider.d.ts.map +1 -0
  272. package/dist/provider/RhineProvider.js +26 -0
  273. package/dist/provider/RhineProvider.js.map +1 -0
  274. package/dist/provider/messages.d.ts +209 -0
  275. package/dist/provider/messages.d.ts.map +1 -0
  276. package/dist/provider/messages.js +168 -0
  277. package/dist/provider/messages.js.map +1 -0
  278. package/dist/provider/portal.d.ts +17 -0
  279. package/dist/provider/portal.d.ts.map +1 -0
  280. package/dist/provider/portal.js +20 -0
  281. package/dist/provider/portal.js.map +1 -0
  282. package/dist/reset.css +45 -0
  283. package/dist/split.css +159 -0
  284. package/dist/status.css +353 -0
  285. package/dist/utils/cx.d.ts +2 -0
  286. package/dist/utils/cx.d.ts.map +1 -0
  287. package/dist/utils/cx.js +4 -0
  288. package/dist/utils/cx.js.map +1 -0
  289. package/package.json +67 -3
@@ -0,0 +1,226 @@
1
+ /* Drawer and AlertDialog styles (ADR-0006). */
2
+
3
+ /* ---------- AlertDialog ---------- */
4
+ /* Reuses the .rl-dialog panel (overlays.css); only the tone and the error message are added here. */
5
+ .rl-alert-dialog[data-tone='danger'] {
6
+ border-top-color: var(--rl-danger);
7
+ }
8
+
9
+ /* .rl-button doubled: @import puts this file before the Button variant rules in components.css. */
10
+ .rl-button.rl-alert-dialog__confirm[data-tone='danger'] {
11
+ --rl-button-bg: var(--rl-danger);
12
+ --rl-button-fg: var(--rl-fg-on-danger);
13
+ --rl-button-border: var(--rl-danger);
14
+ --rl-button-bg-hover: color-mix(in srgb, var(--rl-danger) 86%, var(--rl-bg-inverse));
15
+ --rl-button-bg-pressed: color-mix(in srgb, var(--rl-danger) 78%, var(--rl-bg-inverse));
16
+ --rl-button-border-hover: color-mix(in srgb, var(--rl-danger) 86%, var(--rl-bg-inverse));
17
+ }
18
+
19
+ .rl-alert-dialog__error {
20
+ margin: 0;
21
+ padding: var(--rl-space-2) var(--rl-space-3);
22
+ border-left: var(--rl-border-width-strong) solid var(--rl-danger);
23
+ border-radius: var(--rl-radius-xs);
24
+ background: var(--rl-bg-surface);
25
+ color: var(--rl-danger);
26
+ font: var(--rl-type-body-sm);
27
+ }
28
+
29
+ @media (forced-colors: active) {
30
+ .rl-alert-dialog__confirm[data-tone='danger'] { border-color: ButtonText; }
31
+ .rl-alert-dialog__error { border-left-color: CanvasText; }
32
+ }
33
+ /* ---------- end AlertDialog ---------- */
34
+
35
+ /* ---------- Drawer ---------- */
36
+ /*
37
+ * Base UI writes the swipe offset into --drawer-swipe-movement-x / -y and, while dragging, an inline
38
+ * transform; CSS owns transform for enter / exit so a release or a re-open retargets from where the
39
+ * panel is. Exit waits for these transitions (Base UI unmounts after they finish).
40
+ */
41
+ .rl-drawer__backdrop {
42
+ position: fixed;
43
+ inset: 0;
44
+ z-index: var(--rl-z-dialog);
45
+ /* Same dim as .rl-dialog__backdrop; opacity follows the swipe so the page brightens as it closes. */
46
+ background: color-mix(in srgb, var(--rl-bg-inverse) 36%, transparent);
47
+ opacity: calc(1 - var(--drawer-swipe-progress, 0));
48
+ transition: opacity var(--rl-motion-panel) var(--rl-ease-out);
49
+ }
50
+
51
+ .rl-drawer__backdrop[data-starting-style],
52
+ .rl-drawer__backdrop[data-ending-style] {
53
+ opacity: 0;
54
+ }
55
+
56
+ .rl-drawer__viewport {
57
+ position: fixed;
58
+ inset: 0;
59
+ z-index: var(--rl-z-dialog);
60
+ display: flex;
61
+ align-items: stretch;
62
+ justify-content: flex-end;
63
+ }
64
+
65
+ .rl-drawer__viewport[data-placement='left'] {
66
+ justify-content: flex-start;
67
+ }
68
+
69
+ .rl-drawer__viewport[data-placement='bottom'] {
70
+ align-items: flex-end;
71
+ justify-content: stretch;
72
+ }
73
+
74
+ .rl-drawer {
75
+ --rl-drawer-width: var(--rl-dialog-width-md);
76
+
77
+ box-sizing: border-box;
78
+ display: flex;
79
+ flex-direction: column;
80
+ width: min(var(--rl-drawer-width), calc(100vw - var(--rl-space-12)));
81
+ height: 100%;
82
+ overflow: hidden;
83
+ overscroll-behavior: contain;
84
+ border: 0 solid var(--rl-border-default);
85
+ background: var(--rl-bg-raised);
86
+ color: var(--rl-fg-primary);
87
+ box-shadow: var(--rl-shadow-floating);
88
+ outline: none;
89
+ transform: translate(var(--drawer-swipe-movement-x, var(--rl-space-0)), var(--drawer-swipe-movement-y, var(--rl-space-0)));
90
+ transition:
91
+ transform var(--rl-motion-panel) var(--rl-ease-out),
92
+ opacity var(--rl-motion-panel) var(--rl-ease-out);
93
+ }
94
+
95
+ .rl-drawer[data-size='sm'] { --rl-drawer-width: var(--rl-dialog-width-sm); }
96
+ .rl-drawer[data-size='lg'] { --rl-drawer-width: var(--rl-dialog-width-lg); }
97
+
98
+ .rl-drawer[data-placement='right'] { border-left-width: var(--rl-border-width); }
99
+ .rl-drawer[data-placement='left'] { border-right-width: var(--rl-border-width); }
100
+
101
+ .rl-drawer[data-placement='bottom'] {
102
+ width: 100%;
103
+ height: auto;
104
+ max-height: 85vh;
105
+ max-height: 85dvh;
106
+ padding-bottom: env(safe-area-inset-bottom, var(--rl-space-0));
107
+ border-top-width: var(--rl-border-width);
108
+ border-radius: var(--rl-radius-md) var(--rl-radius-md) 0 0;
109
+ }
110
+
111
+ .rl-drawer[data-placement='right'][data-starting-style],
112
+ .rl-drawer[data-placement='right'][data-ending-style] { transform: translateX(100%); }
113
+ .rl-drawer[data-placement='left'][data-starting-style],
114
+ .rl-drawer[data-placement='left'][data-ending-style] { transform: translateX(-100%); }
115
+ .rl-drawer[data-placement='bottom'][data-starting-style],
116
+ .rl-drawer[data-placement='bottom'][data-ending-style] { transform: translateY(100%); }
117
+
118
+ /* A fast swipe release shortens the exit (Base UI scales --drawer-swipe-strength to 0.1–1). */
119
+ .rl-drawer[data-ending-style],
120
+ .rl-drawer__backdrop[data-ending-style] {
121
+ transition-duration: calc(var(--rl-motion-panel) * var(--drawer-swipe-strength, 1));
122
+ }
123
+
124
+ /* Dragging follows the pointer 1:1. */
125
+ .rl-drawer[data-swiping],
126
+ .rl-drawer__backdrop[data-swiping] {
127
+ transition-duration: var(--rl-motion-instant);
128
+ }
129
+
130
+ .rl-drawer[data-swiping] {
131
+ user-select: none;
132
+ }
133
+
134
+ /* Reduced motion: no slide, opacity only (durations already collapse via the motion tokens). */
135
+ @media (prefers-reduced-motion: reduce) {
136
+ .rl-drawer[data-starting-style],
137
+ .rl-drawer[data-ending-style] {
138
+ transform: none;
139
+ opacity: 0;
140
+ }
141
+ }
142
+
143
+ .rl-theme[data-rl-motion='reduce'] .rl-drawer[data-starting-style],
144
+ .rl-theme[data-rl-motion='reduce'] .rl-drawer[data-ending-style] {
145
+ transform: none;
146
+ opacity: 0;
147
+ }
148
+
149
+ .rl-drawer__handle {
150
+ display: none;
151
+ }
152
+
153
+ .rl-drawer[data-placement='bottom'] .rl-drawer__handle {
154
+ display: block;
155
+ flex: none;
156
+ width: var(--rl-space-12);
157
+ height: var(--rl-space-1);
158
+ margin: var(--rl-space-3) auto 0;
159
+ border-radius: var(--rl-radius-round);
160
+ background: var(--rl-border-strong);
161
+ }
162
+
163
+ .rl-drawer__content {
164
+ display: grid;
165
+ flex: 1 1 auto;
166
+ grid-template-rows: auto minmax(0, 1fr) auto;
167
+ min-height: 0;
168
+ }
169
+
170
+ .rl-drawer__header {
171
+ display: grid;
172
+ grid-template-columns: minmax(0, 1fr) auto;
173
+ align-items: start;
174
+ gap: var(--rl-space-4);
175
+ padding: var(--rl-space-6) var(--rl-space-6) var(--rl-space-4);
176
+ border-bottom: var(--rl-border-width) solid var(--rl-border-subtle);
177
+ }
178
+
179
+ .rl-drawer[data-placement='bottom'] .rl-drawer__header {
180
+ padding-top: var(--rl-space-3);
181
+ }
182
+
183
+ .rl-drawer__heading {
184
+ display: grid;
185
+ gap: var(--rl-space-2);
186
+ min-width: 0;
187
+ }
188
+
189
+ .rl-drawer__title {
190
+ overflow-wrap: anywhere;
191
+ }
192
+
193
+ .rl-drawer__close {
194
+ margin-top: calc(var(--rl-space-2) * -1);
195
+ margin-inline-end: calc(var(--rl-space-2) * -1);
196
+ }
197
+
198
+ .rl-drawer__body {
199
+ display: grid;
200
+ align-content: start;
201
+ gap: var(--rl-space-4);
202
+ min-height: 0;
203
+ padding: var(--rl-space-6);
204
+ overflow-y: auto;
205
+ overscroll-behavior: contain;
206
+ }
207
+
208
+ .rl-drawer__body:focus-visible {
209
+ outline: var(--rl-focus-ring);
210
+ outline-offset: calc(var(--rl-focus-width) * -1);
211
+ }
212
+
213
+ .rl-drawer__actions {
214
+ display: flex;
215
+ flex-wrap: wrap;
216
+ justify-content: flex-end;
217
+ gap: var(--rl-space-2);
218
+ padding: var(--rl-space-4) var(--rl-space-6);
219
+ border-top: var(--rl-border-width) solid var(--rl-border-subtle);
220
+ background: var(--rl-bg-surface);
221
+ }
222
+
223
+ @media (forced-colors: active) {
224
+ .rl-drawer { border-color: CanvasText; }
225
+ }
226
+ /* ---------- end Drawer ---------- */
@@ -0,0 +1,454 @@
1
+ /*
2
+ * WzRhineLab UI · Popover, Menu, Toast (M2-B). Imported by components.css; tokens only.
3
+ * Base UI supplies --transform-origin, --available-*, --toast-* variables and state attributes.
4
+ */
5
+
6
+ /* ---------- Popover ---------- */
7
+ .rl-popover__positioner {
8
+ z-index: var(--rl-z-popover);
9
+ }
10
+
11
+ .rl-popover {
12
+ --rl-popover-width: var(--rl-popover-width-md);
13
+
14
+ position: relative;
15
+ display: grid;
16
+ gap: var(--rl-space-3);
17
+ width: min(var(--rl-popover-width), var(--available-width));
18
+ max-height: var(--available-height);
19
+ overflow-y: auto;
20
+ padding: var(--rl-space-4);
21
+ border: var(--rl-border-width) solid var(--rl-border-default);
22
+ border-radius: var(--rl-radius-sm);
23
+ background: var(--rl-bg-raised);
24
+ color: var(--rl-fg-primary);
25
+ box-shadow: var(--rl-shadow-floating);
26
+ transform-origin: var(--transform-origin);
27
+ outline: none;
28
+ transition:
29
+ opacity var(--rl-motion-fast) var(--rl-ease-out),
30
+ scale var(--rl-motion-fast) var(--rl-ease-out);
31
+ }
32
+
33
+ .rl-popover[data-size='sm'] { --rl-popover-width: var(--rl-popover-width-sm); }
34
+ .rl-popover[data-size='lg'] { --rl-popover-width: var(--rl-popover-width-lg); }
35
+
36
+ .rl-popover[data-starting-style],
37
+ .rl-popover[data-ending-style] {
38
+ opacity: 0;
39
+ scale: 0.98;
40
+ }
41
+
42
+ .rl-popover[data-instant] {
43
+ transition-duration: 0ms;
44
+ }
45
+
46
+ .rl-popover:focus-visible {
47
+ outline: var(--rl-focus-ring);
48
+ outline-offset: var(--rl-focus-offset);
49
+ }
50
+
51
+ .rl-popover__header {
52
+ display: grid;
53
+ gap: var(--rl-space-1);
54
+ }
55
+
56
+ .rl-popover__title {
57
+ margin: 0;
58
+ font: var(--rl-type-label);
59
+ }
60
+
61
+ .rl-popover__description {
62
+ margin: 0;
63
+ font: var(--rl-type-body-sm);
64
+ color: var(--rl-fg-muted);
65
+ }
66
+
67
+ .rl-popover__body {
68
+ display: grid;
69
+ gap: var(--rl-space-3);
70
+ min-width: 0;
71
+ font: var(--rl-type-body-sm);
72
+ }
73
+
74
+ .rl-popover__actions {
75
+ display: flex;
76
+ flex-wrap: wrap;
77
+ justify-content: flex-end;
78
+ gap: var(--rl-space-2);
79
+ padding-top: var(--rl-space-3);
80
+ border-top: var(--rl-border-width) solid var(--rl-border-subtle);
81
+ }
82
+
83
+ .rl-popover__arrow {
84
+ width: var(--rl-space-4);
85
+ height: var(--rl-space-2);
86
+ }
87
+
88
+ .rl-popover__arrow > svg {
89
+ display: block;
90
+ width: 100%;
91
+ height: 100%;
92
+ overflow: visible;
93
+ }
94
+
95
+ .rl-popover__arrow[data-side='bottom'] { top: calc(var(--rl-space-2) * -1); }
96
+ .rl-popover__arrow[data-side='top'] { bottom: calc(var(--rl-space-2) * -1); rotate: 180deg; }
97
+ .rl-popover__arrow[data-side='left'] { right: calc(var(--rl-space-3) * -1); rotate: 90deg; }
98
+ .rl-popover__arrow[data-side='right'] { left: calc(var(--rl-space-3) * -1); rotate: -90deg; }
99
+
100
+ .rl-popover__arrow-fill {
101
+ fill: var(--rl-bg-raised);
102
+ }
103
+
104
+ .rl-popover__arrow-stroke {
105
+ fill: none;
106
+ stroke: var(--rl-border-default);
107
+ stroke-width: var(--rl-border-width);
108
+ }
109
+
110
+ /* ---------- Menu ---------- */
111
+ .rl-menu__positioner {
112
+ z-index: var(--rl-z-popover);
113
+ outline: none;
114
+ }
115
+
116
+ .rl-menu {
117
+ min-width: max(var(--rl-menu-min-width), var(--anchor-width));
118
+ max-width: var(--available-width);
119
+ /* Menus are short command lists: only cap by available space so they rarely need to scroll. */
120
+ max-height: var(--available-height);
121
+ overflow-y: auto;
122
+ padding: var(--rl-space-1);
123
+ border: var(--rl-border-width) solid var(--rl-border-default);
124
+ border-radius: var(--rl-radius-sm);
125
+ background: var(--rl-bg-raised);
126
+ color: var(--rl-fg-primary);
127
+ box-shadow: var(--rl-shadow-floating);
128
+ transform-origin: var(--transform-origin);
129
+ outline: none;
130
+ transition:
131
+ opacity var(--rl-motion-fast) var(--rl-ease-out),
132
+ translate var(--rl-motion-fast) var(--rl-ease-out);
133
+ }
134
+
135
+ .rl-menu[data-starting-style],
136
+ .rl-menu[data-ending-style] {
137
+ opacity: 0;
138
+ translate: 0 calc(var(--rl-space-1) * -1);
139
+ }
140
+
141
+ .rl-menu[data-instant] {
142
+ transition-duration: 0ms;
143
+ }
144
+
145
+ .rl-menu__item {
146
+ display: grid;
147
+ grid-template-columns: var(--rl-icon-size-md) minmax(0, 1fr) auto;
148
+ align-items: center;
149
+ gap: var(--rl-space-2);
150
+ min-height: var(--rl-control-height-md);
151
+ padding: 0 var(--rl-space-3) 0 var(--rl-space-2);
152
+ border-radius: var(--rl-radius-xs);
153
+ font: var(--rl-type-body-sm);
154
+ cursor: default;
155
+ outline: none;
156
+ user-select: none;
157
+ }
158
+
159
+ .rl-menu__item[data-highlighted] {
160
+ background: var(--rl-bg-inverse);
161
+ color: var(--rl-fg-inverse);
162
+ }
163
+
164
+ .rl-menu__item[data-tone='danger'] {
165
+ color: var(--rl-danger);
166
+ }
167
+
168
+ .rl-menu__item[data-tone='danger'][data-highlighted] {
169
+ background: var(--rl-danger);
170
+ color: var(--rl-fg-on-danger);
171
+ }
172
+
173
+ .rl-menu__item[data-disabled] {
174
+ color: var(--rl-fg-disabled);
175
+ }
176
+
177
+ .rl-menu__icon {
178
+ display: inline-flex;
179
+ width: var(--rl-icon-size-md);
180
+ height: var(--rl-icon-size-md);
181
+ }
182
+
183
+ .rl-menu__icon > svg,
184
+ .rl-menu__indicator > svg {
185
+ width: 100%;
186
+ height: 100%;
187
+ }
188
+
189
+ .rl-menu__indicator {
190
+ display: inline-flex;
191
+ width: 100%;
192
+ height: 100%;
193
+ }
194
+
195
+ /* Indicators stay mounted to keep labels aligned; hide them when unchecked. */
196
+ .rl-menu__icon:not([data-checked]) > .rl-menu__indicator {
197
+ visibility: hidden;
198
+ }
199
+
200
+ .rl-menu__label {
201
+ min-width: 0;
202
+ overflow-wrap: anywhere;
203
+ }
204
+
205
+ .rl-menu__shortcut {
206
+ font: var(--rl-type-mono);
207
+ letter-spacing: var(--rl-tracking-mono);
208
+ color: var(--rl-fg-subtle);
209
+ }
210
+
211
+ .rl-menu__item[data-highlighted] .rl-menu__shortcut {
212
+ color: inherit;
213
+ }
214
+
215
+ .rl-menu__group + .rl-menu__group,
216
+ .rl-menu__separator {
217
+ margin-top: var(--rl-space-1);
218
+ }
219
+
220
+ .rl-menu__separator {
221
+ height: var(--rl-border-width);
222
+ margin: var(--rl-space-1) calc(var(--rl-space-1) * -1);
223
+ background: var(--rl-border-subtle);
224
+ }
225
+
226
+ .rl-menu__group-label {
227
+ padding: var(--rl-space-2) var(--rl-space-3) var(--rl-space-1);
228
+ font: var(--rl-type-mono);
229
+ letter-spacing: var(--rl-tracking-mono);
230
+ color: var(--rl-fg-subtle);
231
+ }
232
+
233
+ /* ---------- Toast ---------- */
234
+ /* Fluid without a breakpoint: inset shrinks with the viewport, width never exceeds it. */
235
+ .rl-toast-viewport {
236
+ --rl-toast-inset: clamp(var(--rl-space-4), 4vw, var(--rl-space-6));
237
+
238
+ position: fixed;
239
+ right: var(--rl-toast-inset);
240
+ bottom: var(--rl-toast-inset);
241
+ z-index: var(--rl-z-toast);
242
+ width: min(var(--rl-toast-width), calc(100vw - var(--rl-toast-inset) * 2));
243
+ outline: none;
244
+ }
245
+
246
+ .rl-toast {
247
+ --rl-toast-gap: var(--rl-space-3);
248
+ --rl-toast-peek: var(--rl-space-2);
249
+ --rl-toast-scale: calc(max(0, 1 - (var(--toast-index) * 0.05)));
250
+ --rl-toast-height: var(--toast-frontmost-height, var(--toast-height));
251
+ --rl-toast-offset-y: calc(
252
+ var(--toast-offset-y) * -1 + (var(--toast-index) * var(--rl-toast-gap) * -1) + var(--toast-swipe-movement-y)
253
+ );
254
+ --rl-toast-accent: var(--rl-fg-muted);
255
+
256
+ position: absolute;
257
+ right: 0;
258
+ bottom: 0;
259
+ z-index: calc(var(--rl-z-toast) - var(--toast-index));
260
+ width: 100%;
261
+ height: var(--rl-toast-height);
262
+ border: var(--rl-border-width) solid var(--rl-border-default);
263
+ border-left: var(--rl-border-width-strong) solid var(--rl-toast-accent);
264
+ border-radius: var(--rl-radius-sm);
265
+ background: var(--rl-bg-raised);
266
+ color: var(--rl-fg-primary);
267
+ box-shadow: var(--rl-shadow-floating);
268
+ transform-origin: bottom center;
269
+ transform: translateX(var(--toast-swipe-movement-x))
270
+ translateY(calc(var(--toast-swipe-movement-y) - (var(--toast-index) * var(--rl-toast-peek))))
271
+ scale(var(--rl-toast-scale));
272
+ user-select: none;
273
+ transition:
274
+ transform var(--rl-motion-panel) var(--rl-ease-out),
275
+ opacity var(--rl-motion-panel) var(--rl-ease-out),
276
+ height var(--rl-motion-fast) var(--rl-ease-out);
277
+ }
278
+
279
+ .rl-toast[data-status='info'] { --rl-toast-accent: var(--rl-info); }
280
+ .rl-toast[data-status='success'] { --rl-toast-accent: var(--rl-success); }
281
+ .rl-toast[data-status='warning'] { --rl-toast-accent: var(--rl-warning); }
282
+ .rl-toast[data-status='danger'] { --rl-toast-accent: var(--rl-danger); }
283
+
284
+ .rl-toast[data-expanded] {
285
+ height: var(--toast-height);
286
+ transform: translateX(var(--toast-swipe-movement-x)) translateY(var(--rl-toast-offset-y));
287
+ }
288
+
289
+ .rl-toast[data-starting-style],
290
+ .rl-toast[data-ending-style] {
291
+ opacity: 0;
292
+ transform: translateY(calc(var(--rl-space-6) + 100%));
293
+ }
294
+
295
+ .rl-toast[data-ending-style][data-swipe-direction='right'] {
296
+ transform: translateX(calc(var(--toast-swipe-movement-x) + 120%)) translateY(var(--rl-toast-offset-y));
297
+ }
298
+
299
+ .rl-toast[data-ending-style][data-swipe-direction='down'] {
300
+ transform: translateY(calc(var(--toast-swipe-movement-y) + 150%));
301
+ }
302
+
303
+ .rl-toast[data-limited] {
304
+ opacity: 0;
305
+ }
306
+
307
+ /* Hit area between stacked toasts so hover expansion does not collapse while moving across gaps. */
308
+ .rl-toast::after {
309
+ content: '';
310
+ position: absolute;
311
+ top: 100%;
312
+ left: 0;
313
+ width: 100%;
314
+ height: calc(var(--rl-toast-gap) + var(--rl-border-width));
315
+ }
316
+
317
+ .rl-toast:focus-visible {
318
+ outline: var(--rl-focus-ring);
319
+ outline-offset: var(--rl-focus-offset);
320
+ }
321
+
322
+ .rl-toast__content {
323
+ display: grid;
324
+ grid-template-columns: var(--rl-icon-size-md) minmax(0, 1fr) auto auto;
325
+ align-items: start;
326
+ gap: var(--rl-space-3);
327
+ padding: var(--rl-space-3) var(--rl-space-3) var(--rl-space-3) var(--rl-space-4);
328
+ overflow: hidden;
329
+ transition: opacity var(--rl-motion-fast) var(--rl-ease-out);
330
+ }
331
+
332
+ .rl-toast__content[data-behind] {
333
+ opacity: 0;
334
+ }
335
+
336
+ .rl-toast__content[data-expanded] {
337
+ opacity: 1;
338
+ }
339
+
340
+ .rl-toast__icon {
341
+ width: var(--rl-icon-size-md);
342
+ height: var(--rl-icon-size-md);
343
+ margin-top: calc((var(--rl-space-6) - var(--rl-space-1) - var(--rl-icon-size-md)) / 2);
344
+ fill: none;
345
+ stroke: var(--rl-toast-accent);
346
+ stroke-width: var(--rl-border-width-strong);
347
+ stroke-linecap: round;
348
+ stroke-linejoin: round;
349
+ }
350
+
351
+ .rl-toast__text {
352
+ display: grid;
353
+ gap: var(--rl-space-1);
354
+ min-width: 0;
355
+ }
356
+
357
+ .rl-toast__title {
358
+ margin: 0;
359
+ font: var(--rl-type-label);
360
+ }
361
+
362
+ .rl-toast__description {
363
+ margin: 0;
364
+ font: var(--rl-type-body-sm);
365
+ color: var(--rl-fg-muted);
366
+ }
367
+
368
+ .rl-toast__description:empty {
369
+ display: none;
370
+ }
371
+
372
+ .rl-toast__action,
373
+ .rl-toast__close {
374
+ display: inline-flex;
375
+ align-items: center;
376
+ justify-content: center;
377
+ min-height: var(--rl-control-height-sm);
378
+ margin: 0;
379
+ appearance: none;
380
+ border: var(--rl-border-width) solid transparent;
381
+ border-radius: var(--rl-radius-sm);
382
+ background: transparent;
383
+ color: var(--rl-fg-primary);
384
+ font: var(--rl-type-label-sm);
385
+ cursor: pointer;
386
+ }
387
+
388
+ .rl-toast__action {
389
+ padding: 0 var(--rl-space-3);
390
+ border-color: var(--rl-border-strong);
391
+ }
392
+
393
+ .rl-toast__close {
394
+ width: var(--rl-control-height-sm);
395
+ padding: 0;
396
+ color: var(--rl-fg-muted);
397
+ }
398
+
399
+ .rl-toast__close > svg {
400
+ width: var(--rl-icon-size-sm);
401
+ height: var(--rl-icon-size-sm);
402
+ fill: none;
403
+ stroke: currentColor;
404
+ stroke-width: var(--rl-border-width-strong);
405
+ stroke-linecap: round;
406
+ }
407
+
408
+ @media (hover: hover) {
409
+ .rl-toast__action:hover,
410
+ .rl-toast__close:hover {
411
+ background: var(--rl-bg-hover);
412
+ color: var(--rl-fg-primary);
413
+ }
414
+ }
415
+
416
+ .rl-toast__action:focus-visible,
417
+ .rl-toast__close:focus-visible {
418
+ outline: var(--rl-focus-ring);
419
+ outline-offset: var(--rl-focus-offset);
420
+ }
421
+
422
+ /* ---------- Reduced motion ---------- */
423
+ .rl-theme[data-rl-motion='reduce'] :is(.rl-popover, .rl-menu)[data-starting-style],
424
+ .rl-theme[data-rl-motion='reduce'] :is(.rl-popover, .rl-menu)[data-ending-style] {
425
+ translate: none;
426
+ scale: none;
427
+ }
428
+
429
+ .rl-theme[data-rl-motion='reduce'] .rl-toast[data-starting-style],
430
+ .rl-theme[data-rl-motion='reduce'] .rl-toast[data-ending-style] {
431
+ transform: none;
432
+ }
433
+
434
+ @media (prefers-reduced-motion: reduce) {
435
+ :is(.rl-popover, .rl-menu)[data-starting-style],
436
+ :is(.rl-popover, .rl-menu)[data-ending-style] {
437
+ translate: none;
438
+ scale: none;
439
+ }
440
+
441
+ .rl-toast[data-starting-style],
442
+ .rl-toast[data-ending-style] {
443
+ transform: none;
444
+ }
445
+ }
446
+
447
+ /* ---------- Forced colours ---------- */
448
+ @media (forced-colors: active) {
449
+ .rl-popover,
450
+ .rl-menu,
451
+ .rl-toast { border: var(--rl-border-width) solid CanvasText; }
452
+ .rl-menu__item[data-highlighted] { background: Highlight; color: HighlightText; }
453
+ .rl-toast__action { border-color: ButtonText; }
454
+ }