"use client"; import * as React from "react"; interface StateMachineConfig { initial: TState; states: Record>>; } function useStateMachine( config: StateMachineConfig, ) { const [state, setState] = React.useState(config.initial); const send = React.useCallback( (event: TEvent) => { setState((currentState) => { const transition = config.states[currentState]?.[event]; return transition ?? currentState; }); }, [config.states], ); return [state, send] as const; } export { useStateMachine }; export type { StateMachineConfig };