UNPKG

bits-ui

Version:

The headless components for Svelte.

19 lines (18 loc) 541 B
import { box } from "svelte-toolbelt"; export class StateMachine { state; #machine; constructor(initialState, machine) { this.state = box(initialState); this.#machine = machine; this.dispatch = this.dispatch.bind(this); } #reducer(event) { // @ts-expect-error state.current is keyof M const nextState = this.#machine[this.state.current][event]; return nextState ?? this.state.current; } dispatch(event) { this.state.current = this.#reducer(event); } }