{"version":3,"file":"useLockScroll.mjs","sources":["../../../packages/hooks/useLockScroll.ts"],"sourcesContent":["import { useCallback, useLayoutEffect } from 'react'\n\nconst getScrollbarSize = (): number => {\n  const tempDiv = document.createElement('div')\n\n  Object.assign(tempDiv.style, {\n    position: 'absolute',\n    left: '-9000px',\n    width: '100px',\n    height: '100px',\n    overflow: 'scroll',\n  })\n\n  document.body.appendChild(tempDiv)\n  const scrollbarSize = tempDiv.offsetWidth - tempDiv.clientWidth\n  document.body.removeChild(tempDiv)\n\n  return scrollbarSize\n}\n\nconst isVerticalScroll = (element: HTMLElement): boolean => {\n  const isBody = document.body === element\n\n  return isBody\n    ? document.documentElement.scrollHeight > window.innerHeight\n    : element.scrollHeight > element.clientHeight\n}\n\nconst getPaddingRight = (element: HTMLElement): number => {\n  return parseInt(window.getComputedStyle(element).paddingRight, 10) || 0\n}\n\nconst setStyleProperty = (\n  element: HTMLElement,\n  property: string,\n  value?: string,\n): void => {\n  if (value) {\n    element.style.setProperty(property, value)\n  } else {\n    element.style.removeProperty(property)\n  }\n}\n\nexport const useLockScroll = (element: HTMLElement = document.body): void => {\n  const lockScroll = useCallback(() => {\n    if (!isVerticalScroll(element)) return\n\n    const previousValues = {\n      paddingRight: element.style.paddingRight,\n      overflow: element.style.overflow,\n    }\n\n    const paddingRight = getPaddingRight(element) + getScrollbarSize()\n    setStyleProperty(element, 'padding-right', `${paddingRight}px`)\n    setStyleProperty(element, 'overflow', 'hidden')\n\n    const unlockScroll = () => {\n      const { paddingRight, overflow } = previousValues\n\n      setStyleProperty(element, 'padding-right', paddingRight)\n      setStyleProperty(element, 'overflow', overflow)\n    }\n\n    return unlockScroll\n  }, [element])\n\n  useLayoutEffect(() => {\n    const unlockScroll = lockScroll()\n    return unlockScroll\n  }, [lockScroll])\n}\n"],"names":["getScrollbarSize","tempDiv","document","createElement","Object","assign","style","position","left","width","height","overflow","body","appendChild","scrollbarSize","offsetWidth","clientWidth","removeChild","isVerticalScroll","element","isBody","documentElement","scrollHeight","window","innerHeight","clientHeight","getPaddingRight","parseInt","getComputedStyle","paddingRight","setStyleProperty","property","value","setProperty","removeProperty","useLockScroll","arguments","length","undefined","lockScroll","useCallback","previousValues","unlockScroll","useLayoutEffect"],"mappings":"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"}