x-ui-design 0.7.39 → 0.7.43
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 +81 -7
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +81 -7
- package/dist/index.js.map +1 -1
- package/lib/components/DatePicker/TimePicker/TimePicker.tsx +102 -6
- package/lib/components/DatePicker/TimePicker/style.css +0 -1
- package/package.json +1 -1
- package/src/app/page.tsx +4 -3
package/dist/index.esm.js
CHANGED
|
@@ -2603,7 +2603,7 @@ var RangePicker$1 = /*#__PURE__*/Object.freeze({
|
|
|
2603
2603
|
default: RangePicker
|
|
2604
2604
|
});
|
|
2605
2605
|
|
|
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
|
|
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}";
|
|
2607
2607
|
styleInject(css_248z$d);
|
|
2608
2608
|
|
|
2609
2609
|
const ConditionalWrapper = ({
|
|
@@ -2646,6 +2646,7 @@ const TimePicker = ({
|
|
|
2646
2646
|
const hourRef = useRef(null);
|
|
2647
2647
|
const minuteRef = useRef(null);
|
|
2648
2648
|
const secondRef = useRef(null);
|
|
2649
|
+
const [dropdownPosition, setDropdownPosition] = useState({});
|
|
2649
2650
|
useEffect(() => {
|
|
2650
2651
|
setInnerValue(propValue || defaultValue ? new Date(propValue || defaultValue) : null);
|
|
2651
2652
|
}, [propValue]);
|
|
@@ -2827,6 +2828,83 @@ const TimePicker = ({
|
|
|
2827
2828
|
}
|
|
2828
2829
|
}
|
|
2829
2830
|
};
|
|
2831
|
+
const dropdownPossition = useCallback(() => {
|
|
2832
|
+
if (!inputRef.current) {
|
|
2833
|
+
return {};
|
|
2834
|
+
}
|
|
2835
|
+
const dropdownHeight = 230;
|
|
2836
|
+
const inputPoss = inputRef.current?.getBoundingClientRect();
|
|
2837
|
+
const windowHeight = window.innerHeight;
|
|
2838
|
+
const spaceBelow = windowHeight - (inputPoss.bottom || 0);
|
|
2839
|
+
const spaceAbove = inputPoss.top;
|
|
2840
|
+
const shouldShowAbove = spaceBelow < dropdownHeight;
|
|
2841
|
+
const shouldShowBelow = spaceAbove < dropdownHeight;
|
|
2842
|
+
if (open) {
|
|
2843
|
+
if (getPopupContainer) {
|
|
2844
|
+
if (!shouldShowBelow && !shouldShowAbove) {
|
|
2845
|
+
if (!Object.keys(dropdownPosition).length) {
|
|
2846
|
+
setDropdownPosition({
|
|
2847
|
+
position: 'absolute',
|
|
2848
|
+
top: (inputPoss.top || 0) + document.documentElement.scrollTop + (inputRef.current?.offsetHeight || 0),
|
|
2849
|
+
left: (inputPoss.left || 0) + document.documentElement.scrollLeft,
|
|
2850
|
+
height: 'max-content'
|
|
2851
|
+
});
|
|
2852
|
+
}
|
|
2853
|
+
return;
|
|
2854
|
+
}
|
|
2855
|
+
if (!shouldShowBelow) {
|
|
2856
|
+
setDropdownPosition({
|
|
2857
|
+
position: 'absolute',
|
|
2858
|
+
top: (inputPoss.top || 0) + document.documentElement.scrollTop - dropdownHeight,
|
|
2859
|
+
left: (inputPoss.left || 0) + document.documentElement.scrollLeft,
|
|
2860
|
+
height: 'max-content'
|
|
2861
|
+
});
|
|
2862
|
+
}
|
|
2863
|
+
if (!shouldShowAbove) {
|
|
2864
|
+
setDropdownPosition({
|
|
2865
|
+
position: 'absolute',
|
|
2866
|
+
top: (inputPoss.top || 0) + document.documentElement.scrollTop + (inputRef.current?.offsetHeight || 0),
|
|
2867
|
+
left: (inputPoss.left || 0) + document.documentElement.scrollLeft,
|
|
2868
|
+
height: 'max-content'
|
|
2869
|
+
});
|
|
2870
|
+
}
|
|
2871
|
+
}
|
|
2872
|
+
}
|
|
2873
|
+
}, [open, inputRef.current]);
|
|
2874
|
+
const getScrollParents = useCallback(element => {
|
|
2875
|
+
const parents = [];
|
|
2876
|
+
let current = element.parentElement;
|
|
2877
|
+
while (current) {
|
|
2878
|
+
if (current.scrollHeight > current.clientHeight) {
|
|
2879
|
+
parents.push(current);
|
|
2880
|
+
}
|
|
2881
|
+
current = current.parentElement;
|
|
2882
|
+
}
|
|
2883
|
+
return parents;
|
|
2884
|
+
}, []);
|
|
2885
|
+
useEffect(() => {
|
|
2886
|
+
if (!open) return;
|
|
2887
|
+
const _dropdownPossition = () => dropdownPossition();
|
|
2888
|
+
_dropdownPossition();
|
|
2889
|
+
const controller = new AbortController();
|
|
2890
|
+
const scrollableParents = getScrollParents(inputRef.current);
|
|
2891
|
+
scrollableParents.forEach(el => {
|
|
2892
|
+
el.addEventListener('scroll', _dropdownPossition, {
|
|
2893
|
+
passive: true,
|
|
2894
|
+
signal: controller.signal
|
|
2895
|
+
});
|
|
2896
|
+
});
|
|
2897
|
+
window.addEventListener('scroll', _dropdownPossition, {
|
|
2898
|
+
passive: true,
|
|
2899
|
+
signal: controller.signal
|
|
2900
|
+
});
|
|
2901
|
+
window.addEventListener('resize', _dropdownPossition, {
|
|
2902
|
+
signal: controller.signal
|
|
2903
|
+
});
|
|
2904
|
+
return () => {
|
|
2905
|
+
controller.abort();
|
|
2906
|
+
};
|
|
2907
|
+
}, [open, getPopupContainer, dropdownPossition]);
|
|
2830
2908
|
const renderOptions = () => {
|
|
2831
2909
|
const hours = Array.from({
|
|
2832
2910
|
length: HOURS + ADD_EMPTY_SECTION_COUNT
|
|
@@ -2950,12 +3028,8 @@ const TimePicker = ({
|
|
|
2950
3028
|
}, /*#__PURE__*/React.createElement("div", {
|
|
2951
3029
|
ref: popupRef,
|
|
2952
3030
|
style: {
|
|
2953
|
-
...
|
|
2954
|
-
|
|
2955
|
-
top: (inputRef.current?.getBoundingClientRect().top || 0) + (inputRef.current?.offsetHeight || 0),
|
|
2956
|
-
left: inputRef.current?.getBoundingClientRect().left,
|
|
2957
|
-
height: 'max-content'
|
|
2958
|
-
} : {})
|
|
3031
|
+
...dropdownPosition,
|
|
3032
|
+
opacity: Object.keys(dropdownPosition).length ? 1 : 0
|
|
2959
3033
|
},
|
|
2960
3034
|
className: clsx([`${prefixCls}-popup`, {
|
|
2961
3035
|
[`${prefixCls}-popup-up`]: openUpward
|