@wzrhine/react 0.0.0-stage → 0.1.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 (265) hide show
  1. package/CHANGELOG.md +80 -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 +60 -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 +41 -0
  16. package/dist/components/AlertDialog.d.ts.map +1 -0
  17. package/dist/components/AlertDialog.js +101 -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/Breadcrumb.d.ts +48 -0
  24. package/dist/components/Breadcrumb.d.ts.map +1 -0
  25. package/dist/components/Breadcrumb.js +55 -0
  26. package/dist/components/Breadcrumb.js.map +1 -0
  27. package/dist/components/Button.d.ts +30 -0
  28. package/dist/components/Button.d.ts.map +1 -0
  29. package/dist/components/Button.js +24 -0
  30. package/dist/components/Button.js.map +1 -0
  31. package/dist/components/Checkbox.d.ts +81 -0
  32. package/dist/components/Checkbox.d.ts.map +1 -0
  33. package/dist/components/Checkbox.js +34 -0
  34. package/dist/components/Checkbox.js.map +1 -0
  35. package/dist/components/Collapsible.d.ts +47 -0
  36. package/dist/components/Collapsible.d.ts.map +1 -0
  37. package/dist/components/Collapsible.js +12 -0
  38. package/dist/components/Collapsible.js.map +1 -0
  39. package/dist/components/Combobox.d.ts +74 -0
  40. package/dist/components/Combobox.d.ts.map +1 -0
  41. package/dist/components/Combobox.js +61 -0
  42. package/dist/components/Combobox.js.map +1 -0
  43. package/dist/components/CommandPalette.d.ts +77 -0
  44. package/dist/components/CommandPalette.d.ts.map +1 -0
  45. package/dist/components/CommandPalette.js +150 -0
  46. package/dist/components/CommandPalette.js.map +1 -0
  47. package/dist/components/ContextMenu.d.ts +31 -0
  48. package/dist/components/ContextMenu.d.ts.map +1 -0
  49. package/dist/components/ContextMenu.js +25 -0
  50. package/dist/components/ContextMenu.js.map +1 -0
  51. package/dist/components/DataTable.d.ts +83 -0
  52. package/dist/components/DataTable.d.ts.map +1 -0
  53. package/dist/components/DataTable.js +97 -0
  54. package/dist/components/DataTable.js.map +1 -0
  55. package/dist/components/Dialog.d.ts +45 -0
  56. package/dist/components/Dialog.d.ts.map +1 -0
  57. package/dist/components/Dialog.js +46 -0
  58. package/dist/components/Dialog.js.map +1 -0
  59. package/dist/components/Drawer.d.ts +56 -0
  60. package/dist/components/Drawer.d.ts.map +1 -0
  61. package/dist/components/Drawer.js +92 -0
  62. package/dist/components/Drawer.js.map +1 -0
  63. package/dist/components/EmptyState.d.ts +39 -0
  64. package/dist/components/EmptyState.d.ts.map +1 -0
  65. package/dist/components/EmptyState.js +19 -0
  66. package/dist/components/EmptyState.js.map +1 -0
  67. package/dist/components/Field.d.ts +37 -0
  68. package/dist/components/Field.d.ts.map +1 -0
  69. package/dist/components/Field.js +12 -0
  70. package/dist/components/Field.js.map +1 -0
  71. package/dist/components/Fieldset.d.ts +24 -0
  72. package/dist/components/Fieldset.d.ts.map +1 -0
  73. package/dist/components/Fieldset.js +17 -0
  74. package/dist/components/Fieldset.js.map +1 -0
  75. package/dist/components/FileDropZone.d.ts +60 -0
  76. package/dist/components/FileDropZone.d.ts.map +1 -0
  77. package/dist/components/FileDropZone.js +121 -0
  78. package/dist/components/FileDropZone.js.map +1 -0
  79. package/dist/components/Form.d.ts +21 -0
  80. package/dist/components/Form.d.ts.map +1 -0
  81. package/dist/components/Form.js +20 -0
  82. package/dist/components/Form.js.map +1 -0
  83. package/dist/components/IconButton.d.ts +25 -0
  84. package/dist/components/IconButton.d.ts.map +1 -0
  85. package/dist/components/IconButton.js +14 -0
  86. package/dist/components/IconButton.js.map +1 -0
  87. package/dist/components/Input.d.ts +24 -0
  88. package/dist/components/Input.d.ts.map +1 -0
  89. package/dist/components/Input.js +15 -0
  90. package/dist/components/Input.js.map +1 -0
  91. package/dist/components/Menu.d.ts +66 -0
  92. package/dist/components/Menu.d.ts.map +1 -0
  93. package/dist/components/Menu.js +34 -0
  94. package/dist/components/Menu.js.map +1 -0
  95. package/dist/components/MetadataList.d.ts +51 -0
  96. package/dist/components/MetadataList.d.ts.map +1 -0
  97. package/dist/components/MetadataList.js +25 -0
  98. package/dist/components/MetadataList.js.map +1 -0
  99. package/dist/components/NumberField.d.ts +52 -0
  100. package/dist/components/NumberField.d.ts.map +1 -0
  101. package/dist/components/NumberField.js +21 -0
  102. package/dist/components/NumberField.js.map +1 -0
  103. package/dist/components/Pagination.d.ts +40 -0
  104. package/dist/components/Pagination.d.ts.map +1 -0
  105. package/dist/components/Pagination.js +64 -0
  106. package/dist/components/Pagination.js.map +1 -0
  107. package/dist/components/Popover.d.ts +44 -0
  108. package/dist/components/Popover.d.ts.map +1 -0
  109. package/dist/components/Popover.js +14 -0
  110. package/dist/components/Popover.js.map +1 -0
  111. package/dist/components/Progress.d.ts +57 -0
  112. package/dist/components/Progress.d.ts.map +1 -0
  113. package/dist/components/Progress.js +31 -0
  114. package/dist/components/Progress.js.map +1 -0
  115. package/dist/components/Radio.d.ts +61 -0
  116. package/dist/components/Radio.d.ts.map +1 -0
  117. package/dist/components/Radio.js +18 -0
  118. package/dist/components/Radio.js.map +1 -0
  119. package/dist/components/RecordHeader.d.ts +53 -0
  120. package/dist/components/RecordHeader.d.ts.map +1 -0
  121. package/dist/components/RecordHeader.js +19 -0
  122. package/dist/components/RecordHeader.js.map +1 -0
  123. package/dist/components/ScrollArea.d.ts +55 -0
  124. package/dist/components/ScrollArea.d.ts.map +1 -0
  125. package/dist/components/ScrollArea.js +63 -0
  126. package/dist/components/ScrollArea.js.map +1 -0
  127. package/dist/components/Select.d.ts +39 -0
  128. package/dist/components/Select.d.ts.map +1 -0
  129. package/dist/components/Select.js +24 -0
  130. package/dist/components/Select.js.map +1 -0
  131. package/dist/components/Separator.d.ts +26 -0
  132. package/dist/components/Separator.d.ts.map +1 -0
  133. package/dist/components/Separator.js +22 -0
  134. package/dist/components/Separator.js.map +1 -0
  135. package/dist/components/Skeleton.d.ts +31 -0
  136. package/dist/components/Skeleton.d.ts.map +1 -0
  137. package/dist/components/Skeleton.js +17 -0
  138. package/dist/components/Skeleton.js.map +1 -0
  139. package/dist/components/Slider.d.ts +65 -0
  140. package/dist/components/Slider.d.ts.map +1 -0
  141. package/dist/components/Slider.js +30 -0
  142. package/dist/components/Slider.js.map +1 -0
  143. package/dist/components/Spinner.d.ts +23 -0
  144. package/dist/components/Spinner.d.ts.map +1 -0
  145. package/dist/components/Spinner.js +13 -0
  146. package/dist/components/Spinner.js.map +1 -0
  147. package/dist/components/SplitButton.d.ts +59 -0
  148. package/dist/components/SplitButton.d.ts.map +1 -0
  149. package/dist/components/SplitButton.js +30 -0
  150. package/dist/components/SplitButton.js.map +1 -0
  151. package/dist/components/Stat.d.ts +53 -0
  152. package/dist/components/Stat.d.ts.map +1 -0
  153. package/dist/components/Stat.js +23 -0
  154. package/dist/components/Stat.js.map +1 -0
  155. package/dist/components/StatusBadge.d.ts +19 -0
  156. package/dist/components/StatusBadge.d.ts.map +1 -0
  157. package/dist/components/StatusBadge.js +8 -0
  158. package/dist/components/StatusBadge.js.map +1 -0
  159. package/dist/components/StatusIndicator.d.ts +29 -0
  160. package/dist/components/StatusIndicator.d.ts.map +1 -0
  161. package/dist/components/StatusIndicator.js +8 -0
  162. package/dist/components/StatusIndicator.js.map +1 -0
  163. package/dist/components/Surface.d.ts +29 -0
  164. package/dist/components/Surface.d.ts.map +1 -0
  165. package/dist/components/Surface.js +8 -0
  166. package/dist/components/Surface.js.map +1 -0
  167. package/dist/components/Switch.d.ts +22 -0
  168. package/dist/components/Switch.d.ts.map +1 -0
  169. package/dist/components/Switch.js +11 -0
  170. package/dist/components/Switch.js.map +1 -0
  171. package/dist/components/Tabs.d.ts +45 -0
  172. package/dist/components/Tabs.d.ts.map +1 -0
  173. package/dist/components/Tabs.js +49 -0
  174. package/dist/components/Tabs.js.map +1 -0
  175. package/dist/components/Text.d.ts +33 -0
  176. package/dist/components/Text.d.ts.map +1 -0
  177. package/dist/components/Text.js +21 -0
  178. package/dist/components/Text.js.map +1 -0
  179. package/dist/components/Textarea.d.ts +54 -0
  180. package/dist/components/Textarea.d.ts.map +1 -0
  181. package/dist/components/Textarea.js +31 -0
  182. package/dist/components/Textarea.js.map +1 -0
  183. package/dist/components/Timeline.d.ts +35 -0
  184. package/dist/components/Timeline.d.ts.map +1 -0
  185. package/dist/components/Timeline.js +13 -0
  186. package/dist/components/Timeline.js.map +1 -0
  187. package/dist/components/Toast.d.ts +67 -0
  188. package/dist/components/Toast.d.ts.map +1 -0
  189. package/dist/components/Toast.js +94 -0
  190. package/dist/components/Toast.js.map +1 -0
  191. package/dist/components/Tooltip.d.ts +26 -0
  192. package/dist/components/Tooltip.d.ts.map +1 -0
  193. package/dist/components/Tooltip.js +15 -0
  194. package/dist/components/Tooltip.js.map +1 -0
  195. package/dist/components/VisuallyHidden.d.ts +17 -0
  196. package/dist/components/VisuallyHidden.d.ts.map +1 -0
  197. package/dist/components/VisuallyHidden.js +12 -0
  198. package/dist/components/VisuallyHidden.js.map +1 -0
  199. package/dist/components/fieldParts.d.ts +17 -0
  200. package/dist/components/fieldParts.d.ts.map +1 -0
  201. package/dist/components/fieldParts.js +22 -0
  202. package/dist/components/fieldParts.js.map +1 -0
  203. package/dist/components/meter-utils.d.ts +15 -0
  204. package/dist/components/meter-utils.d.ts.map +1 -0
  205. package/dist/components/meter-utils.js +15 -0
  206. package/dist/components/meter-utils.js.map +1 -0
  207. package/dist/components/pagination-utils.d.ts +10 -0
  208. package/dist/components/pagination-utils.d.ts.map +1 -0
  209. package/dist/components/pagination-utils.js +36 -0
  210. package/dist/components/pagination-utils.js.map +1 -0
  211. package/dist/components.css +632 -0
  212. package/dist/data.css +600 -0
  213. package/dist/disclosure.css +93 -0
  214. package/dist/drawer.css +226 -0
  215. package/dist/feedback.css +454 -0
  216. package/dist/forms.css +516 -0
  217. package/dist/index.d.ts +117 -0
  218. package/dist/index.d.ts.map +1 -0
  219. package/dist/index.js +61 -0
  220. package/dist/index.js.map +1 -0
  221. package/dist/motion/lifecycle.d.ts +44 -0
  222. package/dist/motion/lifecycle.d.ts.map +1 -0
  223. package/dist/motion/lifecycle.js +73 -0
  224. package/dist/motion/lifecycle.js.map +1 -0
  225. package/dist/motion/presence.d.ts +69 -0
  226. package/dist/motion/presence.d.ts.map +1 -0
  227. package/dist/motion/presence.js +103 -0
  228. package/dist/motion/presence.js.map +1 -0
  229. package/dist/motion/presets.d.ts +63 -0
  230. package/dist/motion/presets.d.ts.map +1 -0
  231. package/dist/motion/presets.js +30 -0
  232. package/dist/motion/presets.js.map +1 -0
  233. package/dist/motion/resolve.d.ts +31 -0
  234. package/dist/motion/resolve.d.ts.map +1 -0
  235. package/dist/motion/resolve.js +40 -0
  236. package/dist/motion/resolve.js.map +1 -0
  237. package/dist/motion/useRhineMotion.d.ts +19 -0
  238. package/dist/motion/useRhineMotion.d.ts.map +1 -0
  239. package/dist/motion/useRhineMotion.js +19 -0
  240. package/dist/motion/useRhineMotion.js.map +1 -0
  241. package/dist/motion/visibility.d.ts +6 -0
  242. package/dist/motion/visibility.d.ts.map +1 -0
  243. package/dist/motion/visibility.js +31 -0
  244. package/dist/motion/visibility.js.map +1 -0
  245. package/dist/overlays.css +465 -0
  246. package/dist/provider/RhineProvider.d.ts +65 -0
  247. package/dist/provider/RhineProvider.d.ts.map +1 -0
  248. package/dist/provider/RhineProvider.js +26 -0
  249. package/dist/provider/RhineProvider.js.map +1 -0
  250. package/dist/provider/messages.d.ts +190 -0
  251. package/dist/provider/messages.d.ts.map +1 -0
  252. package/dist/provider/messages.js +160 -0
  253. package/dist/provider/messages.js.map +1 -0
  254. package/dist/provider/portal.d.ts +17 -0
  255. package/dist/provider/portal.d.ts.map +1 -0
  256. package/dist/provider/portal.js +20 -0
  257. package/dist/provider/portal.js.map +1 -0
  258. package/dist/reset.css +45 -0
  259. package/dist/split.css +159 -0
  260. package/dist/status.css +353 -0
  261. package/dist/utils/cx.d.ts +2 -0
  262. package/dist/utils/cx.d.ts.map +1 -0
  263. package/dist/utils/cx.js +4 -0
  264. package/dist/utils/cx.js.map +1 -0
  265. package/package.json +62 -3
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Popover as BasePopover } from '@base-ui/react/popover';
4
+ import { usePortalContainer } from '../provider/portal.js';
5
+ import { cx } from '../utils/cx.js';
6
+ export function Popover({ trigger, title, description, children, actions, side = 'bottom', align = 'center', size = 'md', openOnHover = false, arrow = false, open, defaultOpen, onOpenChange, initialFocus, 'aria-label': ariaLabel, className, }) {
7
+ const container = usePortalContainer();
8
+ return (_jsxs(BasePopover.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange ? (next) => onOpenChange(next) : undefined, children: [_jsx(BasePopover.Trigger, { render: trigger, openOnHover: openOnHover }), _jsx(BasePopover.Portal, { container: container, children: _jsx(BasePopover.Positioner, { className: "rl-popover__positioner", side: side, align: align, sideOffset: 8, collisionPadding: 8, positionMethod: "fixed", children: _jsxs(BasePopover.Popup, { className: cx('rl-popover', className), "data-slot": "popover", "data-size": size, "aria-label": title == null ? ariaLabel : undefined, initialFocus: initialFocus, children: [arrow && (_jsx(BasePopover.Arrow, { className: "rl-popover__arrow", children: _jsxs("svg", { viewBox: "0 0 16 8", "aria-hidden": "true", focusable: "false", children: [_jsx("path", { className: "rl-popover__arrow-fill", d: "M0 8 8 0l8 8Z" }), _jsx("path", { className: "rl-popover__arrow-stroke", d: "M0 8 8 0l8 8" })] }) })), (title != null || description != null) && (_jsxs("header", { className: "rl-popover__header", children: [title != null && _jsx(BasePopover.Title, { className: "rl-popover__title", children: title }), description != null && (_jsx(BasePopover.Description, { className: "rl-popover__description", children: description }))] })), children != null && _jsx("div", { className: "rl-popover__body", children: children }), actions != null && _jsx("footer", { className: "rl-popover__actions", children: actions })] }) }) })] }));
9
+ }
10
+ /** Wraps a button so activating it closes the nearest Popover. */
11
+ export function PopoverClose({ children }) {
12
+ return _jsx(BasePopover.Close, { render: children });
13
+ }
14
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/components/Popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAwCpC,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,QAAQ,EAChB,IAAI,GAAG,IAAI,EACX,WAAW,GAAG,KAAK,EACnB,KAAK,GAAG,KAAK,EACb,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EAAE,SAAS,EACvB,SAAS,GACI;IACb,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,OAAO,CACL,MAAC,WAAW,CAAC,IAAI,IACf,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,aAErE,KAAC,WAAW,CAAC,OAAO,IAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAI,EAClE,KAAC,WAAW,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACtC,KAAC,WAAW,CAAC,UAAU,IACrB,SAAS,EAAC,wBAAwB,EAClC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,CAAC,EACnB,cAAc,EAAC,OAAO,YAEtB,MAAC,WAAW,CAAC,KAAK,IAChB,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,eAC5B,SAAS,eACR,IAAI,gBACH,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACjD,YAAY,EAAE,YAAY,aAEzB,KAAK,IAAI,CACR,KAAC,WAAW,CAAC,KAAK,IAAC,SAAS,EAAC,mBAAmB,YAC9C,eAAK,OAAO,EAAC,UAAU,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,aAC1D,eAAM,SAAS,EAAC,wBAAwB,EAAC,CAAC,EAAC,eAAe,GAAG,EAC7D,eAAM,SAAS,EAAC,0BAA0B,EAAC,CAAC,EAAC,cAAc,GAAG,IAC1D,GACY,CACrB,EACA,CAAC,KAAK,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,CACzC,kBAAQ,SAAS,EAAC,oBAAoB,aACnC,KAAK,IAAI,IAAI,IAAI,KAAC,WAAW,CAAC,KAAK,IAAC,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAqB,EAC7F,WAAW,IAAI,IAAI,IAAI,CACtB,KAAC,WAAW,CAAC,WAAW,IAAC,SAAS,EAAC,yBAAyB,YAAE,WAAW,GAA2B,CACrG,IACM,CACV,EACA,QAAQ,IAAI,IAAI,IAAI,cAAK,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAO,EACtE,OAAO,IAAI,IAAI,IAAI,iBAAQ,SAAS,EAAC,qBAAqB,YAAE,OAAO,GAAU,IAC5D,GACG,GACN,IACJ,CACpB,CAAC;AACJ,CAAC;AAOD,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAqB;IAC1D,OAAO,KAAC,WAAW,CAAC,KAAK,IAAC,MAAM,EAAE,QAAQ,GAAI,CAAC;AACjD,CAAC"}
@@ -0,0 +1,57 @@
1
+ import * as React from 'react';
2
+ import { Meter as BaseMeter } from '@base-ui/react/meter';
3
+ import { Progress as BaseProgress } from '@base-ui/react/progress';
4
+ import type { MeterState } from './meter-utils.js';
5
+ /**
6
+ * Progress vs Meter (ADR-0005 §2):
7
+ * - Progress: a task advancing over time to completion. `value={null}` = indeterminate.
8
+ * - Meter: a static measurement inside a known range; never "complete", never indeterminate.
9
+ * Both need a visible label; the value is announced as formatted text, not colour.
10
+ */
11
+ export type ProgressSize = 'sm' | 'md';
12
+ export type ProgressTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
13
+ type BaseProgressProps = React.ComponentProps<typeof BaseProgress.Root>;
14
+ export type ProgressProps = Omit<BaseProgressProps, 'className' | 'style' | 'render' | 'children' | 'value' | 'getAriaValueText' | 'aria-label' | 'aria-labelledby'> & {
15
+ label: React.ReactNode;
16
+ /** The accessible name comes from `label`. */
17
+ 'aria-label'?: never;
18
+ 'aria-labelledby'?: never;
19
+ /** Current value between `min` and `max`; `null` while the total is unknown. */
20
+ value: number | null;
21
+ /** Visible text after the label; defaults to the formatted value (e.g. "42%"). `false` hides it. */
22
+ valueText?: React.ReactNode | false;
23
+ /** Spoken value; defaults to the formatted value, or "进行中" when indeterminate. */
24
+ getValueText?: (formatted: string, value: number | null) => string;
25
+ description?: React.ReactNode;
26
+ size?: ProgressSize;
27
+ tone?: ProgressTone;
28
+ hideLabel?: boolean;
29
+ className?: string;
30
+ style?: React.CSSProperties;
31
+ };
32
+ export declare const Progress: React.ForwardRefExoticComponent<Omit<ProgressProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
33
+ type BaseMeterProps = React.ComponentProps<typeof BaseMeter.Root>;
34
+ export type MeterProps = Omit<BaseMeterProps, 'className' | 'style' | 'render' | 'children' | 'getAriaValueText' | 'aria-label' | 'aria-labelledby'> & {
35
+ label: React.ReactNode;
36
+ /** The accessible name comes from `label`. */
37
+ 'aria-label'?: never;
38
+ 'aria-labelledby'?: never;
39
+ /** Values below `low` / above `high` are out of the preferred range (like native <meter>). */
40
+ low?: number;
41
+ high?: number;
42
+ /** Where the good region is; decides whether low or high values are the warning side. */
43
+ optimum?: number;
44
+ /** Visible value text; defaults to the formatted value. */
45
+ valueText?: React.ReactNode | false;
46
+ getValueText?: (formatted: string, value: number) => string;
47
+ /** Text for the derived state, appended to the spoken value: e.g. { warning: '偏高' }. */
48
+ stateLabels?: Partial<Record<MeterState, string>>;
49
+ description?: React.ReactNode;
50
+ size?: ProgressSize;
51
+ hideLabel?: boolean;
52
+ className?: string;
53
+ style?: React.CSSProperties;
54
+ };
55
+ export declare const Meter: React.ForwardRefExoticComponent<Omit<MeterProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
56
+ export {};
57
+ //# sourceMappingURL=Progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../src/components/Progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAInE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnF,KAAK,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,iBAAiB,EACjB,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,CAChH,GAAG;IACF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,gFAAgF;IAChF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,oGAAoG;IACpG,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACpC,kFAAkF;IAClF,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IACnE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,QAAQ,mGA0DnB,CAAC;AAEH,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,cAAc,EACd,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,CACtG,GAAG;IACF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5D,wFAAwF;IACxF,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,KAAK,gGAmEhB,CAAC"}
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Meter as BaseMeter } from '@base-ui/react/meter';
5
+ import { Progress as BaseProgress } from '@base-ui/react/progress';
6
+ import { useRhineLocale } from '../provider/messages.js';
7
+ import { cx } from '../utils/cx.js';
8
+ import { getMeterState } from './meter-utils.js';
9
+ export const Progress = React.forwardRef(function Progress({ label, value, valueText, getValueText, description, size = 'md', tone = 'neutral', hideLabel = false, format, locale, className, style, ...rest }, ref) {
10
+ const descriptionId = React.useId();
11
+ const { messages, locale: contextLocale } = useRhineLocale();
12
+ const fallbackText = (formatted, v) => (v === null ? messages.progress.indeterminate : formatted);
13
+ return (_jsxs(BaseProgress.Root, { ...rest, ref: ref, locale: locale ?? contextLocale, value: value,
14
+ // Without `format`, Base UI shows the share of the range as a percentage; with it, the raw value.
15
+ format: format, getAriaValueText: getValueText ?? fallbackText, "aria-describedby": description != null ? descriptionId : undefined, className: cx('rl-progress', className), style: style, "data-slot": "progress", "data-size": size, "data-tone": tone, children: [_jsxs("div", { className: hideLabel ? 'rl-visually-hidden' : 'rl-progress__header', children: [_jsx(BaseProgress.Label, { className: "rl-progress__label", children: label }), valueText !== false &&
16
+ (valueText != null ? (_jsx("span", { className: "rl-progress__value", "aria-hidden": "true", children: valueText })) : (value !== null && _jsx(BaseProgress.Value, { className: "rl-progress__value", "aria-hidden": "true" })))] }), _jsx(BaseProgress.Track, { className: "rl-progress__track", children: _jsx(BaseProgress.Indicator, { className: "rl-progress__indicator" }) }), description != null && (_jsx("p", { id: descriptionId, className: "rl-progress__description", children: description }))] }));
17
+ });
18
+ const meterTone = { optimum: 'success', suboptimum: 'warning', critical: 'danger' };
19
+ export const Meter = React.forwardRef(function Meter({ label, value, min = 0, max = 100, low, high, optimum, valueText, getValueText, stateLabels, description, size = 'md', hideLabel = false, locale, className, style, ...rest }, ref) {
20
+ const descriptionId = React.useId();
21
+ const { messages, locale: contextLocale } = useRhineLocale();
22
+ const hasThresholds = low != null || high != null;
23
+ const state = getMeterState(value, { min, max, low, high, optimum });
24
+ const stateText = hasThresholds ? stateLabels?.[state] : undefined;
25
+ const spoken = (formatted, v) => {
26
+ const base = getValueText ? getValueText(formatted, v) : formatted;
27
+ return stateText ? messages.progress.meterValue(base, stateText) : base;
28
+ };
29
+ return (_jsxs(BaseMeter.Root, { ...rest, ref: ref, locale: locale ?? contextLocale, value: value, min: min, max: max, getAriaValueText: spoken, "aria-describedby": description != null ? descriptionId : undefined, className: cx('rl-progress', 'rl-meter', className), style: style, "data-slot": "meter", "data-size": size, "data-tone": hasThresholds ? meterTone[state] : 'neutral', "data-state": hasThresholds ? state : undefined, children: [_jsxs("div", { className: hideLabel ? 'rl-visually-hidden' : 'rl-progress__header', children: [_jsx(BaseMeter.Label, { className: "rl-progress__label", children: label }), valueText !== false && (_jsxs("span", { className: "rl-progress__value", "aria-hidden": "true", children: [valueText ?? _jsx(BaseMeter.Value, {}), stateText && _jsx("span", { className: "rl-meter__state", children: stateText })] }))] }), _jsx(BaseMeter.Track, { className: "rl-progress__track", children: _jsx(BaseMeter.Indicator, { className: "rl-progress__indicator" }) }), description != null && (_jsx("p", { id: descriptionId, className: "rl-progress__description", children: description }))] }));
30
+ });
31
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sourceRoot":"","sources":["../../src/components/Progress.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import * as React from 'react';
2
+ import { Radio as BaseRadio } from '@base-ui/react/radio';
3
+ import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
4
+ import type { ChoiceOrientation } from './Checkbox.js';
5
+ import type { FieldValidationMode } from './Field.js';
6
+ /**
7
+ * Single choice from a short, fully visible list (≤ 6 options; use Select beyond that).
8
+ * Arrow keys move and select within the group; Tab enters at the checked option.
9
+ *
10
+ * <RadioGroup label="保密级别" name="level" defaultValue="internal">
11
+ * <Radio value="public" label="公开" />
12
+ * <Radio value="internal" label="内部" description="仅本机构成员可见。" />
13
+ * </RadioGroup>
14
+ */
15
+ type BaseGroupProps = React.ComponentProps<typeof BaseRadioGroup>;
16
+ export type RadioGroupProps = Pick<BaseGroupProps, 'value' | 'defaultValue' | 'onValueChange' | 'readOnly'> & {
17
+ label: React.ReactNode;
18
+ description?: React.ReactNode;
19
+ /** Shown when nothing is chosen on submit (`required`) or when `invalid` is set. */
20
+ error?: React.ReactNode;
21
+ invalid?: boolean;
22
+ name?: string;
23
+ required?: boolean;
24
+ optional?: boolean;
25
+ disabled?: boolean;
26
+ validationMode?: FieldValidationMode;
27
+ orientation?: ChoiceOrientation;
28
+ className?: string;
29
+ style?: React.CSSProperties;
30
+ children: React.ReactNode;
31
+ };
32
+ export declare const RadioGroup: React.ForwardRefExoticComponent<Pick<BaseRadioGroup.Props<unknown>, "value" | "defaultValue" | "readOnly" | "onValueChange"> & {
33
+ label: React.ReactNode;
34
+ description?: React.ReactNode;
35
+ /** Shown when nothing is chosen on submit (`required`) or when `invalid` is set. */
36
+ error?: React.ReactNode;
37
+ invalid?: boolean;
38
+ name?: string;
39
+ required?: boolean;
40
+ optional?: boolean;
41
+ disabled?: boolean;
42
+ validationMode?: FieldValidationMode;
43
+ orientation?: ChoiceOrientation;
44
+ className?: string;
45
+ style?: React.CSSProperties;
46
+ children: React.ReactNode;
47
+ } & React.RefAttributes<HTMLDivElement>>;
48
+ type BaseRadioProps = React.ComponentProps<typeof BaseRadio.Root>;
49
+ export type RadioProps = Omit<BaseRadioProps, 'className' | 'style' | 'render' | 'children' | 'nativeButton' | 'value' | 'aria-label' | 'aria-labelledby'> & {
50
+ value: string;
51
+ label: React.ReactNode;
52
+ /** The name comes from `label`; a second naming channel would drift from the visible text. */
53
+ 'aria-label'?: never;
54
+ 'aria-labelledby'?: never;
55
+ description?: React.ReactNode;
56
+ className?: string;
57
+ style?: React.CSSProperties;
58
+ };
59
+ export declare const Radio: React.ForwardRefExoticComponent<Omit<RadioProps, "ref"> & React.RefAttributes<HTMLElement>>;
60
+ export {};
61
+ //# sourceMappingURL=Radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../src/components/Radio.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;GAQG;AAEH,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC,GAAG;IAC5G,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,oFAAoF;IACpF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,UAAU;WAhBd,KAAK,CAAC,SAAS;kBACR,KAAK,CAAC,SAAS;IAC7B,oFAAoF;YAC5E,KAAK,CAAC,SAAS;cACb,OAAO;WACV,MAAM;eACF,OAAO;eACP,OAAO;eACP,OAAO;qBACD,mBAAmB;kBACtB,iBAAiB;gBACnB,MAAM;YACV,KAAK,CAAC,aAAa;cACjB,KAAK,CAAC,SAAS;wCAiDzB,CAAC;AAEH,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,cAAc,EACd,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,YAAY,GAAG,iBAAiB,CAC5G,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,KAAK,6FAkBhB,CAAC"}
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Field as BaseField } from '@base-ui/react/field';
5
+ import { Fieldset as BaseFieldset } from '@base-ui/react/fieldset';
6
+ import { Radio as BaseRadio } from '@base-ui/react/radio';
7
+ import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
8
+ import { cx } from '../utils/cx.js';
9
+ import { ChoiceGroupContext, FieldErrorMessage, LabelText } from './fieldParts.js';
10
+ export const RadioGroup = React.forwardRef(function RadioGroup({ label, description, error, invalid, name, required = false, optional = false, disabled, validationMode, orientation = 'vertical', className, style, children, ...groupProps }, ref) {
11
+ const match = invalid ? true : undefined;
12
+ return (_jsxs(BaseField.Root, { ref: ref, name: name, disabled: disabled, invalid: invalid, validationMode: validationMode, className: cx('rl-choice-group', className), style: style, "data-slot": "radio-group", children: [_jsxs(BaseFieldset.Root, { className: "rl-choice-group__fieldset", render: _jsx(BaseRadioGroup, { ...groupProps, required: required, disabled: disabled }), children: [_jsx(BaseFieldset.Legend, { className: "rl-choice-group__legend", children: _jsx(LabelText, { label: label, required: required, optional: optional }) }), _jsx("div", { className: "rl-choice-group__items", "data-orientation": orientation, children: _jsx(ChoiceGroupContext.Provider, { value: "radio", children: children }) })] }), description != null && _jsx(BaseField.Description, { className: "rl-field__description", children: description }), (error != null || name != null) && _jsx(FieldErrorMessage, { error: error, match: match, name: name })] }));
13
+ });
14
+ export const Radio = React.forwardRef(function Radio({ value, label, description, disabled, className, style, ...rest }, ref) {
15
+ // Outside <RadioGroup> Base UI throws (Field.Item needs a Field.Root), which is the intended failure.
16
+ return (_jsxs(BaseField.Item, { className: cx('rl-choice', className), style: style, disabled: disabled, "data-kind": "radio", children: [_jsxs(BaseField.Label, { className: "rl-choice__label", children: [_jsx(BaseRadio.Root, { ...rest, ref: ref, value: value, disabled: disabled, className: "rl-radio", "data-slot": "radio", children: _jsx(BaseRadio.Indicator, { className: "rl-radio__indicator", keepMounted: true }) }), _jsx("span", { className: "rl-choice__text", children: label })] }), description != null && (_jsx(BaseField.Description, { className: "rl-choice__description", children: description }))] }));
17
+ });
18
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../src/components/Radio.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import type { BreadcrumbItem } from './Breadcrumb.js';
3
+ import type { MetadataItem } from './MetadataList.js';
4
+ import type { StatusKind } from './StatusBadge.js';
5
+ /**
6
+ * Archive record header: location trail, record ID, status, title, classification,
7
+ * summary, key timestamps and actions. Every field except `title` is optional and is
8
+ * omitted when absent — the header never fabricates IDs, dates or access levels.
9
+ */
10
+ /** Same shape as a Breadcrumb item (ADR-0005 §4). */
11
+ export type RecordTrailItem = BreadcrumbItem;
12
+ export interface RecordStatus {
13
+ tone: StatusKind;
14
+ /** Visible text; colour never carries the status alone. */
15
+ label: React.ReactNode;
16
+ }
17
+ export type RecordHeaderProps = Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'id'> & {
18
+ title: React.ReactNode;
19
+ /** Record identifier, e.g. "ARC-1024". Rendered in mono above the title. */
20
+ recordId?: string;
21
+ status?: RecordStatus;
22
+ /** Ancestors of this record. Rendered as a breadcrumb <nav>; the last item is the current page. */
23
+ trail?: readonly RecordTrailItem[];
24
+ /** Classification terms, e.g. ["样本", "海洋来源"]. Joined with a hairline separator. */
25
+ classification?: readonly React.ReactNode[];
26
+ summary?: React.ReactNode;
27
+ /** Key facts beside the title (created / updated / owner). Empty values are hidden. */
28
+ meta?: readonly MetadataItem[];
29
+ actions?: React.ReactNode;
30
+ /** Heading level of the title; keep the document outline correct. */
31
+ headingLevel?: 1 | 2 | 3;
32
+ /** Accessible name of the breadcrumb navigation. */
33
+ trailLabel?: string;
34
+ };
35
+ export declare const RecordHeader: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "id" | "title"> & {
36
+ title: React.ReactNode;
37
+ /** Record identifier, e.g. "ARC-1024". Rendered in mono above the title. */
38
+ recordId?: string;
39
+ status?: RecordStatus;
40
+ /** Ancestors of this record. Rendered as a breadcrumb <nav>; the last item is the current page. */
41
+ trail?: readonly RecordTrailItem[];
42
+ /** Classification terms, e.g. ["样本", "海洋来源"]. Joined with a hairline separator. */
43
+ classification?: readonly React.ReactNode[];
44
+ summary?: React.ReactNode;
45
+ /** Key facts beside the title (created / updated / owner). Empty values are hidden. */
46
+ meta?: readonly MetadataItem[];
47
+ actions?: React.ReactNode;
48
+ /** Heading level of the title; keep the document outline correct. */
49
+ headingLevel?: 1 | 2 | 3;
50
+ /** Accessible name of the breadcrumb navigation. */
51
+ trailLabel?: string;
52
+ } & React.RefAttributes<HTMLElement>>;
53
+ //# sourceMappingURL=RecordHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordHeader.d.ts","sourceRoot":"","sources":["../../src/components/RecordHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AAEH,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,2DAA2D;IAC3D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG;IACxF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,mGAAmG;IACnG,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,mFAAmF;IACnF,cAAc,CAAC,EAAE,SAAS,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5C,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uFAAuF;IACvF,IAAI,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qEAAqE;IACrE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY;WAlBhB,KAAK,CAAC,SAAS;IACtB,4EAA4E;eACjE,MAAM;aACR,YAAY;IACrB,mGAAmG;YAC3F,SAAS,eAAe,EAAE;IAClC,mFAAmF;qBAClE,SAAS,KAAK,CAAC,SAAS,EAAE;cACjC,KAAK,CAAC,SAAS;IACzB,uFAAuF;WAChF,SAAS,YAAY,EAAE;cACpB,KAAK,CAAC,SAAS;IACzB,qEAAqE;mBACtD,CAAC,GAAG,CAAC,GAAG,CAAC;IACxB,oDAAoD;iBACvC,MAAM;qCAgEnB,CAAC"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { useRhineMessages } from '../provider/messages.js';
5
+ import { cx } from '../utils/cx.js';
6
+ import { Breadcrumb } from './Breadcrumb.js';
7
+ import { MetadataList, isEmptyValue } from './MetadataList.js';
8
+ import { StatusBadge } from './StatusBadge.js';
9
+ export const RecordHeader = React.forwardRef(function RecordHeader({ title, recordId, status, trail, classification, summary, meta, actions, headingLevel = 1, trailLabel: trailLabelProp, className, ...rest }, ref) {
10
+ const messages = useRhineMessages();
11
+ const trailLabel = trailLabelProp ?? messages.recordHeader.trail;
12
+ const Heading = `h${headingLevel}`;
13
+ const terms = (classification ?? []).filter((term) => !isEmptyValue(term));
14
+ const hasMeta = (meta ?? []).some((item) => !isEmptyValue(item.value));
15
+ return (_jsxs("header", { ...rest, ref: ref, className: cx('rl-record', className), "data-slot": "record-header", "data-has-meta": hasMeta || undefined, children: [trail && trail.length > 0 && (
16
+ // maxItems={0}: record trails are short and always shown in full.
17
+ _jsx(Breadcrumb, { className: "rl-record__trail", items: trail, label: trailLabel, maxItems: 0 })), _jsxs("div", { className: "rl-record__main", children: [_jsxs("div", { className: "rl-record__identity", children: [(recordId || status) && (_jsxs("p", { className: "rl-record__id-row", children: [recordId && _jsx("span", { className: "rl-record__id", children: recordId }), status && (_jsx(StatusBadge, { status: status.tone, size: "sm", appearance: "outline", children: status.label }))] })), _jsx(Heading, { className: "rl-record__title", children: title }), terms.length > 0 && (_jsx("p", { className: "rl-record__classification", children: terms.map((term, index) => (_jsx("span", { className: "rl-record__term", children: term }, index))) })), !isEmptyValue(summary) && _jsx("p", { className: "rl-record__summary", children: summary })] }), hasMeta && _jsx(MetadataList, { className: "rl-record__meta", items: meta, size: "sm" })] }), actions != null && _jsx("div", { className: "rl-record__actions", children: actions })] }));
18
+ });
19
+ //# sourceMappingURL=RecordHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordHeader.js","sourceRoot":"","sources":["../../src/components/RecordHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Scroll container with an overlay scrollbar (Base UI scroll-area, ADR-0001). The viewport is the
4
+ * native scroller, so wheel, touch, trackpad, keyboard (↑ ↓ PageUp PageDown Home End Space once
5
+ * focused), find-in-page and `scrollTo` all keep working; the custom thumb only mirrors it and can
6
+ * be dragged. The viewport is a named `role="region"`; Base UI puts it in the tab order only while
7
+ * it actually overflows (axe `scrollable-region-focusable`), so a short list adds no tab stop.
8
+ * Under `forced-colors: active` the overlay is hidden and the native scrollbar comes back.
9
+ * Motion: the overlay fades in on hover / scroll / focus (CSS opacity, --rl-motion-fast; tokens are
10
+ * 0 under reduced motion).
11
+ *
12
+ * `onScrollIntentUp` reports user intent to move up — wheel up, ↑ / PageUp / Home / Shift+Space on
13
+ * the focused viewport, dragging the thumb upward, or pressing the track above the thumb — and is
14
+ * never called for programmatic scrolling. Use it to leave "follow latest" modes. It may fire many
15
+ * times per gesture (once per event); it fires even at the top edge, because it is intent, not
16
+ * position.
17
+ *
18
+ * <ScrollArea label="运行日志" maxHeight="20rem">{lines}</ScrollArea>
19
+ */
20
+ export type ScrollAreaOrientation = 'vertical' | 'both';
21
+ export type ScrollAreaProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onScroll' | 'aria-label' | 'role'> & {
22
+ /** Accessible name of the scrollable region, e.g. 「运行日志」. */
23
+ label: string;
24
+ children: React.ReactNode;
25
+ /** Ref to the native scroller (for `scrollTo`, measuring, observers). */
26
+ viewportRef?: React.Ref<HTMLDivElement>;
27
+ /** CSS length that caps the viewport height, e.g. `"20rem"`. Without it the area fills its parent. */
28
+ maxHeight?: string;
29
+ /** `vertical` (default) wraps content to the width; `both` also scrolls horizontally. */
30
+ orientation?: ScrollAreaOrientation;
31
+ /** Native scroll events of the viewport. */
32
+ onScroll?: React.UIEventHandler<HTMLDivElement>;
33
+ /** The user tried to scroll up (see component docs). */
34
+ onScrollIntentUp?: () => void;
35
+ /** Class on the viewport, for padding or content layout. */
36
+ viewportClassName?: string;
37
+ };
38
+ export declare const ScrollArea: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "role" | "aria-label" | "onScroll"> & {
39
+ /** Accessible name of the scrollable region, e.g. 「运行日志」. */
40
+ label: string;
41
+ children: React.ReactNode;
42
+ /** Ref to the native scroller (for `scrollTo`, measuring, observers). */
43
+ viewportRef?: React.Ref<HTMLDivElement>;
44
+ /** CSS length that caps the viewport height, e.g. `"20rem"`. Without it the area fills its parent. */
45
+ maxHeight?: string;
46
+ /** `vertical` (default) wraps content to the width; `both` also scrolls horizontally. */
47
+ orientation?: ScrollAreaOrientation;
48
+ /** Native scroll events of the viewport. */
49
+ onScroll?: React.UIEventHandler<HTMLDivElement>;
50
+ /** The user tried to scroll up (see component docs). */
51
+ onScrollIntentUp?: () => void;
52
+ /** Class on the viewport, for padding or content layout. */
53
+ viewportClassName?: string;
54
+ } & React.RefAttributes<HTMLDivElement>>;
55
+ //# sourceMappingURL=ScrollArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../src/components/ScrollArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC,GAAG;IAC1H,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yEAAyE;IACzE,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAChD,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAIF,eAAO,MAAM,UAAU;IAnBrB,6DAA6D;WACtD,MAAM;cACH,KAAK,CAAC,SAAS;IACzB,yEAAyE;kBAC3D,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;IACvC,sGAAsG;gBAC1F,MAAM;IAClB,yFAAyF;kBAC3E,qBAAqB;IACnC,4CAA4C;eACjC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/C,wDAAwD;uBACrC,MAAM,IAAI;IAC7B,4DAA4D;wBACxC,MAAM;wCA8F1B,CAAC"}
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { ScrollArea as BaseScrollArea } from '@base-ui/react/scroll-area';
5
+ import { cx } from '../utils/cx.js';
6
+ const UP_KEYS = new Set(['ArrowUp', 'PageUp', 'Home']);
7
+ export const ScrollArea = React.forwardRef(function ScrollArea({ label, children, viewportRef, maxHeight, orientation = 'vertical', onScroll, onScrollIntentUp, viewportClassName, className, style, ...rest }, ref) {
8
+ const dragY = React.useRef(null);
9
+ const thumbRef = React.useRef(null);
10
+ const both = orientation === 'both';
11
+ const intent = onScrollIntentUp;
12
+ const viewportHandlers = intent
13
+ ? {
14
+ onWheel: (event) => {
15
+ if (event.deltaY < 0)
16
+ intent();
17
+ },
18
+ onKeyDown: (event) => {
19
+ if (event.target !== event.currentTarget || event.altKey || event.ctrlKey || event.metaKey)
20
+ return;
21
+ if (UP_KEYS.has(event.key) || (event.key === ' ' && event.shiftKey))
22
+ intent();
23
+ },
24
+ }
25
+ : {};
26
+ const scrollbarHandlers = intent
27
+ ? {
28
+ onPointerDown: (event) => {
29
+ const thumb = thumbRef.current;
30
+ if (!thumb || thumb.contains(event.target))
31
+ return;
32
+ // Pressing the track above the thumb pages up.
33
+ if (event.clientY < thumb.getBoundingClientRect().top)
34
+ intent();
35
+ },
36
+ }
37
+ : {};
38
+ const thumbHandlers = intent
39
+ ? {
40
+ onPointerDown: (event) => {
41
+ dragY.current = event.clientY;
42
+ },
43
+ onPointerMove: (event) => {
44
+ if (dragY.current === null)
45
+ return;
46
+ if (event.clientY < dragY.current)
47
+ intent();
48
+ dragY.current = event.clientY;
49
+ },
50
+ onPointerUp: () => {
51
+ dragY.current = null;
52
+ },
53
+ onPointerCancel: () => {
54
+ dragY.current = null;
55
+ },
56
+ }
57
+ : {};
58
+ const rootStyle = maxHeight !== undefined ? { ...style, '--rl-scroll-area-max-height': maxHeight } : style;
59
+ return (_jsxs(BaseScrollArea.Root, { ...rest, ref: ref, className: cx('rl-scroll-area', className), "data-slot": "scroll-area", "data-orientation": orientation, style: rootStyle, children: [_jsx(BaseScrollArea.Viewport, { ref: viewportRef, role: "region", "aria-label": label, className: cx('rl-scroll-area__viewport', viewportClassName),
60
+ // Vertical-only areas wrap to the width instead of growing a horizontal scroller.
61
+ style: both ? undefined : { overflowX: 'hidden' }, onScroll: onScroll, ...viewportHandlers, children: _jsx(BaseScrollArea.Content, { className: "rl-scroll-area__content", style: both ? undefined : { minWidth: 0 }, children: children }) }), _jsx(BaseScrollArea.Scrollbar, { className: "rl-scroll-area__scrollbar", orientation: "vertical", ...scrollbarHandlers, children: _jsx(BaseScrollArea.Thumb, { ref: thumbRef, className: "rl-scroll-area__thumb", ...thumbHandlers }) }), both && (_jsxs(_Fragment, { children: [_jsx(BaseScrollArea.Scrollbar, { className: "rl-scroll-area__scrollbar", orientation: "horizontal", children: _jsx(BaseScrollArea.Thumb, { className: "rl-scroll-area__thumb" }) }), _jsx(BaseScrollArea.Corner, { className: "rl-scroll-area__corner" })] }))] }));
62
+ });
63
+ //# sourceMappingURL=ScrollArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.js","sourceRoot":"","sources":["../../src/components/ScrollArea.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import type { InputSize } from './Input.js';
3
+ /**
4
+ * Single-value select on Base UI Select (ADR-0001): combobox + listbox semantics, typeahead,
5
+ * arrow/Home/End navigation, Escape to cancel, focus return. Inside `<Field>` it takes the
6
+ * field's label, description, error and validity; standalone, pass `aria-label`.
7
+ * Popup motion is a CSS transition on Base UI's starting/ending styles (--rl-motion-fast).
8
+ */
9
+ export interface SelectOption {
10
+ value: string;
11
+ label: React.ReactNode;
12
+ disabled?: boolean;
13
+ }
14
+ export interface SelectGroup {
15
+ label: React.ReactNode;
16
+ options: readonly SelectOption[];
17
+ }
18
+ export type SelectProps = {
19
+ options: readonly (SelectOption | SelectGroup)[];
20
+ value?: string | null;
21
+ defaultValue?: string | null;
22
+ onValueChange?: (value: string | null) => void;
23
+ placeholder?: React.ReactNode;
24
+ name?: string;
25
+ required?: boolean;
26
+ disabled?: boolean;
27
+ readOnly?: boolean;
28
+ size?: InputSize;
29
+ /** Mark invalid outside a Field (inside a Field, validity comes from Field). */
30
+ invalid?: boolean;
31
+ open?: boolean;
32
+ onOpenChange?: (open: boolean) => void;
33
+ id?: string;
34
+ 'aria-label'?: string;
35
+ 'aria-labelledby'?: string;
36
+ className?: string;
37
+ };
38
+ export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>>;
39
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA+BF,eAAO,MAAM,MAAM,uFAoFjB,CAAC"}
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Select as BaseSelect } from '@base-ui/react/select';
5
+ import { useRhineMessages } from '../provider/messages.js';
6
+ import { usePortalContainer } from '../provider/portal.js';
7
+ import { cx } from '../utils/cx.js';
8
+ const isGroup = (item) => 'options' in item;
9
+ function Chevron() {
10
+ return (_jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m4 6 4 4 4-4", strokeLinecap: "round", strokeLinejoin: "round" }) }));
11
+ }
12
+ function Check() {
13
+ return (_jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m3 8.5 3.5 3.5L13 4.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
14
+ }
15
+ function Option({ option }) {
16
+ return (_jsxs(BaseSelect.Item, { value: option.value, disabled: option.disabled, className: "rl-select__item", children: [_jsx(BaseSelect.ItemIndicator, { className: "rl-select__indicator", children: _jsx(Check, {}) }), _jsx(BaseSelect.ItemText, { className: "rl-select__item-text", children: option.label })] }));
17
+ }
18
+ export const Select = React.forwardRef(function Select({ options, value, defaultValue, onValueChange, placeholder: placeholderProp, name, required, disabled, readOnly, size = 'md', invalid, open, onOpenChange, id, className, ...aria }, ref) {
19
+ const container = usePortalContainer();
20
+ const messages = useRhineMessages();
21
+ const items = React.useMemo(() => options.flatMap((o) => (isGroup(o) ? o.options : [o])).map((o) => ({ value: o.value, label: o.label })), [options]);
22
+ return (_jsxs(BaseSelect.Root, { items: items, value: value, defaultValue: defaultValue, onValueChange: onValueChange ? (v) => onValueChange(v ?? null) : undefined, name: name, required: required, disabled: disabled, readOnly: readOnly, open: open, onOpenChange: onOpenChange ? (o) => onOpenChange(o) : undefined, id: id, children: [_jsxs(BaseSelect.Trigger, { ...aria, ref: ref, ...(invalid ? { 'aria-invalid': true } : null), className: cx('rl-select', className), "data-slot": "select", "data-size": size, "data-invalid": invalid || undefined, children: [_jsx(BaseSelect.Value, { className: "rl-select__value", placeholder: placeholderProp === undefined ? messages.select.placeholder : placeholderProp }), _jsx(BaseSelect.Icon, { className: "rl-select__icon", children: _jsx(Chevron, {}) })] }), _jsx(BaseSelect.Portal, { container: container, children: _jsx(BaseSelect.Positioner, { className: "rl-select__positioner", sideOffset: 4, collisionPadding: 8, alignItemWithTrigger: false, positionMethod: "fixed", children: _jsx(BaseSelect.Popup, { className: "rl-select__popup", children: _jsx(BaseSelect.List, { className: "rl-select__list", children: options.map((item, index) => isGroup(item) ? (_jsxs(BaseSelect.Group, { className: "rl-select__group", children: [_jsx(BaseSelect.GroupLabel, { className: "rl-select__group-label", children: item.label }), item.options.map((o) => (_jsx(Option, { option: o }, o.value)))] }, `g-${index}`)) : (_jsx(Option, { option: item }, item.value))) }) }) }) })] }));
23
+ });
24
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+ export type SeparatorOrientation = 'horizontal' | 'vertical';
3
+ export type SeparatorTone = 'subtle' | 'default' | 'strong';
4
+ export type SeparatorProps = Omit<React.ComponentPropsWithoutRef<'div'>, 'role' | 'children'> & {
5
+ orientation?: SeparatorOrientation;
6
+ tone?: SeparatorTone;
7
+ /**
8
+ * Purely visual rule: removed from the accessibility tree. Use for decoration inside a
9
+ * group whose structure is already conveyed by headings or lists.
10
+ */
11
+ decorative?: boolean;
12
+ };
13
+ /**
14
+ * Thin rule between groups of content (`role="separator"`). It is never the only boundary of
15
+ * an interactive region (DESIGN.md §3); focus, error and selection have their own styles.
16
+ */
17
+ export declare const Separator: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "children" | "role"> & {
18
+ orientation?: SeparatorOrientation;
19
+ tone?: SeparatorTone;
20
+ /**
21
+ * Purely visual rule: removed from the accessibility tree. Use for decoration inside a
22
+ * group whose structure is already conveyed by headings or lists.
23
+ */
24
+ decorative?: boolean;
25
+ } & React.RefAttributes<HTMLDivElement>>;
26
+ //# sourceMappingURL=Separator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator.d.ts","sourceRoot":"","sources":["../../src/components/Separator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG;IAC9F,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;kBAbN,oBAAoB;WAC3B,aAAa;IACpB;;;OAGG;iBACU,OAAO;wCAqBpB,CAAC"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Separator as BaseSeparator } from '@base-ui/react/separator';
5
+ import { cx } from '../utils/cx.js';
6
+ /**
7
+ * Thin rule between groups of content (`role="separator"`). It is never the only boundary of
8
+ * an interactive region (DESIGN.md §3); focus, error and selection have their own styles.
9
+ */
10
+ export const Separator = React.forwardRef(function Separator({ orientation = 'horizontal', tone = 'default', decorative = false, className, ...rest }, ref) {
11
+ const shared = {
12
+ ...rest,
13
+ className: cx('rl-separator', className),
14
+ 'data-slot': 'separator',
15
+ 'data-tone': tone,
16
+ };
17
+ if (decorative) {
18
+ return _jsx("div", { ...shared, ref: ref, "aria-hidden": "true", "data-orientation": orientation });
19
+ }
20
+ return _jsx(BaseSeparator, { ...shared, ref: ref, orientation: orientation });
21
+ });
22
+ //# sourceMappingURL=Separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator.js","sourceRoot":"","sources":["../../src/components/Separator.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAepC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAiC,SAAS,SAAS,CAC1F,EAAE,WAAW,GAAG,YAAY,EAAE,IAAI,GAAG,SAAS,EAAE,UAAU,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EACxF,GAAG;IAEH,MAAM,MAAM,GAAG;QACb,GAAG,IAAI;QACP,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC;QACxC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,IAAI;KAClB,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,iBAAS,MAAM,EAAE,GAAG,EAAE,GAAG,iBAAc,MAAM,sBAAmB,WAAW,GAAI,CAAC;IACzF,CAAC;IACD,OAAO,KAAC,aAAa,OAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,GAAI,CAAC;AAC3E,CAAC,CAAC,CAAC"}