{"version":3,"file":"useOverlayInnerStyle.mjs","sources":["../../../../components/select-input/hooks/useOverlayInnerStyle.ts"],"sourcesContent":["import { ref, toRefs, computed, CSSProperties } from 'vue';\nimport { isObject, isFunction, isArray, isBoolean } from 'lodash-es';\n\nimport { TdSelectInputProps } from '../type';\nimport { TdPopupProps, PopupVisibleChangeContext } from '../../popup';\nimport { useDisabled, useReadonly } from '@tdesign/shared-hooks';\n\nexport type overlayInnerStyleProps = Pick<\n  TdSelectInputProps,\n  'popupProps' | 'autoWidth' | 'readonly' | 'onPopupVisibleChange' | 'allowInput' | 'popupVisible'\n> & {\n  disabled?: boolean | Array<boolean>;\n};\n\n// 单位：px\nconst MAX_POPUP_WIDTH = 1000;\n// 避免因滚动条出现文本省略，预留宽度 8\nconst RESERVE_WIDTH = 0;\n\nexport function useOverlayInnerStyle(props: overlayInnerStyleProps) {\n  const { popupProps, autoWidth } = toRefs(props);\n  const innerPopupVisible = ref(false);\n  const disable = useDisabled();\n  const isReadonly = useReadonly();\n\n  const matchWidthFunc = (triggerElement: HTMLElement, popupElement: HTMLElement) => {\n    const SCROLLBAR_WIDTH = popupElement.scrollHeight > popupElement.offsetHeight ? RESERVE_WIDTH : 0;\n    const width =\n      popupElement.offsetWidth + SCROLLBAR_WIDTH >= triggerElement.offsetWidth\n        ? popupElement.offsetWidth\n        : triggerElement.offsetWidth;\n    let otherOverlayInnerStyle: CSSProperties = {};\n    if (\n      popupProps.value &&\n      typeof popupProps.value.overlayInnerStyle === 'object' &&\n      !popupProps.value.overlayInnerStyle.width\n    ) {\n      otherOverlayInnerStyle = popupProps.value.overlayInnerStyle;\n    }\n    return {\n      width: `${Math.min(width, MAX_POPUP_WIDTH)}px`,\n      ...otherOverlayInnerStyle,\n    };\n  };\n\n  const onInnerPopupVisibleChange = (visible: boolean, ctx: PopupVisibleChangeContext) => {\n    if ((isArray(disable.value) && disable.value.every(Boolean)) || (isBoolean(disable.value) && disable.value)) return;\n    if (isReadonly.value) return;\n\n    // 如果点击触发元素（输入框）且为可输入状态，则继续显示下拉框\n    const newVisible = ctx.trigger === 'trigger-element-click' && props.allowInput ? true : visible;\n    // 重复点击触发元素时，下拉框展示状态不变，不重复触发事件\n    if (props.popupVisible !== newVisible) {\n      innerPopupVisible.value = newVisible;\n\n      props.onPopupVisibleChange?.(newVisible, ctx);\n    }\n  };\n\n  const getAutoWidthPopupStyleWidth = (triggerElement: HTMLElement, popupElement: HTMLElement) => {\n    return {\n      width: `${Math.max(triggerElement.offsetWidth, popupElement.offsetWidth)}px`,\n      ...popupProps.value?.overlayInnerStyle,\n    };\n  };\n\n  const tOverlayInnerStyle = computed(() => {\n    let result: TdPopupProps['overlayInnerStyle'] = {};\n    const overlayInnerStyle = popupProps.value?.overlayInnerStyle || {};\n    if (isFunction(overlayInnerStyle) || (isObject(overlayInnerStyle) && overlayInnerStyle.width)) {\n      result = overlayInnerStyle;\n    } else {\n      if (autoWidth.value) {\n        result = getAutoWidthPopupStyleWidth;\n      } else {\n        result = matchWidthFunc;\n      }\n    }\n    return result;\n  });\n\n  return {\n    tOverlayInnerStyle,\n    innerPopupVisible,\n    onInnerPopupVisibleChange,\n  };\n}\n"],"names":["MAX_POPUP_WIDTH","RESERVE_WIDTH","useOverlayInnerStyle","props","_toRefs","toRefs","popupProps","autoWidth","innerPopupVisible","ref","disable","useDisabled","isReadonly","useReadonly","matchWidthFunc","triggerElement","popupElement","SCROLLBAR_WIDTH","scrollHeight","offsetHeight","width","offsetWidth","otherOverlayInnerStyle","value","_typeof","overlayInnerStyle","_objectSpread","concat","Math","min","onInnerPopupVisibleChange","visible","ctx","isArray","every","Boolean","isBoolean","newVisible","trigger","allowInput","popupVisible","_props$onPopupVisible","onPopupVisibleChange","call","getAutoWidthPopupStyleWidth","_popupProps$value","max","tOverlayInnerStyle","computed","_popupProps$value2","result","isFunction","isObject"],"mappings":"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"}