UNPKG

tdesign-vue-next

Version:
1 lines 6.87 kB
{"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAMA,eAAkB,GAAA,GAAA,CAAA;AAExB,IAAMC,aAAgB,GAAA,CAAA,CAAA;AAEf,SAASC,qBAAqBC,KAA+B,EAAA;AAClE,EAAA,IAAAC,OAAA,GAAkCC,OAAOF,KAAK,CAAA;IAAtCG,UAAA,GAAAF,OAAA,CAAAE,UAAA;IAAYC,SAAU,GAAAH,OAAA,CAAVG,SAAU,CAAA;AACxB,EAAA,IAAAC,iBAAA,GAAoBC,IAAI,KAAK,CAAA,CAAA;AACnC,EAAA,IAAMC,UAAUC,WAAY,EAAA,CAAA;AAC5B,EAAA,IAAMC,aAAaC,WAAY,EAAA,CAAA;EAEzB,IAAAC,cAAA,GAAiB,SAAjBA,cAAAA,CAAkBC,cAAA,EAA6BC,YAA8B,EAAA;AACjF,IAAA,IAAMC,eAAkB,GAAAD,YAAA,CAAaE,YAAe,GAAAF,YAAA,CAAaG,eAAelB,aAAgB,GAAA,CAAA,CAAA;AAC1F,IAAA,IAAAmB,KAAA,GACJJ,aAAaK,WAAc,GAAAJ,eAAA,IAAmBF,eAAeM,WACzD,GAAAL,YAAA,CAAaK,cACbN,cAAe,CAAAM,WAAA,CAAA;IACrB,IAAIC,yBAAwC,EAAC,CAAA;IAE3C,IAAAhB,UAAA,CAAWiB,KACX,IAAAC,OAAA,CAAOlB,UAAW,CAAAiB,KAAA,CAAME,iBAAsB,MAAA,QAAA,IAC9C,CAACnB,UAAA,CAAWiB,KAAM,CAAAE,iBAAA,CAAkBL,KACpC,EAAA;AACAE,MAAAA,sBAAA,GAAyBhB,WAAWiB,KAAM,CAAAE,iBAAA,CAAA;AAC5C,KAAA;AACO,IAAA,OAAAC,aAAA,CAAA;MACLN,KAAO,EAAA,EAAA,CAAAO,MAAA,CAAGC,IAAK,CAAAC,GAAA,CAAIT,OAAOpB,eAAe,CAAA,EAAA,IAAA,CAAA;AAAA,KAAA,EACtCsB,sBAAA,CAAA,CAAA;GAEP,CAAA;EAEM,IAAAQ,yBAAA,GAA4B,SAA5BA,yBAAAA,CAA6BC,OAAA,EAAkBC,GAAmC,EAAA;IACtF,IAAKC,OAAQ,CAAAvB,OAAA,CAAQa,KAAK,CAAA,IAAKb,OAAQ,CAAAa,KAAA,CAAMW,KAAM,CAAAC,OAAO,CAAO,IAAAC,SAAA,CAAU1B,OAAQ,CAAAa,KAAK,KAAKb,OAAQ,CAAAa,KAAA,EAAQ,OAAA;IAC7G,IAAIX,UAAW,CAAAW,KAAA,EAAO,OAAA;AAGtB,IAAA,IAAMc,aAAaL,GAAI,CAAAM,OAAA,KAAY,uBAA2B,IAAAnC,KAAA,CAAMoC,aAAa,IAAO,GAAAR,OAAA,CAAA;AAEpF,IAAA,IAAA5B,KAAA,CAAMqC,iBAAiBH,UAAY,EAAA;AAAA,MAAA,IAAAI,qBAAA,CAAA;MACrCjC,iBAAA,CAAkBe,KAAQ,GAAAc,UAAA,CAAA;AAEpB,MAAA,CAAAI,qBAAA,GAAAtC,KAAA,CAAAuC,oBAAA,cAAAD,qBAAA,KAAA,KAAA,CAAA,IAAAA,qBAAA,CAAAE,IAAA,CAAAxC,KAAA,EAAuBkC,YAAYL,GAAG,CAAA,CAAA;AAC9C,KAAA;GACF,CAAA;EAEM,IAAAY,2BAAA,GAA8B,SAA9BA,2BAAAA,CAA+B7B,cAAA,EAA6BC,YAA8B,EAAA;AAAA,IAAA,IAAA6B,iBAAA,CAAA;AACvF,IAAA,OAAAnB,aAAA,CAAA;AACLN,MAAAA,iBAAUQ,IAAA,CAAKkB,IAAI/B,cAAe,CAAAM,WAAA,EAAaL,aAAaK,WAAW,CAAA,EAAA,IAAA,CAAA;KAAAwB,EAAAA,CAAAA,iBAAA,GACpEvC,WAAWiB,KAAO,cAAAsB,iBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAlBA,iBAAA,CAAkBpB,iBAAA,CAAA,CAAA;GAEzB,CAAA;AAEM,EAAA,IAAAsB,kBAAA,GAAqBC,SAAS,YAAM;AAAA,IAAA,IAAAC,kBAAA,CAAA;IACxC,IAAIC,SAA4C,EAAC,CAAA;AACjD,IAAA,IAAMzB,iBAAoB,GAAA,CAAA,CAAAwB,kBAAA,GAAA3C,UAAA,CAAWiB,KAAO,MAAA0B,IAAAA,IAAAA,kBAAA,uBAAlBA,kBAAA,CAAkBxB,iBAAA,KAAqB,EAAC,CAAA;AAClE,IAAA,IAAI0B,WAAW1B,iBAAiB,CAAA,IAAM2B,SAAS3B,iBAAiB,CAAA,IAAKA,kBAAkBL,KAAQ,EAAA;AACpF8B,MAAAA,MAAA,GAAAzB,iBAAA,CAAA;AACX,KAAO,MAAA;MACL,IAAIlB,UAAUgB,KAAO,EAAA;AACV2B,QAAAA,MAAA,GAAAN,2BAAA,CAAA;AACX,OAAO,MAAA;AACIM,QAAAA,MAAA,GAAApC,cAAA,CAAA;AACX,OAAA;AACF,KAAA;AACO,IAAA,OAAAoC,MAAA,CAAA;AACT,GAAC,CAAA,CAAA;EAEM,OAAA;AACLH,IAAAA,kBAAA,EAAAA,kBAAA;AACAvC,IAAAA,iBAAA,EAAAA,iBAAA;AACAsB,IAAAA,yBAAA,EAAAA,yBAAAA;GACF,CAAA;AACF;;;;"}