x-ui-design 0.8.68 → 0.8.70

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.
@@ -9,8 +9,9 @@ type TPosition = {
9
9
  offset?: number;
10
10
  placementPositionOffset?: number;
11
11
  listenPopoverPositions?: CSSProperties;
12
+ prefixCls?: string;
12
13
  };
13
- export declare const usePosition: ({ isOpen, offset, popupRef, placement, triggerRef, listenPopoverPositions, getPopupContainer, placementPositionOffset }: TPosition) => {
14
+ export declare const usePosition: ({ isOpen, offset, popupRef, placement, triggerRef, listenPopoverPositions, getPopupContainer, placementPositionOffset, prefixCls }: TPosition) => {
14
15
  showPlacement: string;
15
16
  dropdownPosition: CSSProperties;
16
17
  };
package/dist/index.esm.js CHANGED
@@ -2602,7 +2602,8 @@ const usePosition = ({
2602
2602
  triggerRef,
2603
2603
  listenPopoverPositions,
2604
2604
  getPopupContainer,
2605
- placementPositionOffset = 1
2605
+ placementPositionOffset = 1,
2606
+ prefixCls = ''
2606
2607
  }) => {
2607
2608
  const [showPlacement, setShowPlacement] = useState('');
2608
2609
  const [_dropdownPosition, setDropdownPosition] = useState({});
@@ -2616,33 +2617,43 @@ const usePosition = ({
2616
2617
  const spaceAbove = inputRect.top - containerRect.top;
2617
2618
  const spaceBelow = containerRect.bottom - inputRect.bottom;
2618
2619
  const _shouldShowAbove = spaceBelow < dropdownHeight && spaceAbove > dropdownHeight;
2619
- const hasRight = placement?.includes('Right');
2620
- setShowPlacement(_shouldShowAbove ? 'bottom' : '');
2620
+ const hasLeft = placement?.toLowerCase()?.includes('left');
2621
+ const hasRight = placement?.toLowerCase()?.includes('right');
2622
+ const isLeft = placement === 'left';
2623
+ const isRight = placement === 'right';
2624
+ const isBottom = placement === 'bottom';
2625
+ const isTop = placement === 'top';
2626
+ setShowPlacement(`${prefixCls}-${_shouldShowAbove ? 'top' : 'bottom'}${hasRight ? 'Right' : hasLeft ? 'Left' : ''}${isBottom || isTop ? 'Left' : 'Right'} ${placement}`);
2621
2627
  if (getPopupContainer) {
2622
2628
  const leftPosition = hasRight ? (inputRect.left || 0) + (triggerRef.current?.offsetWidth || 0) - (popupRef.current?.offsetWidth || 0) : (inputRect.left || 0) + document.documentElement.scrollLeft;
2623
2629
  const _top = (inputRect.top || 0) + document.documentElement.scrollTop;
2624
- if (_shouldShowAbove) {
2630
+ setDropdownPosition({
2631
+ top: _shouldShowAbove ? _top - (popupRef.current?.offsetHeight || 0) + 4 - (offset !== 4 ? offset * 2 : 0) : _top + (triggerRef.current?.offsetHeight || 0) + offset,
2632
+ left: leftPosition
2633
+ });
2634
+ } else {
2635
+ if (isLeft) {
2636
+ setDropdownPosition({
2637
+ top: triggerRef.current.offsetTop,
2638
+ left: triggerRef.current.offsetLeft - (popupRef.current?.offsetWidth || 0) - offset
2639
+ });
2640
+ } else if (isRight) {
2625
2641
  setDropdownPosition({
2626
- top: _top - (popupRef.current?.offsetHeight || 0) + 4 - (offset !== 4 ? offset * 2 : 0),
2627
- left: leftPosition
2642
+ top: triggerRef.current.offsetTop,
2643
+ left: triggerRef.current.offsetLeft + (triggerRef.current?.offsetWidth || 0) + offset
2628
2644
  });
2629
2645
  } else {
2630
2646
  setDropdownPosition({
2631
- top: _top + (triggerRef.current?.offsetHeight || 0) + offset,
2632
- left: leftPosition
2647
+ top: (_shouldShowAbove ? triggerRef.current.offsetTop - (popupRef.current?.offsetHeight || dropdownHeight) - offset * 2 : triggerRef.current.offsetTop + triggerRef.current?.offsetHeight) + offset,
2648
+ ...(hasRight ? {
2649
+ left: triggerRef.current.offsetLeft + (triggerRef.current?.offsetWidth || 0) - (popupRef.current?.offsetWidth || 0) / placementPositionOffset
2650
+ } : {
2651
+ left: triggerRef.current.offsetLeft
2652
+ })
2633
2653
  });
2634
2654
  }
2635
- } else {
2636
- setDropdownPosition({
2637
- top: (_shouldShowAbove ? triggerRef.current.offsetTop - (popupRef.current?.offsetHeight || dropdownHeight) - offset * 2 : triggerRef.current.offsetTop + triggerRef.current?.offsetHeight) + offset,
2638
- ...(hasRight ? {
2639
- left: triggerRef.current.offsetLeft + (triggerRef.current?.offsetWidth || 0) - (popupRef.current?.offsetWidth || 0) / placementPositionOffset
2640
- } : {
2641
- left: triggerRef.current.offsetLeft
2642
- })
2643
- });
2644
2655
  }
2645
- }, [offset, popupRef, placement, triggerRef, getPopupContainer, placementPositionOffset]);
2656
+ }, [offset, popupRef, prefixCls, placement, triggerRef, getPopupContainer, placementPositionOffset]);
2646
2657
  useEffect(() => {
2647
2658
  if (!isOpen) return;
2648
2659
  const _dropdownPosition = () => dropdownPosition();
@@ -5319,7 +5330,7 @@ var Menu$1 = /*#__PURE__*/Object.freeze({
5319
5330
  default: Menu
5320
5331
  });
5321
5332
 
5322
- var css_248z$2 = ".xUi-dropdown-overlay{background:var(--xui-background-color);border:1px solid var(--xui-border-color);border-radius:8px;box-shadow:0 2px 18px rgba(0,0,0,.08);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}";
5333
+ var css_248z$2 = ".xUi-dropdown-overlay{background:var(--xui-background-color);border:1px solid var(--xui-border-color);border-radius:8px;box-shadow:0 2px 18px rgba(0,0,0,.08);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.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{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-arrow.xUi-dropdown-topLeft,.xUi-dropdown-arrow.xUi-dropdown-topRight{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.xUi-dropdown-topRight{left:unset;right:12px}.xUi-dropdown-arrow.right{border-bottom:.5px solid var(--xui-border-color);border-left:.5px solid var(--xui-border-color);border-right:unset;border-top:unset;left:-6px;top:12px}.xUi-dropdown-arrow.left{border-bottom:unset;border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);left:unset;right:-6px;top:12px}";
5323
5334
  styleInject(css_248z$2);
5324
5335
 
5325
5336
  const Dropdown = ({
@@ -5424,7 +5435,7 @@ const Dropdown = ({
5424
5435
  ...dropdownPosition
5425
5436
  }
5426
5437
  }, arrow && /*#__PURE__*/React.createElement("div", {
5427
- className: `${prefixCls}-arrow ${showPlacement ? 'bottom' : ''}`
5438
+ className: `${prefixCls}-arrow ${showPlacement}`
5428
5439
  }), overlay ? typeof overlay === 'function' ? overlay() : overlay : popupRender ? popupRender(menu ? /*#__PURE__*/React.createElement(MenuInner, {
5429
5440
  prefixCls: prefixCls,
5430
5441
  items: menu.items,
@@ -5493,7 +5504,7 @@ var Dropdown$1 = /*#__PURE__*/Object.freeze({
5493
5504
  default: Dropdown
5494
5505
  });
5495
5506
 
5496
- 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}";
5507
+ 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-arrow.xUi-popover-topLeft,.xUi-popover-arrow.xUi-popover-topRight{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.xUi-popover-topRight{left:unset;right:12px}.xUi-popover-arrow.right{border-bottom:.5px solid var(--xui-border-color);border-left:.5px solid var(--xui-border-color);border-right:unset;border-top:unset;left:-6px;top:12px}.xUi-popover-arrow.left{border-bottom:unset;border-left:unset;border-right:.5px solid var(--xui-border-color);border-top:.5px solid var(--xui-border-color);left:unset;right:-6px;top:12px}";
5497
5508
  styleInject(css_248z$1);
5498
5509
 
5499
5510
  const Popover = ({
@@ -5501,7 +5512,7 @@ const Popover = ({
5501
5512
  content,
5502
5513
  children,
5503
5514
  trigger = "click",
5504
- placement = "bottom",
5515
+ placement = "bottomLeft",
5505
5516
  open,
5506
5517
  visible,
5507
5518
  title,
@@ -5526,6 +5537,7 @@ const Popover = ({
5526
5537
  popupRef,
5527
5538
  placement,
5528
5539
  triggerRef,
5540
+ prefixCls,
5529
5541
  listenPopoverPositions,
5530
5542
  placementPositionOffset,
5531
5543
  getPopupContainer: getPopupContainer?.(triggerRef.current)
@@ -5577,19 +5589,24 @@ const Popover = ({
5577
5589
  }
5578
5590
  return Children.map(children, (child, index) => {
5579
5591
  if (! /*#__PURE__*/isValidElement(child)) {
5580
- child = /*#__PURE__*/React.createElement("div", null, child);
5592
+ child = /*#__PURE__*/React.createElement("div", {
5593
+ key: index ?? `popover-child-${index}`
5594
+ }, child);
5581
5595
  }
5582
5596
  return /*#__PURE__*/cloneElement(child, {
5583
- key: index,
5597
+ key: index ?? `popover-child-${index}`,
5584
5598
  ...{
5585
5599
  style,
5586
5600
  ...childProps,
5601
+ // @ts-expect-error
5602
+ ...child.props,
5587
5603
  ref: triggerRef,
5588
5604
  className: `${prefixCls}-wrapper-content`
5589
5605
  }
5590
5606
  });
5591
5607
  });
5592
5608
  }, [children, style]);
5609
+ const _content = useMemo(() => flattenChildren(content), [content]);
5593
5610
  return /*#__PURE__*/React.createElement(React.Fragment, null, _children, isOpen && /*#__PURE__*/React.createElement(ConditionalWrapper, {
5594
5611
  condition: !!getPopupContainer,
5595
5612
  wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(triggerRef.current)) : /*#__PURE__*/React.createElement(React.Fragment, null, element)
@@ -5607,7 +5624,9 @@ const Popover = ({
5607
5624
  className: `${prefixCls}-title`
5608
5625
  }, title), /*#__PURE__*/React.createElement("div", {
5609
5626
  className: `${prefixCls}-inner`
5610
- }, content), /*#__PURE__*/React.createElement("div", {
5627
+ }, Children.map(_content, (child, index) => /*#__PURE__*/React.createElement("div", {
5628
+ key: index
5629
+ }, child))), /*#__PURE__*/React.createElement("div", {
5611
5630
  className: `${prefixCls}-arrow ${showPlacement}`
5612
5631
  }))));
5613
5632
  };