@aster-ui/prefixed 0.12.50
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/LICENSE +15 -0
- package/README.md +40 -0
- package/dist/chart.d.ts +2 -0
- package/dist/chart.js +5 -0
- package/dist/chart.js.map +1 -0
- package/dist/components/Affix.d.ts +14 -0
- package/dist/components/Affix.js +57 -0
- package/dist/components/Affix.js.map +1 -0
- package/dist/components/Alert.d.ts +10 -0
- package/dist/components/Alert.js +31 -0
- package/dist/components/Alert.js.map +1 -0
- package/dist/components/Anchor.d.ts +55 -0
- package/dist/components/Anchor.js +116 -0
- package/dist/components/Anchor.js.map +1 -0
- package/dist/components/Autocomplete.d.ts +38 -0
- package/dist/components/Autocomplete.js +186 -0
- package/dist/components/Autocomplete.js.map +1 -0
- package/dist/components/Avatar.d.ts +28 -0
- package/dist/components/Avatar.js +65 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.d.ts +39 -0
- package/dist/components/Badge.js +220 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Breadcrumb.d.ts +32 -0
- package/dist/components/Breadcrumb.js +39 -0
- package/dist/components/Breadcrumb.js.map +1 -0
- package/dist/components/Browser.d.ts +7 -0
- package/dist/components/Browser.js +15 -0
- package/dist/components/Browser.js.map +1 -0
- package/dist/components/Button.d.ts +38 -0
- package/dist/components/Button.js +114 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.d.ts +57 -0
- package/dist/components/Card.js +202 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Carousel.d.ts +55 -0
- package/dist/components/Carousel.js +205 -0
- package/dist/components/Carousel.js.map +1 -0
- package/dist/components/Cascader.d.ts +71 -0
- package/dist/components/Cascader.js +416 -0
- package/dist/components/Cascader.js.map +1 -0
- package/dist/components/Chart.d.ts +19 -0
- package/dist/components/Chart.js +153 -0
- package/dist/components/Chart.js.map +1 -0
- package/dist/components/Chat.d.ts +11 -0
- package/dist/components/Chat.js +33 -0
- package/dist/components/Chat.js.map +1 -0
- package/dist/components/Checkbox.d.ts +42 -0
- package/dist/components/Checkbox.js +156 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/Code.d.ts +16 -0
- package/dist/components/Code.js +60 -0
- package/dist/components/Code.js.map +1 -0
- package/dist/components/Collapse.d.ts +45 -0
- package/dist/components/Collapse.js +115 -0
- package/dist/components/Collapse.js.map +1 -0
- package/dist/components/ColorPicker.d.ts +16 -0
- package/dist/components/ColorPicker.js +368 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/Command.d.ts +65 -0
- package/dist/components/Command.js +422 -0
- package/dist/components/Command.js.map +1 -0
- package/dist/components/ConfigProvider.d.ts +59 -0
- package/dist/components/ConfigProvider.js +46 -0
- package/dist/components/ConfigProvider.js.map +1 -0
- package/dist/components/Container.d.ts +12 -0
- package/dist/components/Container.js +28 -0
- package/dist/components/Container.js.map +1 -0
- package/dist/components/ContextMenu.d.ts +59 -0
- package/dist/components/ContextMenu.js +206 -0
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/components/CopyButton.d.ts +37 -0
- package/dist/components/CopyButton.js +123 -0
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/components/Countdown.d.ts +27 -0
- package/dist/components/Countdown.js +118 -0
- package/dist/components/Countdown.js.map +1 -0
- package/dist/components/DatePicker.d.ts +11 -0
- package/dist/components/DatePicker.js +188 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/Descriptions.d.ts +84 -0
- package/dist/components/Descriptions.js +234 -0
- package/dist/components/Descriptions.js.map +1 -0
- package/dist/components/Diff.d.ts +12 -0
- package/dist/components/Diff.js +22 -0
- package/dist/components/Diff.js.map +1 -0
- package/dist/components/Divider.d.ts +8 -0
- package/dist/components/Divider.js +36 -0
- package/dist/components/Divider.js.map +1 -0
- package/dist/components/Dock.d.ts +38 -0
- package/dist/components/Dock.js +47 -0
- package/dist/components/Dock.js.map +1 -0
- package/dist/components/Drawer.d.ts +81 -0
- package/dist/components/Drawer.js +246 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/Dropdown.d.ts +104 -0
- package/dist/components/Dropdown.js +407 -0
- package/dist/components/Dropdown.js.map +1 -0
- package/dist/components/Empty.d.ts +17 -0
- package/dist/components/Empty.js +145 -0
- package/dist/components/Empty.js.map +1 -0
- package/dist/components/Fieldset.d.ts +21 -0
- package/dist/components/Fieldset.js +21 -0
- package/dist/components/Fieldset.js.map +1 -0
- package/dist/components/FileInput.d.ts +9 -0
- package/dist/components/FileInput.js +38 -0
- package/dist/components/FileInput.js.map +1 -0
- package/dist/components/Filter.d.ts +27 -0
- package/dist/components/Filter.js +57 -0
- package/dist/components/Filter.js.map +1 -0
- package/dist/components/Flex.d.ts +14 -0
- package/dist/components/Flex.js +66 -0
- package/dist/components/Flex.js.map +1 -0
- package/dist/components/FloatButton.d.ts +73 -0
- package/dist/components/FloatButton.js +187 -0
- package/dist/components/FloatButton.js.map +1 -0
- package/dist/components/Footer.d.ts +16 -0
- package/dist/components/Footer.js +22 -0
- package/dist/components/Footer.js.map +1 -0
- package/dist/components/Form.d.ts +107 -0
- package/dist/components/Form.js +277 -0
- package/dist/components/Form.js.map +1 -0
- package/dist/components/Grid.d.ts +26 -0
- package/dist/components/Grid.js +1090 -0
- package/dist/components/Grid.js.map +1 -0
- package/dist/components/Hero.d.ts +11 -0
- package/dist/components/Hero.js +21 -0
- package/dist/components/Hero.js.map +1 -0
- package/dist/components/HoverGallery.d.ts +10 -0
- package/dist/components/HoverGallery.js +20 -0
- package/dist/components/HoverGallery.js.map +1 -0
- package/dist/components/Image.d.ts +26 -0
- package/dist/components/Image.js +172 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/Input.d.ts +36 -0
- package/dist/components/Input.js +263 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/InputNumber.d.ts +19 -0
- package/dist/components/InputNumber.js +158 -0
- package/dist/components/InputNumber.js.map +1 -0
- package/dist/components/Join.d.ts +6 -0
- package/dist/components/Join.js +19 -0
- package/dist/components/Join.js.map +1 -0
- package/dist/components/Kbd.d.ts +9 -0
- package/dist/components/Kbd.js +20 -0
- package/dist/components/Kbd.js.map +1 -0
- package/dist/components/Layout.d.ts +67 -0
- package/dist/components/Layout.js +188 -0
- package/dist/components/Layout.js.map +1 -0
- package/dist/components/List.d.ts +79 -0
- package/dist/components/List.js +128 -0
- package/dist/components/List.js.map +1 -0
- package/dist/components/Loading.d.ts +9 -0
- package/dist/components/Loading.js +40 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/Mask.d.ts +14 -0
- package/dist/components/Mask.js +37 -0
- package/dist/components/Mask.js.map +1 -0
- package/dist/components/Masonry.d.ts +15 -0
- package/dist/components/Masonry.js +84 -0
- package/dist/components/Masonry.js.map +1 -0
- package/dist/components/Mention.d.ts +30 -0
- package/dist/components/Mention.js +179 -0
- package/dist/components/Mention.js.map +1 -0
- package/dist/components/Menu.d.ts +72 -0
- package/dist/components/Menu.js +163 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Message.d.ts +20 -0
- package/dist/components/Message.js +57 -0
- package/dist/components/Message.js.map +1 -0
- package/dist/components/Modal.d.ts +57 -0
- package/dist/components/Modal.js +338 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/MonthCalendar.d.ts +31 -0
- package/dist/components/MonthCalendar.js +205 -0
- package/dist/components/MonthCalendar.js.map +1 -0
- package/dist/components/Navbar.d.ts +22 -0
- package/dist/components/Navbar.js +50 -0
- package/dist/components/Navbar.js.map +1 -0
- package/dist/components/Notification.d.ts +50 -0
- package/dist/components/Notification.js +150 -0
- package/dist/components/Notification.js.map +1 -0
- package/dist/components/OTPInput.d.ts +32 -0
- package/dist/components/OTPInput.js +114 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/Pagination.d.ts +18 -0
- package/dist/components/Pagination.js +175 -0
- package/dist/components/Pagination.js.map +1 -0
- package/dist/components/Phone.d.ts +8 -0
- package/dist/components/Phone.js +17 -0
- package/dist/components/Phone.js.map +1 -0
- package/dist/components/Popconfirm.d.ts +17 -0
- package/dist/components/Popconfirm.js +125 -0
- package/dist/components/Popconfirm.js.map +1 -0
- package/dist/components/Popover.d.ts +15 -0
- package/dist/components/Popover.js +89 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.d.ts +5 -0
- package/dist/components/Progress.js +23 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/QRCode.d.ts +19 -0
- package/dist/components/QRCode.js +75 -0
- package/dist/components/QRCode.js.map +1 -0
- package/dist/components/RadialProgress.d.ts +10 -0
- package/dist/components/RadialProgress.js +48 -0
- package/dist/components/RadialProgress.js.map +1 -0
- package/dist/components/Radio.d.ts +26 -0
- package/dist/components/Radio.js +61 -0
- package/dist/components/Radio.js.map +1 -0
- package/dist/components/Range.d.ts +16 -0
- package/dist/components/Range.js +57 -0
- package/dist/components/Range.js.map +1 -0
- package/dist/components/Rating.d.ts +30 -0
- package/dist/components/Rating.js +127 -0
- package/dist/components/Rating.js.map +1 -0
- package/dist/components/Responsive.d.ts +18 -0
- package/dist/components/Responsive.js +17 -0
- package/dist/components/Responsive.js.map +1 -0
- package/dist/components/ResponsiveDrawer.d.ts +34 -0
- package/dist/components/ResponsiveDrawer.js +75 -0
- package/dist/components/ResponsiveDrawer.js.map +1 -0
- package/dist/components/Result.d.ts +12 -0
- package/dist/components/Result.js +110 -0
- package/dist/components/Result.js.map +1 -0
- package/dist/components/RichTextEditor.d.ts +32 -0
- package/dist/components/RichTextEditor.js +335 -0
- package/dist/components/RichTextEditor.js.map +1 -0
- package/dist/components/Segmented.d.ts +37 -0
- package/dist/components/Segmented.js +73 -0
- package/dist/components/Segmented.js.map +1 -0
- package/dist/components/Select.d.ts +18 -0
- package/dist/components/Select.js +78 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Skeleton.d.ts +9 -0
- package/dist/components/Skeleton.js +24 -0
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/Space.d.ts +11 -0
- package/dist/components/Space.js +61 -0
- package/dist/components/Space.js.map +1 -0
- package/dist/components/Splitter.d.ts +29 -0
- package/dist/components/Splitter.js +257 -0
- package/dist/components/Splitter.js.map +1 -0
- package/dist/components/Stat.d.ts +18 -0
- package/dist/components/Stat.js +26 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/Status.d.ts +18 -0
- package/dist/components/Status.js +34 -0
- package/dist/components/Status.js.map +1 -0
- package/dist/components/Steps.d.ts +52 -0
- package/dist/components/Steps.js +97 -0
- package/dist/components/Steps.js.map +1 -0
- package/dist/components/Table.d.ts +105 -0
- package/dist/components/Table.js +637 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.d.ts +45 -0
- package/dist/components/Tabs.js +86 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Tag.d.ts +34 -0
- package/dist/components/Tag.js +210 -0
- package/dist/components/Tag.js.map +1 -0
- package/dist/components/TextRotate.d.ts +13 -0
- package/dist/components/TextRotate.js +26 -0
- package/dist/components/TextRotate.js.map +1 -0
- package/dist/components/Textarea.d.ts +9 -0
- package/dist/components/Textarea.js +44 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/ThemeController.d.ts +28 -0
- package/dist/components/ThemeController.js +162 -0
- package/dist/components/ThemeController.js.map +1 -0
- package/dist/components/TimePicker.d.ts +20 -0
- package/dist/components/TimePicker.js +304 -0
- package/dist/components/TimePicker.js.map +1 -0
- package/dist/components/Timeline.d.ts +79 -0
- package/dist/components/Timeline.js +151 -0
- package/dist/components/Timeline.js.map +1 -0
- package/dist/components/Toggle.d.ts +7 -0
- package/dist/components/Toggle.js +39 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/Tooltip.d.ts +9 -0
- package/dist/components/Tooltip.js +37 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/Tour.d.ts +123 -0
- package/dist/components/Tour.js +400 -0
- package/dist/components/Tour.js.map +1 -0
- package/dist/components/Transfer.d.ts +22 -0
- package/dist/components/Transfer.js +214 -0
- package/dist/components/Transfer.js.map +1 -0
- package/dist/components/Tree.d.ts +118 -0
- package/dist/components/Tree.js +444 -0
- package/dist/components/Tree.js.map +1 -0
- package/dist/components/TreeSelect.d.ts +84 -0
- package/dist/components/TreeSelect.js +755 -0
- package/dist/components/TreeSelect.js.map +1 -0
- package/dist/components/Typography.d.ts +53 -0
- package/dist/components/Typography.js +182 -0
- package/dist/components/Typography.js.map +1 -0
- package/dist/components/Upload.d.ts +38 -0
- package/dist/components/Upload.js +261 -0
- package/dist/components/Upload.js.map +1 -0
- package/dist/components/VirtualList.d.ts +29 -0
- package/dist/components/VirtualList.js +69 -0
- package/dist/components/VirtualList.js.map +1 -0
- package/dist/components/Watermark.d.ts +40 -0
- package/dist/components/Watermark.js +129 -0
- package/dist/components/Watermark.js.map +1 -0
- package/dist/components/WeekCalendar.d.ts +35 -0
- package/dist/components/WeekCalendar.js +204 -0
- package/dist/components/WeekCalendar.js.map +1 -0
- package/dist/components/Window.d.ts +7 -0
- package/dist/components/Window.js +10 -0
- package/dist/components/Window.js.map +1 -0
- package/dist/contexts/IconSizeContext.d.ts +2 -0
- package/dist/contexts/IconSizeContext.js +6 -0
- package/dist/contexts/IconSizeContext.js.map +1 -0
- package/dist/editor.d.ts +1 -0
- package/dist/editor.js +5 -0
- package/dist/editor.js.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +10 -0
- package/dist/hooks/useBreakpoint.js +36 -0
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/hooks/useClickOutside.d.ts +17 -0
- package/dist/hooks/useClickOutside.js +18 -0
- package/dist/hooks/useClickOutside.js.map +1 -0
- package/dist/hooks/useClipboard.d.ts +20 -0
- package/dist/hooks/useClipboard.js +17 -0
- package/dist/hooks/useClipboard.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +18 -0
- package/dist/hooks/useDebounce.js +16 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useDisclosure.d.ts +20 -0
- package/dist/hooks/useDisclosure.js +9 -0
- package/dist/hooks/useDisclosure.js.map +1 -0
- package/dist/hooks/useHover.d.ts +18 -0
- package/dist/hooks/useHover.js +16 -0
- package/dist/hooks/useHover.js.map +1 -0
- package/dist/hooks/useKeyPress.d.ts +40 -0
- package/dist/hooks/useKeyPress.js +34 -0
- package/dist/hooks/useKeyPress.js.map +1 -0
- package/dist/hooks/useLocalStorage.d.ts +12 -0
- package/dist/hooks/useLocalStorage.js +49 -0
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/hooks/usePrevious.d.ts +15 -0
- package/dist/hooks/usePrevious.js +11 -0
- package/dist/hooks/usePrevious.js.map +1 -0
- package/dist/hooks/useWindowSize.d.ts +21 -0
- package/dist/hooks/useWindowSize.js +21 -0
- package/dist/hooks/useWindowSize.js.map +1 -0
- package/dist/index.d.ts +216 -0
- package/dist/index.js +256 -0
- package/dist/index.js.map +1 -0
- package/dist/locale/de-DE.d.ts +3 -0
- package/dist/locale/de-DE.js +100 -0
- package/dist/locale/de-DE.js.map +1 -0
- package/dist/locale/en-CA.d.ts +3 -0
- package/dist/locale/en-CA.js +11 -0
- package/dist/locale/en-CA.js.map +1 -0
- package/dist/locale/en-GB.d.ts +3 -0
- package/dist/locale/en-GB.js +11 -0
- package/dist/locale/en-GB.js.map +1 -0
- package/dist/locale/en-US.d.ts +3 -0
- package/dist/locale/en-US.js +100 -0
- package/dist/locale/en-US.js.map +1 -0
- package/dist/locale/es-ES.d.ts +3 -0
- package/dist/locale/es-ES.js +100 -0
- package/dist/locale/es-ES.js.map +1 -0
- package/dist/locale/fr-FR.d.ts +3 -0
- package/dist/locale/fr-FR.js +100 -0
- package/dist/locale/fr-FR.js.map +1 -0
- package/dist/locale/index.d.ts +107 -0
- package/dist/locale/ja-JP.d.ts +3 -0
- package/dist/locale/ja-JP.js +100 -0
- package/dist/locale/ja-JP.js.map +1 -0
- package/dist/locale/ko-KR.d.ts +3 -0
- package/dist/locale/ko-KR.js +100 -0
- package/dist/locale/ko-KR.js.map +1 -0
- package/dist/locale/pt-BR.d.ts +3 -0
- package/dist/locale/pt-BR.js +100 -0
- package/dist/locale/pt-BR.js.map +1 -0
- package/dist/locale/zh-CN.d.ts +3 -0
- package/dist/locale/zh-CN.js +100 -0
- package/dist/locale/zh-CN.js.map +1 -0
- package/dist/qrcode.d.ts +2 -0
- package/dist/qrcode.js +5 -0
- package/dist/qrcode.js.map +1 -0
- package/dist/virtuallist.d.ts +2 -0
- package/dist/virtuallist.js +5 -0
- package/dist/virtuallist.js.map +1 -0
- package/package.json +130 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type SiderTheme = 'light' | 'dark';
|
|
3
|
+
export type SiderCollapsedType = 'clickTrigger' | 'responsive';
|
|
4
|
+
export interface LayoutProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Whether contains Sider (auto-detected if not specified) */
|
|
7
|
+
hasSider?: boolean;
|
|
8
|
+
/** Test ID for testing */
|
|
9
|
+
'data-testid'?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LayoutHeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
/** Test ID for testing */
|
|
14
|
+
'data-testid'?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LayoutFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
/** Test ID for testing */
|
|
19
|
+
'data-testid'?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface LayoutContentProps extends React.HTMLAttributes<HTMLElement> {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
/** Test ID for testing */
|
|
24
|
+
'data-testid'?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LayoutSiderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
/** Width of the sider */
|
|
29
|
+
width?: number | string;
|
|
30
|
+
/** Width when collapsed */
|
|
31
|
+
collapsedWidth?: number | string;
|
|
32
|
+
/** Controlled collapsed state */
|
|
33
|
+
collapsed?: boolean;
|
|
34
|
+
/** Initial collapsed state (uncontrolled) */
|
|
35
|
+
defaultCollapsed?: boolean;
|
|
36
|
+
/** Whether can be collapsed */
|
|
37
|
+
collapsible?: boolean;
|
|
38
|
+
/** Callback when collapse state changes */
|
|
39
|
+
onCollapse?: (collapsed: boolean, type: SiderCollapsedType) => void;
|
|
40
|
+
/** Custom trigger element (null to hide) */
|
|
41
|
+
trigger?: React.ReactNode | null;
|
|
42
|
+
/** Responsive breakpoint for auto-collapse */
|
|
43
|
+
breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
44
|
+
/** Callback when breakpoint is crossed */
|
|
45
|
+
onBreakpoint?: (broken: boolean) => void;
|
|
46
|
+
/** Reverse direction of arrow (for right-side sider) */
|
|
47
|
+
reverseArrow?: boolean;
|
|
48
|
+
/** Color theme of the sider */
|
|
49
|
+
theme?: SiderTheme;
|
|
50
|
+
/** Style for zero-width trigger */
|
|
51
|
+
zeroWidthTriggerStyle?: React.CSSProperties;
|
|
52
|
+
/** Test ID for testing */
|
|
53
|
+
'data-testid'?: string;
|
|
54
|
+
}
|
|
55
|
+
interface SiderContextValue {
|
|
56
|
+
collapsed: boolean;
|
|
57
|
+
collapsedWidth: number | string;
|
|
58
|
+
width: number | string;
|
|
59
|
+
}
|
|
60
|
+
export declare function useSiderContext(): SiderContextValue | null;
|
|
61
|
+
export declare const Layout: React.ForwardRefExoticComponent<LayoutProps & React.RefAttributes<HTMLDivElement>> & {
|
|
62
|
+
Header: React.ForwardRefExoticComponent<LayoutHeaderProps & React.RefAttributes<HTMLElement>>;
|
|
63
|
+
Footer: React.ForwardRefExoticComponent<LayoutFooterProps & React.RefAttributes<HTMLElement>>;
|
|
64
|
+
Content: React.ForwardRefExoticComponent<LayoutContentProps & React.RefAttributes<HTMLElement>>;
|
|
65
|
+
Sider: React.ForwardRefExoticComponent<LayoutSiderProps & React.RefAttributes<HTMLElement>>;
|
|
66
|
+
};
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsx as a, jsxs as Z } from "react/jsx-runtime";
|
|
2
|
+
import C, { forwardRef as y, useContext as _, createContext as q, useState as S, useEffect as G, useCallback as J } from "react";
|
|
3
|
+
const U = "d-bg-base-100", X = "d-bg-base-200", v = "d-bg-base-300", E = q(null);
|
|
4
|
+
function ae() {
|
|
5
|
+
return _(E);
|
|
6
|
+
}
|
|
7
|
+
const b = y(
|
|
8
|
+
({ children: s, hasSider: o, className: n = "", "data-testid": e, ...l }, r) => {
|
|
9
|
+
const d = C.Children.toArray(s), f = d.some(
|
|
10
|
+
(t) => C.isValidElement(t) && t.type.displayName === "LayoutSider"
|
|
11
|
+
), c = o ?? f, p = [
|
|
12
|
+
"flex",
|
|
13
|
+
"min-h-0",
|
|
14
|
+
c ? "flex-row" : "flex-col",
|
|
15
|
+
n
|
|
16
|
+
].filter(Boolean).join(" "), g = c ? d.map((t) => {
|
|
17
|
+
if (C.isValidElement(t) && (t.type === b || t.type.displayName === "LayoutRoot") && t.type.displayName !== "LayoutSider") {
|
|
18
|
+
const N = t.props.className || "";
|
|
19
|
+
if (!N.includes("flex-1"))
|
|
20
|
+
return C.cloneElement(t, {
|
|
21
|
+
className: `flex-1 ${N}`.trim()
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
}) : s;
|
|
26
|
+
return /* @__PURE__ */ a("div", { ref: r, className: p, "data-testid": e, ...l, children: g });
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
b.displayName = "LayoutRoot";
|
|
30
|
+
const $ = y(
|
|
31
|
+
({ children: s, className: o = "", "data-testid": n, ...e }, l) => {
|
|
32
|
+
const r = [
|
|
33
|
+
"flex",
|
|
34
|
+
"items-center",
|
|
35
|
+
"px-6",
|
|
36
|
+
"h-16",
|
|
37
|
+
v,
|
|
38
|
+
"flex-shrink-0",
|
|
39
|
+
o
|
|
40
|
+
].filter(Boolean).join(" ");
|
|
41
|
+
return /* @__PURE__ */ a("header", { ref: l, className: r, "data-testid": n, ...e, children: s });
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
$.displayName = "LayoutHeader";
|
|
45
|
+
const R = y(
|
|
46
|
+
({ children: s, className: o = "", "data-testid": n, ...e }, l) => {
|
|
47
|
+
const r = [
|
|
48
|
+
"px-6",
|
|
49
|
+
"py-4",
|
|
50
|
+
"text-center",
|
|
51
|
+
v,
|
|
52
|
+
"flex-shrink-0",
|
|
53
|
+
o
|
|
54
|
+
].filter(Boolean).join(" ");
|
|
55
|
+
return /* @__PURE__ */ a("footer", { ref: l, className: r, "data-testid": n, ...e, children: s });
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
R.displayName = "LayoutFooter";
|
|
59
|
+
const A = y(
|
|
60
|
+
({ children: s, className: o = "", "data-testid": n, ...e }, l) => {
|
|
61
|
+
const r = ["flex-1", "min-h-0", "overflow-auto", o].filter(Boolean).join(" ");
|
|
62
|
+
return /* @__PURE__ */ a("main", { ref: l, className: r, "data-testid": n, ...e, children: s });
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
A.displayName = "LayoutContent";
|
|
66
|
+
const Y = {
|
|
67
|
+
sm: "(max-width: 639px)",
|
|
68
|
+
md: "(max-width: 767px)",
|
|
69
|
+
lg: "(max-width: 1023px)",
|
|
70
|
+
xl: "(max-width: 1279px)",
|
|
71
|
+
"2xl": "(max-width: 1535px)"
|
|
72
|
+
}, M = y(
|
|
73
|
+
({
|
|
74
|
+
children: s,
|
|
75
|
+
width: o = 200,
|
|
76
|
+
collapsedWidth: n = 80,
|
|
77
|
+
collapsed: e,
|
|
78
|
+
defaultCollapsed: l = !1,
|
|
79
|
+
collapsible: r = !1,
|
|
80
|
+
onCollapse: d,
|
|
81
|
+
trigger: f,
|
|
82
|
+
breakpoint: c,
|
|
83
|
+
onBreakpoint: p,
|
|
84
|
+
reverseArrow: g = !1,
|
|
85
|
+
theme: t = "dark",
|
|
86
|
+
zeroWidthTriggerStyle: N,
|
|
87
|
+
className: T = "",
|
|
88
|
+
style: W,
|
|
89
|
+
"data-testid": x,
|
|
90
|
+
...z
|
|
91
|
+
}, F) => {
|
|
92
|
+
const [H, w] = S(l), [k, P] = S(!1), i = e ?? H;
|
|
93
|
+
G(() => {
|
|
94
|
+
if (!c) return;
|
|
95
|
+
const m = window.matchMedia(Y[c]), L = (Q) => {
|
|
96
|
+
const h = Q.matches;
|
|
97
|
+
P(h), p?.(h), e === void 0 && w(h), h !== k && d?.(h, "responsive");
|
|
98
|
+
};
|
|
99
|
+
return L(m), m.addEventListener("change", L), () => m.removeEventListener("change", L);
|
|
100
|
+
}, [c, p, e, d, k]);
|
|
101
|
+
const B = J(() => {
|
|
102
|
+
const m = !i;
|
|
103
|
+
e === void 0 && w(m), d?.(m, "clickTrigger");
|
|
104
|
+
}, [i, e, d]), u = i ? n : o, j = u === 0 || u === "0" || u === "0px", O = [
|
|
105
|
+
"flex",
|
|
106
|
+
"flex-col",
|
|
107
|
+
{
|
|
108
|
+
light: U,
|
|
109
|
+
dark: X
|
|
110
|
+
}[t],
|
|
111
|
+
"flex-shrink-0",
|
|
112
|
+
"transition-all",
|
|
113
|
+
"duration-200",
|
|
114
|
+
"relative",
|
|
115
|
+
T
|
|
116
|
+
].filter(Boolean).join(" "), V = () => g ? i ? "" : "rotate-180" : i ? "rotate-180" : "", D = r && f !== null && /* @__PURE__ */ a(
|
|
117
|
+
"button",
|
|
118
|
+
{
|
|
119
|
+
onClick: B,
|
|
120
|
+
className: `flex items-center justify-center h-10 w-full ${v} hover:bg-base-content/10 transition-colors`,
|
|
121
|
+
"aria-label": i ? "Expand sidebar" : "Collapse sidebar",
|
|
122
|
+
"data-testid": x ? `${x}-trigger` : void 0,
|
|
123
|
+
children: /* @__PURE__ */ a(
|
|
124
|
+
"svg",
|
|
125
|
+
{
|
|
126
|
+
className: `w-4 h-4 transition-transform ${V()}`,
|
|
127
|
+
fill: "none",
|
|
128
|
+
viewBox: "0 0 24 24",
|
|
129
|
+
stroke: "currentColor",
|
|
130
|
+
children: /* @__PURE__ */ a("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
), K = r && j && i && /* @__PURE__ */ a(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
onClick: B,
|
|
138
|
+
className: `absolute top-1/2 -translate-y-1/2 right-0 translate-x-full w-6 h-12 flex items-center justify-center ${v} hover:bg-base-content/10 transition-colors rounded-r z-10`,
|
|
139
|
+
"aria-label": "Expand sidebar",
|
|
140
|
+
style: N,
|
|
141
|
+
"data-testid": x ? `${x}-zero-trigger` : void 0,
|
|
142
|
+
children: /* @__PURE__ */ a(
|
|
143
|
+
"svg",
|
|
144
|
+
{
|
|
145
|
+
className: `w-3 h-3 ${g ? "rotate-180" : ""}`,
|
|
146
|
+
fill: "none",
|
|
147
|
+
viewBox: "0 0 24 24",
|
|
148
|
+
stroke: "currentColor",
|
|
149
|
+
children: /* @__PURE__ */ a("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
return /* @__PURE__ */ a(E.Provider, { value: { collapsed: i, collapsedWidth: n, width: o }, children: /* @__PURE__ */ Z(
|
|
155
|
+
"aside",
|
|
156
|
+
{
|
|
157
|
+
ref: F,
|
|
158
|
+
className: O,
|
|
159
|
+
style: {
|
|
160
|
+
width: typeof u == "number" ? `${u}px` : u,
|
|
161
|
+
...W
|
|
162
|
+
},
|
|
163
|
+
"data-collapsed": i,
|
|
164
|
+
"data-theme": t,
|
|
165
|
+
"data-testid": x,
|
|
166
|
+
"aria-expanded": !i,
|
|
167
|
+
...z,
|
|
168
|
+
children: [
|
|
169
|
+
/* @__PURE__ */ a("div", { className: "flex-1 overflow-auto", children: s }),
|
|
170
|
+
!j && f !== null && (f ?? D),
|
|
171
|
+
K
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
) });
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
M.displayName = "LayoutSider";
|
|
178
|
+
const se = Object.assign(b, {
|
|
179
|
+
Header: $,
|
|
180
|
+
Footer: R,
|
|
181
|
+
Content: A,
|
|
182
|
+
Sider: M
|
|
183
|
+
});
|
|
184
|
+
export {
|
|
185
|
+
se as Layout,
|
|
186
|
+
ae as useSiderContext
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=Layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.js","sources":["../../src/components/Layout.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useEffect, forwardRef } from 'react'\n\n// DaisyUI classes\nconst dBgBase100 = 'd-bg-base-100'\nconst dBgBase200 = 'd-bg-base-200'\nconst dBgBase300 = 'd-bg-base-300'\n\nexport type SiderTheme = 'light' | 'dark'\nexport type SiderCollapsedType = 'clickTrigger' | 'responsive'\n\nexport interface LayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Whether contains Sider (auto-detected if not specified) */\n hasSider?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutContentProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutSiderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {\n children: React.ReactNode\n /** Width of the sider */\n width?: number | string\n /** Width when collapsed */\n collapsedWidth?: number | string\n /** Controlled collapsed state */\n collapsed?: boolean\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean\n /** Whether can be collapsed */\n collapsible?: boolean\n /** Callback when collapse state changes */\n onCollapse?: (collapsed: boolean, type: SiderCollapsedType) => void\n /** Custom trigger element (null to hide) */\n trigger?: React.ReactNode | null\n /** Responsive breakpoint for auto-collapse */\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n /** Callback when breakpoint is crossed */\n onBreakpoint?: (broken: boolean) => void\n /** Reverse direction of arrow (for right-side sider) */\n reverseArrow?: boolean\n /** Color theme of the sider */\n theme?: SiderTheme\n /** Style for zero-width trigger */\n zeroWidthTriggerStyle?: React.CSSProperties\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ninterface SiderContextValue {\n collapsed: boolean\n collapsedWidth: number | string\n width: number | string\n}\n\nconst SiderContext = createContext<SiderContextValue | null>(null)\n\nexport function useSiderContext() {\n return useContext(SiderContext)\n}\n\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(\n ({ children, hasSider: hasSiderProp, className = '', 'data-testid': testId, ...rest }, ref) => {\n // Check if any child is a Sider to determine flex direction\n const childArray = React.Children.toArray(children)\n const hasSiderDetected = childArray.some(\n (child) => React.isValidElement(child) && (child.type as any).displayName === 'LayoutSider'\n )\n const hasSider = hasSiderProp ?? hasSiderDetected\n\n const layoutClasses = [\n 'flex',\n 'min-h-0',\n hasSider ? 'flex-row' : 'flex-col',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If we have a Sider, auto-add flex-1 to non-Sider Layout children\n const processedChildren = hasSider\n ? childArray.map((child) => {\n if (\n React.isValidElement(child) &&\n (child.type === LayoutRoot || (child.type as any).displayName === 'LayoutRoot') &&\n (child.type as any).displayName !== 'LayoutSider'\n ) {\n // Clone the Layout child and add flex-1 if not already present\n const existingClassName = (child.props as any).className || ''\n if (!existingClassName.includes('flex-1')) {\n return React.cloneElement(child as React.ReactElement<any>, {\n className: `flex-1 ${existingClassName}`.trim(),\n })\n }\n }\n return child\n })\n : children\n\n return (\n <div ref={ref} className={layoutClasses} data-testid={testId} {...rest}>\n {processedChildren}\n </div>\n )\n }\n)\n\nLayoutRoot.displayName = 'LayoutRoot'\n\nconst LayoutHeader = forwardRef<HTMLElement, LayoutHeaderProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const headerClasses = [\n 'flex',\n 'items-center',\n 'px-6',\n 'h-16',\n dBgBase300,\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <header ref={ref} className={headerClasses} data-testid={testId} {...rest}>\n {children}\n </header>\n )\n }\n)\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nconst LayoutFooter = forwardRef<HTMLElement, LayoutFooterProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const footerClasses = [\n 'px-6',\n 'py-4',\n 'text-center',\n dBgBase300,\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <footer ref={ref} className={footerClasses} data-testid={testId} {...rest}>\n {children}\n </footer>\n )\n }\n)\n\nLayoutFooter.displayName = 'LayoutFooter'\n\nconst LayoutContent = forwardRef<HTMLElement, LayoutContentProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n // flex-1 by default so Content fills available space\n const contentClasses = ['flex-1', 'min-h-0', 'overflow-auto', className].filter(Boolean).join(' ')\n\n return (\n <main ref={ref} className={contentClasses} data-testid={testId} {...rest}>\n {children}\n </main>\n )\n }\n)\n\nLayoutContent.displayName = 'LayoutContent'\n\nconst BREAKPOINT_MAP: Record<string, string> = {\n sm: '(max-width: 639px)',\n md: '(max-width: 767px)',\n lg: '(max-width: 1023px)',\n xl: '(max-width: 1279px)',\n '2xl': '(max-width: 1535px)',\n}\n\nconst LayoutSider = forwardRef<HTMLElement, LayoutSiderProps>(\n (\n {\n children,\n width = 200,\n collapsedWidth = 80,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n collapsible = false,\n onCollapse,\n trigger,\n breakpoint,\n onBreakpoint,\n reverseArrow = false,\n theme = 'dark',\n zeroWidthTriggerStyle,\n className = '',\n style,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed)\n const [broken, setBroken] = useState(false)\n\n const collapsed = controlledCollapsed ?? internalCollapsed\n\n // Handle responsive breakpoint\n useEffect(() => {\n if (!breakpoint) return\n\n const mediaQuery = window.matchMedia(BREAKPOINT_MAP[breakpoint])\n\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n const isBroken = e.matches\n setBroken(isBroken)\n onBreakpoint?.(isBroken)\n\n // Auto-collapse when breakpoint is crossed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(isBroken)\n }\n if (isBroken !== broken) {\n onCollapse?.(isBroken, 'responsive')\n }\n }\n\n // Check initial state\n handleChange(mediaQuery)\n\n // Listen for changes\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [breakpoint, onBreakpoint, controlledCollapsed, onCollapse, broken])\n\n const handleCollapse = useCallback(() => {\n const newCollapsed = !collapsed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(newCollapsed)\n }\n onCollapse?.(newCollapsed, 'clickTrigger')\n }, [collapsed, controlledCollapsed, onCollapse])\n\n const currentWidth = collapsed ? collapsedWidth : width\n const isZeroWidth = currentWidth === 0 || currentWidth === '0' || currentWidth === '0px'\n\n const themeClasses: Record<SiderTheme, string> = {\n light: dBgBase100,\n dark: dBgBase200,\n }\n\n const siderClasses = [\n 'flex',\n 'flex-col',\n themeClasses[theme],\n 'flex-shrink-0',\n 'transition-all',\n 'duration-200',\n 'relative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine arrow rotation based on collapsed state and reverseArrow prop\n const getArrowRotation = () => {\n if (reverseArrow) {\n return collapsed ? '' : 'rotate-180'\n }\n return collapsed ? 'rotate-180' : ''\n }\n\n const defaultTrigger = collapsible && trigger !== null && (\n <button\n onClick={handleCollapse}\n className={`flex items-center justify-center h-10 w-full ${dBgBase300} hover:bg-base-content/10 transition-colors`}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n data-testid={testId ? `${testId}-trigger` : undefined}\n >\n <svg\n className={`w-4 h-4 transition-transform ${getArrowRotation()}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )\n\n // Zero-width trigger (floating button when sider is collapsed to 0)\n const zeroWidthTrigger = collapsible && isZeroWidth && collapsed && (\n <button\n onClick={handleCollapse}\n className={`absolute top-1/2 -translate-y-1/2 right-0 translate-x-full w-6 h-12 flex items-center justify-center ${dBgBase300} hover:bg-base-content/10 transition-colors rounded-r z-10`}\n aria-label=\"Expand sidebar\"\n style={zeroWidthTriggerStyle}\n data-testid={testId ? `${testId}-zero-trigger` : undefined}\n >\n <svg\n className={`w-3 h-3 ${reverseArrow ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )\n\n return (\n <SiderContext.Provider value={{ collapsed, collapsedWidth, width }}>\n <aside\n ref={ref}\n className={siderClasses}\n style={{\n width: typeof currentWidth === 'number' ? `${currentWidth}px` : currentWidth,\n ...style,\n }}\n data-collapsed={collapsed}\n data-theme={theme}\n data-testid={testId}\n aria-expanded={!collapsed}\n {...rest}\n >\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {!isZeroWidth && trigger !== null && (trigger ?? defaultTrigger)}\n {zeroWidthTrigger}\n </aside>\n </SiderContext.Provider>\n )\n }\n)\n\nLayoutSider.displayName = 'LayoutSider'\n\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Footer: LayoutFooter,\n Content: LayoutContent,\n Sider: LayoutSider,\n})\n"],"names":["dBgBase100","dBgBase200","dBgBase300","SiderContext","createContext","useSiderContext","useContext","LayoutRoot","forwardRef","children","hasSiderProp","className","testId","rest","ref","childArray","React","hasSiderDetected","child","hasSider","layoutClasses","processedChildren","existingClassName","jsx","LayoutHeader","headerClasses","LayoutFooter","footerClasses","LayoutContent","contentClasses","BREAKPOINT_MAP","LayoutSider","width","collapsedWidth","controlledCollapsed","defaultCollapsed","collapsible","onCollapse","trigger","breakpoint","onBreakpoint","reverseArrow","theme","zeroWidthTriggerStyle","style","internalCollapsed","setInternalCollapsed","useState","broken","setBroken","collapsed","useEffect","mediaQuery","handleChange","e","isBroken","handleCollapse","useCallback","newCollapsed","currentWidth","isZeroWidth","siderClasses","getArrowRotation","defaultTrigger","zeroWidthTrigger","jsxs","Layout"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface ListPaginationConfig {
|
|
3
|
+
current?: number;
|
|
4
|
+
pageSize?: number;
|
|
5
|
+
total?: number;
|
|
6
|
+
onChange?: (page: number, pageSize: number) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface ListGridConfig {
|
|
9
|
+
gutter?: number;
|
|
10
|
+
column?: number;
|
|
11
|
+
xs?: number;
|
|
12
|
+
sm?: number;
|
|
13
|
+
md?: number;
|
|
14
|
+
lg?: number;
|
|
15
|
+
xl?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ListProps<T = unknown> extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {
|
|
18
|
+
/** Data source array */
|
|
19
|
+
dataSource?: T[];
|
|
20
|
+
/** Function to render each item */
|
|
21
|
+
renderItem?: (item: T, index: number) => React.ReactNode;
|
|
22
|
+
/** List header content */
|
|
23
|
+
header?: React.ReactNode;
|
|
24
|
+
/** List footer content */
|
|
25
|
+
footer?: React.ReactNode;
|
|
26
|
+
/** Show loading state */
|
|
27
|
+
loading?: boolean;
|
|
28
|
+
/** Pagination configuration or false to disable */
|
|
29
|
+
pagination?: ListPaginationConfig | false;
|
|
30
|
+
/** Grid layout configuration */
|
|
31
|
+
grid?: ListGridConfig;
|
|
32
|
+
/** Show border around list */
|
|
33
|
+
bordered?: boolean;
|
|
34
|
+
/** Show divider between items */
|
|
35
|
+
split?: boolean;
|
|
36
|
+
/** Size variant */
|
|
37
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
38
|
+
/** Layout direction */
|
|
39
|
+
itemLayout?: 'horizontal' | 'vertical';
|
|
40
|
+
/** Empty state text */
|
|
41
|
+
locale?: {
|
|
42
|
+
emptyText?: React.ReactNode;
|
|
43
|
+
};
|
|
44
|
+
/** Load more content (e.g., button) */
|
|
45
|
+
loadMore?: React.ReactNode;
|
|
46
|
+
/** Custom key extraction function */
|
|
47
|
+
rowKey?: keyof T | ((item: T) => React.Key);
|
|
48
|
+
/** Compound pattern children */
|
|
49
|
+
children?: React.ReactNode;
|
|
50
|
+
/** Accessible label for the list */
|
|
51
|
+
'aria-label'?: string;
|
|
52
|
+
/** Test ID for the component */
|
|
53
|
+
'data-testid'?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {
|
|
56
|
+
/** Item content */
|
|
57
|
+
children: React.ReactNode;
|
|
58
|
+
/** Action buttons */
|
|
59
|
+
actions?: React.ReactNode[];
|
|
60
|
+
/** Extra content on the right */
|
|
61
|
+
extra?: React.ReactNode;
|
|
62
|
+
/** Test ID for this item */
|
|
63
|
+
'data-testid'?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface ListItemMetaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
66
|
+
/** Avatar or icon */
|
|
67
|
+
avatar?: React.ReactNode;
|
|
68
|
+
/** Title content */
|
|
69
|
+
title?: React.ReactNode;
|
|
70
|
+
/** Description content */
|
|
71
|
+
description?: React.ReactNode;
|
|
72
|
+
}
|
|
73
|
+
export type ListRowProps = ListItemProps;
|
|
74
|
+
export declare const List: React.ForwardRefExoticComponent<ListProps<unknown> & React.RefAttributes<HTMLUListElement>> & {
|
|
75
|
+
Item: React.ForwardRefExoticComponent<ListItemProps & React.RefAttributes<HTMLLIElement>> & {
|
|
76
|
+
Meta: React.FC<ListItemMetaProps>;
|
|
77
|
+
};
|
|
78
|
+
Row: React.ForwardRefExoticComponent<ListItemProps & React.RefAttributes<HTMLLIElement>>;
|
|
79
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsxs as b, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import p, { forwardRef as j } from "react";
|
|
3
|
+
import { Pagination as A } from "./Pagination.js";
|
|
4
|
+
import { Loading as D } from "./Loading.js";
|
|
5
|
+
import { useConfig as F } from "./ConfigProvider.js";
|
|
6
|
+
const G = "d-list", u = "d-list-row", H = {
|
|
7
|
+
xs: "py-1",
|
|
8
|
+
sm: "py-2",
|
|
9
|
+
md: "py-3",
|
|
10
|
+
lg: "py-4",
|
|
11
|
+
xl: "py-5"
|
|
12
|
+
}, y = j(
|
|
13
|
+
({ children: i, actions: a, extra: r, className: d = "", "data-testid": o, ...l }, c) => {
|
|
14
|
+
const N = [u, d].filter(Boolean).join(" ");
|
|
15
|
+
return /* @__PURE__ */ b("li", { ref: c, className: N, "data-testid": o, ...l, children: [
|
|
16
|
+
/* @__PURE__ */ e("div", { className: "flex-1", children: i }),
|
|
17
|
+
r && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: r }),
|
|
18
|
+
a && a.length > 0 && /* @__PURE__ */ e("div", { className: "flex items-center gap-2 flex-shrink-0", children: a.map((x, h) => /* @__PURE__ */ e("span", { children: x }, h)) })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
y.displayName = "List.Item";
|
|
23
|
+
const z = ({
|
|
24
|
+
avatar: i,
|
|
25
|
+
title: a,
|
|
26
|
+
description: r,
|
|
27
|
+
className: d = "",
|
|
28
|
+
...o
|
|
29
|
+
}) => /* @__PURE__ */ b("div", { className: `flex items-center gap-3 ${d}`, ...o, children: [
|
|
30
|
+
i && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: i }),
|
|
31
|
+
/* @__PURE__ */ b("div", { className: "flex-1 min-w-0", children: [
|
|
32
|
+
a && /* @__PURE__ */ e("div", { className: "font-medium truncate", children: a }),
|
|
33
|
+
r && /* @__PURE__ */ e("div", { className: "text-sm text-base-content/70 truncate", children: r })
|
|
34
|
+
] })
|
|
35
|
+
] });
|
|
36
|
+
z.displayName = "List.Item.Meta";
|
|
37
|
+
const R = j(
|
|
38
|
+
({
|
|
39
|
+
dataSource: i,
|
|
40
|
+
renderItem: a,
|
|
41
|
+
header: r,
|
|
42
|
+
footer: d,
|
|
43
|
+
loading: o = !1,
|
|
44
|
+
pagination: l = !1,
|
|
45
|
+
grid: c,
|
|
46
|
+
bordered: N = !0,
|
|
47
|
+
split: x = !0,
|
|
48
|
+
size: h,
|
|
49
|
+
itemLayout: k = "horizontal",
|
|
50
|
+
locale: $,
|
|
51
|
+
loadMore: g,
|
|
52
|
+
rowKey: f,
|
|
53
|
+
children: v,
|
|
54
|
+
className: E = "",
|
|
55
|
+
"aria-label": S,
|
|
56
|
+
"data-testid": t = "list",
|
|
57
|
+
...M
|
|
58
|
+
}, T) => {
|
|
59
|
+
const { componentSize: _ } = F(), w = h ?? _ ?? "md", B = [
|
|
60
|
+
`${G} bg-base-100 rounded-box`,
|
|
61
|
+
N && "border border-base-300",
|
|
62
|
+
x && `[&_.${u}]:border-b [&_.${u}]:border-base-200 [&_.${u}:last-child]:border-b-0`,
|
|
63
|
+
E
|
|
64
|
+
].filter(Boolean).join(" "), C = H[w], O = c ? {
|
|
65
|
+
display: "grid",
|
|
66
|
+
gridTemplateColumns: `repeat(${c.column || 1}, minmax(0, 1fr))`,
|
|
67
|
+
gap: c.gutter ? `${c.gutter}px` : void 0
|
|
68
|
+
} : {}, V = (s, n) => f ? typeof f == "function" ? f(s) : String(s[f] ?? n) : n, L = k === "vertical" ? "flex-col items-start" : "", P = () => o ? /* @__PURE__ */ e("div", { className: "flex justify-center py-8", "data-testid": `${t}-loading`, role: "status", children: /* @__PURE__ */ e(D, { size: "md", "aria-label": "Loading list" }) }) : i && a ? i.length === 0 ? /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: $?.emptyText ?? "No data" }) : i.map((s, n) => {
|
|
69
|
+
const m = a(s, n), W = V(s, n);
|
|
70
|
+
if (p.isValidElement(m)) {
|
|
71
|
+
const q = m.props.className || "";
|
|
72
|
+
return p.cloneElement(m, {
|
|
73
|
+
key: W,
|
|
74
|
+
className: `${q} ${C} ${L}`.trim(),
|
|
75
|
+
"data-testid": `${t}-item-${n}`
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return m;
|
|
79
|
+
}) : v ? p.Children.map(v, (s, n) => {
|
|
80
|
+
if (p.isValidElement(s)) {
|
|
81
|
+
const m = s.props.className || "";
|
|
82
|
+
return p.cloneElement(s, {
|
|
83
|
+
className: `${m} ${C} ${L}`.trim(),
|
|
84
|
+
"data-testid": `${t}-item-${n}`
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return s;
|
|
88
|
+
}) : /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: $?.emptyText ?? "No data" });
|
|
89
|
+
return /* @__PURE__ */ b("div", { "data-testid": t, "aria-busy": o, children: [
|
|
90
|
+
r && /* @__PURE__ */ e("div", { className: "px-4 py-3 border-b border-base-200 font-medium", "data-testid": `${t}-header`, children: r }),
|
|
91
|
+
/* @__PURE__ */ e(
|
|
92
|
+
"ul",
|
|
93
|
+
{
|
|
94
|
+
ref: T,
|
|
95
|
+
role: "list",
|
|
96
|
+
"aria-label": S,
|
|
97
|
+
className: B,
|
|
98
|
+
style: O,
|
|
99
|
+
...M,
|
|
100
|
+
children: P()
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
d && /* @__PURE__ */ e("div", { className: "px-4 py-3 border-t border-base-200", "data-testid": `${t}-footer`, children: d }),
|
|
104
|
+
g && /* @__PURE__ */ e("div", { className: "py-4 text-center", "data-testid": `${t}-load-more`, children: g }),
|
|
105
|
+
l && l.total !== void 0 && /* @__PURE__ */ e("div", { className: "flex justify-end pt-4", "data-testid": `${t}-pagination`, children: /* @__PURE__ */ e(
|
|
106
|
+
A,
|
|
107
|
+
{
|
|
108
|
+
current: l.current,
|
|
109
|
+
pageSize: l.pageSize,
|
|
110
|
+
total: l.total,
|
|
111
|
+
onChange: l.onChange
|
|
112
|
+
}
|
|
113
|
+
) })
|
|
114
|
+
] });
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
R.displayName = "List";
|
|
118
|
+
const J = Object.assign(y, {
|
|
119
|
+
Meta: z
|
|
120
|
+
}), K = Object.assign(R, {
|
|
121
|
+
Item: J,
|
|
122
|
+
Row: y
|
|
123
|
+
// Backwards compatibility with DaisyUI pattern
|
|
124
|
+
});
|
|
125
|
+
export {
|
|
126
|
+
K as List
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=List.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.js","sources":["../../src/components/List.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { Pagination } from './Pagination'\nimport { Loading } from './Loading'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dList = 'd-list'\nconst dListRow = 'd-list-row'\n\nexport interface ListPaginationConfig {\n current?: number\n pageSize?: number\n total?: number\n onChange?: (page: number, pageSize: number) => void\n}\n\nexport interface ListGridConfig {\n gutter?: number\n column?: number\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n}\n\nexport interface ListProps<T = unknown> extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {\n /** Data source array */\n dataSource?: T[]\n /** Function to render each item */\n renderItem?: (item: T, index: number) => React.ReactNode\n /** List header content */\n header?: React.ReactNode\n /** List footer content */\n footer?: React.ReactNode\n /** Show loading state */\n loading?: boolean\n /** Pagination configuration or false to disable */\n pagination?: ListPaginationConfig | false\n /** Grid layout configuration */\n grid?: ListGridConfig\n /** Show border around list */\n bordered?: boolean\n /** Show divider between items */\n split?: boolean\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Layout direction */\n itemLayout?: 'horizontal' | 'vertical'\n /** Empty state text */\n locale?: { emptyText?: React.ReactNode }\n /** Load more content (e.g., button) */\n loadMore?: React.ReactNode\n /** Custom key extraction function */\n rowKey?: keyof T | ((item: T) => React.Key)\n /** Compound pattern children */\n children?: React.ReactNode\n /** Accessible label for the list */\n 'aria-label'?: string\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n /** Item content */\n children: React.ReactNode\n /** Action buttons */\n actions?: React.ReactNode[]\n /** Extra content on the right */\n extra?: React.ReactNode\n /** Test ID for this item */\n 'data-testid'?: string\n}\n\nexport interface ListItemMetaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Avatar or icon */\n avatar?: React.ReactNode\n /** Title content */\n title?: React.ReactNode\n /** Description content */\n description?: React.ReactNode\n}\n\n// Also export as ListRowProps for backwards compatibility with DaisyUI pattern\nexport type ListRowProps = ListItemProps\n\nconst sizeClasses = {\n xs: 'py-1',\n sm: 'py-2',\n md: 'py-3',\n lg: 'py-4',\n xl: 'py-5',\n}\n\nconst ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n ({ children, actions, extra, className = '', 'data-testid': testId, ...rest }, ref) => {\n const classes = [dListRow, className].filter(Boolean).join(' ')\n\n return (\n <li ref={ref} className={classes} data-testid={testId} {...rest}>\n <div className=\"flex-1\">{children}</div>\n {extra && <div className=\"flex-shrink-0\">{extra}</div>}\n {actions && actions.length > 0 && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions.map((action, index) => (\n <span key={index}>{action}</span>\n ))}\n </div>\n )}\n </li>\n )\n }\n)\n\nListItem.displayName = 'List.Item'\n\nconst ListItemMeta: React.FC<ListItemMetaProps> = ({\n avatar,\n title,\n description,\n className = '',\n ...rest\n}) => {\n return (\n <div className={`flex items-center gap-3 ${className}`} {...rest}>\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"font-medium truncate\">{title}</div>}\n {description && (\n <div className=\"text-sm text-base-content/70 truncate\">{description}</div>\n )}\n </div>\n </div>\n )\n}\n\nListItemMeta.displayName = 'List.Item.Meta'\n\nconst ListRoot = forwardRef<HTMLUListElement, ListProps>(\n (\n {\n dataSource,\n renderItem,\n header,\n footer,\n loading = false,\n pagination = false,\n grid,\n bordered = true,\n split = true,\n size,\n itemLayout = 'horizontal',\n locale,\n loadMore,\n rowKey,\n children,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId = 'list',\n ...rest\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const listClasses = [\n `${dList} bg-base-100 rounded-box`,\n bordered && 'border border-base-300',\n split && `[&_.${dListRow}]:border-b [&_.${dListRow}]:border-base-200 [&_.${dListRow}:last-child]:border-b-0`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const itemClasses = sizeClasses[effectiveSize]\n\n // Grid styles\n const gridStyles: React.CSSProperties = grid\n ? {\n display: 'grid',\n gridTemplateColumns: `repeat(${grid.column || 1}, minmax(0, 1fr))`,\n gap: grid.gutter ? `${grid.gutter}px` : undefined,\n }\n : {}\n\n // Get key for item\n const getItemKey = (item: unknown, index: number): React.Key => {\n if (!rowKey) return index\n if (typeof rowKey === 'function') return rowKey(item as Parameters<typeof rowKey>[0])\n return String((item as Record<string, unknown>)[rowKey as string] ?? index)\n }\n\n // Layout class for vertical items\n const layoutClass = itemLayout === 'vertical' ? 'flex-col items-start' : ''\n\n // Render items from dataSource or children\n const renderContent = () => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\" data-testid={`${testId}-loading`} role=\"status\">\n <Loading size=\"md\" aria-label=\"Loading list\" />\n </div>\n )\n }\n\n // Use dataSource + renderItem if provided\n if (dataSource && renderItem) {\n if (dataSource.length === 0) {\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return dataSource.map((item, index) => {\n const rendered = renderItem(item, index)\n const key = getItemKey(item, index)\n // Inject size and layout classes into list items\n if (React.isValidElement(rendered)) {\n const existingClassName = (rendered.props as { className?: string }).className || ''\n return React.cloneElement(rendered, {\n key,\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return rendered\n })\n }\n\n // Use compound children pattern\n if (children) {\n return React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as { className?: string }).className || ''\n return React.cloneElement(child, {\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return child\n })\n }\n\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return (\n <div data-testid={testId} aria-busy={loading}>\n {header && (\n <div className=\"px-4 py-3 border-b border-base-200 font-medium\" data-testid={`${testId}-header`}>\n {header}\n </div>\n )}\n\n <ul\n ref={ref}\n role=\"list\"\n aria-label={ariaLabel}\n className={listClasses}\n style={gridStyles}\n {...rest}\n >\n {renderContent()}\n </ul>\n\n {footer && (\n <div className=\"px-4 py-3 border-t border-base-200\" data-testid={`${testId}-footer`}>\n {footer}\n </div>\n )}\n\n {loadMore && (\n <div className=\"py-4 text-center\" data-testid={`${testId}-load-more`}>\n {loadMore}\n </div>\n )}\n\n {pagination && pagination.total !== undefined && (\n <div className=\"flex justify-end pt-4\" data-testid={`${testId}-pagination`}>\n <Pagination\n current={pagination.current}\n pageSize={pagination.pageSize}\n total={pagination.total}\n onChange={pagination.onChange}\n />\n </div>\n )}\n </div>\n )\n }\n)\n\nListRoot.displayName = 'List'\n\n// Compound component with Item and Item.Meta\nconst ItemWithMeta = Object.assign(ListItem, {\n Meta: ListItemMeta,\n})\n\nexport const List = Object.assign(ListRoot, {\n Item: ItemWithMeta,\n Row: ListItem, // Backwards compatibility with DaisyUI pattern\n})\n"],"names":["dList","dListRow","sizeClasses","ListItem","forwardRef","children","actions","extra","className","testId","rest","ref","classes","jsxs","jsx","action","index","ListItemMeta","avatar","title","description","ListRoot","dataSource","renderItem","header","footer","loading","pagination","grid","bordered","split","size","itemLayout","locale","loadMore","rowKey","ariaLabel","componentSize","useConfig","effectiveSize","listClasses","itemClasses","gridStyles","getItemKey","item","layoutClass","renderContent","Loading","rendered","key","React","existingClassName","child","Pagination","ItemWithMeta","List"],"mappings":";;;;;AAMA,MAAMA,IAAQ,UACRC,IAAW,cA+EXC,IAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAWC;AAAA,EACf,CAAC,EAAE,UAAAC,GAAU,SAAAC,GAAS,OAAAC,GAAO,WAAAC,IAAY,IAAI,eAAeC,GAAQ,GAAGC,EAAA,GAAQC,MAAQ;AACrF,UAAMC,IAAU,CAACX,GAAUO,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE9D,WACE,gBAAAK,EAAC,QAAG,KAAAF,GAAU,WAAWC,GAAS,eAAaH,GAAS,GAAGC,GACzD,UAAA;AAAA,MAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,UAAU,UAAAT,EAAA,CAAS;AAAA,MACjCE,KAAS,gBAAAO,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAP,GAAM;AAAA,MAC/CD,KAAWA,EAAQ,SAAS,KAC3B,gBAAAQ,EAAC,OAAA,EAAI,WAAU,yCACZ,UAAAR,EAAQ,IAAI,CAACS,GAAQC,MACpB,gBAAAF,EAAC,UAAkB,UAAAC,EAAA,GAARC,CAAe,CAC3B,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAb,EAAS,cAAc;AAEvB,MAAMc,IAA4C,CAAC;AAAA,EACjD,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAZ,IAAY;AAAA,EACZ,GAAGE;AACL,wBAEK,OAAA,EAAI,WAAW,2BAA2BF,CAAS,IAAK,GAAGE,GACzD,UAAA;AAAA,EAAAQ,KAAU,gBAAAJ,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAI,GAAO;AAAA,EAClD,gBAAAL,EAAC,OAAA,EAAI,WAAU,kBACZ,UAAA;AAAA,IAAAM,KAAS,gBAAAL,EAAC,OAAA,EAAI,WAAU,wBAAwB,UAAAK,GAAM;AAAA,IACtDC,KACC,gBAAAN,EAAC,OAAA,EAAI,WAAU,yCAAyC,UAAAM,EAAA,CAAY;AAAA,EAAA,EAAA,CAExE;AAAA,GACF;AAIJH,EAAa,cAAc;AAE3B,MAAMI,IAAWjB;AAAA,EACf,CACE;AAAA,IACE,YAAAkB;AAAA,IACA,YAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,YAAAC,IAAa;AAAA,IACb,MAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,OAAAC,IAAQ;AAAA,IACR,MAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAA9B;AAAA,IACA,WAAAG,IAAY;AAAA,IACZ,cAAc4B;AAAA,IACd,eAAe3B,IAAS;AAAA,IACxB,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAA0B,EAAA,IAAkBC,EAAA,GACpBC,IAAgBR,KAAQM,KAAiB,MAEzCG,IAAc;AAAA,MAClB,GAAGxC,CAAK;AAAA,MACR6B,KAAY;AAAA,MACZC,KAAS,OAAO7B,CAAQ,kBAAkBA,CAAQ,yBAAyBA,CAAQ;AAAA,MACnFO;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELiC,IAAcvC,EAAYqC,CAAa,GAGvCG,IAAkCd,IACpC;AAAA,MACE,SAAS;AAAA,MACT,qBAAqB,UAAUA,EAAK,UAAU,CAAC;AAAA,MAC/C,KAAKA,EAAK,SAAS,GAAGA,EAAK,MAAM,OAAO;AAAA,IAAA,IAE1C,CAAA,GAGEe,IAAa,CAACC,GAAe5B,MAC5BmB,IACD,OAAOA,KAAW,aAAmBA,EAAOS,CAAoC,IAC7E,OAAQA,EAAiCT,CAAgB,KAAKnB,CAAK,IAFtDA,GAMhB6B,IAAcb,MAAe,aAAa,yBAAyB,IAGnEc,IAAgB,MAChBpB,sBAEC,OAAA,EAAI,WAAU,4BAA2B,eAAa,GAAGjB,CAAM,YAAY,MAAK,UAC/E,4BAACsC,GAAA,EAAQ,MAAK,MAAK,cAAW,gBAAe,GAC/C,IAKAzB,KAAcC,IACZD,EAAW,WAAW,IAEtB,gBAAAR,EAAC,OAAA,EAAI,WAAU,yCAAwC,eAAa,GAAGL,CAAM,UAC1E,UAAAwB,GAAQ,aAAa,UAAA,CACxB,IAIGX,EAAW,IAAI,CAACsB,GAAM5B,MAAU;AACrC,YAAMgC,IAAWzB,EAAWqB,GAAM5B,CAAK,GACjCiC,IAAMN,EAAWC,GAAM5B,CAAK;AAElC,UAAIkC,EAAM,eAAeF,CAAQ,GAAG;AAClC,cAAMG,IAAqBH,EAAS,MAAiC,aAAa;AAClF,eAAOE,EAAM,aAAaF,GAAU;AAAA,UAClC,KAAAC;AAAA,UACA,WAAW,GAAGE,CAAiB,IAAIV,CAAW,IAAII,CAAW,GAAG,KAAA;AAAA,UAChE,eAAe,GAAGpC,CAAM,SAASO,CAAK;AAAA,QAAA,CAC8B;AAAA,MACxE;AACA,aAAOgC;AAAA,IACT,CAAC,IAIC3C,IACK6C,EAAM,SAAS,IAAI7C,GAAU,CAAC+C,GAAOpC,MAAU;AACpD,UAAIkC,EAAM,eAAeE,CAAK,GAAG;AAC/B,cAAMD,IAAqBC,EAAM,MAAiC,aAAa;AAC/E,eAAOF,EAAM,aAAaE,GAAO;AAAA,UAC/B,WAAW,GAAGD,CAAiB,IAAIV,CAAW,IAAII,CAAW,GAAG,KAAA;AAAA,UAChE,eAAe,GAAGpC,CAAM,SAASO,CAAK;AAAA,QAAA,CAC8B;AAAA,MACxE;AACA,aAAOoC;AAAA,IACT,CAAC,IAID,gBAAAtC,EAAC,OAAA,EAAI,WAAU,yCAAwC,eAAa,GAAGL,CAAM,UAC1E,UAAAwB,GAAQ,aAAa,UAAA,CACxB;AAIJ,WACE,gBAAApB,EAAC,OAAA,EAAI,eAAaJ,GAAQ,aAAWiB,GAClC,UAAA;AAAA,MAAAF,KACC,gBAAAV,EAAC,SAAI,WAAU,kDAAiD,eAAa,GAAGL,CAAM,WACnF,UAAAe,EAAA,CACH;AAAA,MAGF,gBAAAV;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAH;AAAA,UACA,MAAK;AAAA,UACL,cAAYyB;AAAA,UACZ,WAAWI;AAAA,UACX,OAAOE;AAAA,UACN,GAAGhC;AAAA,UAEH,UAAAoC,EAAA;AAAA,QAAc;AAAA,MAAA;AAAA,MAGhBrB,uBACE,OAAA,EAAI,WAAU,sCAAqC,eAAa,GAAGhB,CAAM,WACvE,UAAAgB,EAAA,CACH;AAAA,MAGDS,uBACE,OAAA,EAAI,WAAU,oBAAmB,eAAa,GAAGzB,CAAM,cACrD,UAAAyB,EAAA,CACH;AAAA,MAGDP,KAAcA,EAAW,UAAU,UAClC,gBAAAb,EAAC,OAAA,EAAI,WAAU,yBAAwB,eAAa,GAAGL,CAAM,eAC3D,UAAA,gBAAAK;AAAA,QAACuC;AAAA,QAAA;AAAA,UACC,SAAS1B,EAAW;AAAA,UACpB,UAAUA,EAAW;AAAA,UACrB,OAAOA,EAAW;AAAA,UAClB,UAAUA,EAAW;AAAA,QAAA;AAAA,MAAA,EACvB,CACF;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAN,EAAS,cAAc;AAGvB,MAAMiC,IAAe,OAAO,OAAOnD,GAAU;AAAA,EAC3C,MAAMc;AACR,CAAC,GAEYsC,IAAO,OAAO,OAAOlC,GAAU;AAAA,EAC1C,MAAMiC;AAAA,EACN,KAAKnD;AAAA;AACP,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';
|
|
5
|
+
spinning?: boolean;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
tip?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const Loading: React.FC<LoadingProps>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs as o, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { useConfig as f } from "./ConfigProvider.js";
|
|
3
|
+
const L = "d-loading", p = "d-loading-xs", x = "d-loading-sm", b = "d-loading-md", u = "d-loading-lg", N = "d-loading-xl", v = "d-loading-spinner", y = "d-loading-dots", C = "d-loading-ring", h = "d-loading-ball", j = "d-loading-bars", z = "d-loading-infinity", k = ({
|
|
4
|
+
size: l,
|
|
5
|
+
type: t = "spinner",
|
|
6
|
+
className: c = "",
|
|
7
|
+
spinning: d = !0,
|
|
8
|
+
children: e,
|
|
9
|
+
tip: s,
|
|
10
|
+
...a
|
|
11
|
+
}) => {
|
|
12
|
+
const { componentSize: r } = f(), g = l ?? r ?? "md", m = {
|
|
13
|
+
xs: p,
|
|
14
|
+
sm: x,
|
|
15
|
+
md: b,
|
|
16
|
+
lg: u,
|
|
17
|
+
xl: N
|
|
18
|
+
}, i = [L, {
|
|
19
|
+
spinner: v,
|
|
20
|
+
dots: y,
|
|
21
|
+
ring: C,
|
|
22
|
+
ball: h,
|
|
23
|
+
bars: j,
|
|
24
|
+
infinity: z
|
|
25
|
+
}[t], m[g], c].filter(Boolean).join(" ");
|
|
26
|
+
return e ? /* @__PURE__ */ o("div", { className: "relative", ...a, children: [
|
|
27
|
+
d && /* @__PURE__ */ o("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10", children: [
|
|
28
|
+
/* @__PURE__ */ n("span", { className: i }),
|
|
29
|
+
s && /* @__PURE__ */ n("p", { className: "mt-2 text-sm", children: s })
|
|
30
|
+
] }),
|
|
31
|
+
/* @__PURE__ */ n("div", { className: d ? "pointer-events-none" : "", children: e })
|
|
32
|
+
] }) : d ? /* @__PURE__ */ o("div", { className: "flex flex-col items-center gap-2", ...a, children: [
|
|
33
|
+
/* @__PURE__ */ n("span", { className: i }),
|
|
34
|
+
s && /* @__PURE__ */ n("p", { className: "text-sm", children: s })
|
|
35
|
+
] }) : null;
|
|
36
|
+
};
|
|
37
|
+
export {
|
|
38
|
+
k as Loading
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=Loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loading.js","sources":["../../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dLoading = 'd-loading'\nconst dLoadingXs = 'd-loading-xs'\nconst dLoadingSm = 'd-loading-sm'\nconst dLoadingMd = 'd-loading-md'\nconst dLoadingLg = 'd-loading-lg'\nconst dLoadingXl = 'd-loading-xl'\nconst dLoadingSpinner = 'd-loading-spinner'\nconst dLoadingDots = 'd-loading-dots'\nconst dLoadingRing = 'd-loading-ring'\nconst dLoadingBall = 'd-loading-ball'\nconst dLoadingBars = 'd-loading-bars'\nconst dLoadingInfinity = 'd-loading-infinity'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size,\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n ...rest\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dLoadingXs,\n sm: dLoadingSm,\n md: dLoadingMd,\n lg: dLoadingLg,\n xl: dLoadingXl,\n }\n\n const typeClasses = {\n spinner: dLoadingSpinner,\n dots: dLoadingDots,\n ring: dLoadingRing,\n ball: dLoadingBall,\n bars: dLoadingBars,\n infinity: dLoadingInfinity,\n }\n\n const spinnerClasses = [dLoading, typeClasses[type], sizeClasses[effectiveSize], className]\n .filter(Boolean)\n .join(' ')\n\n if (children) {\n return (\n <div className=\"relative\" {...rest}>\n {spinning && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\">\n <span className={spinnerClasses}></span>\n {tip && <p className=\"mt-2 text-sm\">{tip}</p>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''}>{children}</div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div className=\"flex flex-col items-center gap-2\" {...rest}>\n <span className={spinnerClasses}></span>\n {tip && <p className=\"text-sm\">{tip}</p>}\n </div>\n )\n}\n"],"names":["dLoading","dLoadingXs","dLoadingSm","dLoadingMd","dLoadingLg","dLoadingXl","dLoadingSpinner","dLoadingDots","dLoadingRing","dLoadingBall","dLoadingBars","dLoadingInfinity","Loading","size","type","className","spinning","children","tip","rest","componentSize","useConfig","effectiveSize","sizeClasses","spinnerClasses","jsxs","jsx"],"mappings":";;AAIA,MAAMA,IAAW,aACXC,IAAa,gBACbC,IAAa,gBACbC,IAAa,gBACbC,IAAa,gBACbC,IAAa,gBACbC,IAAkB,qBAClBC,IAAe,kBACfC,IAAe,kBACfC,IAAe,kBACfC,IAAe,kBACfC,IAAmB,sBAUZC,IAAkC,CAAC;AAAA,EAC9C,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,IAClB,IAAItB;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAYAmB,IAAiB,CAACxB,GATJ;AAAA,IAClB,SAASM;AAAA,IACT,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,UAAUC;AAAA,EAAA,EAGkCG,CAAI,GAAGS,EAAYD,CAAa,GAAGP,CAAS,EACvF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAIE,IAEA,gBAAAQ,EAAC,OAAA,EAAI,WAAU,YAAY,GAAGN,GAC3B,UAAA;AAAA,IAAAH,KACC,gBAAAS,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,MAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,gBAAgB,UAAAR,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,sBAED,OAAA,EAAI,WAAWF,IAAW,wBAAwB,IAAK,UAAAC,EAAA,CAAS;AAAA,EAAA,GACnE,IAICD,IAKH,gBAAAS,EAAC,OAAA,EAAI,WAAU,oCAAoC,GAAGN,GACpD,UAAA;AAAA,IAAA,gBAAAO,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,IAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,WAAW,UAAAR,EAAA,CAAI;AAAA,EAAA,GACtC,IAPO;AASX;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type MaskShape = 'squircle' | 'heart' | 'hexagon' | 'hexagon-2' | 'decagon' | 'pentagon' | 'diamond' | 'square' | 'circle' | 'star' | 'star-2' | 'triangle' | 'triangle-2' | 'triangle-3' | 'triangle-4';
|
|
3
|
+
export type MaskHalf = 'half-1' | 'half-2';
|
|
4
|
+
export interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
/** Shape of the mask */
|
|
6
|
+
shape: MaskShape;
|
|
7
|
+
/** Show only half of the mask */
|
|
8
|
+
half?: MaskHalf;
|
|
9
|
+
/** Content to mask (typically an image) */
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
/** Additional CSS classes */
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const Mask: React.ForwardRefExoticComponent<MaskProps & React.RefAttributes<HTMLDivElement>>;
|