{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-lockscreen/index.ts"],"sourcesContent":["import { watch, isRef, onScopeDispose } from 'vue'\n\nimport {\n  throwError,\n  addClass,\n  removeClass,\n  hasClass,\n  isClient,\n  getStyle,\n  getScrollBarWidth,\n} from '@hongluan-ui/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>, autoClean = true) => {\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, 'no-scroll')) {\n    return\n  }\n\n  let scrollBarWidth = 0\n  let withoutHiddenClass = false\n  let bodyWidth = '0'\n\n  const cleanup = () => {\n    if (autoClean) { // 自动清除\n      setTimeout(() => {\n        removeClass(document?.body, 'no-scroll')\n        if (withoutHiddenClass && document) {\n          document.body.style.width = bodyWidth\n        }\n      }, 200)\n    } else { // 手工清除，一般用于动画结束后清除\n      if (hasClass(document?.body, 'no-scroll')) {\n        removeClass(document?.body, 'no-scroll')\n        document.body.style.width = bodyWidth\n      }\n    }\n  }\n\n  watch(trigger, val => {\n    if (!val && autoClean) {\n      cleanup()\n      return\n    }\n\n    withoutHiddenClass = !hasClass(document.body, 'no-scroll')\n    if (withoutHiddenClass) {\n      bodyWidth = document.body.style.width\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.width = `calc(100% - ${scrollBarWidth}px)`\n    }\n    addClass(document.body, 'no-scroll')\n  })\n  onScopeDispose(() => cleanup())\n\n  return cleanup\n}\n"],"names":[],"mappings":";;;;;;;AAUY,MAAC,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,KAAK;AAC5D,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACvB,IAAI,UAAU,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;AACnF,GAAG;AACH,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;AACzD,IAAI,OAAO;AACX,GAAG;AACH,EAAE,IAAI,cAAc,GAAG,CAAC,CAAC;AACzB,EAAE,IAAI,kBAAkB,GAAG,KAAK,CAAC;AACjC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC;AACtB,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,UAAU,CAAC,MAAM;AACvB,QAAQ,WAAW,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC5E,QAAQ,IAAI,kBAAkB,IAAI,QAAQ,EAAE;AAC5C,UAAU,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AAChD,SAAS;AACT,OAAO,EAAE,GAAG,CAAC,CAAC;AACd,KAAK,MAAM;AACX,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;AAC5E,QAAQ,WAAW,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC5E,QAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AAC9C,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AAC1B,IAAI,IAAI,CAAC,GAAG,IAAI,SAAS,EAAE;AAC3B,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,kBAAkB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC/D,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,KAAK;AACL,IAAI,cAAc,GAAG,iBAAiB,EAAE,CAAC;AACzC,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/F,IAAI,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC/D,IAAI,IAAI,cAAc,GAAG,CAAC,KAAK,eAAe,IAAI,aAAa,KAAK,QAAQ,CAAC,IAAI,kBAAkB,EAAE;AACrG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;AACrE,KAAK;AACL,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzC,GAAG,CAAC,CAAC;AACL,EAAE,cAAc,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;AAClC,EAAE,OAAO,OAAO,CAAC;AACjB;;;;"}