@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 @@
1
+ {"version":3,"file":"Breadcrumb.js","sourceRoot":"","sources":["../../src/components/Breadcrumb.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ type MotionConflictingProps = 'onDrag' | 'onDragStart' | 'onDragEnd' | 'onAnimationStart' | 'onAnimationEnd' | 'onAnimationIteration';
3
+ export type ButtonVariant = 'primary' | 'accent' | 'secondary' | 'ghost';
4
+ export type ButtonSize = 'sm' | 'md' | 'lg';
5
+ export type ButtonProps = Omit<React.ComponentPropsWithoutRef<'button'>, 'disabled' | MotionConflictingProps> & {
6
+ /** Visual weight. `primary` = ink fill; `accent` = research-orange signal, use once per view. */
7
+ variant?: ButtonVariant;
8
+ size?: ButtonSize;
9
+ /** Blocks activation and announces busy state while keeping focus and the accessible name. */
10
+ loading?: boolean;
11
+ disabled?: boolean;
12
+ /** Decorative leading icon; hidden from assistive tech. */
13
+ iconStart?: React.ReactNode;
14
+ /** Decorative trailing icon; hidden from assistive tech. */
15
+ iconEnd?: React.ReactNode;
16
+ };
17
+ export declare const Button: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, MotionConflictingProps | "disabled"> & {
18
+ /** Visual weight. `primary` = ink fill; `accent` = research-orange signal, use once per view. */
19
+ variant?: ButtonVariant;
20
+ size?: ButtonSize;
21
+ /** Blocks activation and announces busy state while keeping focus and the accessible name. */
22
+ loading?: boolean;
23
+ disabled?: boolean;
24
+ /** Decorative leading icon; hidden from assistive tech. */
25
+ iconStart?: React.ReactNode;
26
+ /** Decorative trailing icon; hidden from assistive tech. */
27
+ iconEnd?: React.ReactNode;
28
+ } & React.RefAttributes<HTMLButtonElement>>;
29
+ export {};
30
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,KAAK,sBAAsB,GACvB,QAAQ,GACR,aAAa,GACb,WAAW,GACX,kBAAkB,GAClB,gBAAgB,GAChB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAAC,GAAG;IAC9G,iGAAiG;IACjG,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,MAAM;IAZjB,iGAAiG;cACvF,aAAa;WAChB,UAAU;IACjB,8FAA8F;cACpF,OAAO;eACN,OAAO;IAClB,2DAA2D;gBAC/C,KAAK,CAAC,SAAS;IAC3B,4DAA4D;cAClD,KAAK,CAAC,SAAS;2CAkFzB,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 { AnimatePresence, motion } from 'motion/react';
5
+ import { fadePresence, pressScale } from '../motion/presets.js';
6
+ import { useRhineMotion } from '../motion/useRhineMotion.js';
7
+ import { cx } from '../utils/cx.js';
8
+ import { Spinner } from './Spinner.js';
9
+ export const Button = React.forwardRef(function Button({ variant = 'primary', size = 'md', loading = false, disabled = false, type = 'button', iconStart, iconEnd, children, className, onClick, ...rest }, ref) {
10
+ const motionPrefs = useRhineMotion();
11
+ const interactive = !disabled && !loading;
12
+ const handleClick = (event) => {
13
+ if (loading) {
14
+ // Also stops implicit form submission for type="submit".
15
+ event.preventDefault();
16
+ return;
17
+ }
18
+ onClick?.(event);
19
+ };
20
+ return (_jsxs(motion.button, { ...rest, ref: ref, type: type,
21
+ // Native disabled removes focus; loading keeps the button focusable via aria-disabled.
22
+ disabled: disabled, "aria-disabled": loading || undefined, "aria-busy": loading || undefined, "data-slot": "button", "data-variant": variant, "data-size": size, "data-loading": loading || undefined, className: cx('rl-button', className), onClick: handleClick, whileTap: interactive && !motionPrefs.reduced ? { scale: pressScale } : undefined, transition: motionPrefs.get('press'), children: [_jsxs(motion.span, { className: "rl-button__content", initial: false, animate: { opacity: loading ? 0 : 1 }, transition: motionPrefs.get('fast'), children: [iconStart != null && (_jsx("span", { className: "rl-button__icon", "aria-hidden": "true", children: iconStart })), _jsx("span", { className: "rl-button__label", children: children }), iconEnd != null && (_jsx("span", { className: "rl-button__icon", "aria-hidden": "true", children: iconEnd }))] }), _jsx(AnimatePresence, { initial: false, children: loading && (_jsx(motion.span, { className: "rl-button__spinner", "aria-hidden": "true", ...fadePresence, transition: motionPrefs.get('fast'), children: _jsx(Spinner, {}) }, "spinner")) })] }));
23
+ });
24
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA2BvC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAiC,SAAS,MAAM,CACpF,EACE,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,QAAQ,EACf,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,EACP,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC;IAE1C,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAE,EAAE;QACjE,IAAI,OAAO,EAAE,CAAC;YACZ,yDAAyD;YACzD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,MAAM,CAAC,MAAM,OACR,IAAI,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI;QACV,uFAAuF;QACvF,QAAQ,EAAE,QAAQ,mBACH,OAAO,IAAI,SAAS,eACxB,OAAO,IAAI,SAAS,eACrB,QAAQ,kBACJ,OAAO,eACV,IAAI,kBACD,OAAO,IAAI,SAAS,EAClC,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,EACjF,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,aAEpC,MAAC,MAAM,CAAC,IAAI,IACV,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EACrC,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,aAElC,SAAS,IAAI,IAAI,IAAI,CACpB,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,YACjD,SAAS,GACL,CACR,EACD,eAAM,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAQ,EACnD,OAAO,IAAI,IAAI,IAAI,CAClB,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,YACjD,OAAO,GACH,CACR,IACW,EACd,KAAC,eAAe,IAAC,OAAO,EAAE,KAAK,YAC5B,OAAO,IAAI,CACV,KAAC,MAAM,CAAC,IAAI,IAEV,SAAS,EAAC,oBAAoB,iBAClB,MAAM,KACd,YAAY,EAChB,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAEnC,KAAC,OAAO,KAAG,IANP,SAAS,CAOD,CACf,GACe,IACJ,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,81 @@
1
+ import * as React from 'react';
2
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
3
+ import { CheckboxGroup as BaseCheckboxGroup } from '@base-ui/react/checkbox-group';
4
+ import { Field as BaseField } from '@base-ui/react/field';
5
+ import type { FieldValidationMode } from './Field.js';
6
+ /**
7
+ * Checkbox on Base UI Checkbox (ADR-0001). The whole row — box and text — is one `<label>`,
8
+ * so the text is the accessible name and the click target. Inside `<CheckboxGroup>` the
9
+ * checkbox becomes a group item and its `value` is submitted under the group's `name`.
10
+ *
11
+ * <Checkbox name="notify" label="复核完成后通知我" description="通过联系邮箱发送。" />
12
+ */
13
+ type BaseRootProps = React.ComponentProps<typeof BaseCheckbox.Root>;
14
+ export type CheckboxProps = Omit<BaseRootProps, 'className' | 'style' | 'render' | 'children' | 'nativeButton' | 'aria-label' | 'aria-labelledby'> & {
15
+ /** Visible label and accessible name. Use `hideLabel` where the context already shows it (table rows). */
16
+ label: React.ReactNode;
17
+ /** The name comes from `label`; a second naming channel would drift from the visible text. */
18
+ 'aria-label'?: never;
19
+ 'aria-labelledby'?: never;
20
+ /** Keep the label for assistive tech only. */
21
+ hideLabel?: boolean;
22
+ description?: React.ReactNode;
23
+ /** Error text for a standalone checkbox (e.g. a required confirmation). Ignored inside a group. */
24
+ error?: React.ReactNode;
25
+ /** Drive the error state from an external validator; pair with `error`. */
26
+ invalid?: boolean;
27
+ validationMode?: FieldValidationMode;
28
+ className?: string;
29
+ style?: React.CSSProperties;
30
+ };
31
+ export declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxProps, "ref"> & React.RefAttributes<HTMLElement>>;
32
+ type BaseGroupProps = React.ComponentProps<typeof BaseCheckboxGroup>;
33
+ export type ChoiceOrientation = 'vertical' | 'horizontal';
34
+ export type CheckboxGroupProps = Pick<BaseGroupProps, 'value' | 'defaultValue' | 'onValueChange' | 'allValues'> & {
35
+ /** Rendered as the fieldset legend; names the group. */
36
+ label: React.ReactNode;
37
+ description?: React.ReactNode;
38
+ error?: React.ReactNode;
39
+ invalid?: boolean;
40
+ /** Form field name; every checked item submits its `value` under it. */
41
+ name?: string;
42
+ disabled?: boolean;
43
+ /** Custom validation over the checked values; return an error string or null. */
44
+ validate?: React.ComponentProps<typeof BaseField.Root>['validate'];
45
+ validationMode?: FieldValidationMode;
46
+ /** Visual marker only; enforce "at least one" with `validate`. */
47
+ required?: boolean;
48
+ optional?: boolean;
49
+ orientation?: ChoiceOrientation;
50
+ className?: string;
51
+ style?: React.CSSProperties;
52
+ children: React.ReactNode;
53
+ };
54
+ /**
55
+ * <CheckboxGroup label="通知方式" name="channels" defaultValue={['email']}>
56
+ * <Checkbox value="email" label="邮件" />
57
+ * <Checkbox value="digest" label="每周摘要" />
58
+ * </CheckboxGroup>
59
+ */
60
+ export declare const CheckboxGroup: React.ForwardRefExoticComponent<Pick<Omit<import("@base-ui/react/checkbox-group").CheckboxGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "value" | "defaultValue" | "onValueChange" | "allValues"> & {
61
+ /** Rendered as the fieldset legend; names the group. */
62
+ label: React.ReactNode;
63
+ description?: React.ReactNode;
64
+ error?: React.ReactNode;
65
+ invalid?: boolean;
66
+ /** Form field name; every checked item submits its `value` under it. */
67
+ name?: string;
68
+ disabled?: boolean;
69
+ /** Custom validation over the checked values; return an error string or null. */
70
+ validate?: React.ComponentProps<typeof BaseField.Root>["validate"];
71
+ validationMode?: FieldValidationMode;
72
+ /** Visual marker only; enforce "at least one" with `validate`. */
73
+ required?: boolean;
74
+ optional?: boolean;
75
+ orientation?: ChoiceOrientation;
76
+ className?: string;
77
+ style?: React.CSSProperties;
78
+ children: React.ReactNode;
79
+ } & React.RefAttributes<HTMLDivElement>>;
80
+ export {};
81
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/components/Checkbox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
5
+ import { CheckboxGroup as BaseCheckboxGroup } from '@base-ui/react/checkbox-group';
6
+ import { Field as BaseField } from '@base-ui/react/field';
7
+ import { Fieldset as BaseFieldset } from '@base-ui/react/fieldset';
8
+ import { cx } from '../utils/cx.js';
9
+ import { ChoiceGroupContext, FieldErrorMessage, LabelText } from './fieldParts.js';
10
+ function CheckIcon() {
11
+ return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m3.5 8.25 3 3 6-6.5" }) }));
12
+ }
13
+ function MixedIcon() {
14
+ return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "M4 8h8" }) }));
15
+ }
16
+ export const Checkbox = React.forwardRef(function Checkbox({ label, hideLabel = false, description, error, invalid, validationMode, required, disabled, name, indeterminate, className, style, ...rest }, ref) {
17
+ const inGroup = React.useContext(ChoiceGroupContext) === 'checkbox';
18
+ const control = (_jsxs(BaseField.Label, { className: "rl-choice__label", children: [_jsx(BaseCheckbox.Root, { ...rest, ref: ref, name: inGroup ? undefined : name, required: required, disabled: inGroup ? disabled : undefined, indeterminate: indeterminate, className: "rl-checkbox", "data-slot": "checkbox", children: _jsx(BaseCheckbox.Indicator, { className: "rl-checkbox__indicator", keepMounted: true, children: indeterminate ? _jsx(MixedIcon, {}) : _jsx(CheckIcon, {}) }) }), _jsx("span", { className: hideLabel ? 'rl-visually-hidden' : 'rl-choice__text', children: _jsx(LabelText, { label: label, required: !inGroup && required }) })] }));
19
+ const describe = description != null && (_jsx(BaseField.Description, { className: "rl-choice__description", children: description }));
20
+ if (inGroup) {
21
+ return (_jsxs(BaseField.Item, { className: cx('rl-choice', className), style: style, disabled: disabled, "data-kind": "checkbox", children: [control, describe] }));
22
+ }
23
+ return (_jsxs(BaseField.Root, { className: cx('rl-choice', className), style: style, name: name, disabled: disabled, invalid: invalid, validationMode: validationMode, "data-kind": "checkbox", "data-hide-label": hideLabel || undefined, children: [control, describe, (error != null || name != null) && _jsx(FieldErrorMessage, { error: error, match: invalid ? true : undefined, name: name })] }));
24
+ });
25
+ /**
26
+ * <CheckboxGroup label="通知方式" name="channels" defaultValue={['email']}>
27
+ * <Checkbox value="email" label="邮件" />
28
+ * <Checkbox value="digest" label="每周摘要" />
29
+ * </CheckboxGroup>
30
+ */
31
+ export const CheckboxGroup = React.forwardRef(function CheckboxGroup({ label, description, error, invalid, name, disabled, validate, validationMode, required = false, optional = false, orientation = 'vertical', className, style, children, ...groupProps }, ref) {
32
+ return (_jsxs(BaseField.Root, { ref: ref, name: name, disabled: disabled, invalid: invalid, validate: validate, validationMode: validationMode, className: cx('rl-choice-group', className), style: style, "data-slot": "checkbox-group", children: [_jsxs(BaseFieldset.Root, { className: "rl-choice-group__fieldset", render: _jsx(BaseCheckboxGroup, { ...groupProps, 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: "checkbox", children: children }) })] }), description != null && _jsx(BaseField.Description, { className: "rl-field__description", children: description }), (error != null || name != null) && _jsx(FieldErrorMessage, { error: error, match: invalid ? true : undefined, name: name })] }));
33
+ });
34
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/components/Checkbox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Show / hide one region on Base UI Collapsible (ADR-0010 §2). The trigger is a real `<button>`
4
+ * with `aria-expanded` / `aria-controls`; the panel animates its height through Base UI's
5
+ * `--collapsible-panel-height` variable (CSS transition, interruptible: toggling mid-flight
6
+ * reverses from the current height). Reduced motion zeroes the duration token, so it snaps.
7
+ *
8
+ * The panel is unmounted while closed unless `keepMounted` is set, so collapsed content never
9
+ * lingers in the accessibility tree and heavy content mounts only on first open.
10
+ *
11
+ * <Collapsible trigger={<span>工具详情</span>}>…</Collapsible>
12
+ */
13
+ export type CollapsibleProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> & {
14
+ /** Content of the trigger button (label, status, meta). The chevron is added unless `chevron={false}`. */
15
+ trigger: React.ReactNode;
16
+ children?: React.ReactNode;
17
+ open?: boolean;
18
+ defaultOpen?: boolean;
19
+ onOpenChange?: (open: boolean) => void;
20
+ disabled?: boolean;
21
+ /** Keep the panel in the DOM (hidden) while closed, e.g. to preserve scroll position inside it. */
22
+ keepMounted?: boolean;
23
+ /** Show the rotating chevron at the end of the trigger. */
24
+ chevron?: boolean;
25
+ /** Extra props for the trigger button (accessible name override, data attributes). */
26
+ triggerProps?: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'type'>;
27
+ /** Class name for the panel element. */
28
+ panelClassName?: string;
29
+ };
30
+ export declare const Collapsible: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "onChange"> & {
31
+ /** Content of the trigger button (label, status, meta). The chevron is added unless `chevron={false}`. */
32
+ trigger: React.ReactNode;
33
+ children?: React.ReactNode;
34
+ open?: boolean;
35
+ defaultOpen?: boolean;
36
+ onOpenChange?: (open: boolean) => void;
37
+ disabled?: boolean;
38
+ /** Keep the panel in the DOM (hidden) while closed, e.g. to preserve scroll position inside it. */
39
+ keepMounted?: boolean;
40
+ /** Show the rotating chevron at the end of the trigger. */
41
+ chevron?: boolean;
42
+ /** Extra props for the trigger button (accessible name override, data attributes). */
43
+ triggerProps?: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children" | "type">;
44
+ /** Class name for the panel element. */
45
+ panelClassName?: string;
46
+ } & React.RefAttributes<HTMLDivElement>>;
47
+ //# sourceMappingURL=Collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../src/components/Collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACnG,0GAA0G;IAC1G,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IACxF,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAUF,eAAO,MAAM,WAAW;IAzBtB,0GAA0G;aACjG,KAAK,CAAC,SAAS;eACb,KAAK,CAAC,SAAS;WACnB,OAAO;kBACA,OAAO;mBACN,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;eAC3B,OAAO;IAClB,mGAAmG;kBACrF,OAAO;IACrB,2DAA2D;cACjD,OAAO;IACjB,sFAAsF;mBACvE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACvF,wCAAwC;qBACvB,MAAM;wCAgDvB,CAAC"}
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';
5
+ import { cx } from '../utils/cx.js';
6
+ function Chevron() {
7
+ return (_jsx("svg", { className: "rl-collapsible__chevron", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m4 6 4 4 4-4" }) }));
8
+ }
9
+ export const Collapsible = React.forwardRef(function Collapsible({ trigger, children, open, defaultOpen, onOpenChange, disabled, keepMounted = false, chevron = true, triggerProps, panelClassName, className, ...rest }, ref) {
10
+ return (_jsxs(BaseCollapsible.Root, { ...rest, ref: ref, open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange ? (next) => onOpenChange(next) : undefined, disabled: disabled, className: cx('rl-collapsible', className), "data-slot": "collapsible", children: [_jsxs(BaseCollapsible.Trigger, { ...triggerProps, className: cx('rl-collapsible__trigger', triggerProps?.className), children: [_jsx("span", { className: "rl-collapsible__label", children: trigger }), chevron && _jsx(Chevron, {})] }), _jsx(BaseCollapsible.Panel, { keepMounted: keepMounted, className: cx('rl-collapsible__panel', panelClassName), children: _jsx("div", { className: "rl-collapsible__content", children: children }) })] }));
11
+ });
12
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../../src/components/Collapsible.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAgCpC,SAAS,OAAO;IACd,OAAO,CACL,cAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAC/F,eAAM,CAAC,EAAC,cAAc,GAAG,GACrB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAmC,SAAS,WAAW,CAChG,EACE,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,IAAI,EACd,YAAY,EACZ,cAAc,EACd,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,OAAO,CACL,MAAC,eAAe,CAAC,IAAI,OACf,IAAI,EACR,GAAG,EAAE,GAAG,EACR,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,EACrE,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,eAChC,aAAa,aAEvB,MAAC,eAAe,CAAC,OAAO,OAAK,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,YAAY,EAAE,SAAS,CAAC,aAC1G,eAAM,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAQ,EACvD,OAAO,IAAI,KAAC,OAAO,KAAG,IACC,EAC1B,KAAC,eAAe,CAAC,KAAK,IAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,cAAc,CAAC,YACrG,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,GACnC,IACH,CACxB,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import * as React from 'react';
2
+ import type { InputSize } from './Input.js';
3
+ /**
4
+ * Searchable single-value select on Base UI Combobox (ADR-0001, ADR-0010 §2): a text input that
5
+ * filters a listbox. Base UI provides the combobox / listbox semantics, `aria-activedescendant`
6
+ * navigation (↓ opens, ↑ / ↓ move, Enter selects, Esc closes, then clears), Home / End in the input,
7
+ * and IME handling (filtering waits for `compositionend`; Enter during composition does not select).
8
+ * The label, description and error come from the built-in Field.
9
+ *
10
+ * <Combobox label="档案类别" items={categories} name="category" />
11
+ *
12
+ * Server-side search: pass `filter={null}`, drive `items` from `onInputValueChange` and show
13
+ * `loading` while a request is in flight. Popup motion is a CSS transition (--rl-motion-fast).
14
+ */
15
+ export interface ComboboxOption {
16
+ /** Submitted value and the key of the option. */
17
+ value: string;
18
+ /** Visible text; also what the input shows once selected and what the default filter matches. */
19
+ label: string;
20
+ /** Secondary line under the label. */
21
+ description?: React.ReactNode;
22
+ disabled?: boolean;
23
+ /** Group heading; options sharing it are listed together in first-seen order. */
24
+ group?: string;
25
+ }
26
+ /** Return `true` when `option` matches the typed `query` (already trimmed). */
27
+ export type ComboboxFilter = (option: ComboboxOption, query: string) => boolean;
28
+ export type ComboboxProps = {
29
+ /** Visible label and accessible name of the input. */
30
+ label: React.ReactNode;
31
+ description?: React.ReactNode;
32
+ /** Error text; shown on native validity failure, or always together with `invalid`. */
33
+ error?: React.ReactNode;
34
+ items: readonly ComboboxOption[];
35
+ value?: string | null;
36
+ defaultValue?: string | null;
37
+ onValueChange?: (value: string | null) => void;
38
+ /** Text in the input (controlled). Use with `onInputValueChange` for async search. */
39
+ inputValue?: string;
40
+ defaultInputValue?: string;
41
+ onInputValueChange?: (inputValue: string) => void;
42
+ open?: boolean;
43
+ onOpenChange?: (open: boolean) => void;
44
+ /** Shows a status row with a spinner and marks the list busy. */
45
+ loading?: boolean;
46
+ /** Status text while `loading` (default from messages). */
47
+ loadingText?: React.ReactNode;
48
+ /** Shown when nothing matches (default from messages). */
49
+ emptyText?: React.ReactNode;
50
+ /**
51
+ * Matching logic. Default: locale-aware "contains" on `label`. `null` turns filtering off,
52
+ * for results that are already filtered on the server.
53
+ */
54
+ filter?: ComboboxFilter | null;
55
+ placeholder?: string;
56
+ /** Form field name; the selected `value` is submitted. */
57
+ name?: string;
58
+ required?: boolean;
59
+ disabled?: boolean;
60
+ readOnly?: boolean;
61
+ invalid?: boolean;
62
+ size?: InputSize;
63
+ /** Show the clear button while a value is selected (default `true`). */
64
+ clearable?: boolean;
65
+ /** Accessible name of the clear button (default from messages). */
66
+ clearLabel?: string;
67
+ /** Accessible name of the open-list button (default from messages). */
68
+ openLabel?: string;
69
+ id?: string;
70
+ className?: string;
71
+ style?: React.CSSProperties;
72
+ };
73
+ export declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLInputElement>>;
74
+ //# sourceMappingURL=Combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../src/components/Combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG;IAC1B,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,uFAAuF;IACvF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,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,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AA0DF,eAAO,MAAM,QAAQ,wFAkJnB,CAAC"}
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
5
+ import { useRhineLocale } from '../provider/messages.js';
6
+ import { usePortalContainer } from '../provider/portal.js';
7
+ import { cx } from '../utils/cx.js';
8
+ import { Field } from './Field.js';
9
+ import { Spinner } from './Spinner.js';
10
+ /** Groups in first-seen order; ungrouped options form a heading-less group of their own. */
11
+ function groupOptions(items) {
12
+ if (!items.some((item) => item.group != null && item.group !== ''))
13
+ return null;
14
+ const groups = new Map();
15
+ for (const item of items) {
16
+ const key = item.group ?? '';
17
+ let group = groups.get(key);
18
+ if (!group) {
19
+ group = { label: key, items: [] };
20
+ groups.set(key, group);
21
+ }
22
+ group.items.push(item);
23
+ }
24
+ return [...groups.values()];
25
+ }
26
+ function Chevron() {
27
+ 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" }) }));
28
+ }
29
+ function ClearIcon() {
30
+ 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.5 4.5 7 7m0-7-7 7", strokeLinecap: "round" }) }));
31
+ }
32
+ function Check() {
33
+ 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" }) }));
34
+ }
35
+ function Option({ option }) {
36
+ return (_jsxs(BaseCombobox.Item, { value: option.value, disabled: option.disabled, className: "rl-combobox__item", children: [_jsx(BaseCombobox.ItemIndicator, { className: "rl-combobox__indicator", children: _jsx(Check, {}) }), _jsxs("span", { className: "rl-combobox__item-text", children: [_jsx("span", { className: "rl-combobox__item-label", children: option.label }), option.description != null && _jsx("span", { className: "rl-combobox__item-description", children: option.description })] })] }));
37
+ }
38
+ export const Combobox = React.forwardRef(function Combobox({ label, description, error, items, value, defaultValue, onValueChange, inputValue, defaultInputValue, onInputValueChange, open, onOpenChange, loading = false, loadingText, emptyText, filter, placeholder, name, required, disabled, readOnly, invalid, size = 'md', clearable = true, clearLabel, openLabel, id, className, style, }, ref) {
39
+ const container = usePortalContainer();
40
+ const { messages, locale } = useRhineLocale();
41
+ const copy = messages.combobox;
42
+ const triggerTextId = `${React.useId()}-open`;
43
+ // Labels of every option seen so far, so a selected value keeps its label after async results change.
44
+ const labels = React.useRef(new Map());
45
+ for (const item of items)
46
+ labels.current.set(item.value, item.label);
47
+ const groups = React.useMemo(() => groupOptions(items), [items]);
48
+ const collection = React.useMemo(() => BaseCombobox.createItems(groups ?? items, {
49
+ getValue: (item) => item.value,
50
+ getLabel: (item) => item.label,
51
+ }), [groups, items]);
52
+ const handleKeyDown = (event) => {
53
+ // Belt and braces for IME: Base UI already ignores keyCode 229; some engines only set isComposing.
54
+ if (event.nativeEvent.isComposing)
55
+ event.preventBaseUIHandler?.();
56
+ };
57
+ return (_jsx(Field, { label: label, description: description, error: error, required: required, invalid: invalid, disabled: disabled, name: name, className: cx('rl-combobox-field', className), style: style, children: _jsxs(BaseCombobox.Root, { items: collection, value: value, defaultValue: defaultValue, onValueChange: onValueChange ? (next) => onValueChange(next ?? null) : undefined, inputValue: inputValue, defaultInputValue: defaultInputValue, onInputValueChange: onInputValueChange ? (next) => onInputValueChange(next) : undefined, open: open, onOpenChange: onOpenChange ? (next) => onOpenChange(next) : undefined, filter: filter === null ? null : filter ? (item, query) => filter(item, query) : undefined, itemToStringLabel: (v) => labels.current.get(v) ?? v, locale: locale, name: name, required: required, disabled: disabled, readOnly: readOnly, id: id, children: [_jsxs(BaseCombobox.InputGroup, { className: "rl-combobox", "data-slot": "combobox", "data-size": size, "data-invalid": invalid || undefined, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, children: [_jsx(BaseCombobox.Input, { ref: ref, className: "rl-combobox__input", placeholder: placeholder, ...(invalid ? { 'aria-invalid': true } : null), onKeyDown: handleKeyDown }), clearable && !readOnly && (_jsx(BaseCombobox.Clear, { className: "rl-combobox__clear", "aria-label": clearLabel ?? copy.clear, children: _jsx(ClearIcon, {}) })), _jsxs(BaseCombobox.Trigger, { className: "rl-combobox__trigger", "aria-labelledby": triggerTextId, children: [_jsx(Chevron, {}), _jsx("span", { id: triggerTextId, className: "rl-visually-hidden", children: openLabel ?? copy.openList })] })] }), _jsx(BaseCombobox.Portal, { container: container, children: _jsx(BaseCombobox.Positioner, { className: "rl-combobox__positioner", sideOffset: 4, collisionPadding: 8, positionMethod: "fixed", children: _jsxs(BaseCombobox.Popup, { className: "rl-combobox__popup", "aria-busy": loading || undefined, children: [_jsx(BaseCombobox.Status, { className: "rl-combobox__status", children: loading ? (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: "sm" }), _jsx("span", { children: loadingText ?? copy.loading })] })) : null }), _jsx(BaseCombobox.Empty, { className: "rl-combobox__empty", children: loading ? null : (emptyText ?? copy.empty) }), _jsx(BaseCombobox.List, { className: "rl-combobox__list", children: groups
58
+ ? (group) => (_jsxs(BaseCombobox.Group, { items: group.items, className: "rl-combobox__group", children: [group.label !== '' && _jsx(BaseCombobox.GroupLabel, { className: "rl-combobox__group-label", children: group.label }), _jsx(BaseCombobox.Collection, { children: (option) => _jsx(Option, { option: option }, option.value) })] }, `g-${group.label}`))
59
+ : (option) => _jsx(Option, { option: option }, option.value) })] }) }) })] }) }));
60
+ });
61
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../src/components/Combobox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA8EvC,4FAA4F;AAC5F,SAAS,YAAY,CAAC,KAAgC;IACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,OAAO;IACd,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAChH,eAAM,CAAC,EAAC,cAAc,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,GAClE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAChH,eAAM,CAAC,EAAC,sBAAsB,EAAC,aAAa,EAAC,OAAO,GAAG,GACnD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAChH,eAAM,CAAC,EAAC,uBAAuB,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,GAC3E,CACP,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,EAAE,MAAM,EAA8B;IACpD,OAAO,CACL,MAAC,YAAY,CAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAC,mBAAmB,aAC9F,KAAC,YAAY,CAAC,aAAa,IAAC,SAAS,EAAC,wBAAwB,YAC5D,KAAC,KAAK,KAAG,GACkB,EAC7B,gBAAM,SAAS,EAAC,wBAAwB,aACtC,eAAM,SAAS,EAAC,yBAAyB,YAAE,MAAM,CAAC,KAAK,GAAQ,EAC9D,MAAM,CAAC,WAAW,IAAI,IAAI,IAAI,eAAM,SAAS,EAAC,+BAA+B,YAAE,MAAM,CAAC,WAAW,GAAQ,IACrG,IACW,CACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAkC,SAAS,QAAQ,CACzF,EACE,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACJ,YAAY,EACZ,OAAO,GAAG,KAAK,EACf,WAAW,EACX,SAAS,EACT,MAAM,EACN,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,IAAI,EAChB,UAAU,EACV,SAAS,EACT,EAAE,EACF,SAAS,EACT,KAAK,GACN,EACD,GAAG;IAEH,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC/B,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;IAE9C,sGAAsG;IACtG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,EAAkB,CAAC,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC9B,GAAG,EAAE,CACH,YAAY,CAAC,WAAW,CAAyB,MAAM,IAAK,KAA0B,EAAE;QACtF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK;QAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK;KAC/B,CAAC,EACJ,CAAC,MAAM,EAAE,KAAK,CAAC,CAChB,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAoF,EAAE,EAAE;QAC7G,mGAAmG;QACnG,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW;YAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAC7C,KAAK,EAAE,KAAK,YAEZ,MAAC,YAAY,CAAC,IAAI,IAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAChF,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EACvF,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EACrE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAC1F,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EACpD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,EAAE,aAEN,MAAC,YAAY,CAAC,UAAU,IACtB,SAAS,EAAC,aAAa,eACb,UAAU,eACT,IAAI,kBACD,OAAO,IAAI,SAAS,mBACnB,QAAQ,IAAI,SAAS,mBACrB,QAAQ,IAAI,SAAS,aAEpC,KAAC,YAAY,CAAC,KAAK,IACjB,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,oBAAoB,EAC9B,WAAW,EAAE,WAAW,KACpB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC/C,SAAS,EAAE,aAAa,GACxB,EACD,SAAS,IAAI,CAAC,QAAQ,IAAI,CACzB,KAAC,YAAY,CAAC,KAAK,IAAC,SAAS,EAAC,oBAAoB,gBAAa,UAAU,IAAI,IAAI,CAAC,KAAK,YACrF,KAAC,SAAS,KAAG,GACM,CACtB,EAED,MAAC,YAAY,CAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,qBAAkB,aAAa,aACnF,KAAC,OAAO,KAAG,EACX,eAAM,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,oBAAoB,YACpD,SAAS,IAAI,IAAI,CAAC,QAAQ,GACtB,IACc,IACC,EAC1B,KAAC,YAAY,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACvC,KAAC,YAAY,CAAC,UAAU,IAAC,SAAS,EAAC,yBAAyB,EAAC,UAAU,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAC,OAAO,YACrH,MAAC,YAAY,CAAC,KAAK,IAAC,SAAS,EAAC,oBAAoB,eAAY,OAAO,IAAI,SAAS,aAEhF,KAAC,YAAY,CAAC,MAAM,IAAC,SAAS,EAAC,qBAAqB,YACjD,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,EACrB,yBAAO,WAAW,IAAI,IAAI,CAAC,OAAO,GAAQ,IACzC,CACJ,CAAC,CAAC,CAAC,IAAI,GACY,EACtB,KAAC,YAAY,CAAC,KAAK,IAAC,SAAS,EAAC,oBAAoB,YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAsB,EACpH,KAAC,YAAY,CAAC,IAAI,IAAC,SAAS,EAAC,mBAAmB,YAC7C,MAAM;wCACL,CAAC,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,CACtB,MAAC,YAAY,CAAC,KAAK,IAA0B,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAC,oBAAoB,aAC5F,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAC,YAAY,CAAC,UAAU,IAAC,SAAS,EAAC,0BAA0B,YAAE,KAAK,CAAC,KAAK,GAA2B,EAC5H,KAAC,YAAY,CAAC,UAAU,cAAE,CAAC,MAAsB,EAAE,EAAE,CAAC,KAAC,MAAM,IAAoB,MAAM,EAAE,MAAM,IAA5B,MAAM,CAAC,KAAK,CAAoB,GAA2B,KAFvG,KAAK,KAAK,CAAC,KAAK,EAAE,CAGtB,CACtB;wCACH,CAAC,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC,KAAC,MAAM,IAAoB,MAAM,EAAE,MAAM,IAA5B,MAAM,CAAC,KAAK,CAAoB,GAC3D,IACD,GACG,GACN,IACJ,GACd,CACT,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,77 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Modal command search (ADR-0010 §2): Base UI Dialog (focus trap, Escape, scroll lock, focus
4
+ * return to whatever was focused before opening) around an inline, always-open Base UI
5
+ * Autocomplete list. Focus stays in the input; ↑ / ↓ move the active option through
6
+ * `aria-activedescendant`, Enter runs it, Esc closes the dialog. The first match is always
7
+ * highlighted. Disabled commands stay visible with their reason and cannot run.
8
+ * Enter/exit motion follows Dialog (motion/react: backdrop fast, panel 280ms + 8px rise;
9
+ * opacity only under reduced motion).
10
+ *
11
+ * Async / server-side search: control the query with `query` + `onQueryChange`, pass
12
+ * `filter={null}` so the palette shows `commands` exactly as given, and set `loading` while a
13
+ * request is in flight (a polite status row with a Spinner; the list is `aria-busy`; the empty
14
+ * text waits until loading ends). The palette resets an uncontrolled query on open; a controlled
15
+ * one is reset through `onQueryChange('')`, so a host that mirrors the value behaves the same.
16
+ *
17
+ * <CommandPalette hotkey="mod+k" commands={commands} onSelect={(c) => run(c.id)} />
18
+ */
19
+ export interface CommandItem {
20
+ id: string;
21
+ label: string;
22
+ description?: string;
23
+ /** Group heading; commands sharing it are listed together in first-seen order. */
24
+ group?: string;
25
+ /** Visual shortcut hint such as "Ctrl E" (hidden from assistive tech, like MenuItem). Wire it yourself. */
26
+ shortcut?: string;
27
+ /** Extra search terms (synonyms, English names). */
28
+ keywords?: readonly string[];
29
+ disabled?: boolean;
30
+ /** Shown under a disabled command, e.g. 「需要编辑权限」. */
31
+ disabledReason?: string;
32
+ /** Decorative leading icon (hidden from assistive tech). */
33
+ icon?: React.ReactNode;
34
+ /** Secondary trailing text such as a path or 「3 分钟前」; part of the option's name. */
35
+ meta?: React.ReactNode;
36
+ }
37
+ /** Local match predicate of CommandPalette. */
38
+ export type CommandFilter = (command: CommandItem, query: string) => boolean;
39
+ export type CommandPaletteProps = {
40
+ commands: readonly CommandItem[];
41
+ /** Runs a command. Return `false` to keep the palette open. */
42
+ onSelect: (command: CommandItem) => boolean | void;
43
+ open?: boolean;
44
+ defaultOpen?: boolean;
45
+ onOpenChange?: (open: boolean) => void;
46
+ /** Element that opens the palette (usually a Button). */
47
+ trigger?: React.ReactElement<Record<string, unknown>>;
48
+ /**
49
+ * Global shortcut that toggles the palette, e.g. `mod+k` (`mod` = ⌘ on Apple platforms, Ctrl
50
+ * elsewhere). Combine with `ctrl`, `meta`, `alt`, `shift`. Ignored during IME composition.
51
+ */
52
+ hotkey?: string;
53
+ /** Accessible name of the dialog (visually hidden; default from messages). */
54
+ title?: string;
55
+ placeholder?: string;
56
+ emptyText?: React.ReactNode;
57
+ /** Footer keyboard hint (default from messages); `null` hides it. */
58
+ hint?: React.ReactNode | null;
59
+ /**
60
+ * Custom match. Default: every whitespace-separated term appears in label, keywords, group or
61
+ * description. `null` turns local filtering off (results already filtered by the host / server).
62
+ */
63
+ filter?: CommandFilter | null;
64
+ /** Controlled search text. */
65
+ query?: string;
66
+ /** Every change of the search text (typing, clearing, reset on open). */
67
+ onQueryChange?: (query: string) => void;
68
+ /** A search is in flight: shows the status row and marks the list busy. */
69
+ loading?: boolean;
70
+ /** Status text while `loading` (default from messages). */
71
+ loadingText?: React.ReactNode;
72
+ className?: string;
73
+ };
74
+ /** Parses `mod+k` style hotkeys into a predicate over keyboard events. */
75
+ export declare function matchHotkey(hotkey: string, event: KeyboardEvent, apple?: boolean): boolean;
76
+ export declare function CommandPalette({ commands, onSelect, open: openProp, defaultOpen, onOpenChange, trigger, hotkey, title, placeholder, emptyText, hint, filter, query: queryProp, onQueryChange, loading, loadingText, className, }: CommandPaletteProps): React.JSX.Element;
77
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/components/CommandPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oFAAoF;IACpF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,yDAAyD;IACzD,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2CF,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,UAAoB,GAAG,OAAO,CAmBpG;AAaD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,WAAmB,EACnB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,KAAK,EACL,WAAW,EACX,SAAS,EACT,IAAI,EACJ,MAAsB,EACtB,KAAK,EAAE,SAAS,EAChB,aAAa,EACb,OAAe,EACf,WAAW,EACX,SAAS,GACV,EAAE,mBAAmB,qBAuLrB"}