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.
- package/dist/esm/types/types/dropdown.d.ts +1 -2
- package/dist/esm/types/types/index.d.ts +1 -0
- package/dist/esm/types/types/popover.d.ts +2 -2
- package/dist/index.esm.js +29 -29
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +29 -29
- package/dist/index.js.map +1 -1
- package/lib/components/Dropdown/Dropdown.tsx +16 -20
- package/lib/components/Dropdown/style.css +9 -12
- package/lib/components/Popover/Popover.tsx +18 -12
- package/lib/components/Popover/style.css +6 -0
- package/lib/hooks/usePosition.ts +1 -1
- package/lib/types/dropdown.ts +1 -3
- package/lib/types/index.ts +3 -1
- package/lib/types/popover.ts +2 -2
- package/package.json +1 -1
- package/src/app/page.tsx +80 -6
|
@@ -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?:
|
|
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
|
|
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
|
|
5417
|
-
if (!
|
|
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',
|
|
5426
|
-
return () =>
|
|
5427
|
-
|
|
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:
|
|
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
|
|
5573
|
+
const triggers = Array.isArray(trigger) ? trigger : [trigger];
|
|
5574
|
+
const handleOnClick = useCallback(e => {
|
|
5577
5575
|
const newState = !isOpen;
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5576
|
+
if (triggers.includes('click')) {
|
|
5577
|
+
onVisibleChange?.(newState);
|
|
5578
|
+
setInnerOpen(newState);
|
|
5579
|
+
}
|
|
5580
|
+
}, [isOpen, triggers]);
|
|
5581
5581
|
const handleOnMouseEnter = useCallback(() => {
|
|
5582
|
-
if (
|
|
5582
|
+
if (triggers.includes("hover")) {
|
|
5583
5583
|
onVisibleChange?.(true);
|
|
5584
5584
|
setInnerOpen(true);
|
|
5585
5585
|
}
|
|
5586
|
-
}, [
|
|
5586
|
+
}, [triggers]);
|
|
5587
5587
|
const handleOnMouseLeave = useCallback(() => {
|
|
5588
|
-
if (
|
|
5588
|
+
if (triggers.includes("hover")) {
|
|
5589
5589
|
onVisibleChange?.(false);
|
|
5590
5590
|
setInnerOpen(false);
|
|
5591
5591
|
}
|
|
5592
|
-
}, [
|
|
5593
|
-
const childProps = useMemo(() =>
|
|
5592
|
+
}, [triggers]);
|
|
5593
|
+
const childProps = useMemo(() => triggers.includes("click") ? {
|
|
5594
5594
|
onClick: handleOnClick
|
|
5595
5595
|
} : {
|
|
5596
5596
|
onMouseEnter: handleOnMouseEnter,
|
|
5597
5597
|
onMouseLeave: handleOnMouseLeave
|
|
5598
|
-
}, [
|
|
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:
|
|
5626
|
+
zIndex: 10000,
|
|
5627
5627
|
position: "absolute",
|
|
5628
5628
|
...overlayStyle,
|
|
5629
5629
|
...dropdownPosition
|