UNPKG

bits-ui

Version:

The headless components for Svelte.

37 lines (36 loc) 1.04 kB
import { box } from "svelte-toolbelt"; import { noop } from "./noop.js"; const defaultOptions = { afterMs: 10000, onChange: noop, }; /** * Creates a box which will be reset to the default value after some time. * * @param defaultValue The value which will be set. * @param afterMs A zero-or-greater delay in milliseconds. */ export function boxAutoReset(defaultValue, options) { const { afterMs, onChange, getWindow } = { ...defaultOptions, ...options }; let timeout = null; let value = $state(defaultValue); function resetAfter() { return getWindow().setTimeout(() => { value = defaultValue; onChange?.(defaultValue); }, afterMs); } $effect(() => { return () => { if (timeout) getWindow().clearTimeout(timeout); }; }); return box.with(() => value, (v) => { value = v; onChange?.(v); if (timeout) getWindow().clearTimeout(timeout); timeout = resetAfter(); }); }