{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-scroll-locker/index.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { canUseDom, getScrollBarSize, removeCSS, updateCSS } from '@antdv/utils';\nimport { computed, watchEffect } from 'vue';\n\nconst UNIQUE_ID = `vc-util-locker-${Date.now()}`;\n\nlet uuid = 0;\n\n/**\n * Test usage export. Do not use in your production\n */\nexport function isBodyOverflowing() {\n  return (\n    document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight)\n    && window.innerWidth > document.body.offsetWidth\n  );\n}\n\nexport function useScrollLocker(lock?: Ref<boolean>) {\n  const mergedLock = computed(() => !!lock && !!lock.value);\n  uuid += 1;\n  const id = `${UNIQUE_ID}_${uuid}`;\n\n  watchEffect(\n    (onClear) => {\n      if (!canUseDom())\n        return;\n\n      if (mergedLock.value) {\n        const scrollbarSize = getScrollBarSize();\n        const isOverflow = isBodyOverflowing();\n\n        updateCSS(\n          `\nhtml body {\n  overflow-y: hidden;\n  ${isOverflow ? `width: calc(100% - ${scrollbarSize}px);` : ''}\n}`,\n          id,\n        );\n      } else {\n        removeCSS(id);\n      }\n      onClear(() => {\n        removeCSS(id);\n      });\n    },\n    { flush: 'post' },\n  );\n}\n"],"names":[],"mappings":";;;;;;AAIA,MAAM,SAAY,GAAA,CAAA,eAAA,EAAkB,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA,CAAA;AAE9C,IAAI,IAAO,GAAA,CAAA,CAAA;AAKJ,SAAS,iBAAoB,GAAA;AAClC,EACE,OAAA,QAAA,CAAS,IAAK,CAAA,YAAA,IAAgB,MAAO,CAAA,WAAA,IAAe,QAAS,CAAA,eAAA,CAAgB,YAC1E,CAAA,IAAA,MAAA,CAAO,UAAa,GAAA,QAAA,CAAS,IAAK,CAAA,WAAA,CAAA;AAEzC,CAAA;AAEO,SAAS,gBAAgB,IAAqB,EAAA;AACnD,EAAM,MAAA,UAAA,GAAa,SAAS,MAAM,CAAC,CAAC,IAAQ,IAAA,CAAC,CAAC,IAAA,CAAK,KAAK,CAAA,CAAA;AACxD,EAAQ,IAAA,IAAA,CAAA,CAAA;AACR,EAAA,MAAM,EAAK,GAAA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AAE/B,EAAA,WAAA;AAAA,IACE,CAAC,OAAY,KAAA;AACX,MAAA,IAAI,CAAC,SAAU,EAAA;AACb,QAAA,OAAA;AAEF,MAAA,IAAI,WAAW,KAAO,EAAA;AACpB,QAAA,MAAM,gBAAgB,gBAAiB,EAAA,CAAA;AACvC,QAAA,MAAM,aAAa,iBAAkB,EAAA,CAAA;AAErC,QAAA,SAAA;AAAA,UACE,CAAA;AAAA;AAAA;AAAA,EAAA,EAGN,UAAa,GAAA,CAAA,mBAAA,EAAsB,aAAa,CAAA,IAAA,CAAA,GAAS,EAAE,CAAA;AAAA,CAAA,CAAA;AAAA,UAErD,EAAA;AAAA,SACF,CAAA;AAAA,OACK,MAAA;AACL,QAAA,SAAA,CAAU,EAAE,CAAA,CAAA;AAAA,OACd;AACA,MAAA,OAAA,CAAQ,MAAM;AACZ,QAAA,SAAA,CAAU,EAAE,CAAA,CAAA;AAAA,OACb,CAAA,CAAA;AAAA,KACH;AAAA,IACA,EAAE,OAAO,MAAO,EAAA;AAAA,GAClB,CAAA;AACF;;;;"}