x-ui-design 0.7.36 → 0.7.38
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/index.esm.js +32 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +32 -15
- package/dist/index.js.map +1 -1
- package/lib/components/DatePicker/TimePicker/TimePicker.tsx +36 -16
- package/package.json +1 -1
- package/src/app/page.tsx +4 -1
package/dist/index.esm.js
CHANGED
|
@@ -2606,6 +2606,12 @@ var RangePicker$1 = /*#__PURE__*/Object.freeze({
|
|
|
2606
2606
|
var css_248z$d = ".xUi-timepicker-wrapper{display:inline-block;font-size:14px;position:relative}.xUi-timepicker-input-wrapper{position:relative;width:100%}.xUi-timepicker-input{border:1px solid var(--xui-border-color);border-radius:6px;box-sizing:border-box;font-size:14px;height:32px;line-height:32px;padding:4px 11px;transition:all .3s;width:100%}.xUi-timepicker-input:focus,.xUi-timepicker-input:hover{border-color:var(--xui-primary-color-light)}.xUi-timepicker-input:focus{outline:none}.xUi-timepicker-input::placeholder{opacity:.6}.xUi-timepicker-clear{color:rgba(0,0,0,.45);cursor:pointer;font-size:12px;position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:2}.xUi-timepicker-clear:hover{color:rgba(0,0,0,.75)}.xUi-timepicker-popup{background:#fff;border:1px solid var(--xui-border-color);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.15);display:flex;left:0;padding:8px 0;z-index:1}.xUi-timepicker-panel{display:flex;width:100%}.xUi-timepicker-column{align-items:center;display:flex;flex:1;flex-direction:column;margin-bottom:5px;max-height:169px;overflow-y:auto;padding-left:4px;width:52px}.xUi-timepicker-column::-webkit-scrollbar,.xUi-timepicker-column::-webkit-scrollbar-thumb{width:4px}.xUi-timepicker-column:nth-child(2){border-left:1px solid var(--xui-border-color);border-right:1px solid var(--xui-border-color)}.xUi-timepicker-cell{align-items:center;border-radius:4px;cursor:pointer;display:flex;font-size:14px;justify-content:center;margin-bottom:2px;padding:6px 0;text-align:center;transition:background .3s;width:44px}.xUi-timepicker-cell:hover{background-color:#e6f4ff}.xUi-timepicker-cell-selected{background-color:#e6f4ff;font-weight:500}.xUi-timepicker-cell-disabled{color:rgba(0,0,0,.25);pointer-events:none;user-select:none}.xUi-timepicker-now-btn{color:#4096ff;cursor:pointer;font-weight:500;margin-top:10px;padding:0 0 4px;text-align:center;transition:background .3s}.xUi-timepicker-icons{align-items:center;display:flex;gap:4px;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.xUi-timepicker-suffix{align-items:center;cursor:pointer;display:flex;justify-content:center}.xUi-timepicker-suffix svg{color:#999;height:14px;width:14px}.xUi-timepicker-clear{right:0;top:1px}.xUi-timepicker-actions{align-items:center;border-top:1px solid var(--xui-border-color);display:flex;justify-content:space-between;padding:0 4px}.xUi-timepicker-ok-btn{background-color:var(--xui-primary-color);border:none;border-radius:4px;color:#fff;cursor:pointer;margin-top:7px;outline:none;padding:4px 8px;transition:.3s ease}.xUi-timepicker-ok-btn:disabled{background-color:var(--xui-color-disabled);color:grey;font-size:13px}.xUi-timepicker-ok-btn:not(:disabled):hover{background-color:var(--xui-primary-color-light)}.xUi-timepicker-popup{margin-top:4px;position:absolute;top:100%}.xUi-timepicker-popup-up{bottom:100%;margin-bottom:4px;top:auto!important}";
|
|
2607
2607
|
styleInject(css_248z$d);
|
|
2608
2608
|
|
|
2609
|
+
const ConditionalWrapper = ({
|
|
2610
|
+
condition,
|
|
2611
|
+
wrapper,
|
|
2612
|
+
children
|
|
2613
|
+
}) => condition ? wrapper(children) : children;
|
|
2614
|
+
|
|
2609
2615
|
const HOURS = 24;
|
|
2610
2616
|
const INPUT_SIZE = 13;
|
|
2611
2617
|
const TIME_OPTION_PADDING = 4;
|
|
@@ -2627,7 +2633,8 @@ const TimePicker = ({
|
|
|
2627
2633
|
showNow = true,
|
|
2628
2634
|
clearIcon = /*#__PURE__*/React.createElement(ClearIcon, null),
|
|
2629
2635
|
suffixIcon = /*#__PURE__*/React.createElement(TimeIcon, null),
|
|
2630
|
-
placeholder = 'Select time'
|
|
2636
|
+
placeholder = 'Select time',
|
|
2637
|
+
getPopupContainer
|
|
2631
2638
|
}) => {
|
|
2632
2639
|
const [open, setOpen] = useState(false);
|
|
2633
2640
|
const [innerValue, setInnerValue] = useState(propValue || defaultValue ? new Date(propValue || defaultValue) : null);
|
|
@@ -2644,6 +2651,7 @@ const TimePicker = ({
|
|
|
2644
2651
|
if (popupRef.current && !popupRef.current.contains(e.target) && inputRef.current && !inputRef.current.contains(e.target)) {
|
|
2645
2652
|
setOpen(false);
|
|
2646
2653
|
setTempValue(null);
|
|
2654
|
+
setOpenUpward(false);
|
|
2647
2655
|
if (!innerValue) {
|
|
2648
2656
|
onChange?.(null, '');
|
|
2649
2657
|
}
|
|
@@ -2667,20 +2675,20 @@ const TimePicker = ({
|
|
|
2667
2675
|
scrollToTop(secondRef, second || 0);
|
|
2668
2676
|
}
|
|
2669
2677
|
}, [open, innerValue]);
|
|
2670
|
-
|
|
2671
|
-
if (
|
|
2678
|
+
const decideOpenDirection = () => {
|
|
2679
|
+
if (inputRef.current) {
|
|
2672
2680
|
const inputRect = inputRef.current.getBoundingClientRect();
|
|
2673
|
-
const popupRect = popupRef.current.getBoundingClientRect();
|
|
2674
2681
|
const viewportHeight = window.innerHeight;
|
|
2682
|
+
const popupHeight = 240;
|
|
2675
2683
|
const spaceBelow = viewportHeight - inputRect.bottom;
|
|
2676
2684
|
const spaceAbove = inputRect.top;
|
|
2677
|
-
if (spaceBelow <
|
|
2685
|
+
if (spaceBelow < popupHeight && spaceAbove > popupHeight) {
|
|
2678
2686
|
setOpenUpward(true);
|
|
2679
2687
|
} else {
|
|
2680
2688
|
setOpenUpward(false);
|
|
2681
2689
|
}
|
|
2682
2690
|
}
|
|
2683
|
-
}
|
|
2691
|
+
};
|
|
2684
2692
|
useEffect(() => {
|
|
2685
2693
|
onSelect?.(tempValue);
|
|
2686
2694
|
}, [tempValue, onSelect]);
|
|
@@ -2902,7 +2910,10 @@ const TimePicker = ({
|
|
|
2902
2910
|
style: style
|
|
2903
2911
|
}, /*#__PURE__*/React.createElement("div", {
|
|
2904
2912
|
className: `${prefixCls}-input-wrapper`,
|
|
2905
|
-
onClick: () =>
|
|
2913
|
+
onClick: () => {
|
|
2914
|
+
decideOpenDirection();
|
|
2915
|
+
setOpen(true);
|
|
2916
|
+
}
|
|
2906
2917
|
}, /*#__PURE__*/React.createElement("input", {
|
|
2907
2918
|
ref: inputRef,
|
|
2908
2919
|
size: INPUT_SIZE,
|
|
@@ -2927,14 +2938,26 @@ const TimePicker = ({
|
|
|
2927
2938
|
className: `${prefixCls}-suffix`,
|
|
2928
2939
|
onClick: e => {
|
|
2929
2940
|
e.stopPropagation();
|
|
2941
|
+
decideOpenDirection();
|
|
2930
2942
|
setOpen(true);
|
|
2931
2943
|
}
|
|
2932
|
-
}, suffixIcon))), open && /*#__PURE__*/React.createElement(
|
|
2944
|
+
}, suffixIcon))), open && /*#__PURE__*/React.createElement(ConditionalWrapper, {
|
|
2945
|
+
condition: getPopupContainer !== undefined,
|
|
2946
|
+
wrapper: element => getPopupContainer ? /*#__PURE__*/createPortal(element, getPopupContainer(popupRef.current)) : /*#__PURE__*/React.createElement(React.Fragment, null, element)
|
|
2947
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
2933
2948
|
ref: popupRef,
|
|
2949
|
+
style: {
|
|
2950
|
+
...(getPopupContainer ? {
|
|
2951
|
+
position: 'absolute',
|
|
2952
|
+
top: (inputRef.current?.getBoundingClientRect().top || 0) + (inputRef.current?.offsetHeight || 0),
|
|
2953
|
+
left: inputRef.current?.getBoundingClientRect().left,
|
|
2954
|
+
height: 'max-content'
|
|
2955
|
+
} : {})
|
|
2956
|
+
},
|
|
2934
2957
|
className: clsx([`${prefixCls}-popup`, {
|
|
2935
2958
|
[`${prefixCls}-popup-up`]: openUpward
|
|
2936
2959
|
}])
|
|
2937
|
-
}, renderOptions()));
|
|
2960
|
+
}, renderOptions())));
|
|
2938
2961
|
};
|
|
2939
2962
|
|
|
2940
2963
|
var TimePicker$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -3469,12 +3492,6 @@ var Tag$1 = /*#__PURE__*/Object.freeze({
|
|
|
3469
3492
|
default: Tag
|
|
3470
3493
|
});
|
|
3471
3494
|
|
|
3472
|
-
const ConditionalWrapper = ({
|
|
3473
|
-
condition,
|
|
3474
|
-
wrapper,
|
|
3475
|
-
children
|
|
3476
|
-
}) => condition ? wrapper(children) : children;
|
|
3477
|
-
|
|
3478
3495
|
var css_248z$5 = "@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.xUi-select{background-color:transparent;border:1px solid var(--xui-border-color);border-radius:var(--xui-border-radius-sm);box-sizing:border-box;color:var(--xui-text-color);display:inline-flex;flex-direction:row-reverse;min-height:24px;padding:2px 8px;position:relative;width:100%}.xUi-select-disabled{background:rgba(0,0,0,.04)}.xUi-select-arrow{align-items:center;color:var(--xui-text-color-light);display:flex;gap:6px;margin:0 4px;pointer-events:all!important}.xUi-select-arrow svg{align-items:center;display:flex;justify-content:center}.xUi-select-loading{animation:spin 1s linear infinite;color:var(--xui-text-color-light);display:inline-block;margin:0 8px}.xUi-select .xUi-select-trigger{align-items:center;background:transparent;border-radius:var(--xui-border-radius-sm);cursor:pointer;display:flex;justify-content:space-between;width:100%}.xUi-select .xUi-select-clear-btn{background:none;border:none;color:#999;cursor:pointer;font-size:var(--xui-font-size-lg);line-height:1;margin:0 8px;padding:0}.xUi-select .xUi-select-clear-btn:hover{color:var(--xui-primary-color)}.xUi-select-dropdown{background-color:var(--xui-select-background-color);border-radius:var(--xui-border-radius-sm);box-shadow:0 4px 12px rgba(0,0,0,.15);left:0;margin-top:5px;max-height:350px;overflow-y:auto;position:absolute;right:unset;top:100%;width:inherit;z-index:10}.xUi-select-dropdown.bottomRight,.xUi-select-dropdown.topRight{left:unset;right:0}.xUi-select .xUi-select-loading-spinner{color:#999;padding:10px;text-align:center}.xUi-select:focus-within{border-color:var(--xui-primary-color-light);box-shadow:none}.xUi-select:hover:not(.xUi-select-disabled){border-color:var(--xui-primary-color)}.xUi-select-disabled,.xUi-select-disabled .xUi-select-input,.xUi-select-disabled .xUi-select-trigger{cursor:not-allowed!important;opacity:.6!important}.xUi-select-selected-icon{color:var(--xui-primary-color-light)}.xUi-select-error{border-color:var(--xui-error-color)}.xUi-select-arrow .error-svg-icon,.xUi-select-error .error-svg-icon{color:var(--xui-error-color)}.xUi-select .xUi-select-input{align-items:center;background:transparent;border:none;color:var(--xui-text-color);cursor:pointer;display:inline-flex;font-size:var(--xui-font-size-md);height:auto;height:-webkit-fit-content;outline:none;padding:0;user-select:none;width:100%}.xUi-select .xUi-select-input:focus{border:none;box-shadow:none;outline:none}.xUi-select.middle{border-radius:var(--xui-border-radius-md);min-height:30px}.xUi-select.middle,.xUi-select.middle input{font-size:var(--xui-font-size-md)}.xUi-select.middle .xUi-select-trigger{border-radius:var(--xui-border-radius-md)}.xUi-select.large{font-size:var(--xui-font-size-lg);min-height:44px}.xUi-select.large,.xUi-select.large .xUi-select-trigger{border-radius:var(--xui-border-radius-lg)}.xUi-select input{font-size:var(--xui-font-size-lg)}";
|
|
3479
3496
|
styleInject(css_248z$5);
|
|
3480
3497
|
|