svelte-ux
Version:
- Increment version in `package.json` and commit as `Version bump to x.y.z` - `npm run publish`
48 lines (47 loc) • 1.54 kB
JavaScript
export function resize(node) {
let observer = new ResizeObserver((entries, observer) => {
entries.forEach((entry) => {
node.dispatchEvent(new CustomEvent('resize', { detail: entry }));
});
});
observer.observe(node);
return {
destroy() {
observer.disconnect();
},
};
}
export function intersection(node, options = undefined) {
// TODO: Support definiinting `options.root = node.parentNode` easily
let observer = new IntersectionObserver((entries, observer) => {
const entry = entries[0];
node.dispatchEvent(new CustomEvent('intersecting', { detail: entry }));
// if (entry.intersectionRatio > 0) {
// node.dispatchEvent(new CustomEvent('visible', { detail: entry }));
// } else {
// node.dispatchEvent(new CustomEvent('invisible', { detail: entry }));
// }
}, options);
observer.observe(node);
return {
destroy() {
observer.disconnect();
},
};
}
export function mutate(node, options) {
let observer = null;
function update(options) {
destroy();
observer = new MutationObserver((mutations) => {
node.dispatchEvent(new CustomEvent('mutate', { detail: mutations }));
});
observer.observe(node, options);
}
function destroy() {
observer === null || observer === void 0 ? void 0 : observer.disconnect();
observer = null;
}
update(options);
return { update, destroy };
}