{"version":3,"file":"useScroll.mjs","sources":["../../../../src/composables/useScroll.ts"],"sourcesContent":["import { onMounted, onBeforeUnmount, ref, shallowRef } from 'vue'\n\nfunction getTargetElement (target: HTMLElement | string | undefined) {\n  if (!target) { throw new Error('No target was provided for `useScroll` hook!') }\n  return typeof target === 'string' ? document.querySelector(target) as HTMLElement : target\n}\n\nexport function setupScroll (fixed?: boolean, target?: HTMLElement | string) {\n  const scrollRoot = shallowRef<HTMLElement>()\n  let targetElement: HTMLElement | Window | undefined\n\n  const isScrolledDown = ref(false)\n  const prevScrollPosition = ref(0)\n\n  const onScroll = (e: Event) => {\n    const target = e.target as HTMLElement | Window\n    // @ts-ignore\n    const scrollValue = e.target instanceof Window ? target.scrollY : target.scrollTop\n\n    isScrolledDown.value = prevScrollPosition.value < scrollValue\n    prevScrollPosition.value = scrollValue\n  }\n\n  onMounted(() => {\n    targetElement = fixed ? window : getTargetElement(target || scrollRoot.value)\n    targetElement?.addEventListener('scroll', onScroll, fixed)\n  })\n\n  onBeforeUnmount(() => {\n    targetElement?.removeEventListener('scroll', onScroll)\n  })\n\n  return { scrollRoot, isScrolledDown }\n}\n"],"names":["target"],"mappings":";AAEA,SAAS,iBAAkB,QAA0C;AACnE,MAAI,CAAC,QAAQ;AAAQ,UAAA,IAAI,MAAM,8CAA8C;AAAA,EAAE;AAC/E,SAAO,OAAO,WAAW,WAAW,SAAS,cAAc,MAAM,IAAmB;AACtF;AAEgB,SAAA,YAAa,OAAiB,QAA+B;AAC3E,QAAM,aAAa;AACf,MAAA;AAEE,QAAA,iBAAiB,IAAI,KAAK;AAC1B,QAAA,qBAAqB,IAAI,CAAC;AAE1B,QAAA,WAAW,CAAC,MAAa;AAC7B,UAAMA,UAAS,EAAE;AAEjB,UAAM,cAAc,EAAE,kBAAkB,SAASA,QAAO,UAAUA,QAAO;AAE1D,mBAAA,QAAQ,mBAAmB,QAAQ;AAClD,uBAAmB,QAAQ;AAAA,EAAA;AAG7B,YAAU,MAAM;AACd,oBAAgB,QAAQ,SAAS,iBAAiB,UAAU,WAAW,KAAK;AAC7D,mDAAA,iBAAiB,UAAU,UAAU;AAAA,EAAK,CAC1D;AAED,kBAAgB,MAAM;AACL,mDAAA,oBAAoB,UAAU;AAAA,EAAQ,CACtD;AAEM,SAAA,EAAE,YAAY;AACvB;"}