• Stars
    star
    345
  • Rank 122,750 (Top 3 %)
  • Language
    JavaScript
  • Created about 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An expressive, feature-rich, event-driven JavaScript finite-state machine

JavaScript State Machine

state-machine-map

Abstract

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.

Features

State Machine has been designed from the outset to feel intuitive and fun to use:

  • Easily-configurable via JavaScript 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

Demo

View the live demo at:

To run / tinker with the demo locally, see the Development section.

Installation

State Machine can be used directly in the browser, or in a Browserify, Node or ES6 project.

Install via NPM using:

npm install state-machine

Note: If you are expecting the package wheeyls/stateMachine it has now been deprecated. To continue to use that package in your project, ensure you use the version 0.3.0 in your package.json.

Docs

View the documentation at:

Development

Installation

Clone the repo using:

git clone https://github.com/davestewart/javascript-state-machine

Tasks

The following NPM tasks are available, via npm run <task>:

  • dev - compile and watch the source to state-machine.js
  • build - compile the source to state-machine.min.js
  • demo - compile, watch and copy the development build to demo/ and serve demo files at http://localhost:8888
  • test - run all tests

Testing

To run a single or set of tests, use the following syntax:

  • npm run test -- --grep="<filename>"

Mentions

Inspired by @jakesgordon's JavaScript State Machine.

Special thanks to Michael Wheeler (@wheeyls) who very kindly donated the NPM package name state-machine.

More Repositories

1

vuex-pathify

Vue / Vuex plugin providing a unified path syntax to Vuex stores
JavaScript
1,393
star
2

laravel-sketchpad

An innovative front-end environment for interactive Laravel development
PHP
300
star
3

alias-hq

The end-to-end solution for configuring, refactoring, maintaining and using path aliases
JavaScript
297
star
4

vue-class-store

Universal Vue stores you write once and use anywhere
JavaScript
276
star
5

nuxt-areas

Simple and scalable folder management for large Nuxt projects
JavaScript
231
star
6

axios-actions

Bundle endpoints as callable, reusable services
TypeScript
189
star
7

vue-trello-clone

A simple Trello clone
JavaScript
151
star
8

xjsfl

Rapid development framework for extending Adobe Flash
JavaScript
135
star
9

todo-emojis

Track todos in Slack using custom checkbox emojis
90
star
10

maxscript

Various MaxScripts and plugins created from 2001 - 2008
MAXScript
85
star
11

vee-element

Replaces Element UI's validation engine with Vee Validate
JavaScript
73
star
12

classic-shell-win10

A Windows 10 theme for Classic Shell / Classic Start Menu
HTML
60
star
13

great-suspender-recovery-tool

Recover your lost Great Suspender Tabs
JavaScript
56
star
14

nuxt-content-assets

Enable locally-located assets in Nuxt Content
TypeScript
55
star
15

vue-source

Identifies Vue components in DevTools Elements panel via HTML comments
JavaScript
41
star
16

app-diary

Ongoing development diary of building a Trello clone
JavaScript
32
star
17

got-paper

The official "got paper?" app – a Vue / Nuxt PWA, optimised for mobile, running in 12 languages
Vue
27
star
18

spaceman

Manage monorepo workspaces with a prompt-based CLI
JavaScript
25
star
19

outliner

A node package to outline SVG strokes as fills
JavaScript
24
star
20

minimap-font

An editor font to give you a 10,000ft view of the code
HTML
19
star
21

vuex-pathify-demos

A set of demos for the Vuex Pathify plugin
Vue
16
star
22

vue-enums

Easily use TypeScript enums in Vue SFC templates
JavaScript
11
star
23

vue-class-store-demos

Vue Class Store demos for Vue 2, Vue 3 and Nuxt
Vue
10
star
24

komodo-autocode

Adds extra functionality to Komodo that makes it easier than ever to write (and test) quality code
JavaScript
10
star
25

nuxt-areas-demo-vue2

Demo project to showcase Nuxt Areas functionality
Vue
7
star
26

jquery-populate

6
star
27

alias-quokka-plugin-demo

Demo project to test Quokka local ES6 imports in a scratch file
JavaScript
6
star
28

msal-vue-demo

A minimal but production-friendly Vue 3 / MSAL demo
TypeScript
5
star
29

flash-wowza-demo

OO version of the Wowza record / play demo
ActionScript
4
star
30

jquery-scroll-into-view

jQuery plugin to scroll an element into view
HTML
4
star
31

javascript-ascii

Output objects' structure in text / ASCII format
HTML
3
star
32

laravel-sketchpad-reload

Live-reload functionality for Laravel Sketchpad
JavaScript
3
star
33

flash-core

A robust set of base ActionScript 3.0 classes developed out of commercial projects
ActionScript
2
star
34

i-hate-computers

I hate computers
JavaScript
2
star
35

es-kit

A "pick and mix" library that simplifies writing Elasticsearch code
TypeScript
2
star
36

flat-file-api

A command line tool to mock APIs using flat files
JavaScript
2
star
37

nuxt-scrollbar

Nuxt wrapper for Vue 3 Perfect Scrollbar
Vue
2
star
38

flash-flashywrappers-demo

ActionScript
1
star
39

vuex-pathify-simple-demo

Simple Vuex Pathify standalone demo
JavaScript
1
star
40

php-apidoc

Demo repositoriry for APIDoc with sample API and automatic builds via Grunt
PHP
1
star
41

nuxt-layers-utils

A collection of utilities to work with Nuxt layers
1
star
42

nuxt-sockets

WebSockets solution for Nuxt
TypeScript
1
star
43

laravel-resourcery

A lightweight & flexible resource management system
PHP
1
star
44

handsontable-checkboxes-demo

Demo project to fix focus issues with custom editor
JavaScript
1
star
45

extension-vue-devtools

Webpack plugin to open and connect to external Vue Devtools
JavaScript
1
star
46

wp-template-redirect

Template to simply redirect to another URL, rather than load a post or page
1
star
47

vue-customer-query

Example Vue application
Vue
1
star
48

collection-fns

A set of flexible, type-safe functions to manipulate arrays of models
TypeScript
1
star
49

better-fastmail

UX & UI improvements to the FastMail web client
JavaScript
1
star