x-ui-design 0.8.47 → 0.8.49
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 +1 -1
- package/dist/esm/types/types/datepicker.d.ts +2 -2
- package/dist/esm/types/types/dropdown.d.ts +2 -3
- package/dist/esm/types/types/index.d.ts +1 -0
- package/dist/esm/types/types/popover.d.ts +3 -3
- package/dist/esm/types/types/select.d.ts +1 -1
- package/dist/index.esm.js +18 -27
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +18 -27
- package/dist/index.js.map +1 -1
- package/lib/components/DatePicker/DatePicker.tsx +4 -8
- package/lib/components/DatePicker/RangePicker/RangePicker.tsx +12 -9
- package/lib/components/DatePicker/TimePicker/TimePicker.tsx +4 -1
- package/lib/components/Dropdown/Dropdown.tsx +20 -21
- package/lib/components/Dropdown/style.css +9 -12
- package/lib/components/Popover/Popover.tsx +13 -4
- package/lib/components/Popover/style.css +6 -0
- package/lib/components/Select/Select.tsx +10 -7
- package/lib/hooks/usePosition.ts +2 -2
- package/lib/types/datepicker.ts +2 -2
- package/lib/types/dropdown.ts +2 -4
- package/lib/types/index.ts +3 -1
- package/lib/types/popover.ts +3 -3
- package/lib/types/select.ts +1 -1
- package/package.json +1 -1
- package/src/app/page.tsx +78 -3
|
@@ -4,7 +4,7 @@ type TPosition = {
|
|
|
4
4
|
isOpen: boolean;
|
|
5
5
|
popupRef: RefObject<HTMLDivElement | null>;
|
|
6
6
|
triggerRef: RefObject<HTMLDivElement | null>;
|
|
7
|
-
getPopupContainer?: HTMLElement;
|
|
7
|
+
getPopupContainer?: HTMLElement | ParentNode;
|
|
8
8
|
placement?: Placement;
|
|
9
9
|
offset?: number;
|
|
10
10
|
listenPopoverPossitions?: CSSProperties;
|
|
@@ -34,7 +34,7 @@ export type TDatePickerProps = DefaultProps & {
|
|
|
34
34
|
onChange?: (date: RuleType | RuleType[], dateString: string | string[]) => void;
|
|
35
35
|
onCalendarChange?: (date: RuleType | RuleType[], dateString: string | string[], info: BaseInfo) => void;
|
|
36
36
|
onVisibleChange?: ((open: boolean) => void) | undefined;
|
|
37
|
-
getPopupContainer?: (node: HTMLElement) => HTMLElement;
|
|
37
|
+
getPopupContainer?: ((node: HTMLElement) => HTMLElement | ParentNode) | undefined;
|
|
38
38
|
showToday?: boolean;
|
|
39
39
|
inputReadOnly?: boolean;
|
|
40
40
|
picker?: PanelMode;
|
|
@@ -115,7 +115,7 @@ export type TimePickerProps = DefaultProps & {
|
|
|
115
115
|
onSelect?: ((value: Date | null) => void) | undefined;
|
|
116
116
|
showNow?: boolean;
|
|
117
117
|
clearIcon?: ReactNode;
|
|
118
|
-
getPopupContainer?: (node: HTMLElement) => HTMLElement;
|
|
118
|
+
getPopupContainer?: ((node: HTMLElement) => HTMLElement | ParentNode) | undefined;
|
|
119
119
|
suffixIcon?: ReactNode;
|
|
120
120
|
placeholder?: string;
|
|
121
121
|
placement?: Placement;
|
|
@@ -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;
|
|
@@ -21,7 +20,7 @@ export type DropdownProps = DefaultProps & {
|
|
|
21
20
|
placement?: Placement;
|
|
22
21
|
overlayClassName?: string;
|
|
23
22
|
overlayStyle?: CSSProperties;
|
|
24
|
-
getPopupContainer?: (node: HTMLElement) => HTMLElement;
|
|
23
|
+
getPopupContainer?: ((node: HTMLElement) => HTMLElement | ParentNode) | undefined;
|
|
25
24
|
destroyOnHidden?: boolean;
|
|
26
25
|
disabled?: boolean;
|
|
27
26
|
arrow?: boolean;
|
|
@@ -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;
|
|
@@ -12,5 +12,5 @@ export type PopoverProps = DefaultProps & {
|
|
|
12
12
|
visible?: boolean;
|
|
13
13
|
listenPopoverPossitions?: CSSProperties;
|
|
14
14
|
onVisibleChange?: ((open: boolean) => void) | undefined;
|
|
15
|
-
getPopupContainer?: ((node: HTMLElement) => HTMLElement) | undefined;
|
|
15
|
+
getPopupContainer?: ((node: HTMLElement) => HTMLElement | ParentNode) | undefined;
|
|
16
16
|
};
|
|
@@ -43,7 +43,7 @@ export type SelectProps = DefaultProps & {
|
|
|
43
43
|
searchIcon?: ReactNode;
|
|
44
44
|
open?: boolean;
|
|
45
45
|
notFoundContent?: ReactNode;
|
|
46
|
-
getPopupContainer?: (
|
|
46
|
+
getPopupContainer?: ((node: HTMLElement) => HTMLElement | ParentNode) | undefined;
|
|
47
47
|
dropdownRender?: (menu: ReactNode) => ReactNode;
|
|
48
48
|
feedbackIcons?: boolean;
|
|
49
49
|
placement?: Placement;
|
package/dist/index.esm.js
CHANGED
|
@@ -2744,7 +2744,6 @@ const DatePicker = ({
|
|
|
2744
2744
|
const initialDate = value || defaultValue;
|
|
2745
2745
|
const initialPickerDate = defaultPickerValue || initialDate;
|
|
2746
2746
|
const popupRef = useRef(null);
|
|
2747
|
-
const popuptriggerRef = useRef(null);
|
|
2748
2747
|
const DateNow = new Date();
|
|
2749
2748
|
const [selectedDate, setSelectedDate] = useState(initialDate);
|
|
2750
2749
|
const [selectedDatePlaceholder, setSelectedDatePlaceholder] = useState(initialDate ? formatDate(initialDate, format) : undefined);
|
|
@@ -2788,11 +2787,6 @@ const DatePicker = ({
|
|
|
2788
2787
|
controller.abort();
|
|
2789
2788
|
};
|
|
2790
2789
|
}, [isOpen]);
|
|
2791
|
-
useEffect(() => {
|
|
2792
|
-
if (getPopupContainer && triggerRef.current) {
|
|
2793
|
-
popuptriggerRef.current = getPopupContainer(triggerRef.current);
|
|
2794
|
-
}
|
|
2795
|
-
}, [getPopupContainer]);
|
|
2796
2790
|
const daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();
|
|
2797
2791
|
const firstDayOfMonth = (year, month) => new Date(year, month, 1).getDay();
|
|
2798
2792
|
function formatDate(date, format) {
|
|
@@ -3700,7 +3694,7 @@ const TimePicker = ({
|
|
|
3700
3694
|
}
|
|
3701
3695
|
}, suffixIcon))), open && /*#__PURE__*/React.createElement(ConditionalWrapper, {
|
|
3702
3696
|
condition: getPopupContainer !== undefined,
|
|
3703
|
-
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(
|
|
3697
|
+
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(inputRef.current)) : /*#__PURE__*/React.createElement(React.Fragment, null, element)
|
|
3704
3698
|
}, /*#__PURE__*/React.createElement("div", {
|
|
3705
3699
|
ref: popupRef,
|
|
3706
3700
|
style: dropdownPosition,
|
|
@@ -5354,7 +5348,7 @@ var Menu$1 = /*#__PURE__*/Object.freeze({
|
|
|
5354
5348
|
default: Menu
|
|
5355
5349
|
});
|
|
5356
5350
|
|
|
5357
|
-
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}";
|
|
5358
5352
|
styleInject(css_248z$2);
|
|
5359
5353
|
|
|
5360
5354
|
const Dropdown = ({
|
|
@@ -5378,7 +5372,6 @@ const Dropdown = ({
|
|
|
5378
5372
|
prefixCls = prefixClsDropdown
|
|
5379
5373
|
}) => {
|
|
5380
5374
|
const [open, setOpen] = useState(controlledOpen ?? defaultOpen);
|
|
5381
|
-
const [_hover, setHover] = useState(controlledOpen ?? defaultOpen);
|
|
5382
5375
|
const isControlled = controlledOpen !== undefined;
|
|
5383
5376
|
const triggerRef = useRef(null);
|
|
5384
5377
|
const popupRef = useRef(null);
|
|
@@ -5419,46 +5412,43 @@ const Dropdown = ({
|
|
|
5419
5412
|
onVisibleChange?.(next);
|
|
5420
5413
|
};
|
|
5421
5414
|
useEffect(() => {
|
|
5422
|
-
const
|
|
5423
|
-
if (!
|
|
5424
|
-
return;
|
|
5425
|
-
}
|
|
5426
|
-
const target = e.target;
|
|
5427
|
-
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)) {
|
|
5428
5417
|
setOpenInternal(false);
|
|
5418
|
+
onVisibleChange?.(false);
|
|
5429
5419
|
}
|
|
5430
5420
|
};
|
|
5431
|
-
document.addEventListener('mousedown',
|
|
5432
|
-
return () =>
|
|
5433
|
-
|
|
5421
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
5422
|
+
return () => {
|
|
5423
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
5424
|
+
};
|
|
5425
|
+
}, []);
|
|
5434
5426
|
const triggers = Array.isArray(trigger) ? trigger : [trigger];
|
|
5435
5427
|
const onTriggerClick = e => {
|
|
5436
5428
|
e.preventDefault();
|
|
5437
5429
|
e.stopPropagation();
|
|
5438
|
-
if (triggers.includes('click')) {
|
|
5430
|
+
if (popupRef.current && !popupRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target) && triggers.includes('click')) {
|
|
5439
5431
|
setOpenInternal(!open);
|
|
5440
5432
|
}
|
|
5441
5433
|
};
|
|
5442
5434
|
const onTriggerMouseEnter = () => {
|
|
5443
|
-
setHover(true);
|
|
5444
5435
|
if (triggers.includes('hover')) {
|
|
5445
5436
|
setOpenInternal(true);
|
|
5446
5437
|
}
|
|
5447
5438
|
};
|
|
5448
5439
|
const onTriggerMouseLeave = () => {
|
|
5449
|
-
setHover(false);
|
|
5450
5440
|
if (triggers.includes('hover')) {
|
|
5451
5441
|
setOpenInternal(false);
|
|
5452
5442
|
}
|
|
5453
5443
|
};
|
|
5454
5444
|
const popup = /*#__PURE__*/React.createElement(ConditionalWrapper, {
|
|
5455
5445
|
condition: getPopupContainer !== undefined,
|
|
5456
|
-
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(
|
|
5446
|
+
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(triggerRef.current)) : /*#__PURE__*/React.createElement(React.Fragment, null, element)
|
|
5457
5447
|
}, /*#__PURE__*/React.createElement("div", {
|
|
5458
5448
|
ref: popupRef,
|
|
5459
5449
|
className: `${prefixCls}-overlay ${prefixCls}-${placement} ${overlayClassName}`,
|
|
5460
5450
|
style: {
|
|
5461
|
-
zIndex:
|
|
5451
|
+
zIndex: 10000,
|
|
5462
5452
|
...overlayStyle,
|
|
5463
5453
|
...dropdownPosition
|
|
5464
5454
|
}
|
|
@@ -5493,7 +5483,8 @@ const Dropdown = ({
|
|
|
5493
5483
|
tabIndex: disabled ? -1 : 0,
|
|
5494
5484
|
"aria-haspopup": "menu",
|
|
5495
5485
|
style: {
|
|
5496
|
-
width: 'fit-content'
|
|
5486
|
+
width: 'fit-content',
|
|
5487
|
+
height: '-webkit-fill-available'
|
|
5497
5488
|
},
|
|
5498
5489
|
"aria-expanded": open
|
|
5499
5490
|
}, children, open && popup, !open && !destroyOnHidden && null));
|
|
@@ -5532,7 +5523,7 @@ var Dropdown$1 = /*#__PURE__*/Object.freeze({
|
|
|
5532
5523
|
default: Dropdown
|
|
5533
5524
|
});
|
|
5534
5525
|
|
|
5535
|
-
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}";
|
|
5536
5527
|
styleInject(css_248z$1);
|
|
5537
5528
|
|
|
5538
5529
|
const Popover = ({
|
|
@@ -5623,13 +5614,13 @@ const Popover = ({
|
|
|
5623
5614
|
}, [children, style, childProps]);
|
|
5624
5615
|
return /*#__PURE__*/React.createElement(React.Fragment, null, _children, isOpen && /*#__PURE__*/React.createElement(ConditionalWrapper, {
|
|
5625
5616
|
condition: !!getPopupContainer,
|
|
5626
|
-
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(
|
|
5617
|
+
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(triggerRef.current)) : /*#__PURE__*/React.createElement(React.Fragment, null, element)
|
|
5627
5618
|
}, /*#__PURE__*/React.createElement("div", _extends({
|
|
5628
5619
|
ref: popupRef
|
|
5629
5620
|
}, childProps, {
|
|
5630
5621
|
className: clsx(prefixCls, `${prefixCls}-${placement}`, overlayClassName),
|
|
5631
5622
|
style: {
|
|
5632
|
-
zIndex:
|
|
5623
|
+
zIndex: 10000,
|
|
5633
5624
|
position: "absolute",
|
|
5634
5625
|
...overlayStyle,
|
|
5635
5626
|
...dropdownPosition
|