@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,246 @@
|
|
|
1
|
+
import { jsx as n, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as ve, useRef as h, useId as P, useState as k, useImperativeHandle as we, useEffect as C, useCallback as E, createContext as xe, useContext as ge } from "react";
|
|
3
|
+
import { createPortal as ke } from "react-dom";
|
|
4
|
+
import { Skeleton as u } from "./Skeleton.js";
|
|
5
|
+
const Ee = "d-btn", Ne = "d-btn-ghost", $e = "d-btn-sm", De = "d-btn-square", F = xe(null);
|
|
6
|
+
function Se() {
|
|
7
|
+
return ge(F);
|
|
8
|
+
}
|
|
9
|
+
const Te = ve(
|
|
10
|
+
({
|
|
11
|
+
children: H,
|
|
12
|
+
open: r = !1,
|
|
13
|
+
onClose: o,
|
|
14
|
+
afterOpenChange: N,
|
|
15
|
+
title: f,
|
|
16
|
+
placement: i = "right",
|
|
17
|
+
size: b = "default",
|
|
18
|
+
width: V,
|
|
19
|
+
height: z,
|
|
20
|
+
closable: $ = !0,
|
|
21
|
+
mask: G = !0,
|
|
22
|
+
maskClosable: W = !0,
|
|
23
|
+
keyboard: D = !0,
|
|
24
|
+
footer: S,
|
|
25
|
+
extra: T,
|
|
26
|
+
className: J = "",
|
|
27
|
+
rootClassName: Q = "",
|
|
28
|
+
style: U,
|
|
29
|
+
headerStyle: Z,
|
|
30
|
+
bodyStyle: _,
|
|
31
|
+
footerStyle: O,
|
|
32
|
+
rootStyle: ee,
|
|
33
|
+
maskStyle: te,
|
|
34
|
+
zIndex: ne = 1e3,
|
|
35
|
+
destroyOnClose: L = !1,
|
|
36
|
+
forceRender: B = !1,
|
|
37
|
+
initialFocus: R = "close",
|
|
38
|
+
loading: re = !1,
|
|
39
|
+
getContainer: l,
|
|
40
|
+
push: c = { distance: 180 },
|
|
41
|
+
"data-testid": y,
|
|
42
|
+
...se
|
|
43
|
+
}, ae) => {
|
|
44
|
+
const m = h(null), p = h(null), v = h(null), j = h(null), q = P(), A = P(), [oe, ie] = k(!1), [le, I] = k(r || B), [Le, w] = k(!1), M = Se();
|
|
45
|
+
we(ae, () => ({
|
|
46
|
+
nativeElement: m.current
|
|
47
|
+
})), C(() => {
|
|
48
|
+
ie(!0);
|
|
49
|
+
}, []);
|
|
50
|
+
const ce = () => typeof b == "number" ? b : b === "large" ? 736 : 378, de = () => {
|
|
51
|
+
const e = i === "left" || i === "right", t = ce();
|
|
52
|
+
if (e) {
|
|
53
|
+
const s = V ?? t;
|
|
54
|
+
return { width: typeof s == "number" ? `${s}px` : s };
|
|
55
|
+
} else {
|
|
56
|
+
const s = z ?? t;
|
|
57
|
+
return { height: typeof s == "number" ? `${s}px` : s };
|
|
58
|
+
}
|
|
59
|
+
}, ue = () => c ? typeof c == "boolean" ? c ? 180 : 0 : c.distance ?? 180 : 0, x = E((e) => {
|
|
60
|
+
if (!m.current || e.key !== "Tab" || typeof document > "u") return;
|
|
61
|
+
const t = m.current.querySelectorAll(
|
|
62
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
63
|
+
), s = t[0], K = t[t.length - 1];
|
|
64
|
+
e.shiftKey && document.activeElement === s ? (e.preventDefault(), K?.focus()) : !e.shiftKey && document.activeElement === K && (e.preventDefault(), s?.focus());
|
|
65
|
+
}, []), g = E(
|
|
66
|
+
(e) => {
|
|
67
|
+
D && e.key === "Escape" && o && (e.preventDefault(), o());
|
|
68
|
+
},
|
|
69
|
+
[D, o]
|
|
70
|
+
), fe = E(() => {
|
|
71
|
+
w(!1), N?.(r), !r && L && I(!1);
|
|
72
|
+
}, [r, N, L]);
|
|
73
|
+
C(() => {
|
|
74
|
+
if (!(typeof document > "u"))
|
|
75
|
+
if (r) {
|
|
76
|
+
I(!0), w(!0), j.current = document.activeElement, document.body.style.overflow = "hidden";
|
|
77
|
+
const e = setTimeout(() => {
|
|
78
|
+
R === "close" && p.current ? p.current.focus() : v.current && v.current.querySelector(
|
|
79
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
80
|
+
)?.focus();
|
|
81
|
+
}, 0);
|
|
82
|
+
return document.addEventListener("keydown", g), document.addEventListener("keydown", x), () => {
|
|
83
|
+
clearTimeout(e), document.body.style.overflow = "", document.removeEventListener("keydown", g), document.removeEventListener("keydown", x);
|
|
84
|
+
};
|
|
85
|
+
} else {
|
|
86
|
+
w(!0);
|
|
87
|
+
const e = j.current;
|
|
88
|
+
e && document.body.contains(e) && e.focus();
|
|
89
|
+
}
|
|
90
|
+
}, [r, g, x, R]);
|
|
91
|
+
const me = (e) => {
|
|
92
|
+
W && o && o(e);
|
|
93
|
+
}, he = {
|
|
94
|
+
top: "inset-x-0 top-0",
|
|
95
|
+
right: "inset-y-0 right-0",
|
|
96
|
+
bottom: "inset-x-0 bottom-0",
|
|
97
|
+
left: "inset-y-0 left-0"
|
|
98
|
+
}, be = (e) => {
|
|
99
|
+
const t = M && r ? M.pushDistance : 0;
|
|
100
|
+
if (e) {
|
|
101
|
+
if (t === 0) return "translate(0, 0)";
|
|
102
|
+
switch (i) {
|
|
103
|
+
case "right":
|
|
104
|
+
return `translateX(-${t}px)`;
|
|
105
|
+
case "left":
|
|
106
|
+
return `translateX(${t}px)`;
|
|
107
|
+
case "top":
|
|
108
|
+
return `translateY(${t}px)`;
|
|
109
|
+
case "bottom":
|
|
110
|
+
return `translateY(-${t}px)`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
switch (i) {
|
|
114
|
+
case "top":
|
|
115
|
+
return "translateY(-100%)";
|
|
116
|
+
case "right":
|
|
117
|
+
return "translateX(100%)";
|
|
118
|
+
case "bottom":
|
|
119
|
+
return "translateY(100%)";
|
|
120
|
+
case "left":
|
|
121
|
+
return "translateX(-100%)";
|
|
122
|
+
}
|
|
123
|
+
}, ye = de(), pe = () => l === !1 ? null : typeof l == "function" ? l() : l || (typeof document < "u" ? document.body : null), a = (e) => y ? `${y}-${e}` : void 0, X = /* @__PURE__ */ n(F.Provider, { value: { push: c, pushDistance: ue() }, children: /* @__PURE__ */ d(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
className: `fixed inset-0 ${r ? "" : "pointer-events-none"} ${Q}`,
|
|
127
|
+
style: { zIndex: ne, ...ee },
|
|
128
|
+
role: "presentation",
|
|
129
|
+
"data-state": r ? "open" : "closed",
|
|
130
|
+
"data-testid": y,
|
|
131
|
+
...se,
|
|
132
|
+
children: [
|
|
133
|
+
G && /* @__PURE__ */ n(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
className: `absolute inset-0 bg-black transition-opacity duration-300 ${r ? "opacity-50" : "opacity-0"}`,
|
|
137
|
+
style: te,
|
|
138
|
+
onClick: me,
|
|
139
|
+
"aria-hidden": "true",
|
|
140
|
+
"data-testid": a("mask")
|
|
141
|
+
}
|
|
142
|
+
),
|
|
143
|
+
/* @__PURE__ */ d(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
ref: m,
|
|
147
|
+
role: "dialog",
|
|
148
|
+
"aria-modal": "true",
|
|
149
|
+
"aria-labelledby": f ? q : void 0,
|
|
150
|
+
"aria-describedby": A,
|
|
151
|
+
className: `fixed flex flex-col bg-base-100 shadow-xl transition-transform duration-300 ease-in-out ${he[i]} ${J}`,
|
|
152
|
+
style: {
|
|
153
|
+
...ye,
|
|
154
|
+
transform: be(r),
|
|
155
|
+
...U
|
|
156
|
+
},
|
|
157
|
+
onTransitionEnd: fe,
|
|
158
|
+
"data-testid": a("panel"),
|
|
159
|
+
children: [
|
|
160
|
+
(f || $ || T) && /* @__PURE__ */ d(
|
|
161
|
+
"div",
|
|
162
|
+
{
|
|
163
|
+
className: "flex items-center justify-between px-6 py-4 border-b border-base-300",
|
|
164
|
+
style: Z,
|
|
165
|
+
"data-testid": a("header"),
|
|
166
|
+
children: [
|
|
167
|
+
f && /* @__PURE__ */ n("h2", { id: q, className: "text-lg font-semibold", children: f }),
|
|
168
|
+
/* @__PURE__ */ d("div", { className: "flex items-center gap-2 ml-auto", children: [
|
|
169
|
+
T,
|
|
170
|
+
$ && /* @__PURE__ */ n(
|
|
171
|
+
"button",
|
|
172
|
+
{
|
|
173
|
+
ref: p,
|
|
174
|
+
type: "button",
|
|
175
|
+
className: `${Ee} ${Ne} ${$e} ${De}`,
|
|
176
|
+
onClick: o,
|
|
177
|
+
"aria-label": "Close drawer",
|
|
178
|
+
"data-testid": a("close"),
|
|
179
|
+
children: /* @__PURE__ */ n(
|
|
180
|
+
"svg",
|
|
181
|
+
{
|
|
182
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
183
|
+
className: "h-5 w-5",
|
|
184
|
+
fill: "none",
|
|
185
|
+
viewBox: "0 0 24 24",
|
|
186
|
+
stroke: "currentColor",
|
|
187
|
+
"aria-hidden": "true",
|
|
188
|
+
children: /* @__PURE__ */ n(
|
|
189
|
+
"path",
|
|
190
|
+
{
|
|
191
|
+
strokeLinecap: "round",
|
|
192
|
+
strokeLinejoin: "round",
|
|
193
|
+
strokeWidth: 2,
|
|
194
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
195
|
+
}
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
)
|
|
201
|
+
] })
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
),
|
|
205
|
+
/* @__PURE__ */ n(
|
|
206
|
+
"div",
|
|
207
|
+
{
|
|
208
|
+
ref: v,
|
|
209
|
+
id: A,
|
|
210
|
+
className: "flex-1 overflow-auto p-6",
|
|
211
|
+
style: _,
|
|
212
|
+
"data-testid": a("body"),
|
|
213
|
+
children: re ? /* @__PURE__ */ d("div", { className: "space-y-4", "data-testid": a("skeleton"), children: [
|
|
214
|
+
/* @__PURE__ */ n(u, { className: "h-4 w-3/4" }),
|
|
215
|
+
/* @__PURE__ */ n(u, { className: "h-4 w-full" }),
|
|
216
|
+
/* @__PURE__ */ n(u, { className: "h-4 w-5/6" }),
|
|
217
|
+
/* @__PURE__ */ n(u, { className: "h-4 w-2/3" }),
|
|
218
|
+
/* @__PURE__ */ n(u, { className: "h-32 w-full" })
|
|
219
|
+
] }) : H
|
|
220
|
+
}
|
|
221
|
+
),
|
|
222
|
+
S && /* @__PURE__ */ n(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
className: "px-6 py-4 border-t border-base-300",
|
|
226
|
+
style: O,
|
|
227
|
+
"data-testid": a("footer"),
|
|
228
|
+
children: S
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
]
|
|
232
|
+
}
|
|
233
|
+
)
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
) });
|
|
237
|
+
if (!oe || !le && !r && !B) return null;
|
|
238
|
+
const Y = pe();
|
|
239
|
+
return Y === null ? X : ke(X, Y);
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
Te.displayName = "Drawer";
|
|
243
|
+
export {
|
|
244
|
+
Te as Drawer
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.js","sources":["../../src/components/Drawer.tsx"],"sourcesContent":["import React, {\n useEffect,\n useRef,\n useId,\n useCallback,\n useState,\n forwardRef,\n useImperativeHandle,\n createContext,\n useContext,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { Skeleton } from './Skeleton'\n\n// DaisyUI classes\nconst dBtn = 'd-btn'\nconst dBtnGhost = 'd-btn-ghost'\nconst dBtnSm = 'd-btn-sm'\nconst dBtnSquare = 'd-btn-square'\n\nexport type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left'\nexport type DrawerSize = 'default' | 'large' | number\n\nexport interface DrawerPushConfig {\n /** Distance to push parent drawer (default: 180) */\n distance?: number\n}\n\nexport interface DrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Drawer content */\n children: React.ReactNode\n /** Whether the drawer is visible */\n open?: boolean\n /** Callback when drawer is closed */\n onClose?: (e?: React.MouseEvent | React.KeyboardEvent) => void\n /** Callback after open/close animation completes */\n afterOpenChange?: (open: boolean) => void\n /** Drawer title */\n title?: React.ReactNode\n /** Direction drawer slides from */\n placement?: DrawerPlacement\n /** Preset size or custom width/height in pixels */\n size?: DrawerSize\n /** Custom width (overrides size for left/right placement) */\n width?: number | string\n /** Custom height (overrides size for top/bottom placement) */\n height?: number | string\n /** Whether to show close button */\n closable?: boolean\n /** Whether to show mask/backdrop */\n mask?: boolean\n /** Whether clicking mask closes drawer */\n maskClosable?: boolean\n /** Whether ESC closes drawer */\n keyboard?: boolean\n /** Footer content */\n footer?: React.ReactNode\n /** Extra content in header (right side) */\n extra?: React.ReactNode\n /** CSS class for drawer panel */\n className?: string\n /** CSS class for drawer wrapper */\n rootClassName?: string\n /** Style for drawer panel */\n style?: React.CSSProperties\n /** Style for drawer header */\n headerStyle?: React.CSSProperties\n /** Style for drawer body/content area */\n bodyStyle?: React.CSSProperties\n /** Style for drawer footer */\n footerStyle?: React.CSSProperties\n /** Style for drawer wrapper (includes mask) */\n rootStyle?: React.CSSProperties\n /** Style for mask/backdrop */\n maskStyle?: React.CSSProperties\n /** z-index of drawer */\n zIndex?: number\n /** Destroy content when closed */\n destroyOnClose?: boolean\n /** Pre-render drawer content (keep in DOM even when closed) */\n forceRender?: boolean\n /** Where to place initial focus */\n initialFocus?: 'close' | 'content'\n /** Show loading skeleton */\n loading?: boolean\n /** Custom container for portal (false to disable portal) */\n getContainer?: HTMLElement | (() => HTMLElement) | false\n /** Nested drawer push behavior */\n push?: boolean | DrawerPushConfig\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface DrawerRef {\n /** The drawer panel element */\n nativeElement: HTMLDivElement | null\n}\n\n// Context for nested drawer push behavior\ninterface DrawerContextValue {\n push: boolean | DrawerPushConfig\n pushDistance: number\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nfunction useDrawerContext() {\n return useContext(DrawerContext)\n}\n\n/**\n * Drawer - A panel that slides in from the edge of the screen.\n * Use for forms, details, or task panels.\n * For responsive sidebar navigation, use ResponsiveDrawer instead.\n */\nexport const Drawer = forwardRef<DrawerRef, DrawerProps>(\n (\n {\n children,\n open = false,\n onClose,\n afterOpenChange,\n title,\n placement = 'right',\n size = 'default',\n width,\n height,\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n footer,\n extra,\n className = '',\n rootClassName = '',\n style,\n headerStyle,\n bodyStyle,\n footerStyle,\n rootStyle,\n maskStyle,\n zIndex = 1000,\n destroyOnClose = false,\n forceRender = false,\n initialFocus = 'close',\n loading = false,\n getContainer,\n push = { distance: 180 },\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const drawerRef = useRef<HTMLDivElement>(null)\n const closeButtonRef = useRef<HTMLButtonElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n const titleId = useId()\n const contentId = useId()\n const [mounted, setMounted] = useState(false)\n const [shouldRender, setShouldRender] = useState(open || forceRender)\n const [isAnimating, setIsAnimating] = useState(false)\n\n // Get parent drawer context for nested push behavior\n const parentDrawer = useDrawerContext()\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n nativeElement: drawerRef.current,\n }))\n\n // Handle SSR - only render portal after mounting in browser\n useEffect(() => {\n setMounted(true)\n }, [])\n\n // Calculate dimensions\n const getSizeValue = (): number => {\n if (typeof size === 'number') return size\n return size === 'large' ? 736 : 378\n }\n\n const getDimension = (): { width?: string; height?: string } => {\n const isHorizontal = placement === 'left' || placement === 'right'\n const sizeValue = getSizeValue()\n\n if (isHorizontal) {\n const w = width ?? sizeValue\n return { width: typeof w === 'number' ? `${w}px` : w }\n } else {\n const h = height ?? sizeValue\n return { height: typeof h === 'number' ? `${h}px` : h }\n }\n }\n\n // Calculate push distance for nested drawers\n const getPushDistance = (): number => {\n if (!push) return 0\n if (typeof push === 'boolean') return push ? 180 : 0\n return push.distance ?? 180\n }\n\n // Focus trap\n const trapFocus = useCallback((e: KeyboardEvent) => {\n if (!drawerRef.current || e.key !== 'Tab' || typeof document === 'undefined') return\n\n const focusableElements = drawerRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }, [])\n\n // Handle ESC key\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (keyboard && e.key === 'Escape' && onClose) {\n e.preventDefault()\n onClose()\n }\n },\n [keyboard, onClose]\n )\n\n // Handle animation end\n const handleTransitionEnd = useCallback(() => {\n setIsAnimating(false)\n afterOpenChange?.(open)\n\n if (!open && destroyOnClose) {\n setShouldRender(false)\n }\n }, [open, afterOpenChange, destroyOnClose])\n\n // Open/close effects\n useEffect(() => {\n if (typeof document === 'undefined') return\n\n if (open) {\n setShouldRender(true)\n setIsAnimating(true)\n previousActiveElement.current = document.activeElement as HTMLElement\n document.body.style.overflow = 'hidden'\n\n // Set initial focus\n const focusTimeout = setTimeout(() => {\n if (initialFocus === 'close' && closeButtonRef.current) {\n closeButtonRef.current.focus()\n } else if (contentRef.current) {\n const firstFocusable = contentRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n firstFocusable?.focus()\n }\n }, 0)\n\n // Add event listeners\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('keydown', trapFocus)\n\n return () => {\n clearTimeout(focusTimeout)\n document.body.style.overflow = ''\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('keydown', trapFocus)\n }\n } else {\n setIsAnimating(true)\n // Restore focus to previously focused element if it's still in the DOM\n const prevElement = previousActiveElement.current\n if (prevElement && document.body.contains(prevElement)) {\n prevElement.focus()\n }\n }\n }, [open, handleKeyDown, trapFocus, initialFocus])\n\n const handleMaskClick = (e: React.MouseEvent) => {\n if (maskClosable && onClose) {\n onClose(e)\n }\n }\n\n // Position classes\n const placementClasses: Record<DrawerPlacement, string> = {\n top: 'inset-x-0 top-0',\n right: 'inset-y-0 right-0',\n bottom: 'inset-x-0 bottom-0',\n left: 'inset-y-0 left-0',\n }\n\n // Transform for animation\n const getTransform = (isOpen: boolean): string => {\n // Apply push offset from child drawer\n const pushOffset = parentDrawer && open ? parentDrawer.pushDistance : 0\n\n if (isOpen) {\n if (pushOffset === 0) return 'translate(0, 0)'\n switch (placement) {\n case 'right':\n return `translateX(-${pushOffset}px)`\n case 'left':\n return `translateX(${pushOffset}px)`\n case 'top':\n return `translateY(${pushOffset}px)`\n case 'bottom':\n return `translateY(-${pushOffset}px)`\n }\n }\n\n switch (placement) {\n case 'top':\n return 'translateY(-100%)'\n case 'right':\n return 'translateX(100%)'\n case 'bottom':\n return 'translateY(100%)'\n case 'left':\n return 'translateX(-100%)'\n }\n }\n\n const dimension = getDimension()\n\n // Get container element\n const getContainerElement = (): HTMLElement | null => {\n if (getContainer === false) return null\n if (typeof getContainer === 'function') return getContainer()\n if (getContainer) return getContainer\n return typeof document !== 'undefined' ? document.body : null\n }\n\n // Generate test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const drawerContent = (\n <DrawerContext.Provider value={{ push, pushDistance: getPushDistance() }}>\n <div\n className={`fixed inset-0 ${open ? '' : 'pointer-events-none'} ${rootClassName}`}\n style={{ zIndex, ...rootStyle }}\n role=\"presentation\"\n data-state={open ? 'open' : 'closed'}\n data-testid={testId}\n {...rest}\n >\n {/* Backdrop/Mask */}\n {mask && (\n <div\n className={`absolute inset-0 bg-black transition-opacity duration-300 ${\n open ? 'opacity-50' : 'opacity-0'\n }`}\n style={maskStyle}\n onClick={handleMaskClick}\n aria-hidden=\"true\"\n data-testid={getTestId('mask')}\n />\n )}\n\n {/* Drawer Panel */}\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={contentId}\n className={`fixed flex flex-col bg-base-100 shadow-xl transition-transform duration-300 ease-in-out ${placementClasses[placement]} ${className}`}\n style={{\n ...dimension,\n transform: getTransform(open),\n ...style,\n }}\n onTransitionEnd={handleTransitionEnd}\n data-testid={getTestId('panel')}\n >\n {/* Header */}\n {(title || closable || extra) && (\n <div\n className=\"flex items-center justify-between px-6 py-4 border-b border-base-300\"\n style={headerStyle}\n data-testid={getTestId('header')}\n >\n {title && (\n <h2 id={titleId} className=\"text-lg font-semibold\">\n {title}\n </h2>\n )}\n <div className=\"flex items-center gap-2 ml-auto\">\n {extra}\n {closable && (\n <button\n ref={closeButtonRef}\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnSm} ${dBtnSquare}`}\n onClick={onClose}\n aria-label=\"Close drawer\"\n data-testid={getTestId('close')}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Content */}\n <div\n ref={contentRef}\n id={contentId}\n className=\"flex-1 overflow-auto p-6\"\n style={bodyStyle}\n data-testid={getTestId('body')}\n >\n {loading ? (\n <div className=\"space-y-4\" data-testid={getTestId('skeleton')}>\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-5/6\" />\n <Skeleton className=\"h-4 w-2/3\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n ) : (\n children\n )}\n </div>\n\n {/* Footer */}\n {footer && (\n <div\n className=\"px-6 py-4 border-t border-base-300\"\n style={footerStyle}\n data-testid={getTestId('footer')}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n </DrawerContext.Provider>\n )\n\n // Don't render during SSR or when not needed\n if (!mounted) return null\n if (!shouldRender && !open && !forceRender) return null\n\n // Render without portal if getContainer is false\n const container = getContainerElement()\n if (container === null) return drawerContent\n\n return createPortal(drawerContent, container)\n }\n)\n\nDrawer.displayName = 'Drawer'\n"],"names":["dBtn","dBtnGhost","dBtnSm","dBtnSquare","DrawerContext","createContext","useDrawerContext","useContext","Drawer","forwardRef","children","open","onClose","afterOpenChange","title","placement","size","width","height","closable","mask","maskClosable","keyboard","footer","extra","className","rootClassName","style","headerStyle","bodyStyle","footerStyle","rootStyle","maskStyle","zIndex","destroyOnClose","forceRender","initialFocus","loading","getContainer","push","testId","rest","ref","drawerRef","useRef","closeButtonRef","contentRef","previousActiveElement","titleId","useId","contentId","mounted","setMounted","useState","shouldRender","setShouldRender","isAnimating","setIsAnimating","parentDrawer","useImperativeHandle","useEffect","getSizeValue","getDimension","isHorizontal","sizeValue","w","h","getPushDistance","trapFocus","useCallback","focusableElements","firstElement","lastElement","handleKeyDown","handleTransitionEnd","focusTimeout","prevElement","handleMaskClick","placementClasses","getTransform","isOpen","pushOffset","dimension","getContainerElement","getTestId","suffix","drawerContent","jsx","jsxs","Skeleton","container","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type DropdownTriggerType = 'click' | 'hover' | 'contextMenu';
|
|
3
|
+
export interface DropdownMenuItem {
|
|
4
|
+
key: string;
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
danger?: boolean;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
children?: DropdownMenuItem[];
|
|
11
|
+
}
|
|
12
|
+
export interface DropdownMenuDivider {
|
|
13
|
+
type: 'divider';
|
|
14
|
+
key?: string;
|
|
15
|
+
}
|
|
16
|
+
export type DropdownMenuItemType = DropdownMenuItem | DropdownMenuDivider;
|
|
17
|
+
export interface DropdownProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
18
|
+
/** Trigger element and dropdown content (compound pattern) */
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
/** Menu items (data-driven pattern) */
|
|
21
|
+
items?: DropdownMenuItemType[];
|
|
22
|
+
/** @deprecated Use trigger={['hover']} instead */
|
|
23
|
+
hover?: boolean;
|
|
24
|
+
/** Trigger mode(s) for dropdown */
|
|
25
|
+
trigger?: DropdownTriggerType[];
|
|
26
|
+
position?: 'top' | 'bottom' | 'left' | 'right';
|
|
27
|
+
align?: 'start' | 'center' | 'end';
|
|
28
|
+
/** Controlled open state */
|
|
29
|
+
open?: boolean;
|
|
30
|
+
/** Callback when open state changes */
|
|
31
|
+
onOpenChange?: (open: boolean, info?: {
|
|
32
|
+
source: 'trigger' | 'menu';
|
|
33
|
+
}) => void;
|
|
34
|
+
/** Disable the dropdown */
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/** Show arrow pointing to trigger */
|
|
37
|
+
arrow?: boolean | {
|
|
38
|
+
pointAtCenter?: boolean;
|
|
39
|
+
};
|
|
40
|
+
/** Delay before showing dropdown on hover (seconds) */
|
|
41
|
+
mouseEnterDelay?: number;
|
|
42
|
+
/** Delay before hiding dropdown on mouse leave (seconds) */
|
|
43
|
+
mouseLeaveDelay?: number;
|
|
44
|
+
/** Container for the dropdown menu */
|
|
45
|
+
getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
|
|
46
|
+
/** Destroy dropdown when hidden */
|
|
47
|
+
destroyOnHidden?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface DropdownTriggerProps {
|
|
50
|
+
children: React.ReactNode;
|
|
51
|
+
className?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface DropdownMenuProps {
|
|
54
|
+
children?: React.ReactNode;
|
|
55
|
+
className?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface DropdownItemProps {
|
|
58
|
+
children?: React.ReactNode;
|
|
59
|
+
/** Icon to display before label */
|
|
60
|
+
icon?: React.ReactNode;
|
|
61
|
+
/** Item label (alternative to children) */
|
|
62
|
+
label?: React.ReactNode;
|
|
63
|
+
onClick?: () => void;
|
|
64
|
+
active?: boolean;
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
danger?: boolean;
|
|
67
|
+
className?: string;
|
|
68
|
+
/** @internal */
|
|
69
|
+
_index?: number;
|
|
70
|
+
/** @internal */
|
|
71
|
+
_key?: string;
|
|
72
|
+
}
|
|
73
|
+
export interface DropdownSubMenuProps {
|
|
74
|
+
children: React.ReactNode;
|
|
75
|
+
/** Submenu title/label */
|
|
76
|
+
title: React.ReactNode;
|
|
77
|
+
/** Icon to display before title */
|
|
78
|
+
icon?: React.ReactNode;
|
|
79
|
+
disabled?: boolean;
|
|
80
|
+
className?: string;
|
|
81
|
+
/** @internal */
|
|
82
|
+
_key?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface DropdownDividerProps {
|
|
85
|
+
className?: string;
|
|
86
|
+
}
|
|
87
|
+
declare function DropdownRoot({ children, items, hover, trigger, position, align, open: controlledOpen, onOpenChange, disabled, arrow, mouseEnterDelay, mouseLeaveDelay, getPopupContainer, destroyOnHidden, className, ...rest }: DropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
88
|
+
declare function DropdownTrigger({ children, className }: DropdownTriggerProps): React.ReactElement<React.HTMLAttributes<HTMLElement> & {
|
|
89
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
90
|
+
onKeyDown?: (e: React.KeyboardEvent) => void;
|
|
91
|
+
className?: string;
|
|
92
|
+
}, string | React.JSXElementConstructor<any>>;
|
|
93
|
+
declare function DropdownMenu({ children, className }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
94
|
+
declare function DropdownItem({ children, icon, label, onClick, active, disabled, danger, className, _key, }: DropdownItemProps): import("react/jsx-runtime").JSX.Element;
|
|
95
|
+
declare function DropdownSubMenu({ children, title, icon, disabled, className, _key, }: DropdownSubMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
96
|
+
declare function DropdownDivider({ className }: DropdownDividerProps): import("react/jsx-runtime").JSX.Element;
|
|
97
|
+
export declare const Dropdown: typeof DropdownRoot & {
|
|
98
|
+
Trigger: typeof DropdownTrigger;
|
|
99
|
+
Menu: typeof DropdownMenu;
|
|
100
|
+
Item: typeof DropdownItem;
|
|
101
|
+
SubMenu: typeof DropdownSubMenu;
|
|
102
|
+
Divider: typeof DropdownDivider;
|
|
103
|
+
};
|
|
104
|
+
export {};
|