| 1 | // @ts-expect-error - virtual module |
| 2 | import serverState from 'server-reactive:nav' |
| 3 | import { createSyncState } from './syncState' |
| 4 | |
| 5 | export interface SharedState { |
| 6 | page: number |
| 7 | clicks: number |
| 8 | clicksTotal: number |
| 9 | |
| 10 | timer: { |
| 11 | status: 'stopped' | 'running' | 'paused' |
| 12 | slides: Record<number, { |
| 13 | start?: number |
| 14 | end?: number |
| 15 | }> |
| 16 | startedAt: number |
| 17 | pausedAt: number |
| 18 | } |
| 19 | |
| 20 | cursor?: { |
| 21 | x: number |
| 22 | y: number |
| 23 | style?: 'cursor' | 'laser' |
| 24 | } |
| 25 | |
| 26 | lastUpdate?: { |
| 27 | id: string |
| 28 | type: 'presenter' | 'viewer' |
| 29 | time: number |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | const { init, onPatch, onUpdate, patch, state } = createSyncState<SharedState>(serverState, { |
| 34 | page: 1, |
| 35 | clicks: 0, |
| 36 | clicksTotal: 0, |
| 37 | timer: { |
| 38 | status: 'stopped', |
| 39 | slides: {}, |
| 40 | startedAt: 0, |
| 41 | pausedAt: 0, |
| 42 | }, |
| 43 | }) |
| 44 | |
| 45 | export { |
| 46 | init as initSharedState, |
| 47 | onPatch, |
| 48 | onUpdate as onSharedUpdate, |
| 49 | patch, |
| 50 | state as sharedState, |
| 51 | } |
| 52 |