// Available variables: // - Machine // - interpret // - assign // - send // - sendParent // - spawn // - raise // - actions // - XState (all XState exports) const fetchMachine = Machine({ id: 'video', initial: 'loading', context: { video: undefined, duration: 0, elapsed: 0, }, states: { loading: { on: { LOADED: { target: 'ready', actions: 'setVideo', }, FAIL: 'failure', }, }, ready: { initial: 'paused', states: { hist: { type: 'history', }, paused: { on: { PLAY: 'playing', SHOW_SYNOPSIS: '#video.synopsis', }, }, playing: { initial: 'active', on: { TIMING: { actions: 'setElapsed', }, PAUSE: { target: 'paused', }, SHOW_SYNOPSIS: '#video.synopsis', END: 'ended', TOUCH_SCREEN: 'playing.active', }, states: { active: { after: { 3000: 'idle', }, }, idle: {}, }, }, ended: { on: { PLAY: { target: 'playing', actions: 'restartVideo', }, }, }, }, }, synopsis: { on: { HIDE_SYNOPSIS: '#video.ready.hist', }, }, failure: { type: 'final', }, }, })