vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 2.39 kB
Source Map (JSON)
{"version":3,"file":"useResizeObserver.mjs","sources":["../../../../src/composables/useResizeObserver.ts"],"sourcesContent":["import { onBeforeUnmount, onMounted, ref, Ref, unref, watch } from 'vue'\n\ntype MaybeRef<T> = T | Ref<T>\ntype MaybeArray<T> = T | T[]\n\nconst normalizeElements = <T>(elements: MaybeRef<T>[] | Ref<MaybeArray<T>>) => {\n if (Array.isArray(elements)) {\n return elements.map(unref)\n }\n\n const unrefArray = unref(elements)\n\n return Array.isArray(unrefArray) ? unrefArray : [unrefArray]\n}\n\nexport const useResizeObserver = <T extends HTMLElement | undefined>(elementsList: MaybeRef<T>[] | Ref<MaybeArray<T>>, cb: ResizeObserverCallback) => {\n let resizeObserver: ResizeObserver | undefined\n\n const observeAll = (elements: MaybeRef<T>[]) => {\n elements.forEach((element: MaybeRef<T>) => {\n const unrefElement = unref(element)\n\n if (!unrefElement) {\n return\n }\n\n if (!(unrefElement instanceof Element)) {\n console.error('Vuestic: Trying to observe non-HTMLElement', {\n target: unrefElement,\n array: elementsList,\n })\n throw new Error('Vuestic: Unable to observe non-HTMLElement')\n }\n\n unrefElement && resizeObserver?.observe(unrefElement)\n })\n }\n\n watch(elementsList, (newValue) => {\n resizeObserver?.disconnect()\n\n observeAll(normalizeElements(newValue))\n })\n\n onMounted(() => {\n resizeObserver = new ResizeObserver(cb)\n observeAll(normalizeElements(elementsList))\n })\n\n onBeforeUnmount(() => resizeObserver?.disconnect())\n\n return resizeObserver\n}\n"],"names":[],"mappings":";AAKA,MAAM,oBAAoB,CAAI,aAAiD;AACzE,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,KAAK;AAAA,EAC3B;AAEM,QAAA,aAAa,MAAM,QAAQ;AAEjC,SAAO,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAC,UAAU;AAC7D;AAEa,MAAA,oBAAoB,CAAoC,cAAkD,OAA+B;AAChJ,MAAA;AAEE,QAAA,aAAa,CAAC,aAA4B;AACrC,aAAA,QAAQ,CAAC,YAAyB;AACnC,YAAA,eAAe,MAAM,OAAO;AAElC,UAAI,CAAC,cAAc;AACjB;AAAA,MACF;AAEI,UAAA,EAAE,wBAAwB,UAAU;AACtC,gBAAQ,MAAM,8CAA8C;AAAA,UAC1D,QAAQ;AAAA,UACR,OAAO;AAAA,QAAA,CACR;AACK,cAAA,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AAEgB,uBAAA,iDAAgB,QAAQ;AAAA,IAAY,CACrD;AAAA,EAAA;AAGG,QAAA,cAAc,CAAC,aAAa;AAChC,qDAAgB;AAEL,eAAA,kBAAkB,QAAQ,CAAC;AAAA,EAAA,CACvC;AAED,YAAU,MAAM;AACG,qBAAA,IAAI,eAAe,EAAE;AAC3B,eAAA,kBAAkB,YAAY,CAAC;AAAA,EAAA,CAC3C;AAEe,kBAAA,MAAM,iDAAgB,YAAY;AAE3C,SAAA;AACT;"}