vuestic-ui
Version:
Vue 3 UI Framework
42 lines (41 loc) • 1.38 kB
JavaScript
import { watch, onMounted, onBeforeUnmount, unref } from "vue";
const normalizeElements = (elements) => {
if (Array.isArray(elements)) {
return elements.map(unref);
}
const unrefArray = unref(elements);
return Array.isArray(unrefArray) ? unrefArray : [unrefArray];
};
const useResizeObserver = (elementsList, cb) => {
let resizeObserver;
const observeAll = (elements) => {
elements.forEach((element) => {
const unrefElement = unref(element);
if (!unrefElement) {
return;
}
if (!(unrefElement instanceof Element)) {
console.error("Vuestic: Trying to observe non-HTMLElement", {
target: unrefElement,
array: elementsList
});
throw new Error("Vuestic: Unable to observe non-HTMLElement");
}
unrefElement && (resizeObserver == null ? void 0 : resizeObserver.observe(unrefElement));
});
};
watch(elementsList, (newValue) => {
resizeObserver == null ? void 0 : resizeObserver.disconnect();
observeAll(normalizeElements(newValue));
});
onMounted(() => {
resizeObserver = new ResizeObserver(cb);
observeAll(normalizeElements(elementsList));
});
onBeforeUnmount(() => resizeObserver == null ? void 0 : resizeObserver.disconnect());
return resizeObserver;
};
export {
useResizeObserver as u
};
//# sourceMappingURL=useResizeObserver.mjs.map