UNPKG

vuestic-ui

Version:
1 lines 2.39 kB
{"version":3,"file":"useIntersectionObserver.mjs","sources":["../../../../src/composables/useIntersectionObserver.ts"],"sourcesContent":["import { ref, unref, computed, watch, onBeforeUnmount, type Ref } from 'vue'\nimport { unwrapEl } from '../utils/unwrapEl'\n\ntype MaybeRef<T> = T | Ref<T>\n\nexport const useIntersectionObserver = <T extends HTMLElement | undefined>(\n cb: (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void,\n options: Ref<IntersectionObserverInit> = ref({}),\n target: Ref<MaybeRef<T>[] | T> = ref([]),\n enabled = true,\n) => {\n const observer = ref<IntersectionObserver>()\n\n const disconnectObserver = () => {\n observer.value?.disconnect()\n }\n\n const observeTarget = (target: MaybeRef<T>) => {\n const disclosedTarget = unwrapEl(unref(target))\n disclosedTarget && observer.value?.observe(disclosedTarget)\n }\n\n const observeAll = (targets: MaybeRef<T>[]) => {\n targets.forEach(observeTarget)\n }\n\n const initObserver = () => {\n observer.value = new IntersectionObserver(cb, options.value)\n }\n\n const isIntersectionDisabled = computed(() => !enabled || !(typeof window !== 'undefined' && 'IntersectionObserver' in window))\n\n watch([target, options], ([newTarget]) => {\n if (isIntersectionDisabled.value) { return }\n\n disconnectObserver()\n\n if (!newTarget) { return }\n\n initObserver()\n\n Array.isArray(newTarget) ? observeAll(newTarget) : observeTarget(newTarget)\n }, { immediate: true })\n\n onBeforeUnmount(disconnectObserver)\n\n return { isIntersectionDisabled }\n}\n"],"names":["target"],"mappings":";;AAKO,MAAM,0BAA0B,CACrC,IACA,UAAyC,IAAI,CAAE,CAAA,GAC/C,SAAiC,IAAI,CAAA,CAAE,GACvC,UAAU,SACP;AACH,QAAM,WAAW;AAEjB,QAAM,qBAAqB,MAAM;;AAC/B,mBAAS,UAAT,mBAAgB;AAAA,EAAW;AAGvB,QAAA,gBAAgB,CAACA,YAAwB;;AAC7C,UAAM,kBAAkB,SAAS,MAAMA,OAAM,CAAC;AAC3B,yBAAA,cAAS,UAAT,mBAAgB,QAAQ;AAAA,EAAe;AAGtD,QAAA,aAAa,CAAC,YAA2B;AAC7C,YAAQ,QAAQ,aAAa;AAAA,EAAA;AAG/B,QAAM,eAAe,MAAM;AACzB,aAAS,QAAQ,IAAI,qBAAqB,IAAI,QAAQ,KAAK;AAAA,EAAA;AAGvD,QAAA,yBAAyB,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,WAAW,eAAe,0BAA0B,OAAO;AAE9H,QAAM,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC,SAAS,MAAM;AACxC,QAAI,uBAAuB,OAAO;AAAE;AAAA,IAAO;AAExB;AAEnB,QAAI,CAAC,WAAW;AAAE;AAAA,IAAO;AAEZ;AAEb,UAAM,QAAQ,SAAS,IAAI,WAAW,SAAS,IAAI,cAAc,SAAS;AAAA,EAAA,GACzE,EAAE,WAAW,KAAA,CAAM;AAEtB,kBAAgB,kBAAkB;AAElC,SAAO,EAAE,uBAAuB;AAClC;"}