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.
- package/dist/esm/types/hooks/usePosition.d.ts +2 -1
- package/dist/index.esm.js +44 -25
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +44 -25
- package/dist/index.js.map +1 -1
- package/lib/components/Dropdown/Dropdown.tsx +1 -1
- package/lib/components/Dropdown/style.css +26 -13
- package/lib/components/Popover/Popover.tsx +17 -5
- package/lib/components/Popover/style.css +22 -23
- package/lib/hooks/usePosition.ts +39 -22
- package/package.json +1 -1
- package/src/app/page.tsx +22 -13
|
@@ -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
|
|
2620
|
-
|
|
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
|
-
|
|
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:
|
|
2627
|
-
left:
|
|
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:
|
|
2632
|
-
|
|
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-
|
|
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
|
|
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-
|
|
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 = "
|
|
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",
|
|
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
|
-
},
|
|
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
|
};
|