x-ui-design 0.8.48 → 0.8.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.
@@ -1,6 +1,5 @@
1
1
  import { CSSProperties, MouseEvent, ReactElement, ReactNode, RefObject } from "react";
2
- import { DefaultProps, Placement } from ".";
3
- export type TriggerType = 'click' | 'hover' | 'contextMenu' | Array<TriggerType>;
2
+ import { DefaultProps, Placement, TriggerType } from ".";
4
3
  export interface DropdownItemType {
5
4
  key: string;
6
5
  label?: ReactNode;
@@ -25,3 +25,4 @@ export type SyntheticBaseEvent = {
25
25
  currentTarget: EventTarget;
26
26
  };
27
27
  export type Placement = 'bottomLeft' | 'bottom' | 'bottomRight' | 'topLeft' | 'top' | 'topRight' | 'left' | 'right';
28
+ export type TriggerType = 'click' | 'hover' | 'contextMenu' | Array<TriggerType>;
@@ -1,9 +1,9 @@
1
1
  import { CSSProperties, ReactNode } from "react";
2
- import { DefaultProps } from ".";
2
+ import { DefaultProps, TriggerType } from ".";
3
3
  export type PopoverProps = DefaultProps & {
4
4
  content: ReactNode;
5
5
  children: ReactNode;
6
- trigger?: "click" | "hover";
6
+ trigger?: TriggerType;
7
7
  placement?: "top" | "bottom" | "left" | "right" | "topRight" | "bottomRight" | "topLeft" | "bottomLeft";
8
8
  open?: boolean;
9
9
  overlayStyle?: CSSProperties;
package/dist/index.esm.js CHANGED
@@ -2620,7 +2620,7 @@ const usePosition = ({
2620
2620
  }
2621
2621
  const inputRect = triggerRef.current?.getBoundingClientRect();
2622
2622
  const dropdownHeight = popupRef.current?.offsetHeight || popupRef.current?.offsetHeight || 0;
2623
- const containerRect = (getPopupContainer || getScrollParent(triggerRef.current, true) || document.body).getBoundingClientRect();
2623
+ const containerRect = (triggerRef.current || getPopupContainer || getScrollParent(triggerRef.current, true) || document.body).getBoundingClientRect();
2624
2624
  const spaceAbove = inputRect.top - containerRect.top;
2625
2625
  const spaceBelow = containerRect.bottom - inputRect.bottom;
2626
2626
  const _shouldShowAbove = spaceBelow < dropdownHeight && spaceAbove > dropdownHeight;
@@ -5348,7 +5348,7 @@ var Menu$1 = /*#__PURE__*/Object.freeze({
5348
5348
  default: Menu
5349
5349
  });
5350
5350
 
5351
- var css_248z$2 = ".xUi-dropdown-overlay{background:var(--xui-menu-inline-bg);border:1px solid var(--xui-border-color);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.08);min-width:160px;padding:4px 0;position:absolute;&:before{content:\"\";height:10px;position:absolute;top:-15px;width:100%;z-index:1}}.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;color:var(--xui-text-color);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:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-dropdown-bottomRight .xUi-dropdown-arrow,.xUi-dropdown-right .xUi-dropdown-arrow,.xUi-dropdown-topRight .xUi-dropdown-arrow{left:unset;right:12px}.xUi-dropdown-arrow.bottom{border-bottom:.5px solid var(--xui-border-color);border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:unset;bottom:-6px;top:unset}.xUi-dropdown-arrow.center{left:0;margin:0 auto;right:0}";
5351
+ var css_248z$2 = ".xUi-dropdown-overlay{background:var(--xui-menu-inline-bg);border:1px solid var(--xui-border-color);border-radius:8px;box-shadow:0 2px 18px rgba(0,0,0,.08);min-width:160px;padding:4px 0;position:absolute;&:after,&:before{content:\"\";height:10px;position:absolute;top:-10px;width:100%;z-index:1}&:after{bottom:-10px;top:unset}}.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}.xUi-dropdown-overlay .xUi-dropdown-item{border-radius:8px;color:var(--xui-text-color);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:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-dropdown-bottomRight .xUi-dropdown-arrow,.xUi-dropdown-right .xUi-dropdown-arrow,.xUi-dropdown-topRight .xUi-dropdown-arrow{left:unset;right:12px}.xUi-dropdown-arrow.bottom{border-bottom:.5px solid var(--xui-border-color);border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:unset;bottom:-6px;top:unset}.xUi-dropdown-arrow.center{left:0;margin:0 auto;right:0}";
5352
5352
  styleInject(css_248z$2);
5353
5353
 
5354
5354
  const Dropdown = ({
@@ -5372,7 +5372,6 @@ const Dropdown = ({
5372
5372
  prefixCls = prefixClsDropdown
5373
5373
  }) => {
5374
5374
  const [open, setOpen] = useState(controlledOpen ?? defaultOpen);
5375
- const [_hover, setHover] = useState(controlledOpen ?? defaultOpen);
5376
5375
  const isControlled = controlledOpen !== undefined;
5377
5376
  const triggerRef = useRef(null);
5378
5377
  const popupRef = useRef(null);
@@ -5413,34 +5412,31 @@ const Dropdown = ({
5413
5412
  onVisibleChange?.(next);
5414
5413
  };
5415
5414
  useEffect(() => {
5416
- const handleClick = e => {
5417
- if (!open) {
5418
- return;
5419
- }
5420
- const target = e.target;
5421
- if (triggerRef.current && !triggerRef.current.contains(target) && !popupRef.current?.contains(target)) {
5415
+ const handleClickOutside = e => {
5416
+ if (popupRef.current && !popupRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target)) {
5422
5417
  setOpenInternal(false);
5418
+ onVisibleChange?.(false);
5423
5419
  }
5424
5420
  };
5425
- document.addEventListener('mousedown', handleClick);
5426
- return () => document.removeEventListener('mousedown', handleClick);
5427
- }, [open]);
5421
+ document.addEventListener('mousedown', handleClickOutside);
5422
+ return () => {
5423
+ document.removeEventListener('mousedown', handleClickOutside);
5424
+ };
5425
+ }, []);
5428
5426
  const triggers = Array.isArray(trigger) ? trigger : [trigger];
5429
5427
  const onTriggerClick = e => {
5430
5428
  e.preventDefault();
5431
5429
  e.stopPropagation();
5432
- if (triggers.includes('click')) {
5430
+ if (popupRef.current && !popupRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target) && triggers.includes('click')) {
5433
5431
  setOpenInternal(!open);
5434
5432
  }
5435
5433
  };
5436
5434
  const onTriggerMouseEnter = () => {
5437
- setHover(true);
5438
5435
  if (triggers.includes('hover')) {
5439
5436
  setOpenInternal(true);
5440
5437
  }
5441
5438
  };
5442
5439
  const onTriggerMouseLeave = () => {
5443
- setHover(false);
5444
5440
  if (triggers.includes('hover')) {
5445
5441
  setOpenInternal(false);
5446
5442
  }
@@ -5452,7 +5448,7 @@ const Dropdown = ({
5452
5448
  ref: popupRef,
5453
5449
  className: `${prefixCls}-overlay ${prefixCls}-${placement} ${overlayClassName}`,
5454
5450
  style: {
5455
- zIndex: _hover ? 1000 : 0,
5451
+ zIndex: 10000,
5456
5452
  ...overlayStyle,
5457
5453
  ...dropdownPosition
5458
5454
  }
@@ -5487,7 +5483,8 @@ const Dropdown = ({
5487
5483
  tabIndex: disabled ? -1 : 0,
5488
5484
  "aria-haspopup": "menu",
5489
5485
  style: {
5490
- width: 'fit-content'
5486
+ width: 'fit-content',
5487
+ height: '-webkit-fill-available'
5491
5488
  },
5492
5489
  "aria-expanded": open
5493
5490
  }, children, open && popup, !open && !destroyOnHidden && null));
@@ -5526,7 +5523,7 @@ var Dropdown$1 = /*#__PURE__*/Object.freeze({
5526
5523
  default: Dropdown
5527
5524
  });
5528
5525
 
5529
- var css_248z$1 = ".xUi-popover{&:before{content:\"\";height:10px;left:0;position:absolute;top:-10px;width:100%;z-index:10000}}.xUi-popover-wrapper-content{cursor:pointer;max-width:fit-content;width:-webkit-fill-available}.xUi-popover{background:var(--xui-background-color);border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.15);padding:8px 12px;width:max-content;z-index:1000}.xUi-popover-title{padding:4px}.xUi-popover-inner{color:var(--xui-text-color);font-size:14px}.xUi-popover-arrow{background:var(--xui-background-color);border-left:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-popover-bottomRight .xUi-popover-arrow,.xUi-popover-right .xUi-popover-arrow,.xUi-popover-topRight .xUi-popover-arrow{left:unset;right:12px}.xUi-popover-arrow.bottom{border-bottom:.5px solid var(--xui-border-color);border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:unset;bottom:-6px;top:unset}.xUi-popover-arrow.center{left:0;margin:0 auto;right:0}";
5526
+ var css_248z$1 = ".xUi-popover{&:after,&:before{content:\"\";height:10px;left:0;position:absolute;top:-10px;width:100%;z-index:10000}&:after{bottom:-10px;top:unset}}.xUi-popover-wrapper-content{cursor:pointer;max-width:fit-content;width:-webkit-fill-available}.xUi-popover{background:var(--xui-background-color);border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.15);padding:8px 12px;width:max-content;z-index:1000}.xUi-popover-title{padding:4px}.xUi-popover-inner{color:var(--xui-text-color);font-size:14px}.xUi-popover-arrow{background:var(--xui-background-color);border-left:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);height:10px;left:12px;position:absolute;top:-6px;transform:rotate(45deg);width:10px}.xUi-popover-bottomRight .xUi-popover-arrow,.xUi-popover-right .xUi-popover-arrow,.xUi-popover-topRight .xUi-popover-arrow{left:unset;right:12px}.xUi-popover-arrow.bottom{border-bottom:.5px solid var(--xui-border-color);border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:unset;bottom:-6px;top:unset}.xUi-popover-arrow.center{left:0;margin:0 auto;right:0}";
5530
5527
  styleInject(css_248z$1);
5531
5528
 
5532
5529
  const Popover = ({
@@ -5573,29 +5570,32 @@ const Popover = ({
5573
5570
  document.removeEventListener('mousedown', handleClickOutside);
5574
5571
  };
5575
5572
  }, []);
5576
- const handleOnClick = useCallback(() => {
5573
+ const triggers = Array.isArray(trigger) ? trigger : [trigger];
5574
+ const handleOnClick = useCallback(e => {
5577
5575
  const newState = !isOpen;
5578
- onVisibleChange?.(newState);
5579
- setInnerOpen(newState);
5580
- }, [isOpen, trigger]);
5576
+ if (triggers.includes('click')) {
5577
+ onVisibleChange?.(newState);
5578
+ setInnerOpen(newState);
5579
+ }
5580
+ }, [isOpen, triggers]);
5581
5581
  const handleOnMouseEnter = useCallback(() => {
5582
- if (trigger === "hover") {
5582
+ if (triggers.includes("hover")) {
5583
5583
  onVisibleChange?.(true);
5584
5584
  setInnerOpen(true);
5585
5585
  }
5586
- }, [trigger]);
5586
+ }, [triggers]);
5587
5587
  const handleOnMouseLeave = useCallback(() => {
5588
- if (trigger === "hover") {
5588
+ if (triggers.includes("hover")) {
5589
5589
  onVisibleChange?.(false);
5590
5590
  setInnerOpen(false);
5591
5591
  }
5592
- }, [trigger]);
5593
- const childProps = useMemo(() => trigger === "click" ? {
5592
+ }, [triggers]);
5593
+ const childProps = useMemo(() => triggers.includes("click") ? {
5594
5594
  onClick: handleOnClick
5595
5595
  } : {
5596
5596
  onMouseEnter: handleOnMouseEnter,
5597
5597
  onMouseLeave: handleOnMouseLeave
5598
- }, [trigger]);
5598
+ }, [triggers]);
5599
5599
  const _children = useMemo(() => {
5600
5600
  if (Children.count(children) > 1) {
5601
5601
  children = /*#__PURE__*/React.createElement("div", null, children);
@@ -5623,7 +5623,7 @@ const Popover = ({
5623
5623
  }, childProps, {
5624
5624
  className: clsx(prefixCls, `${prefixCls}-${placement}`, overlayClassName),
5625
5625
  style: {
5626
- zIndex: 1000,
5626
+ zIndex: 10000,
5627
5627
  position: "absolute",
5628
5628
  ...overlayStyle,
5629
5629
  ...dropdownPosition