返回 slidev
shared.ts
根目录 / packages / client / state / shared.ts
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
52 lines TYPESCRIPT