@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.
- package/CHANGELOG.md +80 -0
- package/LICENSE +21 -0
- package/README.md +37 -3
- package/dist/advanced.css +398 -0
- package/dist/archive.css +704 -0
- package/dist/command.css +671 -0
- package/dist/components/Accordion.d.ts +82 -0
- package/dist/components/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion.js +19 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/Alert.d.ts +60 -0
- package/dist/components/Alert.d.ts.map +1 -0
- package/dist/components/Alert.js +29 -0
- package/dist/components/Alert.js.map +1 -0
- package/dist/components/AlertDialog.d.ts +41 -0
- package/dist/components/AlertDialog.d.ts.map +1 -0
- package/dist/components/AlertDialog.js +101 -0
- package/dist/components/AlertDialog.js.map +1 -0
- package/dist/components/ArchiveCard.d.ts +58 -0
- package/dist/components/ArchiveCard.d.ts.map +1 -0
- package/dist/components/ArchiveCard.js +40 -0
- package/dist/components/ArchiveCard.js.map +1 -0
- package/dist/components/Breadcrumb.d.ts +48 -0
- package/dist/components/Breadcrumb.d.ts.map +1 -0
- package/dist/components/Breadcrumb.js +55 -0
- package/dist/components/Breadcrumb.js.map +1 -0
- package/dist/components/Button.d.ts +30 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +24 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Checkbox.d.ts +81 -0
- package/dist/components/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox.js +34 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/Collapsible.d.ts +47 -0
- package/dist/components/Collapsible.d.ts.map +1 -0
- package/dist/components/Collapsible.js +12 -0
- package/dist/components/Collapsible.js.map +1 -0
- package/dist/components/Combobox.d.ts +74 -0
- package/dist/components/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox.js +61 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +77 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +150 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ContextMenu.d.ts +31 -0
- package/dist/components/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu.js +25 -0
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/components/DataTable.d.ts +83 -0
- package/dist/components/DataTable.d.ts.map +1 -0
- package/dist/components/DataTable.js +97 -0
- package/dist/components/DataTable.js.map +1 -0
- package/dist/components/Dialog.d.ts +45 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +46 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/Drawer.d.ts +56 -0
- package/dist/components/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer.js +92 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EmptyState.d.ts +39 -0
- package/dist/components/EmptyState.d.ts.map +1 -0
- package/dist/components/EmptyState.js +19 -0
- package/dist/components/EmptyState.js.map +1 -0
- package/dist/components/Field.d.ts +37 -0
- package/dist/components/Field.d.ts.map +1 -0
- package/dist/components/Field.js +12 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/Fieldset.d.ts +24 -0
- package/dist/components/Fieldset.d.ts.map +1 -0
- package/dist/components/Fieldset.js +17 -0
- package/dist/components/Fieldset.js.map +1 -0
- package/dist/components/FileDropZone.d.ts +60 -0
- package/dist/components/FileDropZone.d.ts.map +1 -0
- package/dist/components/FileDropZone.js +121 -0
- package/dist/components/FileDropZone.js.map +1 -0
- package/dist/components/Form.d.ts +21 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/Form.js +20 -0
- package/dist/components/Form.js.map +1 -0
- package/dist/components/IconButton.d.ts +25 -0
- package/dist/components/IconButton.d.ts.map +1 -0
- package/dist/components/IconButton.js +14 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/Input.d.ts +24 -0
- package/dist/components/Input.d.ts.map +1 -0
- package/dist/components/Input.js +15 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/Menu.d.ts +66 -0
- package/dist/components/Menu.d.ts.map +1 -0
- package/dist/components/Menu.js +34 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/MetadataList.d.ts +51 -0
- package/dist/components/MetadataList.d.ts.map +1 -0
- package/dist/components/MetadataList.js +25 -0
- package/dist/components/MetadataList.js.map +1 -0
- package/dist/components/NumberField.d.ts +52 -0
- package/dist/components/NumberField.d.ts.map +1 -0
- package/dist/components/NumberField.js +21 -0
- package/dist/components/NumberField.js.map +1 -0
- package/dist/components/Pagination.d.ts +40 -0
- package/dist/components/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination.js +64 -0
- package/dist/components/Pagination.js.map +1 -0
- package/dist/components/Popover.d.ts +44 -0
- package/dist/components/Popover.d.ts.map +1 -0
- package/dist/components/Popover.js +14 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.d.ts +57 -0
- package/dist/components/Progress.d.ts.map +1 -0
- package/dist/components/Progress.js +31 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/Radio.d.ts +61 -0
- package/dist/components/Radio.d.ts.map +1 -0
- package/dist/components/Radio.js +18 -0
- package/dist/components/Radio.js.map +1 -0
- package/dist/components/RecordHeader.d.ts +53 -0
- package/dist/components/RecordHeader.d.ts.map +1 -0
- package/dist/components/RecordHeader.js +19 -0
- package/dist/components/RecordHeader.js.map +1 -0
- package/dist/components/ScrollArea.d.ts +55 -0
- package/dist/components/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea.js +63 -0
- package/dist/components/ScrollArea.js.map +1 -0
- package/dist/components/Select.d.ts +39 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +24 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Separator.d.ts +26 -0
- package/dist/components/Separator.d.ts.map +1 -0
- package/dist/components/Separator.js +22 -0
- package/dist/components/Separator.js.map +1 -0
- package/dist/components/Skeleton.d.ts +31 -0
- package/dist/components/Skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton.js +17 -0
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/Slider.d.ts +65 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +30 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/Spinner.d.ts +23 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +13 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/SplitButton.d.ts +59 -0
- package/dist/components/SplitButton.d.ts.map +1 -0
- package/dist/components/SplitButton.js +30 -0
- package/dist/components/SplitButton.js.map +1 -0
- package/dist/components/Stat.d.ts +53 -0
- package/dist/components/Stat.d.ts.map +1 -0
- package/dist/components/Stat.js +23 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/StatusBadge.d.ts +19 -0
- package/dist/components/StatusBadge.d.ts.map +1 -0
- package/dist/components/StatusBadge.js +8 -0
- package/dist/components/StatusBadge.js.map +1 -0
- package/dist/components/StatusIndicator.d.ts +29 -0
- package/dist/components/StatusIndicator.d.ts.map +1 -0
- package/dist/components/StatusIndicator.js +8 -0
- package/dist/components/StatusIndicator.js.map +1 -0
- package/dist/components/Surface.d.ts +29 -0
- package/dist/components/Surface.d.ts.map +1 -0
- package/dist/components/Surface.js +8 -0
- package/dist/components/Surface.js.map +1 -0
- package/dist/components/Switch.d.ts +22 -0
- package/dist/components/Switch.d.ts.map +1 -0
- package/dist/components/Switch.js +11 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/Tabs.d.ts +45 -0
- package/dist/components/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs.js +49 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Text.d.ts +33 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +21 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/Textarea.d.ts +54 -0
- package/dist/components/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea.js +31 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/Timeline.d.ts +35 -0
- package/dist/components/Timeline.d.ts.map +1 -0
- package/dist/components/Timeline.js +13 -0
- package/dist/components/Timeline.js.map +1 -0
- package/dist/components/Toast.d.ts +67 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toast.js +94 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Tooltip.d.ts +26 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +15 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/VisuallyHidden.d.ts +17 -0
- package/dist/components/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/VisuallyHidden.js +12 -0
- package/dist/components/VisuallyHidden.js.map +1 -0
- package/dist/components/fieldParts.d.ts +17 -0
- package/dist/components/fieldParts.d.ts.map +1 -0
- package/dist/components/fieldParts.js +22 -0
- package/dist/components/fieldParts.js.map +1 -0
- package/dist/components/meter-utils.d.ts +15 -0
- package/dist/components/meter-utils.d.ts.map +1 -0
- package/dist/components/meter-utils.js +15 -0
- package/dist/components/meter-utils.js.map +1 -0
- package/dist/components/pagination-utils.d.ts +10 -0
- package/dist/components/pagination-utils.d.ts.map +1 -0
- package/dist/components/pagination-utils.js +36 -0
- package/dist/components/pagination-utils.js.map +1 -0
- package/dist/components.css +632 -0
- package/dist/data.css +600 -0
- package/dist/disclosure.css +93 -0
- package/dist/drawer.css +226 -0
- package/dist/feedback.css +454 -0
- package/dist/forms.css +516 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/motion/lifecycle.d.ts +44 -0
- package/dist/motion/lifecycle.d.ts.map +1 -0
- package/dist/motion/lifecycle.js +73 -0
- package/dist/motion/lifecycle.js.map +1 -0
- package/dist/motion/presence.d.ts +69 -0
- package/dist/motion/presence.d.ts.map +1 -0
- package/dist/motion/presence.js +103 -0
- package/dist/motion/presence.js.map +1 -0
- package/dist/motion/presets.d.ts +63 -0
- package/dist/motion/presets.d.ts.map +1 -0
- package/dist/motion/presets.js +30 -0
- package/dist/motion/presets.js.map +1 -0
- package/dist/motion/resolve.d.ts +31 -0
- package/dist/motion/resolve.d.ts.map +1 -0
- package/dist/motion/resolve.js +40 -0
- package/dist/motion/resolve.js.map +1 -0
- package/dist/motion/useRhineMotion.d.ts +19 -0
- package/dist/motion/useRhineMotion.d.ts.map +1 -0
- package/dist/motion/useRhineMotion.js +19 -0
- package/dist/motion/useRhineMotion.js.map +1 -0
- package/dist/motion/visibility.d.ts +6 -0
- package/dist/motion/visibility.d.ts.map +1 -0
- package/dist/motion/visibility.js +31 -0
- package/dist/motion/visibility.js.map +1 -0
- package/dist/overlays.css +465 -0
- package/dist/provider/RhineProvider.d.ts +65 -0
- package/dist/provider/RhineProvider.d.ts.map +1 -0
- package/dist/provider/RhineProvider.js +26 -0
- package/dist/provider/RhineProvider.js.map +1 -0
- package/dist/provider/messages.d.ts +190 -0
- package/dist/provider/messages.d.ts.map +1 -0
- package/dist/provider/messages.js +160 -0
- package/dist/provider/messages.js.map +1 -0
- package/dist/provider/portal.d.ts +17 -0
- package/dist/provider/portal.d.ts.map +1 -0
- package/dist/provider/portal.js +20 -0
- package/dist/provider/portal.js.map +1 -0
- package/dist/reset.css +45 -0
- package/dist/split.css +159 -0
- package/dist/status.css +353 -0
- package/dist/utils/cx.d.ts +2 -0
- package/dist/utils/cx.d.ts.map +1 -0
- package/dist/utils/cx.js +4 -0
- package/dist/utils/cx.js.map +1 -0
- package/package.json +62 -3
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ButtonSize } from './Button.js';
|
|
3
|
+
type MotionConflictingProps = 'onDrag' | 'onDragStart' | 'onDragEnd' | 'onAnimationStart' | 'onAnimationEnd' | 'onAnimationIteration';
|
|
4
|
+
export type IconButtonVariant = 'secondary' | 'ghost' | 'primary';
|
|
5
|
+
type NativeProps = Omit<React.ComponentPropsWithoutRef<'button'>, 'disabled' | 'children' | 'aria-label' | 'aria-labelledby' | MotionConflictingProps>;
|
|
6
|
+
/** An accessible name is mandatory: either `label` (preferred) or `aria-labelledby`. */
|
|
7
|
+
type Naming = {
|
|
8
|
+
label: string;
|
|
9
|
+
'aria-labelledby'?: never;
|
|
10
|
+
} | {
|
|
11
|
+
label?: never;
|
|
12
|
+
'aria-labelledby': string;
|
|
13
|
+
};
|
|
14
|
+
export type IconButtonProps = NativeProps & Naming & {
|
|
15
|
+
/** The icon. Rendered aria-hidden; the button's name comes from `label`. */
|
|
16
|
+
icon: React.ReactNode;
|
|
17
|
+
variant?: IconButtonVariant;
|
|
18
|
+
size?: ButtonSize;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/** Toggle state for on/off tools (e.g. pin, grid view). Renders `aria-pressed`. */
|
|
21
|
+
pressed?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=IconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../src/components/IconButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,sBAAsB,GACvB,QAAQ,GACR,aAAa,GACb,WAAW,GACX,kBAAkB,GAClB,gBAAgB,GAChB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,KAAK,WAAW,GAAG,IAAI,CACrB,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EACxC,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,GAAG,sBAAsB,CACpF,CAAC;AAEF,wFAAwF;AACxF,KAAK,MAAM,GACP;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,WAAW,GACvC,MAAM,GAAG;IACP,4EAA4E;IAC5E,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,eAAO,MAAM,UAAU,2FA2BrB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { motion } from 'motion/react';
|
|
5
|
+
import { pressScale } from '../motion/presets.js';
|
|
6
|
+
import { useRhineMotion } from '../motion/useRhineMotion.js';
|
|
7
|
+
import { cx } from '../utils/cx.js';
|
|
8
|
+
export const IconButton = React.forwardRef(function IconButton({ icon, label, variant = 'ghost', size = 'md', disabled = false, pressed, type = 'button', className, title, ...rest }, ref) {
|
|
9
|
+
const motionPrefs = useRhineMotion();
|
|
10
|
+
return (_jsx(motion.button, { ...rest, ref: ref, type: type, disabled: disabled, "aria-label": label, "aria-pressed": pressed,
|
|
11
|
+
// Mirror the name as a tooltip for sighted mouse users unless the caller overrides it.
|
|
12
|
+
title: title ?? label, "data-slot": "icon-button", "data-variant": variant, "data-size": size, className: cx('rl-icon-button', className), whileTap: !disabled && !motionPrefs.reduced ? { scale: pressScale } : undefined, transition: motionPrefs.get('press'), children: _jsx("span", { className: "rl-icon-button__icon", "aria-hidden": "true", children: icon }) }));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=IconButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../../src/components/IconButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAkCpC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAqC,SAAS,UAAU,CAChG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EACtH,GAAG;IAEH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CACL,KAAC,MAAM,CAAC,MAAM,OACR,IAAI,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,gBACN,KAAK,kBACH,OAAO;QACrB,uFAAuF;QACvF,KAAK,EAAE,KAAK,IAAI,KAAK,eACX,aAAa,kBACT,OAAO,eACV,IAAI,EACf,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,QAAQ,EAAE,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/E,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,YAEpC,eAAM,SAAS,EAAC,sBAAsB,iBAAa,MAAM,YACtD,IAAI,GACA,GACO,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Input as BaseInput } from '@base-ui/react/input';
|
|
3
|
+
export type InputSize = 'sm' | 'md' | 'lg';
|
|
4
|
+
type BaseInputProps = React.ComponentProps<typeof BaseInput>;
|
|
5
|
+
export type InputProps = Omit<BaseInputProps, 'className' | 'style' | 'render' | 'size' | 'prefix'> & {
|
|
6
|
+
size?: InputSize;
|
|
7
|
+
/** Decorative leading adornment (icon). Hidden from assistive tech. */
|
|
8
|
+
prefix?: React.ReactNode;
|
|
9
|
+
/** Trailing adornment: unit text such as "mm" is read by screen readers via aria-describedby. */
|
|
10
|
+
suffix?: React.ReactNode;
|
|
11
|
+
/** Monospace value for IDs, codes and measurements. */
|
|
12
|
+
mono?: boolean;
|
|
13
|
+
/** Mark invalid outside a Field (inside a Field, validity comes from Field). */
|
|
14
|
+
invalid?: boolean;
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Text input on Base UI Input: inside `<Field>` it picks up label, description, error and
|
|
20
|
+
* validity automatically; standalone it still needs an accessible name (`aria-label`).
|
|
21
|
+
*/
|
|
22
|
+
export declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=Input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/components/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAG7D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG;IACpG,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uEAAuE;IACvE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,kGAsChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Input as BaseInput } from '@base-ui/react/input';
|
|
5
|
+
import { cx } from '../utils/cx.js';
|
|
6
|
+
/**
|
|
7
|
+
* Text input on Base UI Input: inside `<Field>` it picks up label, description, error and
|
|
8
|
+
* validity automatically; standalone it still needs an accessible name (`aria-label`).
|
|
9
|
+
*/
|
|
10
|
+
export const Input = React.forwardRef(function Input({ size = 'md', prefix, suffix, mono = false, invalid, className, style, disabled, readOnly, ...rest }, ref) {
|
|
11
|
+
const suffixId = React.useId();
|
|
12
|
+
const describedBy = [rest['aria-describedby'], suffix != null ? suffixId : undefined].filter(Boolean).join(' ') || undefined;
|
|
13
|
+
return (_jsxs("span", { className: cx('rl-input', className), style: style, "data-slot": "input", "data-size": size, "data-mono": mono || undefined, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, "data-invalid": invalid || undefined, children: [prefix != null && (_jsx("span", { className: "rl-input__adornment", "data-position": "start", "aria-hidden": "true", children: prefix })), _jsx(BaseInput, { ...rest, ref: ref, disabled: disabled, readOnly: readOnly, ...(invalid ? { 'aria-invalid': true } : null), "aria-describedby": describedBy, className: "rl-input__control" }), suffix != null && (_jsx("span", { id: suffixId, className: "rl-input__adornment", "data-position": "end", children: suffix }))] }));
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=Input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../src/components/Input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAqBpC;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAA+B,SAAS,KAAK,CAChF,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EACrG,GAAG;IAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IAC7H,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EACpC,KAAK,EAAE,KAAK,eACF,OAAO,eACN,IAAI,eACJ,IAAI,IAAI,SAAS,mBACb,QAAQ,IAAI,SAAS,mBACrB,QAAQ,IAAI,SAAS,kBACtB,OAAO,IAAI,SAAS,aAEjC,MAAM,IAAI,IAAI,IAAI,CACjB,eAAM,SAAS,EAAC,qBAAqB,mBAAe,OAAO,iBAAa,MAAM,YAC3E,MAAM,GACF,CACR,EACD,KAAC,SAAS,OACJ,IAAI,EACR,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,KACd,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,sBAC7B,WAAW,EAC7B,SAAS,EAAC,mBAAmB,GAC7B,EACD,MAAM,IAAI,IAAI,IAAI,CACjB,eAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAC,qBAAqB,mBAAe,KAAK,YACpE,MAAM,GACF,CACR,IACI,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Action menu on Base UI Menu (ADR-0001): menu / menuitem semantics, arrow-key roving focus,
|
|
4
|
+
* typeahead, Home/End, Escape and outside-click dismissal, focus return to the trigger.
|
|
5
|
+
* Use for commands on an object ("导出 / 复制编号 / 归档"); use Select to choose a value
|
|
6
|
+
* and Tabs to switch views. Popup motion is a CSS transition (--rl-motion-fast).
|
|
7
|
+
*/
|
|
8
|
+
export type MenuSide = 'top' | 'bottom' | 'left' | 'right';
|
|
9
|
+
export type MenuAlign = 'start' | 'center' | 'end';
|
|
10
|
+
export type MenuProps = {
|
|
11
|
+
/** Element that opens the menu (Button / IconButton with its own accessible name). */
|
|
12
|
+
trigger: React.ReactElement<Record<string, unknown>>;
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
side?: MenuSide;
|
|
15
|
+
align?: MenuAlign;
|
|
16
|
+
open?: boolean;
|
|
17
|
+
defaultOpen?: boolean;
|
|
18
|
+
onOpenChange?: (open: boolean) => void;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
className?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function Menu({ trigger, children, side, align, open, defaultOpen, onOpenChange, disabled, className }: MenuProps): React.JSX.Element;
|
|
23
|
+
export type MenuItemProps = {
|
|
24
|
+
children: React.ReactNode;
|
|
25
|
+
onSelect?: () => void;
|
|
26
|
+
/** Decorative leading icon. */
|
|
27
|
+
icon?: React.ReactNode;
|
|
28
|
+
/** Keyboard hint shown on the right, e.g. "Ctrl E". Visual only; wire the shortcut yourself. */
|
|
29
|
+
shortcut?: string;
|
|
30
|
+
/** `danger` for destructive commands; pair with a confirmation Dialog. */
|
|
31
|
+
tone?: 'default' | 'danger';
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
/** Keep the menu open after selection (default closes). */
|
|
34
|
+
keepOpen?: boolean;
|
|
35
|
+
};
|
|
36
|
+
export declare function MenuItem({ children, onSelect, icon, shortcut, tone, disabled, keepOpen }: MenuItemProps): React.JSX.Element;
|
|
37
|
+
export type MenuCheckboxItemProps = {
|
|
38
|
+
children: React.ReactNode;
|
|
39
|
+
checked?: boolean;
|
|
40
|
+
defaultChecked?: boolean;
|
|
41
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export declare function MenuCheckboxItem({ children, checked, defaultChecked, onCheckedChange, disabled }: MenuCheckboxItemProps): React.JSX.Element;
|
|
45
|
+
export type MenuRadioGroupProps = {
|
|
46
|
+
/** Visible group heading; also names the group for assistive tech. */
|
|
47
|
+
label?: React.ReactNode;
|
|
48
|
+
value?: string;
|
|
49
|
+
defaultValue?: string;
|
|
50
|
+
onValueChange?: (value: string) => void;
|
|
51
|
+
children: React.ReactNode;
|
|
52
|
+
};
|
|
53
|
+
export declare function MenuRadioGroup({ label, value, defaultValue, onValueChange, children }: MenuRadioGroupProps): React.JSX.Element;
|
|
54
|
+
export type MenuRadioItemProps = {
|
|
55
|
+
value: string;
|
|
56
|
+
children: React.ReactNode;
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
};
|
|
59
|
+
export declare function MenuRadioItem({ value, children, disabled }: MenuRadioItemProps): React.JSX.Element;
|
|
60
|
+
export type MenuGroupProps = {
|
|
61
|
+
label?: React.ReactNode;
|
|
62
|
+
children: React.ReactNode;
|
|
63
|
+
};
|
|
64
|
+
export declare function MenuGroup({ label, children }: MenuGroupProps): React.JSX.Element;
|
|
65
|
+
export declare function MenuSeparator(): React.JSX.Element;
|
|
66
|
+
//# sourceMappingURL=Menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG;IACtB,sFAAsF;IACtF,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,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,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkBF,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAe,EAAE,KAAe,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,qBAmB5I;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAgB,EAAE,QAAQ,EAAE,QAAgB,EAAE,EAAE,aAAa,qBAoB3H;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,qBAAqB,qBAiBvH;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,mBAAmB,qBAa1G;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,qBAW9E;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,qBAO5D;AAED,wBAAgB,aAAa,sBAE5B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Menu as BaseMenu } from '@base-ui/react/menu';
|
|
4
|
+
import { usePortalContainer } from '../provider/portal.js';
|
|
5
|
+
import { cx } from '../utils/cx.js';
|
|
6
|
+
function Check() {
|
|
7
|
+
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" }) }));
|
|
8
|
+
}
|
|
9
|
+
function Dot() {
|
|
10
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("circle", { cx: "8", cy: "8", r: "3", fill: "currentColor" }) }));
|
|
11
|
+
}
|
|
12
|
+
export function Menu({ trigger, children, side = 'bottom', align = 'start', open, defaultOpen, onOpenChange, disabled, className }) {
|
|
13
|
+
const container = usePortalContainer();
|
|
14
|
+
return (_jsxs(BaseMenu.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange ? (next) => onOpenChange(next) : undefined, disabled: disabled, children: [_jsx(BaseMenu.Trigger, { render: trigger }), _jsx(BaseMenu.Portal, { container: container, children: _jsx(BaseMenu.Positioner, { className: "rl-menu__positioner", side: side, align: align, sideOffset: 4, collisionPadding: 8, positionMethod: "fixed", children: _jsx(BaseMenu.Popup, { className: cx('rl-menu', className), "data-slot": "menu", children: children }) }) })] }));
|
|
15
|
+
}
|
|
16
|
+
export function MenuItem({ children, onSelect, icon, shortcut, tone = 'default', disabled, keepOpen = false }) {
|
|
17
|
+
return (_jsxs(BaseMenu.Item, { className: "rl-menu__item", "data-tone": tone, disabled: disabled, closeOnClick: !keepOpen, onClick: onSelect ? () => onSelect() : undefined, children: [_jsx("span", { className: "rl-menu__icon", "aria-hidden": "true", children: icon }), _jsx("span", { className: "rl-menu__label", children: children }), shortcut != null && (_jsx("kbd", { className: "rl-menu__shortcut", "aria-hidden": "true", children: shortcut }))] }));
|
|
18
|
+
}
|
|
19
|
+
export function MenuCheckboxItem({ children, checked, defaultChecked, onCheckedChange, disabled }) {
|
|
20
|
+
return (_jsxs(BaseMenu.CheckboxItem, { className: "rl-menu__item", checked: checked, defaultChecked: defaultChecked, onCheckedChange: onCheckedChange ? (next) => onCheckedChange(next) : undefined, disabled: disabled, children: [_jsx(BaseMenu.CheckboxItemIndicator, { className: "rl-menu__icon", keepMounted: true, children: _jsx("span", { className: "rl-menu__indicator", children: _jsx(Check, {}) }) }), _jsx("span", { className: "rl-menu__label", children: children })] }));
|
|
21
|
+
}
|
|
22
|
+
export function MenuRadioGroup({ label, value, defaultValue, onValueChange, children }) {
|
|
23
|
+
return (_jsxs(BaseMenu.Group, { className: "rl-menu__group", children: [label != null && _jsx(BaseMenu.GroupLabel, { className: "rl-menu__group-label", children: label }), _jsx(BaseMenu.RadioGroup, { value: value, defaultValue: defaultValue, onValueChange: onValueChange ? (next) => onValueChange(String(next)) : undefined, children: children })] }));
|
|
24
|
+
}
|
|
25
|
+
export function MenuRadioItem({ value, children, disabled }) {
|
|
26
|
+
return (_jsxs(BaseMenu.RadioItem, { className: "rl-menu__item", value: value, disabled: disabled, children: [_jsx(BaseMenu.RadioItemIndicator, { className: "rl-menu__icon", keepMounted: true, children: _jsx("span", { className: "rl-menu__indicator", children: _jsx(Dot, {}) }) }), _jsx("span", { className: "rl-menu__label", children: children })] }));
|
|
27
|
+
}
|
|
28
|
+
export function MenuGroup({ label, children }) {
|
|
29
|
+
return (_jsxs(BaseMenu.Group, { className: "rl-menu__group", children: [label != null && _jsx(BaseMenu.GroupLabel, { className: "rl-menu__group-label", children: label }), children] }));
|
|
30
|
+
}
|
|
31
|
+
export function MenuSeparator() {
|
|
32
|
+
return _jsx(BaseMenu.Separator, { className: "rl-menu__separator" });
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Archive metadata as a semantic description list (<dl>). Values come from the caller's
|
|
4
|
+
* real record; missing values are hidden by default so the component never displays
|
|
5
|
+
* invented placeholders as if they were data.
|
|
6
|
+
*/
|
|
7
|
+
export type MetadataValue = React.ReactNode;
|
|
8
|
+
export interface MetadataItem {
|
|
9
|
+
/** Stable key; defaults to the label when it is a string. */
|
|
10
|
+
key?: string;
|
|
11
|
+
label: React.ReactNode;
|
|
12
|
+
value: MetadataValue;
|
|
13
|
+
/** Monospace value for IDs, codes, measurements and timestamps. */
|
|
14
|
+
mono?: boolean;
|
|
15
|
+
/** Machine-readable date/time; wraps the value in <time dateTime>. */
|
|
16
|
+
dateTime?: string;
|
|
17
|
+
/** Short note under the value, e.g. a unit basis or provenance. */
|
|
18
|
+
hint?: React.ReactNode;
|
|
19
|
+
/** Let a long value span the full row in multi-column layouts. */
|
|
20
|
+
wide?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type MetadataListLayout = 'inline' | 'stacked';
|
|
23
|
+
export type MetadataEmpty = 'hide' | 'placeholder';
|
|
24
|
+
export type MetadataListProps = Omit<React.HTMLAttributes<HTMLDListElement>, 'children'> & {
|
|
25
|
+
items: readonly MetadataItem[];
|
|
26
|
+
/** `inline`: label column + value; `stacked`: label above value (narrow panels). */
|
|
27
|
+
layout?: MetadataListLayout;
|
|
28
|
+
/** Number of item columns on wide containers; collapses to one on narrow ones. */
|
|
29
|
+
columns?: 1 | 2 | 3;
|
|
30
|
+
/**
|
|
31
|
+
* How to treat items whose value is null / undefined / ''. `hide` (default) omits the row;
|
|
32
|
+
* `placeholder` keeps the row with a dash announced as「未记录」.
|
|
33
|
+
*/
|
|
34
|
+
empty?: MetadataEmpty;
|
|
35
|
+
size?: 'sm' | 'md';
|
|
36
|
+
};
|
|
37
|
+
export declare function isEmptyValue(value: MetadataValue): boolean;
|
|
38
|
+
export declare const MetadataList: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDListElement>, "children"> & {
|
|
39
|
+
items: readonly MetadataItem[];
|
|
40
|
+
/** `inline`: label column + value; `stacked`: label above value (narrow panels). */
|
|
41
|
+
layout?: MetadataListLayout;
|
|
42
|
+
/** Number of item columns on wide containers; collapses to one on narrow ones. */
|
|
43
|
+
columns?: 1 | 2 | 3;
|
|
44
|
+
/**
|
|
45
|
+
* How to treat items whose value is null / undefined / ''. `hide` (default) omits the row;
|
|
46
|
+
* `placeholder` keeps the row with a dash announced as「未记录」.
|
|
47
|
+
*/
|
|
48
|
+
empty?: MetadataEmpty;
|
|
49
|
+
size?: "sm" | "md";
|
|
50
|
+
} & React.RefAttributes<HTMLDListElement>>;
|
|
51
|
+
//# sourceMappingURL=MetadataList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataList.d.ts","sourceRoot":"","sources":["../../src/components/MetadataList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,mEAAmE;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAAG;IACzF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,oFAAoF;IACpF,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,kFAAkF;IAClF,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE1D;AAOD,eAAO,MAAM,YAAY;WAtBhB,SAAS,YAAY,EAAE;IAC9B,oFAAoF;aAC3E,kBAAkB;IAC3B,kFAAkF;cACxE,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB;;;OAGG;YACK,aAAa;WACd,IAAI,GAAG,IAAI;0CAqDlB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
export function isEmptyValue(value) {
|
|
7
|
+
return value === null || value === undefined || value === false || (typeof value === 'string' && value.trim() === '');
|
|
8
|
+
}
|
|
9
|
+
function itemKey(item, index) {
|
|
10
|
+
if (item.key)
|
|
11
|
+
return item.key;
|
|
12
|
+
return typeof item.label === 'string' ? item.label : String(index);
|
|
13
|
+
}
|
|
14
|
+
export const MetadataList = React.forwardRef(function MetadataList({ items, layout = 'inline', columns = 1, empty = 'hide', size = 'md', className, ...rest }, ref) {
|
|
15
|
+
const messages = useRhineMessages();
|
|
16
|
+
const visible = empty === 'hide' ? items.filter((item) => !isEmptyValue(item.value)) : items;
|
|
17
|
+
if (visible.length === 0)
|
|
18
|
+
return null;
|
|
19
|
+
return (_jsx("dl", { ...rest, ref: ref, className: cx('rl-meta', className), "data-slot": "metadata-list", "data-layout": layout, "data-columns": columns, "data-size": size, children: visible.map((item, index) => {
|
|
20
|
+
const missing = isEmptyValue(item.value);
|
|
21
|
+
const content = missing ? (_jsxs("span", { className: "rl-meta__empty", children: [_jsx("span", { "aria-hidden": "true", children: "\u2014" }), _jsx("span", { className: "rl-visually-hidden", children: messages.metadataList.missing })] })) : item.dateTime ? (_jsx("time", { dateTime: item.dateTime, children: item.value })) : (item.value);
|
|
22
|
+
return (_jsxs("div", { className: "rl-meta__item", "data-wide": item.wide || undefined, children: [_jsx("dt", { className: "rl-meta__label", children: item.label }), _jsxs("dd", { className: "rl-meta__value", "data-mono": item.mono || undefined, "data-empty": missing || undefined, children: [content, item.hint != null && !missing && _jsx("span", { className: "rl-meta__hint", children: item.hint })] })] }, itemKey(item, index)));
|
|
23
|
+
}) }));
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=MetadataList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataList.js","sourceRoot":"","sources":["../../src/components/MetadataList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AA0CpC,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,OAAO,CAAC,IAAkB,EAAE,KAAa;IAChD,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAC9B,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAsC,SAAS,YAAY,CACrG,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC1F,GAAG;IAEH,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,gBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,eACzB,eAAe,iBACZ,MAAM,kBACL,OAAO,eACV,IAAI,YAEd,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CACxB,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,8BAAkB,MAAM,uBAAS,EACjC,eAAM,SAAS,EAAC,oBAAoB,YAAE,QAAQ,CAAC,YAAY,CAAC,OAAO,GAAQ,IACtE,CACR,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClB,eAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,YAAG,IAAI,CAAC,KAAK,GAAQ,CACnD,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,KAAK,CACX,CAAC;YACF,OAAO,CACL,eAAgC,SAAS,EAAC,eAAe,eAAY,IAAI,CAAC,IAAI,IAAI,SAAS,aACzF,aAAI,SAAS,EAAC,gBAAgB,YAAE,IAAI,CAAC,KAAK,GAAM,EAChD,cAAI,SAAS,EAAC,gBAAgB,eAAY,IAAI,CAAC,IAAI,IAAI,SAAS,gBAAc,OAAO,IAAI,SAAS,aAC/F,OAAO,EACP,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,CAAC,IAAI,GAAQ,IACjF,KALG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAMxB,CACP,CAAC;QACJ,CAAC,CAAC,GACC,CACN,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { InputSize } from './Input.js';
|
|
3
|
+
/**
|
|
4
|
+
* Numeric input with stepper buttons on Base UI NumberField + Field (ADR-0010 §2). Label,
|
|
5
|
+
* description and error are wired like `Field` (aria-labelledby / aria-describedby /
|
|
6
|
+
* aria-invalid). The visible text input parses and formats with the provider locale; a hidden
|
|
7
|
+
* native input carries the raw number for form submission under `name`.
|
|
8
|
+
*
|
|
9
|
+
* Keyboard (Base UI): ↑/↓ step, Shift + arrow takes `largeStep`, Alt + arrow `smallStep`,
|
|
10
|
+
* Home/End jump to min/max (when set). The stepper buttons are out of the Tab order (the
|
|
11
|
+
* arrows do the same) but stay reachable for pointer and touch; their names come from the
|
|
12
|
+
* message table (`numberField.increment` / `decrement`).
|
|
13
|
+
*
|
|
14
|
+
* <NumberField label="并发上限" min={1} max={16} defaultValue={4} name="concurrency" />
|
|
15
|
+
*/
|
|
16
|
+
export type NumberFieldProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'defaultValue' | 'onChange'> & {
|
|
17
|
+
label: React.ReactNode;
|
|
18
|
+
hideLabel?: boolean;
|
|
19
|
+
description?: React.ReactNode;
|
|
20
|
+
/** Error text: shows on native validity failure, or always together with `invalid`. */
|
|
21
|
+
error?: React.ReactNode;
|
|
22
|
+
invalid?: boolean;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
optional?: boolean;
|
|
25
|
+
/** `null` means empty. */
|
|
26
|
+
value?: number | null;
|
|
27
|
+
defaultValue?: number;
|
|
28
|
+
onValueChange?: (value: number | null) => void;
|
|
29
|
+
/** Fires on blur after typing and on pointer release after stepping. */
|
|
30
|
+
onValueCommitted?: (value: number | null) => void;
|
|
31
|
+
min?: number;
|
|
32
|
+
max?: number;
|
|
33
|
+
step?: number;
|
|
34
|
+
largeStep?: number;
|
|
35
|
+
smallStep?: number;
|
|
36
|
+
/** Intl options for display and parsing (e.g. `{ style: 'percent' }`); locale comes from RhineProvider. */
|
|
37
|
+
format?: Intl.NumberFormatOptions;
|
|
38
|
+
/** Snap stepped values to multiples of `step`. */
|
|
39
|
+
snapOnStep?: boolean;
|
|
40
|
+
name?: string;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
readOnly?: boolean;
|
|
43
|
+
size?: InputSize;
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
/** Trailing unit text (e.g. "个"), read as part of the description. */
|
|
46
|
+
unit?: React.ReactNode;
|
|
47
|
+
/** Ref to the visible text input. */
|
|
48
|
+
inputRef?: React.Ref<HTMLInputElement>;
|
|
49
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
50
|
+
};
|
|
51
|
+
export declare function NumberField({ label, hideLabel, description, error, invalid, required, optional, value, defaultValue, onValueChange, onValueCommitted, min, max, step, largeStep, smallStep, format, snapOnStep, name, disabled, readOnly, size, placeholder, unit, inputRef, className, style, ref, ...rest }: NumberFieldProps): React.JSX.Element;
|
|
52
|
+
//# sourceMappingURL=NumberField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../src/components/NumberField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IACpH,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,uFAAuF;IACvF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2GAA2G;IAC3G,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAClC,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC,CAAC;AAkBF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,SAAiB,EACjB,WAAW,EACX,KAAK,EACL,OAAO,EACP,QAAgB,EAChB,QAAgB,EAChB,KAAK,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,GAAG,EACH,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,IAAW,EACX,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAuElB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 { NumberField as BaseNumberField } from '@base-ui/react/number-field';
|
|
6
|
+
import { useRhineLocale } from '../provider/messages.js';
|
|
7
|
+
import { cx } from '../utils/cx.js';
|
|
8
|
+
import { FieldErrorMessage, LabelText } from './fieldParts.js';
|
|
9
|
+
function Minus() {
|
|
10
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "M3.5 8h9" }) }));
|
|
11
|
+
}
|
|
12
|
+
function Plus() {
|
|
13
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "M3.5 8h9M8 3.5v9" }) }));
|
|
14
|
+
}
|
|
15
|
+
export function NumberField({ label, hideLabel = false, description, error, invalid, required = false, optional = false, value, defaultValue, onValueChange, onValueCommitted, min, max, step, largeStep, smallStep, format, snapOnStep, name, disabled, readOnly, size = 'md', placeholder, unit, inputRef, className, style, ref, ...rest }) {
|
|
16
|
+
const { messages, locale } = useRhineLocale();
|
|
17
|
+
const unitId = React.useId();
|
|
18
|
+
const match = invalid ? true : undefined;
|
|
19
|
+
return (_jsxs(BaseField.Root, { ...rest, ref: ref, name: name, invalid: invalid, disabled: disabled, className: cx('rl-field', 'rl-number-field', className), style: style, "data-slot": "number-field", "data-required": required || undefined, children: [_jsx(BaseField.Label, { className: cx('rl-field__label', hideLabel && 'rl-visually-hidden'), children: _jsx(LabelText, { label: label, required: required, optional: optional }) }), _jsxs("div", { className: "rl-field__body", children: [_jsx(BaseNumberField.Root, { name: name, value: value, defaultValue: defaultValue, onValueChange: onValueChange ? (next) => onValueChange(next) : undefined, onValueCommitted: onValueCommitted ? (next) => onValueCommitted(next) : undefined, min: min, max: max, step: step, largeStep: largeStep, smallStep: smallStep, format: format, snapOnStep: snapOnStep, locale: locale, required: required, disabled: disabled, readOnly: readOnly, className: "rl-number-field__root", children: _jsxs(BaseNumberField.Group, { className: "rl-input rl-number-field__group", "data-size": size, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, "data-invalid": invalid || undefined, children: [_jsx(BaseNumberField.Decrement, { className: "rl-number-field__stepper", "aria-label": messages.numberField.decrement, "data-position": "start", children: _jsx(Minus, {}) }), _jsx(BaseNumberField.Input, { ref: inputRef, className: "rl-input__control rl-number-field__input", placeholder: placeholder, "aria-roledescription": messages.numberField.roleDescription, "aria-describedby": unit != null ? unitId : undefined }), unit != null && (_jsx("span", { id: unitId, className: "rl-input__adornment rl-number-field__unit", children: unit })), _jsx(BaseNumberField.Increment, { className: "rl-number-field__stepper", "aria-label": messages.numberField.increment, "data-position": "end", children: _jsx(Plus, {}) })] }) }), description != null && _jsx(BaseField.Description, { className: "rl-field__description", children: description }), (error != null || name != null) && _jsx(FieldErrorMessage, { error: error, match: match, name: name })] })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=NumberField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../src/components/NumberField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface PaginationLabels {
|
|
3
|
+
nav?: string;
|
|
4
|
+
previous?: string;
|
|
5
|
+
next?: string;
|
|
6
|
+
page?: (page: number) => string;
|
|
7
|
+
/** Compact summary shown in narrow containers, e.g. "第 3 / 40 页". */
|
|
8
|
+
compact?: (page: number, pageCount: number) => string;
|
|
9
|
+
/** Range summary when `totalItems` is known, e.g. "第 51–75 条,共 1000 条". */
|
|
10
|
+
status?: (from: number, to: number, total: number) => string;
|
|
11
|
+
}
|
|
12
|
+
type PageCountSource = {
|
|
13
|
+
pageCount: number;
|
|
14
|
+
totalItems?: number;
|
|
15
|
+
pageSize?: number;
|
|
16
|
+
} | {
|
|
17
|
+
pageCount?: never;
|
|
18
|
+
totalItems: number;
|
|
19
|
+
pageSize: number;
|
|
20
|
+
};
|
|
21
|
+
export type PaginationProps = Omit<React.HTMLAttributes<HTMLElement>, 'onChange' | 'children'> & PageCountSource & {
|
|
22
|
+
page?: number;
|
|
23
|
+
defaultPage?: number;
|
|
24
|
+
onPageChange?: (page: number) => void;
|
|
25
|
+
/** Pages shown on each side of the current page. */
|
|
26
|
+
siblingCount?: number;
|
|
27
|
+
/** Disable every control. */
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* A page request is in flight: controls ignore presses and announce `aria-disabled`, but stay
|
|
31
|
+
* focusable so keyboard focus is not dropped to <body> while the table reloads.
|
|
32
|
+
*/
|
|
33
|
+
busy?: boolean;
|
|
34
|
+
/** Show the "第 a–b 条,共 n 条" summary (needs `totalItems` and `pageSize`). */
|
|
35
|
+
showStatus?: boolean;
|
|
36
|
+
labels?: PaginationLabels;
|
|
37
|
+
};
|
|
38
|
+
export declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/components/Pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9D;AAED,KAAK,eAAe,GAChB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,SAAS,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GAC5F,eAAe,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAUJ,eAAO,MAAM,UAAU,qFAyIrB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useRhineLocale } from '../provider/messages.js';
|
|
5
|
+
import { cx } from '../utils/cx.js';
|
|
6
|
+
import { getPaginationItems } from './pagination-utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Page navigation (ADR-0005 §3): a `<nav>` of plain buttons in normal Tab order. The current page
|
|
9
|
+
* keeps `aria-current="page"` and stays focusable so it can be announced. Narrow containers
|
|
10
|
+
* switch to "上一页 · 第 n / m 页 · 下一页" through a container query.
|
|
11
|
+
*
|
|
12
|
+
* <Pagination page={page} totalItems={1000} pageSize={25} onPageChange={setPage} />
|
|
13
|
+
*/
|
|
14
|
+
function clamp(value, min, max) {
|
|
15
|
+
return Math.min(Math.max(Math.round(value), min), max);
|
|
16
|
+
}
|
|
17
|
+
function ChevronIcon({ direction }) {
|
|
18
|
+
return (_jsx("svg", { className: "rl-pagination__icon", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: direction === 'previous' ? 'M10 3.5 5.5 8l4.5 4.5' : 'M6 3.5 10.5 8 6 12.5' }) }));
|
|
19
|
+
}
|
|
20
|
+
export const Pagination = React.forwardRef(function Pagination({ page: pageProp, defaultPage = 1, onPageChange, pageCount: pageCountProp, totalItems, pageSize, siblingCount = 1, disabled = false, busy = false, showStatus = totalItems != null && pageSize != null, labels: labelsProp, className, ...rest }, ref) {
|
|
21
|
+
const { messages, formatNumber } = useRhineLocale();
|
|
22
|
+
const m = messages.pagination;
|
|
23
|
+
// `labels` (component prop) > provider messages > zhCN (ADR-0009 §1).
|
|
24
|
+
const labels = {
|
|
25
|
+
nav: labelsProp?.nav ?? m.nav,
|
|
26
|
+
previous: labelsProp?.previous ?? m.previous,
|
|
27
|
+
next: labelsProp?.next ?? m.next,
|
|
28
|
+
page: labelsProp?.page ?? ((p) => m.page(p, formatNumber)),
|
|
29
|
+
compact: labelsProp?.compact ?? ((p, n) => m.compact(p, n, formatNumber)),
|
|
30
|
+
status: labelsProp?.status ?? ((from, to, total) => m.status(from, to, total, formatNumber)),
|
|
31
|
+
};
|
|
32
|
+
const pageCount = Math.max(1, pageCountProp ?? (totalItems != null && pageSize ? Math.ceil(totalItems / pageSize) : 1));
|
|
33
|
+
const [uncontrolled, setUncontrolled] = React.useState(defaultPage);
|
|
34
|
+
const page = clamp(pageProp ?? uncontrolled, 1, pageCount);
|
|
35
|
+
const listRef = React.useRef(null);
|
|
36
|
+
const pendingFocus = React.useRef(null);
|
|
37
|
+
const go = (next, focusKey) => {
|
|
38
|
+
const target = clamp(next, 1, pageCount);
|
|
39
|
+
if (target === page || disabled || busy)
|
|
40
|
+
return;
|
|
41
|
+
pendingFocus.current = focusKey;
|
|
42
|
+
if (pageProp === undefined)
|
|
43
|
+
setUncontrolled(target);
|
|
44
|
+
onPageChange?.(target);
|
|
45
|
+
};
|
|
46
|
+
// Keep focus on the control the user pressed. If the page list re-flowed and that button is
|
|
47
|
+
// gone (or became disabled at an edge), fall back to the current page instead of <body>.
|
|
48
|
+
React.useLayoutEffect(() => {
|
|
49
|
+
const key = pendingFocus.current;
|
|
50
|
+
if (!key || !listRef.current)
|
|
51
|
+
return;
|
|
52
|
+
pendingFocus.current = null;
|
|
53
|
+
const active = document.activeElement;
|
|
54
|
+
if (active && listRef.current.contains(active) && !active.disabled)
|
|
55
|
+
return;
|
|
56
|
+
const byKey = listRef.current.querySelector(`[data-key="${key}"]:not(:disabled)`);
|
|
57
|
+
(byKey ?? listRef.current.querySelector('[aria-current="page"]'))?.focus();
|
|
58
|
+
}, [page]);
|
|
59
|
+
const items = getPaginationItems(page, pageCount, siblingCount);
|
|
60
|
+
const from = totalItems != null && pageSize ? Math.min(totalItems, (page - 1) * pageSize + 1) : 0;
|
|
61
|
+
const to = totalItems != null && pageSize ? Math.min(totalItems, page * pageSize) : 0;
|
|
62
|
+
return (_jsx("nav", { ...rest, ref: ref, className: cx('rl-pagination', className), "aria-label": rest['aria-label'] ?? labels.nav, "aria-disabled": disabled || undefined, "aria-busy": busy || undefined, "data-slot": "pagination", "data-disabled": disabled || undefined, "data-busy": busy || undefined, children: _jsxs("div", { className: "rl-pagination__row", children: [_jsxs("ul", { ref: listRef, className: "rl-pagination__list", children: [_jsx("li", { children: _jsxs("button", { type: "button", className: "rl-pagination__step", "data-key": "previous", disabled: disabled || page <= 1, "aria-disabled": busy || undefined, onClick: () => go(page - 1, 'previous'), children: [_jsx(ChevronIcon, { direction: "previous" }), _jsx("span", { className: "rl-pagination__step-label", children: labels.previous })] }) }), items.map((item) => typeof item === 'number' ? (_jsx("li", { className: "rl-pagination__page-item", children: _jsx("button", { type: "button", className: "rl-pagination__page", "data-key": `page-${item}`, "aria-label": labels.page(item), "aria-current": item === page ? 'page' : undefined, disabled: disabled, "aria-disabled": busy || undefined, onClick: () => go(item, `page-${item}`), children: item }) }, item)) : (_jsx("li", { className: "rl-pagination__page-item", "aria-hidden": "true", children: _jsx("span", { className: "rl-pagination__ellipsis", children: "\u2026" }) }, item))), _jsx("li", { className: "rl-pagination__compact", children: labels.compact(page, pageCount) }), _jsx("li", { children: _jsxs("button", { type: "button", className: "rl-pagination__step", "data-key": "next", disabled: disabled || page >= pageCount, "aria-disabled": busy || undefined, onClick: () => go(page + 1, 'next'), children: [_jsx("span", { className: "rl-pagination__step-label", children: labels.next }), _jsx(ChevronIcon, { direction: "next" })] }) })] }), showStatus && totalItems != null && (_jsx("p", { className: "rl-pagination__status", role: "status", children: labels.status(from, to, totalItems) }))] }) }));
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=Pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../src/components/Pagination.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Non-modal floating panel on Base UI Popover (ADR-0001). Unlike Tooltip it may hold
|
|
4
|
+
* interactive content and is reachable by touch and assistive tech: the trigger gets
|
|
5
|
+
* aria-expanded / aria-controls, the popup is a labelled dialog, focus moves in on open
|
|
6
|
+
* and returns on close, Escape and outside clicks dismiss. Popup motion is a CSS
|
|
7
|
+
* transition on Base UI's starting/ending styles (--rl-motion-fast).
|
|
8
|
+
*/
|
|
9
|
+
export type PopoverSide = 'top' | 'bottom' | 'left' | 'right';
|
|
10
|
+
export type PopoverAlign = 'start' | 'center' | 'end';
|
|
11
|
+
export type PopoverSize = 'sm' | 'md' | 'lg';
|
|
12
|
+
export type PopoverProps = {
|
|
13
|
+
/** Element that toggles the popover (usually a Button or IconButton with its own name). */
|
|
14
|
+
trigger: React.ReactElement<Record<string, unknown>>;
|
|
15
|
+
/** Visible heading; also the popup's accessible name. Use `aria-label` when there is no title. */
|
|
16
|
+
title?: React.ReactNode;
|
|
17
|
+
description?: React.ReactNode;
|
|
18
|
+
children?: React.ReactNode;
|
|
19
|
+
/** Footer actions. Wrap dismiss-only buttons in `<PopoverClose>`. */
|
|
20
|
+
actions?: React.ReactNode;
|
|
21
|
+
side?: PopoverSide;
|
|
22
|
+
align?: PopoverAlign;
|
|
23
|
+
size?: PopoverSize;
|
|
24
|
+
/** Also open on hover (for preview content). Focus and click still open it. */
|
|
25
|
+
openOnHover?: boolean;
|
|
26
|
+
/** Show a pointer arrow toward the trigger. */
|
|
27
|
+
arrow?: boolean;
|
|
28
|
+
open?: boolean;
|
|
29
|
+
defaultOpen?: boolean;
|
|
30
|
+
onOpenChange?: (open: boolean) => void;
|
|
31
|
+
/** Element to focus on open; defaults to the first tabbable element, or the popup. */
|
|
32
|
+
initialFocus?: React.RefObject<HTMLElement | null>;
|
|
33
|
+
/** Accessible name when no visible `title` is rendered. */
|
|
34
|
+
'aria-label'?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function Popover({ trigger, title, description, children, actions, side, align, size, openOnHover, arrow, open, defaultOpen, onOpenChange, initialFocus, 'aria-label': ariaLabel, className, }: PopoverProps): React.JSX.Element;
|
|
38
|
+
export type PopoverCloseProps = {
|
|
39
|
+
/** The element that closes the popover, e.g. `<Button variant="ghost">完成</Button>`. */
|
|
40
|
+
children: React.ReactElement<Record<string, unknown>>;
|
|
41
|
+
};
|
|
42
|
+
/** Wraps a button so activating it closes the nearest Popover. */
|
|
43
|
+
export declare function PopoverClose({ children }: PopoverCloseProps): React.JSX.Element;
|
|
44
|
+
//# sourceMappingURL=Popover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/components/Popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;GAMG;AAEH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,2FAA2F;IAC3F,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,kGAAkG;IAClG,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qEAAqE;IACrE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,sFAAsF;IACtF,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACnD,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,IAAe,EACf,KAAgB,EAChB,IAAW,EACX,WAAmB,EACnB,KAAa,EACb,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EAAE,SAAS,EACvB,SAAS,GACV,EAAE,YAAY,qBAgDd;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uFAAuF;IACvF,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,qBAE3D"}
|