x-ui-design 0.3.35 → 0.3.36
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 +22 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +22 -15
- package/dist/index.js.map +1 -1
- package/lib/components/Select/Select.tsx +34 -26
- package/package.json +1 -1
- package/src/app/page.tsx +51 -16
package/dist/index.esm.js
CHANGED
|
@@ -2926,6 +2926,7 @@ styleInject(css_248z$5);
|
|
|
2926
2926
|
const LIST_HEIGHT = 200;
|
|
2927
2927
|
const PADDING_PLACEMENT = 16;
|
|
2928
2928
|
const PADDING_TAG_INPUT = 4;
|
|
2929
|
+
const FORM_MARGIN_BOTTOM = 20;
|
|
2929
2930
|
function getTextFromNode(node) {
|
|
2930
2931
|
if (typeof node === 'string' || typeof node === 'number') {
|
|
2931
2932
|
return node.toString();
|
|
@@ -3040,7 +3041,7 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3040
3041
|
if (!selectRef.current) return;
|
|
3041
3042
|
const triggerNode = selectRef.current?.querySelector(`.${prefixCls}-trigger`);
|
|
3042
3043
|
const selectBox = triggerNode.getBoundingClientRect();
|
|
3043
|
-
const dropdownHeight = listHeight;
|
|
3044
|
+
const dropdownHeight = (getPopupContainer ? getPopupContainer(triggerNode) : selectRef.current)?.querySelector(`.${prefixCls}-dropdown`)?.clientHeight || listHeight;
|
|
3044
3045
|
const windowHeight = window.innerHeight;
|
|
3045
3046
|
const spaceBelow = windowHeight - selectBox.bottom;
|
|
3046
3047
|
const spaceAbove = selectBox.top;
|
|
@@ -3049,16 +3050,17 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3049
3050
|
position: 'absolute'
|
|
3050
3051
|
};
|
|
3051
3052
|
const shouldShowAbove = spaceBelow < dropdownHeight && spaceAbove > dropdownHeight;
|
|
3053
|
+
const inForm = !!triggerNode.closest(`.${prefixClsForm}`) ? FORM_MARGIN_BOTTOM : 0;
|
|
3052
3054
|
if (getPopupContainer) {
|
|
3053
3055
|
positionStyle = {
|
|
3054
3056
|
...positionStyle,
|
|
3055
|
-
top: shouldShowAbove ? `${
|
|
3057
|
+
top: shouldShowAbove ? `${selectBox.top + document.documentElement.scrollTop - dropdownHeight + PADDING_PLACEMENT / 2 - inForm}px` : `${selectBox.top + document.documentElement.scrollTop + triggerNode.offsetHeight}px`,
|
|
3056
3058
|
left: `${selectBox.left - PADDING_PLACEMENT / 2}px`
|
|
3057
3059
|
};
|
|
3058
3060
|
} else {
|
|
3059
3061
|
positionStyle = {
|
|
3060
3062
|
...positionStyle,
|
|
3061
|
-
top: shouldShowAbove ? `${triggerNode.offsetTop - dropdownHeight + PADDING_PLACEMENT / 2}px` : `${triggerNode.offsetTop + triggerNode.offsetHeight}px`,
|
|
3063
|
+
top: shouldShowAbove ? `${triggerNode.offsetTop - dropdownHeight + PADDING_PLACEMENT / 2 - inForm}px` : `${triggerNode.offsetTop + triggerNode.offsetHeight}px`,
|
|
3062
3064
|
left: `${triggerNode.offsetLeft - PADDING_PLACEMENT / 2}px`
|
|
3063
3065
|
};
|
|
3064
3066
|
}
|
|
@@ -3066,7 +3068,7 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3066
3068
|
}, [prefixCls, listHeight, getPopupContainer]);
|
|
3067
3069
|
useEffect(() => {
|
|
3068
3070
|
if (!isOpen) {
|
|
3069
|
-
|
|
3071
|
+
setDropdownPosition({});
|
|
3070
3072
|
}
|
|
3071
3073
|
}, [isOpen]);
|
|
3072
3074
|
useEffect(() => {
|
|
@@ -3074,16 +3076,13 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3074
3076
|
updateDropdownPosition();
|
|
3075
3077
|
const controller = new AbortController();
|
|
3076
3078
|
const scrollableParents = getScrollParents(selectRef.current);
|
|
3077
|
-
const handleScroll = () => {
|
|
3078
|
-
updateDropdownPosition();
|
|
3079
|
-
};
|
|
3080
3079
|
scrollableParents.forEach(el => {
|
|
3081
|
-
el.addEventListener('scroll',
|
|
3080
|
+
el.addEventListener('scroll', updateDropdownPosition, {
|
|
3082
3081
|
passive: true,
|
|
3083
3082
|
signal: controller.signal
|
|
3084
3083
|
});
|
|
3085
3084
|
});
|
|
3086
|
-
window.addEventListener('scroll',
|
|
3085
|
+
window.addEventListener('scroll', updateDropdownPosition, {
|
|
3087
3086
|
passive: true,
|
|
3088
3087
|
signal: controller.signal
|
|
3089
3088
|
});
|
|
@@ -3094,6 +3093,9 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3094
3093
|
controller.abort();
|
|
3095
3094
|
};
|
|
3096
3095
|
}, [isOpen, getPopupContainer, updateDropdownPosition]);
|
|
3096
|
+
useEffect(() => {
|
|
3097
|
+
updateDropdownPosition();
|
|
3098
|
+
}, [searchQuery.length]);
|
|
3097
3099
|
const getScrollParents = element => {
|
|
3098
3100
|
const parents = [];
|
|
3099
3101
|
let current = element.parentElement;
|
|
@@ -3168,6 +3170,9 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3168
3170
|
setSelected(updatedSelected);
|
|
3169
3171
|
};
|
|
3170
3172
|
const handleOnKeyDown = e => {
|
|
3173
|
+
if (!isOpen) {
|
|
3174
|
+
return;
|
|
3175
|
+
}
|
|
3171
3176
|
const timeout = setTimeout(() => {
|
|
3172
3177
|
e.target.value = e.target.innerText.trim().replace('\n', '');
|
|
3173
3178
|
setSearchQuery(e.target.value);
|
|
@@ -3182,11 +3187,13 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3182
3187
|
handleEnterAddNewTag();
|
|
3183
3188
|
e.target.innerText = '';
|
|
3184
3189
|
}
|
|
3185
|
-
if (e.key === 'Backspace'
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
+
if (e.key === 'Backspace') {
|
|
3191
|
+
if (hasMode && !e.target.value.trim().length) {
|
|
3192
|
+
const updatedSelected = hasMode ? selected.filter(item => item !== selected[selected.length - 1]) : e.target.value.trim();
|
|
3193
|
+
onChange?.(updatedSelected);
|
|
3194
|
+
onSelect?.(updatedSelected);
|
|
3195
|
+
setSelected(updatedSelected);
|
|
3196
|
+
}
|
|
3190
3197
|
}
|
|
3191
3198
|
clearTimeout(timeout);
|
|
3192
3199
|
});
|
|
@@ -3397,7 +3404,7 @@ const SelectComponent = /*#__PURE__*/forwardRef(({
|
|
|
3397
3404
|
className: `${prefixCls}-arrow`
|
|
3398
3405
|
}, ArrowContainer, error && feedbackIcons ? /*#__PURE__*/React$1.createElement(ErrorIcon, null) : null), loading && /*#__PURE__*/React$1.createElement("span", {
|
|
3399
3406
|
className: `${prefixCls}-loading`
|
|
3400
|
-
}, /*#__PURE__*/React$1.createElement(LoadingIcon, null)))), getPopupContainer ? /*#__PURE__*/createPortal(dropdownContent, getPopupContainer(triggerNode)) : dropdownContent);
|
|
3407
|
+
}, /*#__PURE__*/React$1.createElement(LoadingIcon, null)))), getPopupContainer?.(triggerNode) ? /*#__PURE__*/createPortal(dropdownContent, getPopupContainer(triggerNode)) : dropdownContent);
|
|
3401
3408
|
});
|
|
3402
3409
|
SelectComponent.displayName = 'Select';
|
|
3403
3410
|
const Select = Object.assign(SelectComponent, {
|