{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-overflow/index.ts"],"sourcesContent":["import { onBeforeUnmount, ref, watch } from 'vue'\nimport { throttle } from '@element-plus/utils'\nimport type { Ref } from 'vue'\n\nexport type OverflowOptions = {\n  selectors: string\n  condition?: (contentWidth: number, containerWidth: number) => boolean\n}\n\nconst CHECK_INTERVAL = 50\n\nexport const useOverflow = (\n  containerRef: Ref<HTMLElement | undefined>,\n  options: OverflowOptions\n) => {\n  const overflow = ref(false)\n  let resizeObserver: ResizeObserver | null\n  let mutationObserver: MutationObserver | null\n\n  const defaultCondition = (contentWidth: number, containerWidth: number) =>\n    contentWidth > containerWidth\n\n  const condition = options?.condition ?? defaultCondition\n\n  const cleanup = () => {\n    if (mutationObserver) {\n      mutationObserver.disconnect()\n      mutationObserver = null\n    }\n\n    if (resizeObserver && containerRef.value) {\n      resizeObserver.unobserve(containerRef.value)\n      resizeObserver = null\n    }\n  }\n\n  const observer = () => {\n    const container = containerRef.value\n    const containerWidth = container?.getBoundingClientRect().width\n    const content = container?.querySelector(options.selectors)\n    const contentWidth = content?.getBoundingClientRect().width\n\n    if (contentWidth && containerWidth && containerWidth !== 0) {\n      overflow.value = condition(contentWidth, containerWidth) ? true : false\n    }\n  }\n\n  const stopWatch = watch(\n    () => containerRef.value,\n    (el: any) => {\n      cleanup()\n\n      if (el) {\n        resizeObserver = new ResizeObserver(observer)\n        resizeObserver.observe(el)\n\n        mutationObserver = new MutationObserver(\n          throttle(observer, CHECK_INTERVAL)\n        )\n        // mutationObserver = new MutationObserver(observer)\n        mutationObserver.observe(el, { childList: true, subtree: true })\n        observer()\n      }\n    },\n    { immediate: true, flush: 'post' }\n  )\n\n  onBeforeUnmount(() => {\n    cleanup()\n    stopWatch()\n  })\n\n  return {\n    overflow,\n    observer,\n    cleanup,\n    stopWatch,\n  }\n}\n"],"names":[],"mappings":";;;AASA,MAAM,cAAiB,GAAA,EAAA,CAAA;AAEV,MAAA,WAAA,GAAc,CACzB,YAAA,EACA,OACG,KAAA;AAdL,EAAA,IAAA,EAAA,CAAA;AAeE,EAAM,MAAA,QAAA,GAAW,IAAI,KAAK,CAAA,CAAA;AAC1B,EAAI,IAAA,cAAA,CAAA;AACJ,EAAI,IAAA,gBAAA,CAAA;AAEJ,EAAA,MAAM,gBAAmB,GAAA,CAAC,YAAsB,EAAA,cAAA,KAC9C,YAAe,GAAA,cAAA,CAAA;AAEjB,EAAM,MAAA,SAAA,GAAA,CAAY,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,SAAA,KAAT,IAAsB,GAAA,EAAA,GAAA,gBAAA,CAAA;AAExC,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAA,gBAAA,CAAiB,UAAW,EAAA,CAAA;AAC5B,MAAmB,gBAAA,GAAA,IAAA,CAAA;AAAA,KACrB;AAEA,IAAI,IAAA,cAAA,IAAkB,aAAa,KAAO,EAAA;AACxC,MAAe,cAAA,CAAA,SAAA,CAAU,aAAa,KAAK,CAAA,CAAA;AAC3C,MAAiB,cAAA,GAAA,IAAA,CAAA;AAAA,KACnB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,MAAM,YAAY,YAAa,CAAA,KAAA,CAAA;AAC/B,IAAM,MAAA,cAAA,GAAiB,uCAAW,qBAAwB,EAAA,CAAA,KAAA,CAAA;AAC1D,IAAM,MAAA,OAAA,GAAU,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,aAAA,CAAc,OAAQ,CAAA,SAAA,CAAA,CAAA;AACjD,IAAM,MAAA,YAAA,GAAe,mCAAS,qBAAwB,EAAA,CAAA,KAAA,CAAA;AAEtD,IAAI,IAAA,YAAA,IAAgB,cAAkB,IAAA,cAAA,KAAmB,CAAG,EAAA;AAC1D,MAAA,QAAA,CAAS,KAAQ,GAAA,SAAA,CAAU,YAAc,EAAA,cAAc,IAAI,IAAO,GAAA,KAAA,CAAA;AAAA,KACpE;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,SAAY,GAAA,KAAA;AAAA,IAChB,MAAM,YAAa,CAAA,KAAA;AAAA,IACnB,CAAC,EAAY,KAAA;AACX,MAAQ,OAAA,EAAA,CAAA;AAER,MAAA,IAAI,EAAI,EAAA;AACN,QAAiB,cAAA,GAAA,IAAI,eAAe,QAAQ,CAAA,CAAA;AAC5C,QAAA,cAAA,CAAe,QAAQ,EAAE,CAAA,CAAA;AAEzB,QAAA,gBAAA,GAAmB,IAAI,gBAAA;AAAA,UACrB,QAAA,CAAS,UAAU,cAAc,CAAA;AAAA,SACnC,CAAA;AAEA,QAAA,gBAAA,CAAiB,QAAQ,EAAI,EAAA,EAAE,WAAW,IAAM,EAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAC/D,QAAS,QAAA,EAAA,CAAA;AAAA,OACX;AAAA,KACF;AAAA,IACA,EAAE,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,GACnC,CAAA;AAEA,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAQ,OAAA,EAAA,CAAA;AACR,IAAU,SAAA,EAAA,CAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AACF;;;;"}