{"version":3,"file":"scroll.mjs","sources":["../../../../../packages/utils/private/scroll.ts"],"sourcesContent":["import { css, getElement } from './dom'\n\nconst scrollTargets = [null, document, document.body, document.scrollingElement, document.documentElement]\n\nexport function getScrollTarget(el, targetEl) {\n  let target = getElement(targetEl)\n\n  if (target === void 0) {\n    if (el === void 0 || el === null) {\n      return window\n    }\n\n    target = el.closest('.scroll,.scroll-y,.overflow-auto')\n  }\n\n  return scrollTargets.includes(target) ? window : target\n}\n\nexport function getScrollHeight(el) {\n  return (el === window ? document.body : el).scrollHeight\n}\n\nexport function getScrollWidth(el) {\n  return (el === window ? document.body : el).scrollWidth\n}\n\nexport function getVerticalScrollPosition(scrollTarget) {\n  return scrollTarget === window ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 : scrollTarget.scrollTop\n}\n\nexport function getHorizontalScrollPosition(scrollTarget) {\n  return scrollTarget === window ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 : scrollTarget.scrollLeft\n}\n\nexport function animVerticalScrollTo(el, to, duration = 0, prevTime?) {\n  prevTime = prevTime || performance.now()\n  const pos = getVerticalScrollPosition(el)\n\n  if (duration <= 0) {\n    if (pos !== to) {\n      setScroll(el, to)\n    }\n    return\n  }\n\n  requestAnimationFrame(nowTime => {\n    const frameTime = nowTime - prevTime\n    const newPos = pos + ((to - pos) / Math.max(frameTime, duration)) * frameTime\n    setScroll(el, newPos)\n    if (newPos !== to) {\n      animVerticalScrollTo(el, to, duration - frameTime, nowTime)\n    }\n  })\n}\n\nexport function animHorizontalScrollTo(el, to, duration = 0, prevTime?) {\n  prevTime = prevTime || performance.now()\n  const pos = getHorizontalScrollPosition(el)\n\n  if (duration <= 0) {\n    if (pos !== to) {\n      setHorizontalScroll(el, to)\n    }\n    return\n  }\n\n  requestAnimationFrame(nowTime => {\n    const frameTime = nowTime - prevTime\n    const newPos = pos + ((to - pos) / Math.max(frameTime, duration)) * frameTime\n    setHorizontalScroll(el, newPos)\n    if (newPos !== to) {\n      animHorizontalScrollTo(el, to, duration - frameTime, nowTime)\n    }\n  })\n}\n\nfunction setScroll(scrollTarget, offset) {\n  if (scrollTarget === window) {\n    window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, offset)\n    return\n  }\n  scrollTarget.scrollTop = offset\n}\n\nfunction setHorizontalScroll(scrollTarget, offset) {\n  if (scrollTarget === window) {\n    window.scrollTo(offset, window.pageYOffset || window.scrollY || document.body.scrollTop || 0)\n    return\n  }\n  scrollTarget.scrollLeft = offset\n}\n\nexport function setVerticalScrollPosition(scrollTarget, offset, duration) {\n  if (duration) {\n    animVerticalScrollTo(scrollTarget, offset, duration)\n    return\n  }\n  setScroll(scrollTarget, offset)\n}\n\nexport function setHorizontalScrollPosition(scrollTarget, offset, duration) {\n  if (duration) {\n    animHorizontalScrollTo(scrollTarget, offset, duration)\n    return\n  }\n  setHorizontalScroll(scrollTarget, offset)\n}\n\nlet size\nexport function getScrollbarWidth() {\n  if (size !== undefined) {\n    return size\n  }\n\n  const inner = document.createElement('p'),\n    outer = document.createElement('div')\n\n  css(inner, {\n    width: '100%',\n    height: '200px'\n  })\n  css(outer, {\n    position: 'absolute',\n    top: '0px',\n    left: '0px',\n    visibility: 'hidden',\n    width: '200px',\n    height: '150px',\n    overflow: 'hidden'\n  })\n\n  outer.appendChild(inner)\n\n  document.body.appendChild(outer)\n\n  const w1 = inner.offsetWidth\n  outer.style.overflow = 'scroll'\n  let w2 = inner.offsetWidth\n\n  if (w1 === w2) {\n    w2 = outer.clientWidth\n  }\n\n  outer.remove()\n  size = w1 - w2\n\n  return size\n}\n\nexport function hasScrollbar(el, onY = true) {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) {\n    return false\n  }\n\n  return onY\n    ? el.scrollHeight > el.clientHeight &&\n        (el.classList.contains('scroll') ||\n          el.classList.contains('overflow-auto') ||\n          ['auto', 'scroll'].includes(window.getComputedStyle(el)['overflow-y']))\n    : el.scrollWidth > el.clientWidth &&\n        (el.classList.contains('scroll') ||\n          el.classList.contains('overflow-auto') ||\n          ['auto', 'scroll'].includes(window.getComputedStyle(el)['overflow-x']))\n}\n\nexport default {\n  getScrollTarget,\n\n  getScrollHeight,\n  getScrollWidth,\n\n  getVerticalScrollPosition,\n  getHorizontalScrollPosition,\n\n  animVerticalScrollTo,\n  animHorizontalScrollTo,\n\n  setVerticalScrollPosition,\n  setHorizontalScrollPosition,\n\n  getScrollbarWidth,\n  hasScrollbar\n}\n"],"names":[],"mappings":"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"}