bits-ui
Version:
The headless components for Svelte.
19 lines (18 loc) • 541 B
JavaScript
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);
}
}