{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-lockscreen/index.ts"],"sourcesContent":["import { watch, isRef, onScopeDispose } from 'vue'\r\n\r\nimport { isClient } from '@vueuse/core'\r\nimport { getScrollBarWidth } from '@sgui-plus/utils/scrollbar-width'\r\nimport { throwError } from '@sgui-plus/utils/error'\r\nimport {\r\n  addClass,\r\n  removeClass,\r\n  hasClass,\r\n  getStyle,\r\n} from '@sgui-plus/utils/dom'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\n/**\r\n * Hook that monitoring the ref value to lock or unlock the screen.\r\n * When the trigger became true, it assumes modal is now opened and vice versa.\r\n * @param trigger {Ref<boolean>}\r\n */\r\nexport const useLockscreen = (trigger: Ref<boolean>) => {\r\n  if (!isRef(trigger)) {\r\n    throwError(\r\n      '[useLockscreen]',\r\n      'You need to pass a ref param to this function'\r\n    )\r\n  }\r\n  if (!isClient || hasClass(document.body, 'sg-popup-parent--hidden')) {\r\n    return\r\n  }\r\n\r\n  let scrollBarWidth = 0\r\n  let withoutHiddenClass = false\r\n  let bodyPaddingRight = '0'\r\n  let computedBodyPaddingRight = 0\r\n\r\n  const cleanup = () => {\r\n    removeClass(document.body, 'sg-popup-parent--hidden')\r\n    if (withoutHiddenClass) {\r\n      document.body.style.paddingRight = bodyPaddingRight\r\n    }\r\n  }\r\n  watch(trigger, (val) => {\r\n    if (!val) {\r\n      cleanup()\r\n      return\r\n    }\r\n\r\n    withoutHiddenClass = !hasClass(document.body, 'sg-popup-parent--hidden')\r\n    if (withoutHiddenClass) {\r\n      bodyPaddingRight = document.body.style.paddingRight\r\n      computedBodyPaddingRight = parseInt(\r\n        getStyle(document.body, 'paddingRight'),\r\n        10\r\n      )\r\n    }\r\n    scrollBarWidth = getScrollBarWidth()\r\n    const bodyHasOverflow =\r\n      document.documentElement.clientHeight < document.body.scrollHeight\r\n    const bodyOverflowY = getStyle(document.body, 'overflowY')\r\n    if (\r\n      scrollBarWidth > 0 &&\r\n      (bodyHasOverflow || bodyOverflowY === 'scroll') &&\r\n      withoutHiddenClass\r\n    ) {\r\n      document.body.style.paddingRight = `${\r\n        computedBodyPaddingRight + scrollBarWidth\r\n      }px`\r\n    }\r\n    addClass(document.body, 'sg-popup-parent--hidden')\r\n  })\r\n  onScopeDispose(() => cleanup())\r\n}\r\n"],"names":[],"mappings":";;;;;;AAUY,MAAC,aAAa,GAAG,CAAC,OAAO,KAAK;AAC1C,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,yBAAyB,CAAC,EAAE;AACvE,IAAI,OAAO;AACX,GAAG;AACH,EAAE,IAAI,cAAc,GAAG,CAAC,CAAC;AACzB,EAAE,IAAI,kBAAkB,GAAG,KAAK,CAAC;AACjC,EAAE,IAAI,gBAAgB,GAAG,GAAG,CAAC;AAC7B,EAAE,IAAI,wBAAwB,GAAG,CAAC,CAAC;AACnC,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC1D,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAC1D,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AAC1B,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,kBAAkB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC7E,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1D,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;AACvF,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,YAAY,GAAG,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;AAC1F,KAAK;AACL,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AACvD,GAAG,CAAC,CAAC;AACL,EAAE,cAAc,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;AAClC;;;;"}