{"version":3,"file":"use-overflow.mjs","sources":["../../../../packages/hooks/use-overflow.ts"],"sourcesContent":["import { watch, type Ref } from 'vue'\nimport { getScrollBarWidth, getStyle, isScroll, setStyle } from '../utils/dom'\n\nexport const useOverflow = (\n  containerRef: Ref<HTMLElement | undefined>,\n  targetRef?: Ref<HTMLElement | undefined>\n) => {\n  let isSetOverflow = false\n\n  const originStyle = {\n    overflow: '',\n    width: ''\n  }\n\n  const isBody = (element: HTMLElement) => element.tagName === 'BODY'\n\n  const setOverflowHidden = () => {\n    if (containerRef.value) {\n      const element = containerRef.value\n      if (!isSetOverflow && element.style.overflow !== 'hidden') {\n        const scrollBarWidth = getScrollBarWidth(element)\n        if (scrollBarWidth > 0 || isScroll(element)) {\n          originStyle.overflow = element.style.overflow\n          originStyle.width = element.style.width\n          let offsetX = 0\n          // 在微前端子应用中使用\n          if (isBody(element)) {\n            offsetX = element.getBoundingClientRect().left || 0\n          }\n          setStyle(element, {\n            width: `calc(100% - ${Math.ceil(scrollBarWidth - offsetX)}px)`,\n            overflow: 'hidden'\n          })\n          isSetOverflow = true\n        }\n      }\n    }\n  }\n\n  const resetOverflow = () => {\n    if (containerRef.value && isSetOverflow) {\n      const element = containerRef.value\n      setStyle(element, {\n        overflow: originStyle.overflow,\n        width: originStyle.width\n      })\n      isSetOverflow = false\n    }\n  }\n\n  // 添加position\n  watch(\n    () => targetRef?.value,\n    (element) => {\n      if (containerRef.value && !isBody(containerRef.value)) {\n        element &&\n          setStyle(element, {\n            position: 'absolute'\n          })\n\n        const position = getStyle(containerRef.value, 'position')\n        if (position === 'static') {\n          setStyle(containerRef.value, { position: 'relative' })\n        }\n      }\n    }\n  )\n\n  return {\n    setOverflowHidden,\n    resetOverflow\n  }\n}\n"],"names":[],"mappings":";;;AAGa,MAAA,WAAA,GAAc,CACzB,YAAA,EACA,SACG,KAAA;AACH,EAAA,IAAI,aAAgB,GAAA,KAAA,CAAA;AAEpB,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,MAAS,GAAA,CAAC,OAAyB,KAAA,OAAA,CAAQ,OAAY,KAAA,MAAA,CAAA;AAE7D,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,aAAa,KAAO,EAAA;AACtB,MAAA,MAAM,UAAU,YAAa,CAAA,KAAA,CAAA;AAC7B,MAAA,IAAI,CAAC,aAAA,IAAiB,OAAQ,CAAA,KAAA,CAAM,aAAa,QAAU,EAAA;AACzD,QAAM,MAAA,cAAA,GAAiB,kBAAkB,OAAO,CAAA,CAAA;AAChD,QAAA,IAAI,cAAiB,GAAA,CAAA,IAAK,QAAS,CAAA,OAAO,CAAG,EAAA;AAC3C,UAAY,WAAA,CAAA,QAAA,GAAW,QAAQ,KAAM,CAAA,QAAA,CAAA;AACrC,UAAY,WAAA,CAAA,KAAA,GAAQ,QAAQ,KAAM,CAAA,KAAA,CAAA;AAClC,UAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,UAAI,IAAA,MAAA,CAAO,OAAO,CAAG,EAAA;AACnB,YAAU,OAAA,GAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,IAAQ,IAAA,CAAA,CAAA;AAAA,WACpD;AACA,UAAA,QAAA,CAAS,OAAS,EAAA;AAAA,YAChB,KAAO,EAAA,CAAA,YAAA,EAAe,IAAK,CAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA,CAAA,GAAA,CAAA;AAAA,YACxD,QAAU,EAAA,QAAA;AAAA,WACX,CAAA,CAAA;AACD,UAAgB,aAAA,GAAA,IAAA,CAAA;AAAA,SAClB;AAAA,OACF;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAI,IAAA,YAAA,CAAa,SAAS,aAAe,EAAA;AACvC,MAAA,MAAM,UAAU,YAAa,CAAA,KAAA,CAAA;AAC7B,MAAA,QAAA,CAAS,OAAS,EAAA;AAAA,QAChB,UAAU,WAAY,CAAA,QAAA;AAAA,QACtB,OAAO,WAAY,CAAA,KAAA;AAAA,OACpB,CAAA,CAAA;AACD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAGA,EAAA,KAAA;AAAA,IACE,MAAM,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,KAAA;AAAA,IACjB,CAAC,OAAY,KAAA;AACX,MAAA,IAAI,aAAa,KAAS,IAAA,CAAC,MAAO,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACrD,QAAA,OAAA,IACE,SAAS,OAAS,EAAA;AAAA,UAChB,QAAU,EAAA,UAAA;AAAA,SACX,CAAA,CAAA;AAEH,QAAA,MAAM,QAAW,GAAA,QAAA,CAAS,YAAa,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AACxD,QAAA,IAAI,aAAa,QAAU,EAAA;AACzB,UAAA,QAAA,CAAS,YAAa,CAAA,KAAA,EAAO,EAAE,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,SACvD;AAAA,OACF;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,iBAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACF;;;;"}