Installation
bash
npm install @macrulez/vue-state-machinePeer dependency:
bash
npm install vue@>=3.3Quick start
vue
<script setup lang="ts">
import { defineMachine, useMachine } from '@macrulez/vue-state-machine'
const trafficLight = defineMachine({
id: 'traffic',
initial: 'red',
states: {
red: { on: { NEXT: { target: 'green' } } },
green: { on: { NEXT: { target: 'yellow' } } },
yellow: { on: { NEXT: { target: 'red' } } },
},
})
const { state, send } = useMachine(trafficLight)
</script>
<template>
<div :class="state">
<p>Current: {{ state }}</p>
<button @click="send('NEXT')">Next</button>
</div>
</template>state is a reactive Ref<'red' | 'green' | 'yellow'>. Clicking the button transitions the machine and Vue re-renders automatically.