{"version":3,"file":"parent-scroll-observer.mjs","sources":["../../../../packages/shared/parent-scroll-observer.tsx"],"sourcesContent":["import { defineComponent, onBeforeUnmount, watch } from 'vue'\nimport { useFirstElement } from '../hooks/use-first-element'\nimport { debounce } from '../utils/throttle-debounce'\n\nconst SCROLL_KEY = Symbol('scrollHandler')\n\nexport default defineComponent({\n  name: 'ParentScrollObserver',\n  emits: ['scroll'],\n  setup(props, { emit, slots }) {\n    const { children, firstElement } = useFirstElement()\n    const targets: HTMLElement[] = []\n    const createParentScrollObserver = (element: HTMLElement | null) => {\n      while (element) {\n        element = element.parentElement\n        if (element) {\n          if (element.tagName === 'BODY') break\n          if (element.scrollHeight > element.offsetHeight) {\n            targets.push(element)\n          }\n        }\n      }\n      targets.forEach((target: any) => {\n        const scrollHandler = (e: Event) => emit('scroll', e)\n        target[SCROLL_KEY] = scrollHandler\n        target.addEventListener('scroll', scrollHandler)\n      })\n    }\n\n    const destroyResizeObserver = () => {\n      targets.forEach((target: any) => {\n        target.removeEventListener('scroll', target[SCROLL_KEY])\n      })\n      targets.length = 0\n    }\n\n    let observer: MutationObserver\n    const createContainerSizeObserver = (element: HTMLElement | null) => {\n      observer = new MutationObserver(\n        debounce(() => {\n          destroyResizeObserver()\n          createParentScrollObserver(element)\n        }, 300)\n      )\n      observer.observe(document.body, {\n        subtree: true,\n        childList: true,\n        attributes: true\n      })\n    }\n\n    watch(firstElement, (element) => {\n      destroyResizeObserver()\n      if (element) {\n        createContainerSizeObserver(element)\n        createParentScrollObserver(element)\n      }\n    })\n\n    onBeforeUnmount(() => {\n      destroyResizeObserver()\n      observer && observer.disconnect()\n    })\n\n    return () => {\n      children.value = slots.default?.()\n      return children.value\n    }\n  }\n})\n"],"names":["SCROLL_KEY","Symbol","name","emits","setup","props","emit","slots","children","firstElement","useFirstElement","targets","createParentScrollObserver","element","parentElement","tagName","scrollHeight","offsetHeight","push","forEach","target","scrollHandler","e","addEventListener","destroyResizeObserver","removeEventListener","length","observer","createContainerSizeObserver","MutationObserver","debounce","observe","document","body","subtree","childList","attributes","watch","onBeforeUnmount","disconnect","value","default"],"mappings":"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"}