import { createSignal, createEffect, onCleanup } from "solid-js"; import type { Accessor } from "solid-js"; export function useDebounce(value: Accessor, delay = 1000): Accessor { const [debouncedValue, setDebouncedValue] = createSignal(value()); let timeoutId: ReturnType; createEffect(() => { value(); clearTimeout(timeoutId); timeoutId = setTimeout(() => setDebouncedValue(() => value()), delay); }); onCleanup(() => clearTimeout(timeoutId)); return debouncedValue; }