UNPKG

@grail-ui/svelte

Version:

[![NPM](https://img.shields.io/npm/v/@grail-ui/svelte)](https://www.npmjs.com/package/@grail-ui/svelte) [![minified](https://img.shields.io/bundlephobia/min/@grail-ui/svelte)](https://bundlephobia.com/package/@grail-ui/svelte) [![minified + zipped](https:

31 lines (30 loc) 1.06 kB
import { isClient } from '../util/is.js'; import { toReadable, writableEffect } from '../util/store.js'; export const createResizeObserver = (config = {}) => { const isSupported = isClient && 'ResizeObserver' in window; const { handler, ...observerOptions } = config; const entries = writableEffect({}, handler); let uid = 0; const useResizeObserver = (node, _config = {}) => { let observer; const localId = `${uid++}`; const { handler: _handler, ..._observerOptions } = _config; if (isSupported) { observer = new ResizeObserver(([entry]) => { entries.update((_entries) => ({ ..._entries, [localId]: entry })); _handler?.(entry); }); observer.observe(node, { ...observerOptions, ..._observerOptions }); } return { destroy() { observer?.disconnect(); }, }; }; return { isSupported, entries: toReadable(entries), useResizeObserver, }; };