State Machine is a library for managing a finite set of states, and moving between them via actions and transitions.
From its intuitive configuration through its powerful event-based architecture and rich API, State Machine makes it easy to describe and manage interaction with complex state-dependent systems like components, multi-step forms, purchase funnels, visualisations or games.
State Machine has been designed from the outset to feel intuitive and fun to use:
- Easily-configurable via JSON config or instance methods
- DSL for shorthand transition and handler assignment
- Add and remove states and actions on the fly
- Pause, resume, cancel or end transitions at any point
- Handle system, state, action and transition events
- Rich API and system introspection
- Object-oriented architecture; fully-inspectable in DevTools
View the live demo at:
To run demo locally, see the build tasks at the bottom of this readme.
View the documentation at:
The docs will also be downloaded with the repository.
Until available on NPM, pull from the main github repoistory:
The following NPM tasks are available, via npm run <task>:
dev- compile and watch the source tostate-machine.jsbuild- compile teh source tostate-machine.min.jsdemo- compile, watch and copy the development build todemo/and serve demo files athttp://localhost:8888test- run all tests
Note that interim builds may not always be committed on the develop branch, so if tinkering with the latest / running the demo, you may need to run the dev task first.
To run a single or set of tests, use the following syntax:
npm run test -- --grep="<filename>"
Inspired by @jakesgordon's JavaScript State Machine.
