{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-lockscreen/index.ts"],"sourcesContent":["import { isRef, onScopeDispose, watch } from 'vue'\nimport { computed } from '@vue/reactivity'\nimport { isClient } from '@vueuse/core'\nimport {\n  addClass,\n  getScrollBarWidth,\n  getStyle,\n  hasClass,\n  removeClass,\n  throwError,\n} from '@vuesax-plus/utils'\nimport { useNamespace } from '../use-namespace'\n\nimport type { Ref } from 'vue'\n\n/**\n * Hook that monitoring the ref value to lock or unlock the screen.\n * When the trigger became true, it assumes modal is now opened and vice versa.\n * @param trigger {Ref<boolean>}\n */\nexport const useLockscreen = (trigger: Ref<boolean>) => {\n  if (!isRef(trigger)) {\n    throwError(\n      '[useLockscreen]',\n      'You need to pass a ref param to this function'\n    )\n  }\n\n  const ns = useNamespace('popup')\n\n  const hiddenCls = computed(() => ns.bm('parent', 'hidden'))\n\n  if (!isClient || hasClass(document.body, hiddenCls.value)) {\n    return\n  }\n\n  let scrollBarWidth = 0\n  let withoutHiddenClass = false\n  let bodyWidth = '0'\n\n  const cleanup = () => {\n    setTimeout(() => {\n      removeClass(document.body, hiddenCls.value)\n      if (withoutHiddenClass) {\n        document.body.style.width = bodyWidth\n      }\n    }, 200)\n  }\n  watch(trigger, (val) => {\n    if (!val) {\n      cleanup()\n      return\n    }\n\n    withoutHiddenClass = !hasClass(document.body, hiddenCls.value)\n    if (withoutHiddenClass) {\n      bodyWidth = document.body.style.width\n    }\n    scrollBarWidth = getScrollBarWidth(ns.namespace.value)\n    const bodyHasOverflow =\n      document.documentElement.clientHeight < document.body.scrollHeight\n    const bodyOverflowY = getStyle(document.body, 'overflowY')\n    if (\n      scrollBarWidth > 0 &&\n      (bodyHasOverflow || bodyOverflowY === 'scroll') &&\n      withoutHiddenClass\n    ) {\n      document.body.style.width = `calc(100% - ${scrollBarWidth}px)`\n    }\n    addClass(document.body, hiddenCls.value)\n  })\n  onScopeDispose(() => cleanup())\n}\n"],"names":[],"mappings":";;;;;;;;;AAoBa,MAAA,aAAA,GAAgB,CAAC,OAA0B,KAAA;AACtD,EAAI,IAAA,CAAC,KAAM,CAAA,OAAO,CAAG,EAAA;AACnB,IAAA,UAAA;AAAA,MACE,iBAAA;AAAA,MACA,+CAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,EAAA,GAAK,aAAa,OAAO,CAAA,CAAA;AAE/B,EAAA,MAAM,YAAY,QAAS,CAAA,MAAM,GAAG,EAAG,CAAA,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAA;AAE1D,EAAA,IAAI,CAAC,QAAY,IAAA,QAAA,CAAS,SAAS,IAAM,EAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AACzD,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,cAAiB,GAAA,CAAA,CAAA;AACrB,EAAA,IAAI,kBAAqB,GAAA,KAAA,CAAA;AACzB,EAAA,IAAI,SAAY,GAAA,GAAA,CAAA;AAEhB,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,UAAA,CAAW,MAAM;AACf,MAAY,WAAA,CAAA,QAAA,CAAS,IAAM,EAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAC1C,MAAA,IAAI,kBAAoB,EAAA;AACtB,QAAS,QAAA,CAAA,IAAA,CAAK,MAAM,KAAQ,GAAA,SAAA,CAAA;AAAA,OAC9B;AAAA,OACC,GAAG,CAAA,CAAA;AAAA,GACR,CAAA;AACA,EAAM,KAAA,CAAA,OAAA,EAAS,CAAC,GAAQ,KAAA;AACtB,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAQ,OAAA,EAAA,CAAA;AACR,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,kBAAA,GAAqB,CAAC,QAAA,CAAS,QAAS,CAAA,IAAA,EAAM,UAAU,KAAK,CAAA,CAAA;AAC7D,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAY,SAAA,GAAA,QAAA,CAAS,KAAK,KAAM,CAAA,KAAA,CAAA;AAAA,KAClC;AACA,IAAiB,cAAA,GAAA,iBAAA,CAAkB,EAAG,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACrD,IAAA,MAAM,eACJ,GAAA,QAAA,CAAS,eAAgB,CAAA,YAAA,GAAe,SAAS,IAAK,CAAA,YAAA,CAAA;AACxD,IAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,QAAS,CAAA,IAAA,EAAM,WAAW,CAAA,CAAA;AACzD,IAAA,IACE,cAAiB,GAAA,CAAA,KAChB,eAAmB,IAAA,aAAA,KAAkB,aACtC,kBACA,EAAA;AACA,MAAS,QAAA,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,CAAe,YAAA,EAAA,cAAA,CAAA,GAAA,CAAA,CAAA;AAAA,KAC7C;AACA,IAAS,QAAA,CAAA,QAAA,CAAS,IAAM,EAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,GACxC,CAAA,CAAA;AACD,EAAe,cAAA,CAAA,MAAM,SAAS,CAAA,CAAA;AAChC;;;;"}