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 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 ? `${selectRef.current.offsetTop + PADDING_PLACEMENT / 2 - dropdownHeight}px` : `${selectRef.current.offsetTop + selectRef.current.clientHeight}px`,
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
- return setDropdownPosition({});
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', handleScroll, {
3080
+ el.addEventListener('scroll', updateDropdownPosition, {
3082
3081
  passive: true,
3083
3082
  signal: controller.signal
3084
3083
  });
3085
3084
  });
3086
- window.addEventListener('scroll', handleScroll, {
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' && (hasMode ? !searchQuery.trim().length : searchQuery.trim().length)) {
3186
- const updatedSelected = hasMode ? selected.filter(item => item !== selected[selected.length - 1]) : searchQuery.trim();
3187
- onChange?.(updatedSelected);
3188
- onSelect?.(updatedSelected);
3189
- setSelected(updatedSelected);
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, {