{"version":3,"file":"index.mjs","sources":["../../../../packages/hooks/use-lockscreen/index.ts"],"sourcesContent":["import { watch, isRef, onScopeDispose } from 'vue'\n\nimport { isClient } from '@vueuse/core'\nimport {\n  throwError,\n  addClass,\n  removeClass,\n  hasClass,\n  getStyle,\n  getScrollBarWidth,\n} from '@element-ultra/utils'\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  if (!isClient || hasClass(document.body, 'el-popup-parent--hidden')) {\n    return\n  }\n\n  let scrollBarWidth = 0\n  let withoutHiddenClass = false\n  let bodyPaddingRight = '0'\n  let computedBodyPaddingRight = 0\n\n  const cleanup = () => {\n    removeClass(document.body, 'el-popup-parent--hidden')\n    if (withoutHiddenClass) {\n      document.body.style.paddingRight = bodyPaddingRight\n    }\n  }\n  watch(trigger, (val) => {\n    if (!val) {\n      cleanup()\n      return\n    }\n\n    withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden')\n    if (withoutHiddenClass) {\n      bodyPaddingRight = document.body.style.paddingRight\n      computedBodyPaddingRight = parseInt(\n        getStyle(document.body, 'paddingRight'),\n        10\n      )\n    }\n    scrollBarWidth = getScrollBarWidth()\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.paddingRight = `${\n        computedBodyPaddingRight + scrollBarWidth\n      }px`\n    }\n    addClass(document.body, 'el-popup-parent--hidden')\n  })\n  onScopeDispose(() => cleanup())\n}\n"],"names":[],"mappings":";;;;;;;AAmBa,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;AACA,EAAA,IAAI,CAAC,QAAY,IAAA,QAAA,CAAS,QAAS,CAAA,IAAA,EAAM,yBAAyB,CAAG,EAAA;AACnE,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,cAAiB,GAAA,CAAA,CAAA;AACrB,EAAA,IAAI,kBAAqB,GAAA,KAAA,CAAA;AACzB,EAAA,IAAI,gBAAmB,GAAA,GAAA,CAAA;AACvB,EAAA,IAAI,wBAA2B,GAAA,CAAA,CAAA;AAE/B,EAAA,MAAM,UAAU,MAAM;AACpB,IAAY,WAAA,CAAA,QAAA,CAAS,MAAM,yBAAyB,CAAA,CAAA;AACpD,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAS,QAAA,CAAA,IAAA,CAAK,MAAM,YAAe,GAAA,gBAAA,CAAA;AAAA,KACrC;AAAA,GACF,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,yBAAyB,CAAA,CAAA;AACvE,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAmB,gBAAA,GAAA,QAAA,CAAS,KAAK,KAAM,CAAA,YAAA,CAAA;AACvC,MAA2B,wBAAA,GAAA,QAAA;AAAA,QACzB,QAAA,CAAS,QAAS,CAAA,IAAA,EAAM,cAAc,CAAA;AAAA,QACtC,EAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,cAAA,GAAiB,iBAAkB,EAAA,CAAA;AACnC,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,MAAA,QAAA,CAAS,IAAK,CAAA,KAAA,CAAM,YAAe,GAAA,CAAA,EACjC,wBAA2B,GAAA,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAE/B;AACA,IAAS,QAAA,CAAA,QAAA,CAAS,MAAM,yBAAyB,CAAA,CAAA;AAAA,GAClD,CAAA,CAAA;AACD,EAAe,cAAA,CAAA,MAAM,SAAS,CAAA,CAAA;AAChC;;;;"}