import { type Logger } from '@just-web/app'; import { type AnyFunction } from 'type-plus'; import type { Updater } from './types.js'; export type SetStateValue = T | Updater; /** * set or update the state. */ export type SetState = = SetStateValue>(value: V) => V extends AnyFunction> ? Promise : T; export type StateChangeHandler = (value: T, prev: T) => void; export type OnStateChange = (handler: StateChangeHandler) => () => void; export type ResetState = () => void; export type StateMeta = { logger?: Logger; }; /** * creates a functional style state to track changes of a value. * * @param init initial value T * @param meta optional meta data for custom logger. * @returns [value: T, set: SetState, onChange: OnStateChange, reset: ResetState] * * @example * ```ts * const [value, set, onChange, reset] = app.states.createState(0) * * value // 0 * set(1) // value: 1 * onChange(v => console.log(v)) // trigger when set * reset() // reset value to the initial value * ``` */ export declare function createState(init: T, meta?: StateMeta): [value: T, set: SetState, onChange: OnStateChange, reset: ResetState]; //# sourceMappingURL=state.d.ts.map