@wzrhine/react 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -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 +63 -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 +49 -0
- package/dist/components/AlertDialog.d.ts.map +1 -0
- package/dist/components/AlertDialog.js +122 -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/Badge.d.ts +17 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +16 -0
- package/dist/components/Badge.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 +33 -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 +49 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +48 -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 +25 -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 +22 -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/Icon.d.ts +25 -0
- package/dist/components/Icon.d.ts.map +1 -0
- package/dist/components/Icon.js +38 -0
- package/dist/components/Icon.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 +54 -0
- package/dist/components/NumberField.d.ts.map +1 -0
- package/dist/components/NumberField.js +27 -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 +49 -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 +68 -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/ResizeHandle.d.ts +32 -0
- package/dist/components/ResizeHandle.d.ts.map +1 -0
- package/dist/components/ResizeHandle.js +33 -0
- package/dist/components/ResizeHandle.js.map +1 -0
- package/dist/components/ScrollArea.d.ts +60 -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/Tree.d.ts +28 -0
- package/dist/components/Tree.d.ts.map +1 -0
- package/dist/components/Tree.js +129 -0
- package/dist/components/Tree.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/Workbench.d.ts +31 -0
- package/dist/components/Workbench.d.ts.map +1 -0
- package/dist/components/Workbench.js +71 -0
- package/dist/components/Workbench.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/navigation.d.ts +38 -0
- package/dist/components/navigation.d.ts.map +1 -0
- package/dist/components/navigation.js +96 -0
- package/dist/components/navigation.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 +678 -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 +533 -0
- package/dist/index.d.ts +129 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -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 +209 -0
- package/dist/provider/messages.d.ts.map +1 -0
- package/dist/provider/messages.js +168 -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 +67 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitButton.js","sourceRoot":"","sources":["../../src/components/SplitButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAwCjC,MAAM,aAAa,GAA6C;IAC9D,OAAO,EAAE,SAAS;IAClB,qFAAqF;IACrF,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,SAAS,OAAO;IACd,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAC/G,eAAM,CAAC,EAAC,cAAc,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,GAClE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAmC,SAAS,WAAW,CAChG,EACE,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,SAAS,EACT,QAAQ,GAAG,QAAQ,EACnB,SAAS,GAAG,KAAK,EACjB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC9D,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,EAAE;QACzC,IAAI,IAAI,IAAI,OAAO;YAAE,OAAO;QAC5B,IAAI,QAAQ,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CACL,kBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,OAAO,gBACA,KAAK,EACjB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,eACjC,cAAc,kBACV,OAAO,eACV,IAAI,mBACA,QAAQ,IAAI,SAAS,aAEpC,KAAC,MAAM,IAAC,SAAS,EAAC,uBAAuB,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,YACjJ,KAAK,GACC,EACT,KAAC,IAAI,IACH,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EACL,KAAC,UAAU,IACT,SAAS,EAAC,yBAAyB,EACnC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,KAAC,OAAO,KAAG,EACjB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,mBACH,OAAO,IAAI,SAAS,GACnC,YAGH,QAAQ,GACJ,IACH,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Labelled figure with an optional change (ADR-0005 §5). A rise is not assumed to be good:
|
|
4
|
+
* the caller sets `delta.tone`. Missing values show "—" and are read as "无数据"; the component
|
|
5
|
+
* never substitutes 0.
|
|
6
|
+
*
|
|
7
|
+
* <Stat label="待复核记录" value={128} unit="条" delta={{ value: -12, label: '较上周' }} />
|
|
8
|
+
*/
|
|
9
|
+
export type StatTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';
|
|
10
|
+
export interface StatDelta {
|
|
11
|
+
/** Signed change. The sign drives the arrow; it says nothing about good or bad. */
|
|
12
|
+
value: number;
|
|
13
|
+
/** Displayed change; defaults to the signed number (e.g. "+12", "−3"). */
|
|
14
|
+
text?: React.ReactNode;
|
|
15
|
+
/** Context, e.g. "较上周". */
|
|
16
|
+
label?: React.ReactNode;
|
|
17
|
+
tone?: StatTone;
|
|
18
|
+
}
|
|
19
|
+
export type StatProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
|
|
20
|
+
label: React.ReactNode;
|
|
21
|
+
/** Number or preformatted text. `null` / `undefined` = no data. */
|
|
22
|
+
value: number | string | null | undefined;
|
|
23
|
+
/** Formatting for numeric `value` (Intl.NumberFormat). */
|
|
24
|
+
format?: Intl.NumberFormatOptions;
|
|
25
|
+
locale?: Intl.LocalesArgument;
|
|
26
|
+
unit?: React.ReactNode;
|
|
27
|
+
delta?: StatDelta;
|
|
28
|
+
/** Business status of the figure; shown as a side rule, never as the only signal. */
|
|
29
|
+
status?: StatTone;
|
|
30
|
+
description?: React.ReactNode;
|
|
31
|
+
loading?: boolean;
|
|
32
|
+
size?: 'sm' | 'md' | 'lg';
|
|
33
|
+
/** Spoken text for missing values. */
|
|
34
|
+
emptyLabel?: string;
|
|
35
|
+
};
|
|
36
|
+
export declare const Stat: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
|
|
37
|
+
label: React.ReactNode;
|
|
38
|
+
/** Number or preformatted text. `null` / `undefined` = no data. */
|
|
39
|
+
value: number | string | null | undefined;
|
|
40
|
+
/** Formatting for numeric `value` (Intl.NumberFormat). */
|
|
41
|
+
format?: Intl.NumberFormatOptions;
|
|
42
|
+
locale?: Intl.LocalesArgument;
|
|
43
|
+
unit?: React.ReactNode;
|
|
44
|
+
delta?: StatDelta;
|
|
45
|
+
/** Business status of the figure; shown as a side rule, never as the only signal. */
|
|
46
|
+
status?: StatTone;
|
|
47
|
+
description?: React.ReactNode;
|
|
48
|
+
loading?: boolean;
|
|
49
|
+
size?: "sm" | "md" | "lg";
|
|
50
|
+
/** Spoken text for missing values. */
|
|
51
|
+
emptyLabel?: string;
|
|
52
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
53
|
+
//# sourceMappingURL=Stat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/components/Stat.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IAC5E,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,mEAAmE;IACnE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,0DAA0D;IAC1D,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAClC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qFAAqF;IACrF,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAWF,eAAO,MAAM,IAAI;WA1BR,KAAK,CAAC,SAAS;IACtB,mEAAmE;WAC5D,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IACzC,0DAA0D;aACjD,IAAI,CAAC,mBAAmB;aACxB,IAAI,CAAC,eAAe;WACtB,KAAK,CAAC,SAAS;YACd,SAAS;IACjB,qFAAqF;aAC5E,QAAQ;kBACH,KAAK,CAAC,SAAS;cACnB,OAAO;WACV,IAAI,GAAG,IAAI,GAAG,IAAI;IACzB,sCAAsC;iBACzB,MAAM;qCA+EnB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useRhineLocale } from '../provider/messages.js';
|
|
5
|
+
import { cx } from '../utils/cx.js';
|
|
6
|
+
import { Skeleton } from './Skeleton.js';
|
|
7
|
+
function DeltaIcon({ direction }) {
|
|
8
|
+
const d = direction === 'up' ? 'M8 12.5V3.5M4 7.5l4-4 4 4' : direction === 'down' ? 'M8 3.5v9M4 8.5l4 4 4-4' : 'M3.5 8h9';
|
|
9
|
+
return (_jsx("svg", { className: "rl-stat__delta-icon", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: d }) }));
|
|
10
|
+
}
|
|
11
|
+
export const Stat = React.forwardRef(function Stat({ label, value, format, locale, unit, delta, status, description, loading = false, size = 'md', emptyLabel: emptyLabelProp, className, ...rest }, ref) {
|
|
12
|
+
const { messages, locale: contextLocale } = useRhineLocale();
|
|
13
|
+
// ADR-0009 §3: the component's own `locale` wins over the provider's.
|
|
14
|
+
const numberLocale = locale ?? contextLocale;
|
|
15
|
+
const emptyLabel = emptyLabelProp ?? messages.stat.empty;
|
|
16
|
+
const empty = value === null || value === undefined || value === '';
|
|
17
|
+
const display = empty ? null : typeof value === 'number' ? new Intl.NumberFormat(numberLocale, format).format(value) : value;
|
|
18
|
+
const direction = delta ? (delta.value > 0 ? 'up' : delta.value < 0 ? 'down' : 'flat') : null;
|
|
19
|
+
const deltaText = delta?.text ??
|
|
20
|
+
(delta ? `${delta.value > 0 ? '+' : delta.value < 0 ? '−' : '±'}${new Intl.NumberFormat(numberLocale).format(Math.abs(delta.value))}` : null);
|
|
21
|
+
return (_jsxs("dl", { ...rest, ref: ref, className: cx('rl-stat', className), "data-slot": "stat", "data-size": size, "data-status": status, "aria-busy": loading || undefined, children: [_jsx("dt", { className: "rl-stat__label", children: label }), _jsxs("dd", { className: "rl-stat__value", "data-empty": (!loading && empty) || undefined, children: [loading ? (_jsx(Skeleton, { className: "rl-stat__skeleton", width: "calc(var(--rl-space-16) * 1.25)" })) : empty ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": "true", children: "\u2014" }), _jsx("span", { className: "rl-visually-hidden", children: emptyLabel })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "rl-stat__number", children: display }), unit != null && _jsx("span", { className: "rl-stat__unit", children: unit })] })), loading && _jsx("span", { className: "rl-visually-hidden", children: messages.stat.loading })] }), delta && direction && !loading && (_jsxs("dd", { className: "rl-stat__delta", "data-tone": delta.tone ?? 'neutral', "data-direction": direction, children: [_jsx(DeltaIcon, { direction: direction }), _jsx("span", { className: "rl-visually-hidden", children: messages.stat[direction] }), _jsx("span", { className: "rl-stat__delta-value", children: deltaText }), delta.label != null && _jsx("span", { className: "rl-stat__delta-label", children: delta.label })] })), description != null && _jsx("dd", { className: "rl-stat__description", children: description })] }));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=Stat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/components/Stat.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAwCzC,SAAS,SAAS,CAAC,EAAE,SAAS,EAAyC;IACrE,MAAM,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,CAAC;IAC1H,OAAO,CACL,cAAK,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YAC3F,eAAM,CAAC,EAAE,CAAC,GAAI,GACV,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAyB,SAAS,IAAI,CACxE,EACE,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,WAAW,EACX,OAAO,GAAG,KAAK,EACf,IAAI,GAAG,IAAI,EACX,UAAU,EAAE,cAAc,EAC1B,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE,CAAC;IAC7D,sEAAsE;IACtE,MAAM,YAAY,GAAG,MAAM,IAAI,aAAa,CAAC;IAC7C,MAAM,UAAU,GAAG,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7H,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,MAAM,SAAS,GACb,KAAK,EAAE,IAAI;QACX,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEhJ,OAAO,CACL,iBACM,IAAI,EACR,GAAG,EAAE,GAAkC,EACvC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,eACzB,MAAM,eACL,IAAI,iBACF,MAAM,eACR,OAAO,IAAI,SAAS,aAE/B,aAAI,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAM,EAC3C,cAAI,SAAS,EAAC,gBAAgB,gBAAa,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,SAAS,aACxE,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,QAAQ,IAAC,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAC,iCAAiC,GAAG,CACnF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,8BACE,8BAAkB,MAAM,uBAAS,EACjC,eAAM,SAAS,EAAC,oBAAoB,YAAE,UAAU,GAAQ,IACvD,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,eAAM,SAAS,EAAC,iBAAiB,YAAE,OAAO,GAAQ,EACjD,IAAI,IAAI,IAAI,IAAI,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,GAAQ,IAC7D,CACJ,EACA,OAAO,IAAI,eAAM,SAAS,EAAC,oBAAoB,YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAQ,IAC5E,EACJ,KAAK,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,CACjC,cAAI,SAAS,EAAC,gBAAgB,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,oBAAkB,SAAS,aAC1F,KAAC,SAAS,IAAC,SAAS,EAAE,SAAS,GAAI,EACnC,eAAM,SAAS,EAAC,oBAAoB,YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAQ,EACtE,eAAM,SAAS,EAAC,sBAAsB,YAAE,SAAS,GAAQ,EACxD,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,eAAM,SAAS,EAAC,sBAAsB,YAAE,KAAK,CAAC,KAAK,GAAQ,IAChF,CACN,EACA,WAAW,IAAI,IAAI,IAAI,aAAI,SAAS,EAAC,sBAAsB,YAAE,WAAW,GAAM,IAC5E,CACN,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type StatusKind = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
+
export type StatusBadgeSize = 'sm' | 'md';
|
|
4
|
+
export type StatusBadgeAppearance = 'subtle' | 'outline';
|
|
5
|
+
export type StatusBadgeProps = React.ComponentPropsWithoutRef<'span'> & {
|
|
6
|
+
/** Business status. Always paired with visible text; colour is never the only signal. */
|
|
7
|
+
status?: StatusKind;
|
|
8
|
+
size?: StatusBadgeSize;
|
|
9
|
+
/** `subtle` tints the background; `outline` keeps a neutral fill for dense tables. */
|
|
10
|
+
appearance?: StatusBadgeAppearance;
|
|
11
|
+
};
|
|
12
|
+
export declare const StatusBadge: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
|
|
13
|
+
/** Business status. Always paired with visible text; colour is never the only signal. */
|
|
14
|
+
status?: StatusKind;
|
|
15
|
+
size?: StatusBadgeSize;
|
|
16
|
+
/** `subtle` tints the background; `outline` keeps a neutral fill for dense tables. */
|
|
17
|
+
appearance?: StatusBadgeAppearance;
|
|
18
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
19
|
+
//# sourceMappingURL=StatusBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/StatusBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG;IACtE,yFAAyF;IACzF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,sFAAsF;IACtF,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,WAAW;IAPtB,yFAAyF;aAChF,UAAU;WACZ,eAAe;IACtB,sFAAsF;iBACzE,qBAAqB;yCAqBlC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cx } from '../utils/cx.js';
|
|
5
|
+
export const StatusBadge = React.forwardRef(function StatusBadge({ status = 'neutral', size = 'md', appearance = 'subtle', className, children, ...rest }, ref) {
|
|
6
|
+
return (_jsxs("span", { ...rest, ref: ref, className: cx('rl-badge', className), "data-slot": "status-badge", "data-status": status, "data-size": size, "data-appearance": appearance, children: [_jsx("span", { className: "rl-badge__indicator", "aria-hidden": "true" }), _jsx("span", { className: "rl-badge__label", children: children })] }));
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=StatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../src/components/StatusBadge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAcpC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAoC,SAAS,WAAW,CACjG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,UAAU,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EACxF,GAAG;IAEH,OAAO,CACL,mBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,eAC1B,cAAc,iBACX,MAAM,eACR,IAAI,qBACE,UAAU,aAE3B,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,GAAG,EAC3D,eAAM,SAAS,EAAC,iBAAiB,YAAE,QAAQ,GAAQ,IAC9C,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { StatusKind } from './StatusBadge.js';
|
|
3
|
+
/**
|
|
4
|
+
* Inline live/system status: a shaped marker plus visible text, e.g. "同步中 · 2 分钟前".
|
|
5
|
+
* For changing values set `live` so updates are announced politely. The optional pulse is a
|
|
6
|
+
* Showcase-grade signal only for genuinely live connections; it stops under reduced motion
|
|
7
|
+
* and is never used to imply activity that is not happening.
|
|
8
|
+
*/
|
|
9
|
+
export type StatusIndicatorProps = Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> & {
|
|
10
|
+
tone?: StatusKind;
|
|
11
|
+
label: React.ReactNode;
|
|
12
|
+
/** Secondary detail after the label, e.g. last-updated text. */
|
|
13
|
+
detail?: React.ReactNode;
|
|
14
|
+
/** Announce changes to `label` / `detail` via a polite live region. */
|
|
15
|
+
live?: boolean;
|
|
16
|
+
/** Soft pulse on the marker for a real, active connection. Disabled by reduced motion. */
|
|
17
|
+
pulse?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare const StatusIndicator: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> & {
|
|
20
|
+
tone?: StatusKind;
|
|
21
|
+
label: React.ReactNode;
|
|
22
|
+
/** Secondary detail after the label, e.g. last-updated text. */
|
|
23
|
+
detail?: React.ReactNode;
|
|
24
|
+
/** Announce changes to `label` / `detail` via a polite live region. */
|
|
25
|
+
live?: boolean;
|
|
26
|
+
/** Soft pulse on the marker for a real, active connection. Disabled by reduced motion. */
|
|
27
|
+
pulse?: boolean;
|
|
28
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
29
|
+
//# sourceMappingURL=StatusIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusIndicator.d.ts","sourceRoot":"","sources":["../../src/components/StatusIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;GAKG;AAEH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,GAAG;IAC3F,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,eAAe;WAVnB,UAAU;WACV,KAAK,CAAC,SAAS;IACtB,gEAAgE;aACvD,KAAK,CAAC,SAAS;IACxB,uEAAuE;WAChE,OAAO;IACd,0FAA0F;YAClF,OAAO;yCAuBf,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cx } from '../utils/cx.js';
|
|
5
|
+
export const StatusIndicator = React.forwardRef(function StatusIndicator({ tone = 'neutral', label, detail, live = false, pulse = false, className, ...rest }, ref) {
|
|
6
|
+
return (_jsxs("span", { ...rest, ref: ref, className: cx('rl-status', className), "data-slot": "status-indicator", "data-tone": tone, "data-pulse": pulse || undefined, role: live ? 'status' : undefined, "aria-live": live ? 'polite' : undefined, children: [_jsx("span", { className: "rl-status__marker", "aria-hidden": "true" }), _jsx("span", { className: "rl-status__label", children: label }), detail != null && _jsx("span", { className: "rl-status__detail", children: detail })] }));
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=StatusIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusIndicator.js","sourceRoot":"","sources":["../../src/components/StatusIndicator.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAqBpC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAwC,SAAS,eAAe,CAC7G,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EACpF,GAAG;IAEH,OAAO,CACL,mBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,eAC3B,kBAAkB,eACjB,IAAI,gBACH,KAAK,IAAI,SAAS,EAC9B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,eACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,aAEtC,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,GAAG,EACzD,eAAM,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAQ,EAChD,MAAM,IAAI,IAAI,IAAI,eAAM,SAAS,EAAC,mBAAmB,YAAE,MAAM,GAAQ,IACjE,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type SurfaceTone = 'default' | 'subtle' | 'raised';
|
|
3
|
+
export type SurfacePadding = 'none' | 'sm' | 'md' | 'lg';
|
|
4
|
+
export type SurfaceElement = 'section' | 'div' | 'article' | 'aside';
|
|
5
|
+
export type SurfaceProps = React.ComponentPropsWithoutRef<'section'> & {
|
|
6
|
+
/** Layer tone. Hierarchy is expressed through tone first, shadow only for `raised`. */
|
|
7
|
+
tone?: SurfaceTone;
|
|
8
|
+
padding?: SurfacePadding;
|
|
9
|
+
/** Show a 1px outline. Decorative only; never the sole interactive boundary. */
|
|
10
|
+
bordered?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Rendered element. Defaults to `section`, which needs an accessible name
|
|
13
|
+
* (`aria-labelledby`) to be exposed as a landmark; use `div` for purely visual grouping.
|
|
14
|
+
*/
|
|
15
|
+
as?: SurfaceElement;
|
|
16
|
+
};
|
|
17
|
+
export declare const Surface: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
|
|
18
|
+
/** Layer tone. Hierarchy is expressed through tone first, shadow only for `raised`. */
|
|
19
|
+
tone?: SurfaceTone;
|
|
20
|
+
padding?: SurfacePadding;
|
|
21
|
+
/** Show a 1px outline. Decorative only; never the sole interactive boundary. */
|
|
22
|
+
bordered?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Rendered element. Defaults to `section`, which needs an accessible name
|
|
25
|
+
* (`aria-labelledby`) to be exposed as a landmark; use `div` for purely visual grouping.
|
|
26
|
+
*/
|
|
27
|
+
as?: SurfaceElement;
|
|
28
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
29
|
+
//# sourceMappingURL=Surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../src/components/Surface.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACzD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,GAAG;IACrE,uFAAuF;IACvF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,OAAO;IAZlB,uFAAuF;WAChF,WAAW;cACR,cAAc;IACxB,gFAAgF;eACrE,OAAO;IAClB;;;OAGG;SACE,cAAc;qCAkBnB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cx } from '../utils/cx.js';
|
|
5
|
+
export const Surface = React.forwardRef(function Surface({ tone = 'default', padding = 'md', bordered = true, as: Element = 'section', className, ...rest }, ref) {
|
|
6
|
+
return (_jsx(Element, { ...rest, ref: ref, "data-slot": "surface", "data-tone": tone, "data-padding": padding, "data-bordered": bordered || undefined, className: cx('rl-surface', className) }));
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=Surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../src/components/Surface.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAmBpC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAA4B,SAAS,OAAO,CACjF,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAClG,GAAG;IAEH,OAAO,CACL,KAAC,OAAO,OACF,IAAI,EACR,GAAG,EAAE,GAAgC,eAC3B,SAAS,eACR,IAAI,kBACD,OAAO,mBACN,QAAQ,IAAI,SAAS,EACpC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,GACtC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Switch as BaseSwitch } from '@base-ui/react/switch';
|
|
3
|
+
/**
|
|
4
|
+
* On/off setting that takes effect immediately (role="switch"). For a choice that is only
|
|
5
|
+
* applied on submit, or that needs a "required" check, use Checkbox instead.
|
|
6
|
+
*
|
|
7
|
+
* <Switch label="自动归档" description="复核通过 30 天后移入归档。" checked={auto} onCheckedChange={setAuto} />
|
|
8
|
+
*/
|
|
9
|
+
type BaseRootProps = React.ComponentProps<typeof BaseSwitch.Root>;
|
|
10
|
+
export type SwitchProps = Omit<BaseRootProps, 'className' | 'style' | 'render' | 'children' | 'nativeButton' | 'required' | 'aria-label' | 'aria-labelledby'> & {
|
|
11
|
+
label: React.ReactNode;
|
|
12
|
+
hideLabel?: boolean;
|
|
13
|
+
/** The name comes from `label`; a second naming channel would drift from the visible text. */
|
|
14
|
+
'aria-label'?: never;
|
|
15
|
+
'aria-labelledby'?: never;
|
|
16
|
+
description?: React.ReactNode;
|
|
17
|
+
className?: string;
|
|
18
|
+
style?: React.CSSProperties;
|
|
19
|
+
};
|
|
20
|
+
export declare const Switch: React.ForwardRefExoticComponent<Omit<SwitchProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=Switch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../src/components/Switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAI7D;;;;;GAKG;AAEH,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,aAAa,EACb,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,CAC/G,GAAG;IACF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,MAAM,8FA0BjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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 { Switch as BaseSwitch } from '@base-ui/react/switch';
|
|
6
|
+
import { cx } from '../utils/cx.js';
|
|
7
|
+
import { LabelText } from './fieldParts.js';
|
|
8
|
+
export const Switch = React.forwardRef(function Switch({ label, hideLabel = false, description, disabled, name, className, style, ...rest }, ref) {
|
|
9
|
+
return (_jsxs(BaseField.Root, { className: cx('rl-choice', className), style: style, name: name, disabled: disabled, "data-kind": "switch", "data-hide-label": hideLabel || undefined, children: [_jsxs(BaseField.Label, { className: "rl-choice__label", children: [_jsx(BaseSwitch.Root, { ...rest, ref: ref, className: "rl-switch", "data-slot": "switch", children: _jsx(BaseSwitch.Thumb, { className: "rl-switch__thumb" }) }), _jsx("span", { className: hideLabel ? 'rl-visually-hidden' : 'rl-choice__text', children: _jsx(LabelText, { label: label }) })] }), description != null && (_jsx(BaseField.Description, { className: "rl-choice__description", children: description }))] }));
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=Switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../src/components/Switch.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,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAyB5C,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAA2B,SAAS,MAAM,CAC9E,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EACpF,GAAG;IAEH,OAAO,CACL,MAAC,SAAS,CAAC,IAAI,IACb,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,eACR,QAAQ,qBACD,SAAS,IAAI,SAAS,aAEvC,MAAC,SAAS,CAAC,KAAK,IAAC,SAAS,EAAC,kBAAkB,aAC3C,KAAC,UAAU,CAAC,IAAI,OAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,WAAW,eAAW,QAAQ,YAC3E,KAAC,UAAU,CAAC,KAAK,IAAC,SAAS,EAAC,kBAAkB,GAAG,GACjC,EAClB,eAAM,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,YACnE,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI,GACtB,IACS,EACjB,WAAW,IAAI,IAAI,IAAI,CACtB,KAAC,SAAS,CAAC,WAAW,IAAC,SAAS,EAAC,wBAAwB,YAAE,WAAW,GAAyB,CAChG,IACc,CAClB,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Tabs as BaseTabs } from '@base-ui/react/tabs';
|
|
3
|
+
/**
|
|
4
|
+
* Tabs on Base UI Tabs (ADR-0001): roving focus with arrow keys, Home/End, automatic
|
|
5
|
+
* tab/tabpanel wiring. The indicator slides via CSS transition on Base UI's
|
|
6
|
+
* --active-tab-* variables (--rl-motion-base); it jumps under reduced motion and
|
|
7
|
+
* retargets from its current position when switched mid-flight.
|
|
8
|
+
*/
|
|
9
|
+
export type TabsVariant = 'line' | 'segmented';
|
|
10
|
+
export type TabsSize = 'sm' | 'md';
|
|
11
|
+
type BaseRootProps = React.ComponentProps<typeof BaseTabs.Root>;
|
|
12
|
+
export type TabsProps = Omit<BaseRootProps, 'className' | 'style' | 'render' | 'value' | 'defaultValue' | 'onValueChange'> & {
|
|
13
|
+
value?: string;
|
|
14
|
+
defaultValue?: string;
|
|
15
|
+
onValueChange?: (value: string) => void;
|
|
16
|
+
variant?: TabsVariant;
|
|
17
|
+
size?: TabsSize;
|
|
18
|
+
className?: string;
|
|
19
|
+
style?: React.CSSProperties;
|
|
20
|
+
};
|
|
21
|
+
export declare const Tabs: React.ForwardRefExoticComponent<Omit<TabsProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
export type TabListProps = Omit<React.ComponentProps<typeof BaseTabs.List>, 'className' | 'style' | 'render'> & {
|
|
23
|
+
/** Required: names the tab set for screen readers (e.g. "记录视图"). */
|
|
24
|
+
'aria-label'?: string;
|
|
25
|
+
'aria-labelledby'?: string;
|
|
26
|
+
className?: string;
|
|
27
|
+
style?: React.CSSProperties;
|
|
28
|
+
};
|
|
29
|
+
export declare const TabList: React.ForwardRefExoticComponent<Omit<TabListProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export type TabProps = Omit<React.ComponentProps<typeof BaseTabs.Tab>, 'className' | 'style' | 'render' | 'value'> & {
|
|
31
|
+
value: string;
|
|
32
|
+
/** Optional count or status after the label; read as part of the tab name. */
|
|
33
|
+
meta?: React.ReactNode;
|
|
34
|
+
className?: string;
|
|
35
|
+
style?: React.CSSProperties;
|
|
36
|
+
};
|
|
37
|
+
export declare const Tab: React.ForwardRefExoticComponent<Omit<TabProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
38
|
+
export type TabPanelProps = Omit<React.ComponentProps<typeof BaseTabs.Panel>, 'className' | 'style' | 'render' | 'value'> & {
|
|
39
|
+
value: string;
|
|
40
|
+
className?: string;
|
|
41
|
+
style?: React.CSSProperties;
|
|
42
|
+
};
|
|
43
|
+
export declare const TabPanel: React.ForwardRefExoticComponent<Omit<TabPanelProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=Tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/components/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAC/C,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC,GAAG;IAC3H,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,IAAI,+FAgBf,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;IAC9G,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAwBF,eAAO,MAAM,OAAO,kGA2BlB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG;IACnH,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,GAAG,iGAUd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG;IAC1H,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,QAAQ,mGAKnB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Tabs as BaseTabs } from '@base-ui/react/tabs';
|
|
5
|
+
import { cx } from '../utils/cx.js';
|
|
6
|
+
export const Tabs = React.forwardRef(function Tabs({ variant = 'line', size = 'md', onValueChange, className, style, ...rest }, ref) {
|
|
7
|
+
return (_jsx(BaseTabs.Root, { ...rest, ref: ref, onValueChange: onValueChange ? (v) => onValueChange(String(v)) : undefined, className: cx('rl-tabs', className), style: style, "data-slot": "tabs", "data-variant": variant, "data-size": size }));
|
|
8
|
+
});
|
|
9
|
+
/** Flags horizontal overflow so CSS can fade the trailing edge as a scroll affordance. */
|
|
10
|
+
function useOverflowState(node) {
|
|
11
|
+
const [state, setState] = React.useState({ overflowing: false, atEnd: false });
|
|
12
|
+
React.useEffect(() => {
|
|
13
|
+
if (!node)
|
|
14
|
+
return;
|
|
15
|
+
const update = () => {
|
|
16
|
+
const overflowing = node.scrollWidth > node.clientWidth + 1;
|
|
17
|
+
const atEnd = node.scrollLeft + node.clientWidth >= node.scrollWidth - 1;
|
|
18
|
+
setState((prev) => (prev.overflowing === overflowing && prev.atEnd === atEnd ? prev : { overflowing, atEnd }));
|
|
19
|
+
};
|
|
20
|
+
update();
|
|
21
|
+
node.addEventListener('scroll', update, { passive: true });
|
|
22
|
+
const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(update);
|
|
23
|
+
observer?.observe(node);
|
|
24
|
+
return () => {
|
|
25
|
+
node.removeEventListener('scroll', update);
|
|
26
|
+
observer?.disconnect();
|
|
27
|
+
};
|
|
28
|
+
}, [node]);
|
|
29
|
+
return state;
|
|
30
|
+
}
|
|
31
|
+
export const TabList = React.forwardRef(function TabList({ className, style, children, ...rest }, ref) {
|
|
32
|
+
const [node, setNode] = React.useState(null);
|
|
33
|
+
const { overflowing, atEnd } = useOverflowState(node);
|
|
34
|
+
const setRefs = React.useCallback((el) => {
|
|
35
|
+
setNode(el);
|
|
36
|
+
if (typeof ref === 'function')
|
|
37
|
+
ref(el);
|
|
38
|
+
else if (ref)
|
|
39
|
+
ref.current = el;
|
|
40
|
+
}, [ref]);
|
|
41
|
+
return (_jsxs(BaseTabs.List, { ...rest, ref: setRefs, className: cx('rl-tabs__list', className), style: style, "data-overflowing": overflowing || undefined, "data-scrolled-end": (overflowing && atEnd) || undefined, children: [children, _jsx(BaseTabs.Indicator, { className: "rl-tabs__indicator" })] }));
|
|
42
|
+
});
|
|
43
|
+
export const Tab = React.forwardRef(function Tab({ meta, className, style, children, ...rest }, ref) {
|
|
44
|
+
return (_jsxs(BaseTabs.Tab, { ...rest, ref: ref, className: cx('rl-tabs__tab', className), style: style, children: [_jsx("span", { className: "rl-tabs__label", children: children }), meta != null && _jsx("span", { className: "rl-tabs__meta", children: meta })] }));
|
|
45
|
+
});
|
|
46
|
+
export const TabPanel = React.forwardRef(function TabPanel({ className, style, ...rest }, ref) {
|
|
47
|
+
return _jsx(BaseTabs.Panel, { ...rest, ref: ref, className: cx('rl-tabs__panel', className), style: style });
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../src/components/Tabs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type TextVariant = 'display' | 'heading-1' | 'heading-2' | 'heading-3' | 'body' | 'body-sm' | 'label' | 'meta' | 'mono' | 'eyebrow';
|
|
3
|
+
export type TextTone = 'primary' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success' | 'warning' | 'info';
|
|
4
|
+
export type TextElement = 'p' | 'span' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'strong' | 'em' | 'small' | 'code' | 'time' | 'dt' | 'dd' | 'figcaption' | 'legend';
|
|
5
|
+
export type TextProps = React.HTMLAttributes<HTMLElement> & {
|
|
6
|
+
/** Type role from the token scale. Visual size is independent of the semantic element. */
|
|
7
|
+
variant?: TextVariant;
|
|
8
|
+
/** Rendered element. Defaults to a sensible element per variant; set it to keep the heading outline correct. */
|
|
9
|
+
as?: TextElement;
|
|
10
|
+
tone?: TextTone;
|
|
11
|
+
/** Clamp to one line with an ellipsis. Pair with `title` when the full text matters. */
|
|
12
|
+
truncate?: boolean;
|
|
13
|
+
/** Tabular numerals for aligned figures in tables and metadata. */
|
|
14
|
+
numeric?: boolean;
|
|
15
|
+
/** Passed through for `as="label"` / `as="time"`. */
|
|
16
|
+
htmlFor?: string;
|
|
17
|
+
dateTime?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const Text: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & {
|
|
20
|
+
/** Type role from the token scale. Visual size is independent of the semantic element. */
|
|
21
|
+
variant?: TextVariant;
|
|
22
|
+
/** Rendered element. Defaults to a sensible element per variant; set it to keep the heading outline correct. */
|
|
23
|
+
as?: TextElement;
|
|
24
|
+
tone?: TextTone;
|
|
25
|
+
/** Clamp to one line with an ellipsis. Pair with `title` when the full text matters. */
|
|
26
|
+
truncate?: boolean;
|
|
27
|
+
/** Tabular numerals for aligned figures in tables and metadata. */
|
|
28
|
+
numeric?: boolean;
|
|
29
|
+
/** Passed through for `as="label"` / `as="time"`. */
|
|
30
|
+
htmlFor?: string;
|
|
31
|
+
dateTime?: string;
|
|
32
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
33
|
+
//# sourceMappingURL=Text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,WAAW,GACX,WAAW,GACX,WAAW,GACX,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7G,MAAM,MAAM,WAAW,GACnB,GAAG,GACH,MAAM,GACN,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,QAAQ,GACR,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,YAAY,GACZ,QAAQ,CAAC;AAeb,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;IAC1D,0FAA0F;IAC1F,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,gHAAgH;IAChH,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,IAAI;IAdf,0FAA0F;cAChF,WAAW;IACrB,gHAAgH;SAC3G,WAAW;WACT,QAAQ;IACf,wFAAwF;eAC7E,OAAO;IAClB,mEAAmE;cACzD,OAAO;IACjB,qDAAqD;cAC3C,MAAM;eACL,MAAM;qCAoBjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cx } from '../utils/cx.js';
|
|
5
|
+
const defaultElement = {
|
|
6
|
+
display: 'h1',
|
|
7
|
+
'heading-1': 'h1',
|
|
8
|
+
'heading-2': 'h2',
|
|
9
|
+
'heading-3': 'h3',
|
|
10
|
+
body: 'p',
|
|
11
|
+
'body-sm': 'p',
|
|
12
|
+
label: 'span',
|
|
13
|
+
meta: 'span',
|
|
14
|
+
mono: 'span',
|
|
15
|
+
eyebrow: 'p',
|
|
16
|
+
};
|
|
17
|
+
export const Text = React.forwardRef(function Text({ variant = 'body', as, tone, truncate = false, numeric = false, className, ...rest }, ref) {
|
|
18
|
+
const Element = (as ?? defaultElement[variant]);
|
|
19
|
+
return (_jsx(Element, { ...rest, ref: ref, className: cx('rl-text', className), "data-slot": "text", "data-variant": variant, "data-tone": tone, "data-truncate": truncate || undefined, "data-numeric": numeric || undefined }));
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAqCpC,MAAM,cAAc,GAAqC;IACvD,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,GAAG;CACb,CAAC;AAiBF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAyB,SAAS,IAAI,CACxE,EAAE,OAAO,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EACrF,GAAG;IAEH,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,CAAsB,CAAC;IACrE,OAAO,CACL,KAAC,OAAO,OACF,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,eACzB,MAAM,kBACF,OAAO,eACV,IAAI,mBACA,QAAQ,IAAI,SAAS,kBACtB,OAAO,IAAI,SAAS,GAClC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Field as BaseField } from '@base-ui/react/field';
|
|
3
|
+
type BaseControlProps = React.ComponentProps<typeof BaseField.Control>;
|
|
4
|
+
export type TextareaResize = 'vertical' | 'none';
|
|
5
|
+
export type TextareaProps = Omit<React.ComponentPropsWithoutRef<'textarea'>, 'className' | 'style' | 'defaultValue' | 'value'> & {
|
|
6
|
+
value?: string;
|
|
7
|
+
defaultValue?: string;
|
|
8
|
+
onValueChange?: BaseControlProps['onValueChange'];
|
|
9
|
+
/** Grow with the content (where `field-sizing` is supported) between `rows` and `maxRows`. */
|
|
10
|
+
autoResize?: boolean;
|
|
11
|
+
/** Upper bound for `autoResize`, in lines. Beyond it the textarea scrolls. */
|
|
12
|
+
maxRows?: number;
|
|
13
|
+
resize?: TextareaResize;
|
|
14
|
+
/**
|
|
15
|
+
* Shows "已输入 n / maxLength" under the control and links it as a description.
|
|
16
|
+
* Requires `maxLength`.
|
|
17
|
+
*/
|
|
18
|
+
showCount?: boolean;
|
|
19
|
+
mono?: boolean;
|
|
20
|
+
/** Mark invalid outside a Field (inside a Field, validity comes from Field). */
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
className?: string;
|
|
23
|
+
style?: React.CSSProperties;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Multi-line text on Base UI Field.Control: inside `<Field>` it picks up label, description,
|
|
27
|
+
* error and validity like `Input`; standalone it needs `aria-label`.
|
|
28
|
+
*
|
|
29
|
+
* <Field label="复核意见" description="不超过 500 字。">
|
|
30
|
+
* <Textarea name="note" rows={4} maxLength={500} showCount autoResize />
|
|
31
|
+
* </Field>
|
|
32
|
+
*/
|
|
33
|
+
export declare const Textarea: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref">, "value" | "defaultValue" | "className" | "style"> & {
|
|
34
|
+
value?: string;
|
|
35
|
+
defaultValue?: string;
|
|
36
|
+
onValueChange?: BaseControlProps["onValueChange"];
|
|
37
|
+
/** Grow with the content (where `field-sizing` is supported) between `rows` and `maxRows`. */
|
|
38
|
+
autoResize?: boolean;
|
|
39
|
+
/** Upper bound for `autoResize`, in lines. Beyond it the textarea scrolls. */
|
|
40
|
+
maxRows?: number;
|
|
41
|
+
resize?: TextareaResize;
|
|
42
|
+
/**
|
|
43
|
+
* Shows "已输入 n / maxLength" under the control and links it as a description.
|
|
44
|
+
* Requires `maxLength`.
|
|
45
|
+
*/
|
|
46
|
+
showCount?: boolean;
|
|
47
|
+
mono?: boolean;
|
|
48
|
+
/** Mark invalid outside a Field (inside a Field, validity comes from Field). */
|
|
49
|
+
invalid?: boolean;
|
|
50
|
+
className?: string;
|
|
51
|
+
style?: React.CSSProperties;
|
|
52
|
+
} & React.RefAttributes<HTMLTextAreaElement>>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=Textarea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/components/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAI1D,KAAK,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,KAAK,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAC1C,WAAW,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,CACjD,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,8FAA8F;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,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;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ;YA5BX,MAAM;mBACC,MAAM;oBACL,gBAAgB,CAAC,eAAe,CAAC;IACjD,8FAA8F;iBACjF,OAAO;IACpB,8EAA8E;cACpE,MAAM;aACP,cAAc;IACvB;;;OAGG;gBACS,OAAO;WACZ,OAAO;IACd,gFAAgF;cACtE,OAAO;gBACL,MAAM;YACV,KAAK,CAAC,aAAa;6CA+E3B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Field as BaseField } from '@base-ui/react/field';
|
|
5
|
+
import { useRhineLocale } from '../provider/messages.js';
|
|
6
|
+
import { cx } from '../utils/cx.js';
|
|
7
|
+
/**
|
|
8
|
+
* Multi-line text on Base UI Field.Control: inside `<Field>` it picks up label, description,
|
|
9
|
+
* error and validity like `Input`; standalone it needs `aria-label`.
|
|
10
|
+
*
|
|
11
|
+
* <Field label="复核意见" description="不超过 500 字。">
|
|
12
|
+
* <Textarea name="note" rows={4} maxLength={500} showCount autoResize />
|
|
13
|
+
* </Field>
|
|
14
|
+
*/
|
|
15
|
+
export const Textarea = React.forwardRef(function Textarea({ rows = 3, maxRows, autoResize = false, resize = 'vertical', showCount = false, mono = false, invalid, disabled, readOnly, maxLength, value, defaultValue, onValueChange, className, style, ...rest }, ref) {
|
|
16
|
+
const countId = React.useId();
|
|
17
|
+
const { messages, formatNumber } = useRhineLocale();
|
|
18
|
+
const [length, setLength] = React.useState(() => (value ?? defaultValue ?? '').length);
|
|
19
|
+
const current = value !== undefined ? value.length : length;
|
|
20
|
+
const counting = showCount && maxLength != null;
|
|
21
|
+
const describedBy = [rest['aria-describedby'], counting ? countId : undefined].filter(Boolean).join(' ') || undefined;
|
|
22
|
+
const vars = {
|
|
23
|
+
'--rl-textarea-rows': rows,
|
|
24
|
+
...(maxRows != null ? { '--rl-textarea-max-rows': maxRows } : null),
|
|
25
|
+
};
|
|
26
|
+
return (_jsxs("span", { className: cx('rl-textarea', className), style: { ...vars, ...style }, "data-slot": "textarea", "data-auto-resize": autoResize || undefined, "data-resize": resize, "data-mono": mono || undefined, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, "data-invalid": invalid || undefined, children: [_jsx(BaseField.Control, { ...rest, render: _jsx("textarea", { rows: rows }), ref: ref, disabled: disabled, readOnly: readOnly, maxLength: maxLength, ...(value !== undefined ? { value } : { defaultValue }), onValueChange: (next, details) => {
|
|
27
|
+
setLength(next.length);
|
|
28
|
+
onValueChange?.(next, details);
|
|
29
|
+
}, ...(invalid ? { 'aria-invalid': true } : null), "aria-describedby": describedBy, className: "rl-textarea__control" }), counting && (_jsx("span", { id: countId, className: "rl-textarea__count", "data-over": current >= maxLength || undefined, children: messages.textarea.count(current, maxLength, formatNumber) }))] }));
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=Textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../src/components/Textarea.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { StatusKind } from './StatusBadge.js';
|
|
3
|
+
/**
|
|
4
|
+
* Chronological event log as an ordered list. Each event needs a real timestamp
|
|
5
|
+
* (`dateTime` is machine-readable, `time` is the visible text); the component does
|
|
6
|
+
* not sort, invent or reformat times — pass events in the order they should read.
|
|
7
|
+
*/
|
|
8
|
+
export interface TimelineEvent {
|
|
9
|
+
id: string;
|
|
10
|
+
title: React.ReactNode;
|
|
11
|
+
/** ISO 8601 date or date-time, used for <time dateTime>. */
|
|
12
|
+
dateTime: string;
|
|
13
|
+
/** Visible time text; defaults to `dateTime`. */
|
|
14
|
+
time?: React.ReactNode;
|
|
15
|
+
description?: React.ReactNode;
|
|
16
|
+
/** Optional status marker; the title must still say what happened. */
|
|
17
|
+
tone?: StatusKind;
|
|
18
|
+
/** Who or what recorded the event. */
|
|
19
|
+
actor?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export type TimelineProps = Omit<React.OlHTMLAttributes<HTMLOListElement>, 'children'> & {
|
|
22
|
+
events: readonly TimelineEvent[];
|
|
23
|
+
/** Shown when `events` is empty. */
|
|
24
|
+
emptyText?: React.ReactNode;
|
|
25
|
+
/** Newest-first lists set `reversed` so ordinal semantics match reading order. */
|
|
26
|
+
reversed?: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare const Timeline: React.ForwardRefExoticComponent<Omit<React.OlHTMLAttributes<HTMLOListElement>, "children"> & {
|
|
29
|
+
events: readonly TimelineEvent[];
|
|
30
|
+
/** Shown when `events` is empty. */
|
|
31
|
+
emptyText?: React.ReactNode;
|
|
32
|
+
/** Newest-first lists set `reversed` so ordinal semantics match reading order. */
|
|
33
|
+
reversed?: boolean;
|
|
34
|
+
} & React.RefAttributes<HTMLOListElement>>;
|
|
35
|
+
//# sourceMappingURL=Timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../src/components/Timeline.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,sEAAsE;IACtE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAAG;IACvF,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ;YAPX,SAAS,aAAa,EAAE;IAChC,oCAAoC;gBACxB,KAAK,CAAC,SAAS;IAC3B,kFAAkF;eACvE,OAAO;0CAgClB,CAAC"}
|