UNPKG

@dnd-kit-svelte/svelte

Version:

[![Stable release](https://img.shields.io/npm/v/@dnd-kit-svelte/svelte.svg)](https://npm.im/@dnd-kit-svelte/svelte)

29 lines (28 loc) 937 B
import { effect, untracked } from '@dnd-kit/state'; import { createSubscriber } from 'svelte/reactivity'; /** Trigger a re-render when reading signal properties of an object. */ export function useDeepSignal(target) { if (!target) return target; const tracked = new Map(); const subscribe = createSubscriber((update) => effect(() => { for (const entry of tracked) { const [key] = entry; const prev = untracked(() => entry[1]); const latest = target[key]; if (prev !== latest) { update(); tracked.set(key, latest); } } })); return new Proxy(target, { get(target, key) { const value = target[key]; tracked.set(key, value); // Make this getter reactive if read in a Svelte effect/derived subscribe(); return value; }, }); }