Files
eewing cf73cd3b4c INIT
2026-02-17 14:10:16 -06:00

27 lines
866 B
JavaScript

import { untrack } from "svelte";
export function watch(box, callback, options = {}) {
let prev = $state(box.current);
let ranOnce = false;
const watchEffect = $effect.root(() => {
$effect.pre(() => {
if (prev === box.current || !options.immediate)
return;
if (options.once && ranOnce)
return;
callback(box.current, untrack(() => prev));
untrack(() => (prev = box.current));
ranOnce = true;
});
$effect(() => {
if (prev === box.current || options.immediate)
return;
if (options.once && ranOnce)
return;
callback(box.current, untrack(() => prev));
untrack(() => (prev = box.current));
ranOnce = true;
});
});
return watchEffect;
}