x-ui-design 0.7.87 → 0.7.89

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.
@@ -19,5 +19,7 @@ declare const Dropdown: React.ForwardRefExoticComponent<import("../..").DefaultP
19
19
  autoFocus?: boolean;
20
20
  autoAdjustOverflow?: boolean;
21
21
  popupRender?: (node: React.ReactNode) => React.ReactNode;
22
+ overlay?: React.ReactElement | (() => React.ReactElement);
23
+ onVisibleChange?: ((open: boolean) => void) | undefined;
22
24
  } & React.RefAttributes<HTMLDivElement>>;
23
25
  export default Dropdown;
@@ -44,6 +44,8 @@ declare const Dropdown: import("react").ComponentType<import("@/types").DefaultP
44
44
  autoFocus?: boolean;
45
45
  autoAdjustOverflow?: boolean;
46
46
  popupRender?: (node: import("react").ReactNode) => import("react").ReactNode;
47
+ overlay?: import("react").ReactElement | (() => import("react").ReactElement);
48
+ onVisibleChange?: ((open: boolean) => void) | undefined;
47
49
  } & import("react").RefAttributes<HTMLDivElement>>;
48
50
  export { Button, Checkbox, Empty, DatePicker, RangePicker, TimePicker, Form, FormItem, Input, Textarea, Radio, RadioButton, RadioGroup, Select, Option, Tag, Skeleton, SkeletonAvatar, SkeletonButton, SkeletonImage, SkeletonInput, Upload, Switch, Menu, MenuItem, MenuSubMenu, Dropdown };
49
51
  export { ClearIcon, ArrowIcon, LoadingIcon, CheckIcon, SearchIcon, CalendarIcon, SuccessIcon, ErrorIcon, DateDistanceIcon, TimeIcon, StampleIcon, TrashIcon, SpinerIcon, } from '@/components/Icons';
@@ -1,13 +1,14 @@
1
- import { CSSProperties, ReactNode } from "react";
1
+ import { CSSProperties, MouseEvent, ReactElement, ReactNode, RefObject } from "react";
2
2
  import { DefaultProps, Placement } from ".";
3
3
  export type TriggerType = 'click' | 'hover' | 'contextMenu' | Array<TriggerType>;
4
4
  export interface DropdownItemType {
5
5
  key: string;
6
6
  label?: ReactNode;
7
7
  disabled?: boolean;
8
- onClick?: (e: React.MouseEvent) => void;
8
+ onClick?: (e: MouseEvent) => void;
9
9
  danger?: boolean;
10
10
  }
