Files
wdi-dashboard/node_modules/@zag-js/element-size/dist/track-sizes.js
2024-08-16 15:06:52 +05:30

46 lines
1.1 KiB
JavaScript

'use strict';
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const trackSize = require('./track-size.js');
function trackElementsSize(options) {
const { getNodes, observeMutation = true, callback } = options;
const cleanups = [];
let firstNode = null;
function trigger() {
const elements = getNodes();
firstNode = elements[0];
const fns = elements.map(
(element, index) => trackSize.trackElementSize(element, (size) => {
callback(size, index);
})
);
cleanups.push(...fns);
}
trigger();
if (observeMutation) {
const fn = trackMutation(firstNode, trigger);
cleanups.push(fn);
}
return () => {
cleanups.forEach((cleanup) => {
cleanup?.();
});
};
}
function trackMutation(el, cb) {
if (!el || !el.parentElement)
return;
const win = el.ownerDocument?.defaultView ?? window;
const observer = new win.MutationObserver(() => {
cb();
});
observer.observe(el.parentElement, { childList: true });
return () => {
observer.disconnect();
};
}
exports.trackElementsSize = trackElementsSize;