@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 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\n// DaisyUI classes\nconst dMenu = 'd-menu'\nconst dMenuVertical = 'd-menu-vertical'\nconst dMenuHorizontal = 'd-menu-horizontal'\nconst dMenuXs = 'd-menu-xs'\nconst dMenuSm = 'd-menu-sm'\nconst dMenuMd = 'd-menu-md'\nconst dMenuLg = 'd-menu-lg'\nconst dMenuXl = 'd-menu-xl'\nconst dMenuIcon = 'd-menu-icon'\nconst dMenuTitle = 'd-menu-title'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\nexport type MenuSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface MenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n children?: MenuItem[]\n divider?: boolean\n title?: boolean // For section titles\n}\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Menu items (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: MenuItem[]\n /** Menu display mode */\n mode?: MenuMode\n /** Menu size */\n size?: MenuSize\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default selected keys (uncontrolled) */\n defaultSelectedKeys?: string[]\n /** Controlled open submenu keys */\n openKeys?: string[]\n /** Default open submenu keys (uncontrolled) */\n defaultOpenKeys?: string[]\n /** Callback when item is selected */\n onSelect?: (key: string) => void\n /** Callback when submenu open state changes */\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use key and selectedKeys instead */\n active?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuSubMenuProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {\n children: React.ReactNode\n /** Submenu label */\n label?: React.ReactNode\n /** Submenu title (alias for label) */\n title?: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\n// Internal component for rendering data-driven menu items\nfunction renderMenuItem(item: MenuItem, onSelect: (key: string) => void, selectedKeys: string[], openKeys: string[], onToggleOpen: (key: string) => void): React.ReactNode {\n if (item.divider) {\n return <MenuDivider key={item.key} />\n }\n\n if (item.title) {\n return <MenuTitle key={item.key}>{item.label}</MenuTitle>\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <MenuSubMenu key={item.key} _key={item.key} label={item.label} icon={item.icon} disabled={item.disabled}>\n {item.children.map((child) => renderMenuItem(child, onSelect, selectedKeys, openKeys, onToggleOpen))}\n </MenuSubMenu>\n )\n }\n\n return (\n <MenuItem key={item.key} _key={item.key} icon={item.icon} disabled={item.disabled}>\n {item.label}\n </MenuItem>\n )\n}\n\nfunction MenuRoot({\n children,\n items,\n mode = 'vertical',\n size,\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: dMenuVertical,\n horizontal: dMenuHorizontal,\n inline: dMenuVertical,\n }\n\n const sizeClasses: Record<MenuSize, string> = {\n xs: dMenuXs,\n sm: dMenuSm,\n md: dMenuMd,\n lg: dMenuLg,\n xl: dMenuXl,\n }\n\n const menuClasses = [dMenu, modeClasses[mode], size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n const contextValue = {\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }\n\n // Clone children to extract keys\n const cloneChildrenWithKeys = (children: React.ReactNode): React.ReactNode => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const childKey = child.key != null ? String(child.key) : undefined\n if (child.type === MenuItem || child.type === MenuSubMenu) {\n return React.cloneElement(child as React.ReactElement<any>, { _key: childKey })\n }\n }\n return child\n })\n }\n\n // Render data-driven items if provided\n const content = items && items.length > 0\n ? items.map((item) => renderMenuItem(item, handleSelect, selectedKeys, openKeys, handleToggleOpen))\n : cloneChildrenWithKeys(children)\n\n return (\n <MenuContext.Provider value={contextValue}>\n <ul className={menuClasses} {...rest}>{content}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n _key,\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = _key && context ? context.selectedKeys.includes(_key) : active\n\n const handleClick = () => {\n if (disabled) return\n if (_key && context) {\n context.onSelect(_key)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n label,\n title,\n icon,\n disabled = false,\n className = '',\n _key,\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = _key ? context.openKeys.includes(_key) : false\n const submenuId = useId()\n\n // Support both label and title (title as alias for backwards compatibility)\n const displayLabel = label ?? title\n\n const handleToggle = () => {\n if (disabled || !_key) return\n context.onToggleOpen(_key)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = [dMenuTitle, className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["dMenu","dMenuVertical","dMenuHorizontal","dMenuXs","dMenuSm","dMenuMd","dMenuLg","dMenuXl","dMenuIcon","dMenuTitle","MenuContext","createContext","useMenuContext","context","useContext","renderMenuItem","item","onSelect","selectedKeys","openKeys","onToggleOpen","jsx","MenuDivider","MenuTitle","MenuSubMenu","child","MenuItem","MenuRoot","children","items","mode","size","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","modeClasses","sizeClasses","menuClasses","contextValue","cloneChildrenWithKeys","React","childKey","content","icon","disabled","onClick","active","_key","isSelected","handleClick","itemClasses","jsxs","label","title","isOpen","submenuId","useId","displayLabel","handleToggle","submenuClasses","e","titleClasses","dividerClasses","Menu"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface MessageConfig {
|
|
3
|
+
duration?: number;
|
|
4
|
+
key?: string;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
'data-testid'?: string;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
onClose?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare class MessageManager {
|
|
13
|
+
success(content: React.ReactNode, config?: MessageConfig): string;
|
|
14
|
+
error(content: React.ReactNode, config?: MessageConfig): string;
|
|
15
|
+
info(content: React.ReactNode, config?: MessageConfig): string;
|
|
16
|
+
warning(content: React.ReactNode, config?: MessageConfig): string;
|
|
17
|
+
loading(content: React.ReactNode, config?: MessageConfig): string;
|
|
18
|
+
destroy(id?: string): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const message: MessageManager;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { notification as o } from "./Notification.js";
|
|
3
|
+
const r = "d-loading", t = "d-loading-spinner", i = "d-loading-sm";
|
|
4
|
+
class c {
|
|
5
|
+
success(n, e) {
|
|
6
|
+
return o.open({
|
|
7
|
+
message: n,
|
|
8
|
+
type: "success",
|
|
9
|
+
variant: "compact",
|
|
10
|
+
...e
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
error(n, e) {
|
|
14
|
+
return o.open({
|
|
15
|
+
message: n,
|
|
16
|
+
type: "error",
|
|
17
|
+
variant: "compact",
|
|
18
|
+
...e
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
info(n, e) {
|
|
22
|
+
return o.open({
|
|
23
|
+
message: n,
|
|
24
|
+
type: "info",
|
|
25
|
+
variant: "compact",
|
|
26
|
+
...e
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
warning(n, e) {
|
|
30
|
+
return o.open({
|
|
31
|
+
message: n,
|
|
32
|
+
type: "warning",
|
|
33
|
+
variant: "compact",
|
|
34
|
+
...e
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
loading(n, e) {
|
|
38
|
+
const a = /* @__PURE__ */ s("span", { className: `${r} ${t} ${i}` });
|
|
39
|
+
return o.open({
|
|
40
|
+
message: n,
|
|
41
|
+
type: "info",
|
|
42
|
+
variant: "compact",
|
|
43
|
+
duration: 0,
|
|
44
|
+
icon: a,
|
|
45
|
+
...e
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
destroy(n) {
|
|
49
|
+
n ? o.close(n) : o.destroy();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const d = new c();
|
|
53
|
+
export {
|
|
54
|
+
c as MessageManager,
|
|
55
|
+
d as message
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=Message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.js","sources":["../../src/components/Message.tsx"],"sourcesContent":["import React from 'react'\nimport { notification } from './Notification'\n\n// DaisyUI classes\nconst dLoading = 'd-loading'\nconst dLoadingSpinner = 'd-loading-spinner'\nconst dLoadingSm = 'd-loading-sm'\n\nexport interface MessageConfig {\n duration?: number\n key?: string\n icon?: React.ReactNode\n className?: string\n style?: React.CSSProperties\n 'data-testid'?: string\n onClick?: () => void\n onClose?: () => void\n}\n\nexport class MessageManager {\n success(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'success',\n variant: 'compact',\n ...config,\n })\n }\n\n error(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'error',\n variant: 'compact',\n ...config,\n })\n }\n\n info(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'info',\n variant: 'compact',\n ...config,\n })\n }\n\n warning(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'warning',\n variant: 'compact',\n ...config,\n })\n }\n\n loading(content: React.ReactNode, config?: MessageConfig) {\n const loadingIcon = (\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingSm}`} />\n )\n return notification.open({\n message: content,\n type: 'info',\n variant: 'compact',\n duration: 0,\n icon: loadingIcon,\n ...config,\n })\n }\n\n destroy(id?: string) {\n if (id) {\n notification.close(id)\n } else {\n notification.destroy()\n }\n }\n}\n\nexport const message = new MessageManager()\n"],"names":["dLoading","dLoadingSpinner","dLoadingSm","MessageManager","content","config","notification","loadingIcon","jsx","id","message"],"mappings":";;AAIA,MAAMA,IAAW,aACXC,IAAkB,qBAClBC,IAAa;AAaZ,MAAMC,EAAe;AAAA,EAC1B,QAAQC,GAA0BC,GAAwB;AACxD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAMD,GAA0BC,GAAwB;AACtD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,KAAKD,GAA0BC,GAAwB;AACrD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQD,GAA0BC,GAAwB;AACxD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQD,GAA0BC,GAAwB;AACxD,UAAME,IACJ,gBAAAC,EAAC,QAAA,EAAK,WAAW,GAAGR,CAAQ,IAAIC,CAAe,IAAIC,CAAU,GAAA,CAAI;AAEnE,WAAOI,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAMG;AAAA,MACN,GAAGF;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQI,GAAa;AACnB,IAAIA,IACFH,EAAa,MAAMG,CAAE,IAErBH,EAAa,QAAA;AAAA,EAEjB;AACF;AAEO,MAAMI,IAAU,IAAIP,EAAA;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type ModalPosition = 'top' | 'middle' | 'bottom';
|
|
3
|
+
export type ModalAlign = 'start' | 'end';
|
|
4
|
+
export type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
5
|
+
export type ResponsivePosition = Partial<Record<Breakpoint, ModalPosition>>;
|
|
6
|
+
export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'title'> {
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
title?: React.ReactNode;
|
|
9
|
+
footer?: React.ReactNode;
|
|
10
|
+
open?: boolean;
|
|
11
|
+
onOk?: () => void | Promise<void>;
|
|
12
|
+
onCancel?: () => void;
|
|
13
|
+
okText?: string;
|
|
14
|
+
cancelText?: string;
|
|
15
|
+
maskClosable?: boolean;
|
|
16
|
+
closable?: boolean;
|
|
17
|
+
/** Modal position - can be a single value or responsive object */
|
|
18
|
+
position?: ModalPosition | ResponsivePosition;
|
|
19
|
+
align?: ModalAlign;
|
|
20
|
+
/** Width of the modal box */
|
|
21
|
+
width?: number | string;
|
|
22
|
+
/** Center the modal vertically */
|
|
23
|
+
centered?: boolean;
|
|
24
|
+
/** Callback when modal is closed */
|
|
25
|
+
onClose?: () => void;
|
|
26
|
+
/** Where to place initial focus: 'ok', 'cancel', or 'close' button */
|
|
27
|
+
initialFocus?: 'ok' | 'cancel' | 'close';
|
|
28
|
+
/** Use alertdialog role for urgent messages */
|
|
29
|
+
alertDialog?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ModalFuncProps {
|
|
32
|
+
title?: React.ReactNode;
|
|
33
|
+
content?: React.ReactNode;
|
|
34
|
+
onOk?: () => void | Promise<void>;
|
|
35
|
+
onCancel?: () => void;
|
|
36
|
+
okText?: string;
|
|
37
|
+
cancelText?: string;
|
|
38
|
+
type?: 'info' | 'success' | 'warning' | 'error';
|
|
39
|
+
}
|
|
40
|
+
export declare function Modal({ children, title, footer, open, onOk, onCancel, okText, cancelText, maskClosable, closable, position, align, width, centered, onClose, initialFocus, alertDialog, className, ...rest }: ModalProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
export declare namespace Modal {
|
|
42
|
+
var confirm: (config: ModalFuncProps) => {
|
|
43
|
+
destroy: () => void;
|
|
44
|
+
};
|
|
45
|
+
var info: (config: ModalFuncProps) => {
|
|
46
|
+
destroy: () => void;
|
|
47
|
+
};
|
|
48
|
+
var success: (config: ModalFuncProps) => {
|
|
49
|
+
destroy: () => void;
|
|
50
|
+
};
|
|
51
|
+
var warning: (config: ModalFuncProps) => {
|
|
52
|
+
destroy: () => void;
|
|
53
|
+
};
|
|
54
|
+
var error: (config: ModalFuncProps) => {
|
|
55
|
+
destroy: () => void;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { jsxs as m, jsx as t, Fragment as oe } from "react/jsx-runtime";
|
|
2
|
+
import $, { useRef as w, useId as z, useEffect as P } from "react";
|
|
3
|
+
import { createRoot as ne } from "react-dom/client";
|
|
4
|
+
const re = "d-modal", D = "d-modal-top", K = "d-modal-middle", F = "d-modal-bottom", se = "d-modal-start", le = "d-modal-end", ae = "d-modal-box", H = "d-modal-action", de = "d-modal-backdrop", b = "d-btn", T = "d-btn-primary", q = "d-btn-error", ce = "d-alert", ie = "d-alert-info", me = "d-alert-success", ue = "d-alert-warning", he = "d-alert-error";
|
|
5
|
+
function u({
|
|
6
|
+
children: e,
|
|
7
|
+
title: n,
|
|
8
|
+
footer: s,
|
|
9
|
+
open: l = !1,
|
|
10
|
+
onOk: a,
|
|
11
|
+
onCancel: d,
|
|
12
|
+
okText: C = "OK",
|
|
13
|
+
cancelText: c = "Cancel",
|
|
14
|
+
maskClosable: h = !0,
|
|
15
|
+
closable: p = !0,
|
|
16
|
+
position: r,
|
|
17
|
+
align: f,
|
|
18
|
+
width: i,
|
|
19
|
+
centered: g,
|
|
20
|
+
onClose: N,
|
|
21
|
+
initialFocus: v,
|
|
22
|
+
alertDialog: G = !1,
|
|
23
|
+
className: J = "",
|
|
24
|
+
...Q
|
|
25
|
+
}) {
|
|
26
|
+
const M = w(null), A = w(null), E = w(null), R = w(null), j = w(null), [B, L] = $.useState(!1), O = z(), S = z(), x = N || d;
|
|
27
|
+
P(() => {
|
|
28
|
+
const o = M.current;
|
|
29
|
+
o && (l ? o.open || (j.current = document.activeElement, o.showModal(), v && setTimeout(() => {
|
|
30
|
+
switch (v) {
|
|
31
|
+
case "ok":
|
|
32
|
+
A.current?.focus();
|
|
33
|
+
break;
|
|
34
|
+
case "cancel":
|
|
35
|
+
E.current?.focus();
|
|
36
|
+
break;
|
|
37
|
+
case "close":
|
|
38
|
+
R.current?.focus();
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}, 0)) : o.open && (o.close(), j.current?.focus()));
|
|
42
|
+
}, [l, v]), P(() => {
|
|
43
|
+
const o = M.current;
|
|
44
|
+
if (!o) return;
|
|
45
|
+
const y = () => {
|
|
46
|
+
x?.();
|
|
47
|
+
};
|
|
48
|
+
return o.addEventListener("close", y), () => {
|
|
49
|
+
o.removeEventListener("close", y);
|
|
50
|
+
};
|
|
51
|
+
}, [x]);
|
|
52
|
+
const W = {
|
|
53
|
+
top: D,
|
|
54
|
+
middle: K,
|
|
55
|
+
bottom: F
|
|
56
|
+
}, U = {
|
|
57
|
+
base: {
|
|
58
|
+
top: D,
|
|
59
|
+
middle: K,
|
|
60
|
+
bottom: F
|
|
61
|
+
},
|
|
62
|
+
sm: {
|
|
63
|
+
top: "sm:modal-top",
|
|
64
|
+
middle: "sm:modal-middle",
|
|
65
|
+
bottom: "sm:modal-bottom"
|
|
66
|
+
},
|
|
67
|
+
md: {
|
|
68
|
+
top: "md:modal-top",
|
|
69
|
+
middle: "md:modal-middle",
|
|
70
|
+
bottom: "md:modal-bottom"
|
|
71
|
+
},
|
|
72
|
+
lg: {
|
|
73
|
+
top: "lg:modal-top",
|
|
74
|
+
middle: "lg:modal-middle",
|
|
75
|
+
bottom: "lg:modal-bottom"
|
|
76
|
+
},
|
|
77
|
+
xl: {
|
|
78
|
+
top: "xl:modal-top",
|
|
79
|
+
middle: "xl:modal-middle",
|
|
80
|
+
bottom: "xl:modal-bottom"
|
|
81
|
+
},
|
|
82
|
+
"2xl": {
|
|
83
|
+
top: "2xl:modal-top",
|
|
84
|
+
middle: "2xl:modal-middle",
|
|
85
|
+
bottom: "2xl:modal-bottom"
|
|
86
|
+
}
|
|
87
|
+
}, V = {
|
|
88
|
+
start: se,
|
|
89
|
+
end: le
|
|
90
|
+
}, X = [
|
|
91
|
+
re,
|
|
92
|
+
...(() => {
|
|
93
|
+
if (g)
|
|
94
|
+
return [W.middle];
|
|
95
|
+
if (!r)
|
|
96
|
+
return [];
|
|
97
|
+
if (typeof r == "string")
|
|
98
|
+
return [W[r]];
|
|
99
|
+
const o = [];
|
|
100
|
+
for (const [y, I] of Object.entries(r))
|
|
101
|
+
I && o.push(U[y][I]);
|
|
102
|
+
return o;
|
|
103
|
+
})(),
|
|
104
|
+
f && V[f],
|
|
105
|
+
J
|
|
106
|
+
].filter(Boolean).join(" "), Y = async () => {
|
|
107
|
+
if (a) {
|
|
108
|
+
L(!0);
|
|
109
|
+
try {
|
|
110
|
+
await a(), L(!1);
|
|
111
|
+
} catch (o) {
|
|
112
|
+
throw L(!1), o;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}, Z = () => {
|
|
116
|
+
h && x && x();
|
|
117
|
+
}, _ = i ? { width: typeof i == "number" ? `${i}px` : i, maxWidth: "90vw" } : {}, ee = !s && (a || d), te = s != null;
|
|
118
|
+
return /* @__PURE__ */ m(
|
|
119
|
+
"dialog",
|
|
120
|
+
{
|
|
121
|
+
ref: M,
|
|
122
|
+
role: G ? "alertdialog" : "dialog",
|
|
123
|
+
"aria-modal": "true",
|
|
124
|
+
className: X,
|
|
125
|
+
"data-state": l ? "open" : "closed",
|
|
126
|
+
"aria-labelledby": n ? O : void 0,
|
|
127
|
+
"aria-describedby": S,
|
|
128
|
+
...Q,
|
|
129
|
+
children: [
|
|
130
|
+
/* @__PURE__ */ m("div", { className: ae, style: _, children: [
|
|
131
|
+
n && /* @__PURE__ */ t("h3", { id: O, className: "text-lg font-bold mb-4", children: n }),
|
|
132
|
+
/* @__PURE__ */ t("div", { id: S, className: "py-4", children: e }),
|
|
133
|
+
ee && /* @__PURE__ */ m("div", { className: H, children: [
|
|
134
|
+
d && /* @__PURE__ */ t("button", { ref: E, className: b, onClick: d, children: c }),
|
|
135
|
+
a && /* @__PURE__ */ t(
|
|
136
|
+
"button",
|
|
137
|
+
{
|
|
138
|
+
ref: A,
|
|
139
|
+
className: `${b} ${T} ${B ? "loading" : ""}`,
|
|
140
|
+
onClick: Y,
|
|
141
|
+
disabled: B,
|
|
142
|
+
"aria-busy": B || void 0,
|
|
143
|
+
children: C
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
] }),
|
|
147
|
+
te && /* @__PURE__ */ t("div", { className: H, children: s })
|
|
148
|
+
] }),
|
|
149
|
+
p && h && /* @__PURE__ */ t("form", { method: "dialog", className: de, children: /* @__PURE__ */ t("button", { ref: R, onClick: Z, children: /* @__PURE__ */ t("span", { className: "sr-only", children: "Close modal" }) }) })
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
function k(e) {
|
|
155
|
+
const n = document.createElement("div");
|
|
156
|
+
document.body.appendChild(n);
|
|
157
|
+
const s = ne(n), l = () => {
|
|
158
|
+
s.unmount(), n.parentNode && n.parentNode.removeChild(n);
|
|
159
|
+
}, a = () => {
|
|
160
|
+
const [d, C] = $.useState(!0), [c, h] = $.useState(!1), p = () => {
|
|
161
|
+
C(!1), setTimeout(l, 300);
|
|
162
|
+
}, r = async () => {
|
|
163
|
+
if (e.onOk) {
|
|
164
|
+
h(!0);
|
|
165
|
+
try {
|
|
166
|
+
await e.onOk(), p();
|
|
167
|
+
} catch {
|
|
168
|
+
h(!1);
|
|
169
|
+
}
|
|
170
|
+
} else
|
|
171
|
+
p();
|
|
172
|
+
}, f = () => {
|
|
173
|
+
e.onCancel?.(), p();
|
|
174
|
+
}, i = () => {
|
|
175
|
+
switch (e.type) {
|
|
176
|
+
case "success":
|
|
177
|
+
return me;
|
|
178
|
+
case "warning":
|
|
179
|
+
return ue;
|
|
180
|
+
case "error":
|
|
181
|
+
return he;
|
|
182
|
+
case "info":
|
|
183
|
+
default:
|
|
184
|
+
return ie;
|
|
185
|
+
}
|
|
186
|
+
}, g = () => {
|
|
187
|
+
switch (e.type) {
|
|
188
|
+
case "success":
|
|
189
|
+
return /* @__PURE__ */ t(
|
|
190
|
+
"svg",
|
|
191
|
+
{
|
|
192
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
193
|
+
className: "stroke-current shrink-0 h-6 w-6",
|
|
194
|
+
fill: "none",
|
|
195
|
+
viewBox: "0 0 24 24",
|
|
196
|
+
"aria-hidden": "true",
|
|
197
|
+
children: /* @__PURE__ */ t(
|
|
198
|
+
"path",
|
|
199
|
+
{
|
|
200
|
+
strokeLinecap: "round",
|
|
201
|
+
strokeLinejoin: "round",
|
|
202
|
+
strokeWidth: "2",
|
|
203
|
+
d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
}
|
|
207
|
+
);
|
|
208
|
+
case "warning":
|
|
209
|
+
return /* @__PURE__ */ t(
|
|
210
|
+
"svg",
|
|
211
|
+
{
|
|
212
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
213
|
+
className: "stroke-current shrink-0 h-6 w-6",
|
|
214
|
+
fill: "none",
|
|
215
|
+
viewBox: "0 0 24 24",
|
|
216
|
+
"aria-hidden": "true",
|
|
217
|
+
children: /* @__PURE__ */ t(
|
|
218
|
+
"path",
|
|
219
|
+
{
|
|
220
|
+
strokeLinecap: "round",
|
|
221
|
+
strokeLinejoin: "round",
|
|
222
|
+
strokeWidth: "2",
|
|
223
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
224
|
+
}
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
case "error":
|
|
229
|
+
return /* @__PURE__ */ t(
|
|
230
|
+
"svg",
|
|
231
|
+
{
|
|
232
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
233
|
+
className: "stroke-current shrink-0 h-6 w-6",
|
|
234
|
+
fill: "none",
|
|
235
|
+
viewBox: "0 0 24 24",
|
|
236
|
+
"aria-hidden": "true",
|
|
237
|
+
children: /* @__PURE__ */ t(
|
|
238
|
+
"path",
|
|
239
|
+
{
|
|
240
|
+
strokeLinecap: "round",
|
|
241
|
+
strokeLinejoin: "round",
|
|
242
|
+
strokeWidth: "2",
|
|
243
|
+
d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
244
|
+
}
|
|
245
|
+
)
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
case "info":
|
|
249
|
+
default:
|
|
250
|
+
return /* @__PURE__ */ t(
|
|
251
|
+
"svg",
|
|
252
|
+
{
|
|
253
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
254
|
+
fill: "none",
|
|
255
|
+
viewBox: "0 0 24 24",
|
|
256
|
+
className: "stroke-current shrink-0 w-6 h-6",
|
|
257
|
+
"aria-hidden": "true",
|
|
258
|
+
children: /* @__PURE__ */ t(
|
|
259
|
+
"path",
|
|
260
|
+
{
|
|
261
|
+
strokeLinecap: "round",
|
|
262
|
+
strokeLinejoin: "round",
|
|
263
|
+
strokeWidth: "2",
|
|
264
|
+
d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
265
|
+
}
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
}, N = e.type === "warning" || e.type === "error";
|
|
271
|
+
return /* @__PURE__ */ m(
|
|
272
|
+
u,
|
|
273
|
+
{
|
|
274
|
+
open: d,
|
|
275
|
+
onOk: e.showCancel ? void 0 : r,
|
|
276
|
+
onCancel: f,
|
|
277
|
+
alertDialog: N,
|
|
278
|
+
title: e.type ? /* @__PURE__ */ m("div", { className: `${ce} ${i()}`, children: [
|
|
279
|
+
g(),
|
|
280
|
+
/* @__PURE__ */ t("div", { children: e.title && /* @__PURE__ */ t("h3", { className: "font-bold", children: e.title }) })
|
|
281
|
+
] }) : e.title,
|
|
282
|
+
okText: e.okText,
|
|
283
|
+
cancelText: e.cancelText,
|
|
284
|
+
footer: e.showCancel ? /* @__PURE__ */ m(oe, { children: [
|
|
285
|
+
/* @__PURE__ */ t("button", { className: b, onClick: f, children: e.cancelText || "Cancel" }),
|
|
286
|
+
/* @__PURE__ */ t(
|
|
287
|
+
"button",
|
|
288
|
+
{
|
|
289
|
+
className: `${b} ${e.type === "error" ? q : T} ${c ? "loading" : ""}`,
|
|
290
|
+
onClick: r,
|
|
291
|
+
disabled: c,
|
|
292
|
+
children: e.okText || "OK"
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
] }) : /* @__PURE__ */ t(
|
|
296
|
+
"button",
|
|
297
|
+
{
|
|
298
|
+
className: `${b} ${e.type === "error" ? q : T} ${c ? "loading" : ""}`,
|
|
299
|
+
onClick: r,
|
|
300
|
+
disabled: c,
|
|
301
|
+
children: e.okText || "OK"
|
|
302
|
+
}
|
|
303
|
+
),
|
|
304
|
+
children: [
|
|
305
|
+
e.type && e.content && /* @__PURE__ */ t("div", { className: "text-sm", children: e.content }),
|
|
306
|
+
!e.type && e.content
|
|
307
|
+
]
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
};
|
|
311
|
+
return s.render(/* @__PURE__ */ t(a, {})), {
|
|
312
|
+
destroy: l
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function pe(e) {
|
|
316
|
+
return k({ ...e, showCancel: !0 });
|
|
317
|
+
}
|
|
318
|
+
function fe(e) {
|
|
319
|
+
return k({ ...e, type: "info", showCancel: !1 });
|
|
320
|
+
}
|
|
321
|
+
function we(e) {
|
|
322
|
+
return k({ ...e, type: "success", showCancel: !1 });
|
|
323
|
+
}
|
|
324
|
+
function be(e) {
|
|
325
|
+
return k({ ...e, type: "warning", showCancel: !1 });
|
|
326
|
+
}
|
|
327
|
+
function ke(e) {
|
|
328
|
+
return k({ ...e, type: "error", showCancel: !1 });
|
|
329
|
+
}
|
|
330
|
+
u.confirm = pe;
|
|
331
|
+
u.info = fe;
|
|
332
|
+
u.success = we;
|
|
333
|
+
u.warning = be;
|
|
334
|
+
u.error = ke;
|
|
335
|
+
export {
|
|
336
|
+
u as Modal
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../src/components/Modal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useId } from 'react'\nimport { createRoot } from 'react-dom/client'\n\n// DaisyUI classes\nconst dModal = 'd-modal'\nconst dModalTop = 'd-modal-top'\nconst dModalMiddle = 'd-modal-middle'\nconst dModalBottom = 'd-modal-bottom'\nconst dModalStart = 'd-modal-start'\nconst dModalEnd = 'd-modal-end'\nconst dModalBox = 'd-modal-box'\nconst dModalAction = 'd-modal-action'\nconst dModalBackdrop = 'd-modal-backdrop'\nconst dBtn = 'd-btn'\nconst dBtnPrimary = 'd-btn-primary'\nconst dBtnError = 'd-btn-error'\nconst dAlert = 'd-alert'\nconst dAlertInfo = 'd-alert-info'\nconst dAlertSuccess = 'd-alert-success'\nconst dAlertWarning = 'd-alert-warning'\nconst dAlertError = 'd-alert-error'\n\nexport type ModalPosition = 'top' | 'middle' | 'bottom'\nexport type ModalAlign = 'start' | 'end'\nexport type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport type ResponsivePosition = Partial<Record<Breakpoint, ModalPosition>>\n\nexport interface ModalProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'title'> {\n children: React.ReactNode\n title?: React.ReactNode\n footer?: React.ReactNode\n open?: boolean\n onOk?: () => void | Promise<void>\n onCancel?: () => void\n okText?: string\n cancelText?: string\n maskClosable?: boolean\n closable?: boolean\n /** Modal position - can be a single value or responsive object */\n position?: ModalPosition | ResponsivePosition\n align?: ModalAlign\n /** Width of the modal box */\n width?: number | string\n /** Center the modal vertically */\n centered?: boolean\n /** Callback when modal is closed */\n onClose?: () => void\n /** Where to place initial focus: 'ok', 'cancel', or 'close' button */\n initialFocus?: 'ok' | 'cancel' | 'close'\n /** Use alertdialog role for urgent messages */\n alertDialog?: boolean\n}\n\nexport interface ModalFuncProps {\n title?: React.ReactNode\n content?: React.ReactNode\n onOk?: () => void | Promise<void>\n onCancel?: () => void\n okText?: string\n cancelText?: string\n type?: 'info' | 'success' | 'warning' | 'error'\n}\n\nexport function Modal({\n children,\n title,\n footer,\n open = false,\n onOk,\n onCancel,\n okText = 'OK',\n cancelText = 'Cancel',\n maskClosable = true,\n closable = true,\n position,\n align,\n width,\n centered,\n onClose,\n initialFocus,\n alertDialog = false,\n className = '',\n ...rest\n}: ModalProps) {\n const dialogRef = useRef<HTMLDialogElement>(null)\n const okButtonRef = useRef<HTMLButtonElement>(null)\n const cancelButtonRef = useRef<HTMLButtonElement>(null)\n const closeButtonRef = useRef<HTMLButtonElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n const [loading, setLoading] = React.useState(false)\n const titleId = useId()\n const contentId = useId()\n\n // Handle close - use onClose if provided, otherwise onCancel\n const closeHandler = onClose || onCancel\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n if (open) {\n if (!dialog.open) {\n // Save currently focused element for restoration\n previousActiveElement.current = document.activeElement as HTMLElement\n dialog.showModal()\n\n // Handle custom initial focus placement\n if (initialFocus) {\n setTimeout(() => {\n switch (initialFocus) {\n case 'ok':\n okButtonRef.current?.focus()\n break\n case 'cancel':\n cancelButtonRef.current?.focus()\n break\n case 'close':\n closeButtonRef.current?.focus()\n break\n }\n }, 0)\n }\n }\n } else {\n if (dialog.open) {\n dialog.close()\n // Restore focus to previously focused element\n previousActiveElement.current?.focus()\n }\n }\n }, [open, initialFocus])\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n const onDialogClose = () => {\n closeHandler?.()\n }\n\n dialog.addEventListener('close', onDialogClose)\n return () => {\n dialog.removeEventListener('close', onDialogClose)\n }\n }, [closeHandler])\n\n // Static class mappings for positions (no interpolation per qa.md)\n const positionClasses: Record<ModalPosition, string> = {\n top: dModalTop,\n middle: dModalMiddle,\n bottom: dModalBottom,\n }\n\n // Responsive position class mappings for each breakpoint\n const responsivePositionClasses: Record<Breakpoint, Record<ModalPosition, string>> = {\n base: {\n top: dModalTop,\n middle: dModalMiddle,\n bottom: dModalBottom,\n },\n sm: {\n top: 'sm:modal-top',\n middle: 'sm:modal-middle',\n bottom: 'sm:modal-bottom',\n },\n md: {\n top: 'md:modal-top',\n middle: 'md:modal-middle',\n bottom: 'md:modal-bottom',\n },\n lg: {\n top: 'lg:modal-top',\n middle: 'lg:modal-middle',\n bottom: 'lg:modal-bottom',\n },\n xl: {\n top: 'xl:modal-top',\n middle: 'xl:modal-middle',\n bottom: 'xl:modal-bottom',\n },\n '2xl': {\n top: '2xl:modal-top',\n middle: '2xl:modal-middle',\n bottom: '2xl:modal-bottom',\n },\n }\n\n const alignClasses: Record<ModalAlign, string> = {\n start: dModalStart,\n end: dModalEnd,\n }\n\n // Build position classes - handle both simple and responsive values\n const getPositionClasses = (): string[] => {\n // centered is an alias for position=\"middle\"\n if (centered) {\n return [positionClasses.middle]\n }\n\n if (!position) {\n return []\n }\n\n // Simple string position\n if (typeof position === 'string') {\n return [positionClasses[position]]\n }\n\n // Responsive object position\n const classes: string[] = []\n for (const [breakpoint, pos] of Object.entries(position) as [Breakpoint, ModalPosition][]) {\n if (pos) {\n classes.push(responsivePositionClasses[breakpoint][pos])\n }\n }\n return classes\n }\n\n const classes = [\n dModal,\n ...getPositionClasses(),\n align && alignClasses[align],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleOk = async () => {\n if (onOk) {\n setLoading(true)\n try {\n await onOk()\n setLoading(false)\n } catch (error) {\n setLoading(false)\n throw error\n }\n }\n }\n\n const handleBackdropClick = () => {\n if (maskClosable && closeHandler) {\n closeHandler()\n }\n }\n\n // Calculate modal-box style for custom width\n const modalBoxStyle: React.CSSProperties = width\n ? { width: typeof width === 'number' ? `${width}px` : width, maxWidth: '90vw' }\n : {}\n\n // Render default footer if no custom footer provided and either onOk or onCancel exists\n const shouldRenderDefaultFooter = !footer && (onOk || onCancel)\n const shouldRenderCustomFooter = footer !== null && footer !== undefined\n\n return (\n <dialog\n ref={dialogRef}\n role={alertDialog ? 'alertdialog' : 'dialog'}\n aria-modal=\"true\"\n className={classes}\n data-state={open ? 'open' : 'closed'}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={contentId}\n {...rest}\n >\n <div className={dModalBox} style={modalBoxStyle}>\n {title && (\n <h3 id={titleId} className=\"text-lg font-bold mb-4\">\n {title}\n </h3>\n )}\n <div id={contentId} className=\"py-4\">\n {children}\n </div>\n {shouldRenderDefaultFooter && (\n <div className={dModalAction}>\n {onCancel && (\n <button ref={cancelButtonRef} className={dBtn} onClick={onCancel}>\n {cancelText}\n </button>\n )}\n {onOk && (\n <button\n ref={okButtonRef}\n className={`${dBtn} ${dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n aria-busy={loading || undefined}\n >\n {okText}\n </button>\n )}\n </div>\n )}\n {shouldRenderCustomFooter && <div className={dModalAction}>{footer}</div>}\n </div>\n {closable && maskClosable && (\n <form method=\"dialog\" className={dModalBackdrop}>\n <button ref={closeButtonRef} onClick={handleBackdropClick}>\n <span className=\"sr-only\">Close modal</span>\n </button>\n </form>\n )}\n </dialog>\n )\n}\n\nfunction createModal(config: ModalFuncProps & { showCancel?: boolean }) {\n const div = document.createElement('div')\n document.body.appendChild(div)\n const root = createRoot(div)\n\n const destroy = () => {\n root.unmount()\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n\n const ModalContent = () => {\n const [open, setOpen] = React.useState(true)\n const [loading, setLoading] = React.useState(false)\n\n const handleClose = () => {\n setOpen(false)\n setTimeout(destroy, 300) // Wait for animation\n }\n\n const handleOk = async () => {\n if (config.onOk) {\n setLoading(true)\n try {\n await config.onOk()\n handleClose()\n } catch (error) {\n setLoading(false)\n }\n } else {\n handleClose()\n }\n }\n\n const handleCancel = () => {\n config.onCancel?.()\n handleClose()\n }\n\n const getAlertClass = () => {\n switch (config.type) {\n case 'success':\n return dAlertSuccess\n case 'warning':\n return dAlertWarning\n case 'error':\n return dAlertError\n case 'info':\n default:\n return dAlertInfo\n }\n }\n\n const getIcon = () => {\n switch (config.type) {\n case 'success':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n )\n case 'warning':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n )\n case 'error':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n )\n case 'info':\n default:\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n className=\"stroke-current shrink-0 w-6 h-6\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n ></path>\n </svg>\n )\n }\n }\n\n // Use alertdialog role for warning/error types\n const isAlert = config.type === 'warning' || config.type === 'error'\n\n return (\n <Modal\n open={open}\n onOk={config.showCancel ? undefined : handleOk}\n onCancel={handleCancel}\n alertDialog={isAlert}\n title={\n config.type ? (\n <div className={`${dAlert} ${getAlertClass()}`}>\n {getIcon()}\n <div>\n {config.title && <h3 className=\"font-bold\">{config.title}</h3>}\n </div>\n </div>\n ) : (\n config.title\n )\n }\n okText={config.okText}\n cancelText={config.cancelText}\n footer={\n config.showCancel ? (\n <>\n <button className={dBtn} onClick={handleCancel}>\n {config.cancelText || 'Cancel'}\n </button>\n <button\n className={`${dBtn} ${config.type === 'error' ? dBtnError : dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n >\n {config.okText || 'OK'}\n </button>\n </>\n ) : (\n <button\n className={`${dBtn} ${config.type === 'error' ? dBtnError : dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n >\n {config.okText || 'OK'}\n </button>\n )\n }\n >\n {config.type && config.content && <div className=\"text-sm\">{config.content}</div>}\n {!config.type && config.content}\n </Modal>\n )\n }\n\n root.render(<ModalContent />)\n\n return {\n destroy,\n }\n}\n\nfunction confirm(config: ModalFuncProps) {\n return createModal({ ...config, showCancel: true })\n}\n\nfunction info(config: ModalFuncProps) {\n return createModal({ ...config, type: 'info', showCancel: false })\n}\n\nfunction success(config: ModalFuncProps) {\n return createModal({ ...config, type: 'success', showCancel: false })\n}\n\nfunction warning(config: ModalFuncProps) {\n return createModal({ ...config, type: 'warning', showCancel: false })\n}\n\nfunction error(config: ModalFuncProps) {\n return createModal({ ...config, type: 'error', showCancel: false })\n}\n\nModal.confirm = confirm\nModal.info = info\nModal.success = success\nModal.warning = warning\nModal.error = error\n"],"names":["dModal","dModalTop","dModalMiddle","dModalBottom","dModalStart","dModalEnd","dModalBox","dModalAction","dModalBackdrop","dBtn","dBtnPrimary","dBtnError","dAlert","dAlertInfo","dAlertSuccess","dAlertWarning","dAlertError","Modal","children","title","footer","open","onOk","onCancel","okText","cancelText","maskClosable","closable","position","align","width","centered","onClose","initialFocus","alertDialog","className","rest","dialogRef","useRef","okButtonRef","cancelButtonRef","closeButtonRef","previousActiveElement","loading","setLoading","React","titleId","useId","contentId","closeHandler","useEffect","dialog","onDialogClose","positionClasses","responsivePositionClasses","alignClasses","classes","breakpoint","pos","handleOk","error","handleBackdropClick","modalBoxStyle","shouldRenderDefaultFooter","shouldRenderCustomFooter","jsxs","jsx","createModal","config","div","root","createRoot","destroy","ModalContent","setOpen","handleClose","handleCancel","getAlertClass","getIcon","isAlert","Fragment","confirm","info","success","warning"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type CalendarEvent = {
|
|
3
|
+
date: Date;
|
|
4
|
+
title: string;
|
|
5
|
+
color: string;
|
|
6
|
+
strikethrough?: boolean;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
};
|
|
9
|
+
export type CalendarLocale = {
|
|
10
|
+
locale: string;
|
|
11
|
+
daysShort: string[];
|
|
12
|
+
monthsLong: string[];
|
|
13
|
+
moreText: string;
|
|
14
|
+
formatTime?: (date: Date) => string;
|
|
15
|
+
};
|
|
16
|
+
export interface MonthCalendarProps<T extends CalendarEvent = CalendarEvent> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
17
|
+
date?: Date;
|
|
18
|
+
events?: T[];
|
|
19
|
+
onEventClick?: (event: T) => void;
|
|
20
|
+
onDayClick?: (date: Date) => void;
|
|
21
|
+
locale?: CalendarLocale;
|
|
22
|
+
allowPastInteraction?: boolean;
|
|
23
|
+
maxEventsPerDay?: number;
|
|
24
|
+
onMoreEventsClick?: (date: Date, events: T[]) => void;
|
|
25
|
+
header?: boolean;
|
|
26
|
+
daySelector?: boolean;
|
|
27
|
+
ellipsis?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare const MonthCalendar: <T extends CalendarEvent = CalendarEvent>(props: MonthCalendarProps<T> & {
|
|
30
|
+
ref?: React.ForwardedRef<HTMLDivElement>;
|
|
31
|
+
}) => React.ReactElement;
|