11
+ declare type OverlayFunc = () => ReactElement;
11
12
  export type DropdownProps = DefaultProps & {
12
13
  children: ReactNode;
13
14
  menu?: {
@@ -27,9 +28,12 @@ export type DropdownProps = DefaultProps & {
27
28
  autoFocus?: boolean;
28
29
  autoAdjustOverflow?: boolean;
29
30
  popupRender?: (node: ReactNode) => ReactNode;
31
+ overlay?: ReactElement | OverlayFunc;
32
+ onVisibleChange?: ((open: boolean) => void) | undefined;
30
33
  };
31
34
  export type DropdownMenuInnerProps = DefaultProps & {
32
35
  items: DropdownItemType[];
33
- menuRef: React.RefObject<HTMLUListElement | null>;
36
+ menuRef: RefObject<HTMLUListElement | null>;
34
37
  onClose: () => void;
35
38
  };
39
+ export {};
package/dist/index.d.ts CHANGED
@@ -154,6 +154,8 @@ declare const Dropdown: react.ComponentType<__types.DefaultProps & {
154
154
  autoFocus?: boolean;
155
155
  autoAdjustOverflow?: boolean;
156
156
  popupRender?: (node: react.ReactNode) => react.ReactNode;
157
+ overlay?: react.ReactElement | (() => react.ReactElement);
158
+ onVisibleChange?: ((open: boolean) => void) | undefined;
157
159
  } & react.RefAttributes<HTMLDivElement>>;
158
160
 
159
161
  export { Button, Checkbox, DatePicker, Dropdown, Empty, Form, FormItem, Input, Menu, MenuItem, MenuSubMenu, Option, Radio, RadioButton, RadioGroup, RangePicker, Select, Skeleton, SkeletonAvatar, SkeletonButton, SkeletonImage, SkeletonInput, Switch, Tag, Textarea, TimePicker, Upload };
package/dist/index.esm.js CHANGED
@@ -4722,7 +4722,7 @@ var Menu$1 = /*#__PURE__*/Object.freeze({
4722
4722
  default: Menu
4723
4723
  });
4724
4724
 
4725
- var css_248z = ".xUi-dropdown-overlay{background:var(--xui-background-color);border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.08);min-width:160px;padding:4px 0;position:absolute}.xUi-dropdown-overlay .xUi-dropdown-menu{margin:0;padding:0 4px;position:relative;&:before{content:\"\";height:10px;position:absolute;top:-10px;width:100%;z-index:1}}.xUi-dropdown-overlay .xUi-dropdown-item{border-radius:8px;cursor:pointer;font-size:14px;list-style:none;padding:8px 12px;user-select:none}.xUi-dropdown-overlay .xUi-dropdown-item:focus,.xUi-dropdown-overlay .xUi-dropdown-item:hover{background:var(--xui-color-hover);outline:none}.xUi-dropdown-overlay .xUi-dropdown-item.disabled{cursor:not-allowed;opacity:.5}.xUi-dropdown-overlay .xUi-dropdown-item.danger{color:var(--xui-error-color-light);&:hover{background-color:var(--xui-error-color-light);color:var(--xui-background-color)}}.xUi-dropdown-arrow{background:var(--xui-background-color);border-left:1px solid #e5e7eb;border-top:1px solid #e5e7eb;height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-dropdown-arrow.bottom{border-bottom:1px solid #e5e7eb;border-left:unset;border-right:1px solid #e5e7eb;border-top:unset;bottom:-6px;top:unset}.xUi-dropdown-placement-bottom{margin-top:8px}.xUi-dropdown-placement-top{margin-bottom:8px}.xUi-dropdown-placement-left{margin-right:8px}.xUi-dropdown-placement-right{margin-left:8px}";
4725
+ var css_248z = ".xUi-dropdown-overlay{background:var(--xui-background-color);border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.08);min-width:160px;padding:4px 0;position:absolute}.xUi-dropdown-overlay>div,.xUi-dropdown-overlay>select,.xUi-dropdown-overlay>ul{box-shadow:unset}.xUi-dropdown-overlay .xUi-dropdown-menu{margin:0;padding:0 4px;position:relative;&:before{content:\"\";height:10px;position:absolute;top:-15px;width:100%;z-index:1}}.xUi-dropdown-overlay .xUi-dropdown-item{border-radius:8px;cursor:pointer;font-size:14px;list-style:none;padding:8px 12px;user-select:none}.xUi-dropdown-overlay .xUi-dropdown-item:focus,.xUi-dropdown-overlay .xUi-dropdown-item:hover{background:var(--xui-color-hover);outline:none}.xUi-dropdown-overlay .xUi-dropdown-item.disabled{cursor:not-allowed;opacity:.5}.xUi-dropdown-overlay .xUi-dropdown-item.danger{color:var(--xui-error-color-light);&:hover{background-color:var(--xui-error-color-light);color:var(--xui-background-color)}}.xUi-dropdown-arrow{background:var(--xui-background-color);border-left:1px solid #e5e7eb;border-top:1px solid #e5e7eb;height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-dropdown-arrow.bottom{border-bottom:1px solid #e5e7eb;border-left:unset;border-right:1px solid #e5e7eb;border-top:unset;bottom:-6px;top:unset}.xUi-dropdown-placement-bottom{margin-top:8px}.xUi-dropdown-placement-top{margin-bottom:8px}.xUi-dropdown-placement-left{margin-right:8px}.xUi-dropdown-placement-right{margin-left:8px}";
4726
4726
  styleInject(css_248z);
4727
4727
 
4728
4728
  const Dropdown = /*#__PURE__*/forwardRef(({
@@ -4742,7 +4742,9 @@ const Dropdown = /*#__PURE__*/forwardRef(({
4742
4742
  autoFocus = false,
4743
4743
  popupRender,
4744
4744
  className = '',
4745
- prefixCls = prefixClsDropdown
4745
+ overlay,
4746
+ prefixCls = prefixClsDropdown,
4747
+ onVisibleChange
4746
4748
  }, ref) => {
4747
4749
  const [open, setOpen] = useState(controlledOpen ?? defaultOpen);
4748
4750
  const [_hover, setHover] = useState(controlledOpen ?? defaultOpen);
@@ -4764,6 +4766,7 @@ const Dropdown = /*#__PURE__*/forwardRef(({
4764
4766
  useEffect(() => {
4765
4767
  if (isControlled) {
4766
4768
  setOpen(Boolean(controlledOpen));
4769
+ onVisibleChange?.(Boolean(controlledOpen));
4767
4770
  }
4768
4771
  }, [controlledOpen]);
4769
4772
  useEffect(() => {
@@ -4782,6 +4785,7 @@ const Dropdown = /*#__PURE__*/forwardRef(({
4782
4785
  setOpen(next);
4783
4786
  }
4784
4787
  onOpenChange?.(next);
4788
+ onVisibleChange?.(next);
4785
4789
  };
4786
4790
  useEffect(() => {
4787
4791
  const handleClick = e => {
@@ -4828,7 +4832,7 @@ const Dropdown = /*#__PURE__*/forwardRef(({
4828
4832
  }
4829
4833
  }, arrow && /*#__PURE__*/React.createElement("div", {
4830
4834
  className: `${prefixCls}-arrow ${shouldShowAbove ? 'bottom' : ''}`
4831
- }), popupRender ? popupRender(menu ? /*#__PURE__*/React.createElement(MenuInner, {
4835
+ }), overlay ? typeof overlay === 'function' ? overlay() : overlay : popupRender ? popupRender(menu ? /*#__PURE__*/React.createElement(MenuInner, {
4832
4836
  prefixCls: prefixCls,
4833
4837
  items: menu.items,
4834
4838
  menuRef: menuRef,