pptx-react-viewer 1.16.1 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/{Model3DScene-DDKQ372V.mjs → Model3DScene-QHDYQXL2.mjs} +2 -2
- package/dist/Model3DScene-QHDYQXL2.mjs.br +0 -0
- package/dist/Model3DScene-QHDYQXL2.mjs.gz +0 -0
- package/dist/{Model3DScene-UBHBPNJ2.js → Model3DScene-YA4F63DT.js} +3 -3
- package/dist/Model3DScene-YA4F63DT.js.br +0 -0
- package/dist/Model3DScene-YA4F63DT.js.gz +0 -0
- package/dist/PowerPointViewer-C4d7SKZf.d.ts +21 -0
- package/dist/PowerPointViewer-C4d7SKZf.d.ts.map +1 -0
- package/dist/{SurfaceChart3DScene-VSUUH2MX.mjs → SurfaceChart3DScene-GUAS2NWQ.mjs} +2 -2
- package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-MNFDDCYS.js → SurfaceChart3DScene-TGNJHTJQ.js} +3 -3
- package/dist/SurfaceChart3DScene-TGNJHTJQ.js.br +0 -0
- package/dist/SurfaceChart3DScene-TGNJHTJQ.js.gz +0 -0
- package/dist/{chunk-4LRPKUP7.js → chunk-3P6O7ZDM.js} +420 -420
- package/dist/chunk-3P6O7ZDM.js.br +0 -0
- package/dist/chunk-3P6O7ZDM.js.gz +0 -0
- package/dist/{chunk-YARAQWA4.mjs → chunk-G22EWPLH.mjs} +134 -4
- package/dist/chunk-G22EWPLH.mjs.br +0 -0
- package/dist/chunk-G22EWPLH.mjs.gz +0 -0
- package/dist/{chunk-TLGPM7SI.js → chunk-JWS3RQKN.js} +160 -28
- package/dist/chunk-JWS3RQKN.js.br +0 -0
- package/dist/chunk-JWS3RQKN.js.gz +0 -0
- package/dist/{chunk-XOSQDCHZ.mjs → chunk-LLHFNGAF.mjs} +4 -4
- package/dist/chunk-LLHFNGAF.mjs.br +0 -0
- package/dist/chunk-LLHFNGAF.mjs.gz +0 -0
- package/dist/{chunk-YW23L4KK.mjs → chunk-LNSHC2Z5.mjs} +117 -156
- package/dist/chunk-LNSHC2Z5.mjs.br +0 -0
- package/dist/chunk-LNSHC2Z5.mjs.gz +0 -0
- package/dist/{chunk-VMQLQEGG.js → chunk-MGLRKGCH.js} +156 -98
- package/dist/chunk-MGLRKGCH.js.br +0 -0
- package/dist/chunk-MGLRKGCH.js.gz +0 -0
- package/dist/{chunk-AJPW5FS7.mjs → chunk-XRYREYXC.mjs} +156 -98
- package/dist/chunk-XRYREYXC.mjs.br +0 -0
- package/dist/chunk-XRYREYXC.mjs.gz +0 -0
- package/dist/{chunk-YQHPV3VP.js → chunk-XW5OMXW6.js} +915 -954
- package/dist/chunk-XW5OMXW6.js.br +0 -0
- package/dist/chunk-XW5OMXW6.js.gz +0 -0
- package/dist/{dist-55M4L5OI.js → dist-2ZAH7U6U.js} +507 -507
- package/dist/dist-2ZAH7U6U.js.br +0 -0
- package/dist/dist-2ZAH7U6U.js.gz +0 -0
- package/dist/{dist-C5CVVTDM.mjs → dist-MXDC6YTS.mjs} +1 -1
- package/dist/dist-MXDC6YTS.mjs.br +0 -0
- package/dist/dist-MXDC6YTS.mjs.gz +0 -0
- package/dist/hooks-unstable.d.ts +9683 -1886
- package/dist/hooks-unstable.d.ts.map +1 -0
- package/dist/hooks-unstable.js +74 -74
- package/dist/hooks-unstable.js.br +0 -0
- package/dist/hooks-unstable.js.gz +0 -0
- package/dist/hooks-unstable.mjs +3 -3
- package/dist/hooks-unstable.mjs.br +0 -0
- package/dist/hooks-unstable.mjs.gz +0 -0
- package/dist/i18n.d.ts +27 -1
- package/dist/i18n.d.ts.map +1 -0
- package/dist/index-XGt7MZpa.d.ts +607 -0
- package/dist/index-XGt7MZpa.d.ts.map +1 -0
- package/dist/index.d.ts +4753 -10
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -18
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/types-BK7Nt13M.d.ts +483 -0
- package/dist/types-BK7Nt13M.d.ts.map +1 -0
- package/dist/viewer/index.d.ts +8008 -88
- package/dist/viewer/index.d.ts.map +1 -0
- package/dist/viewer/index.js +19 -19
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +4 -4
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +6 -5
- package/dist/Model3DScene-DDKQ372V.mjs.br +0 -0
- package/dist/Model3DScene-DDKQ372V.mjs.gz +0 -0
- package/dist/Model3DScene-UBHBPNJ2.js.br +0 -0
- package/dist/Model3DScene-UBHBPNJ2.js.gz +0 -0
- package/dist/PowerPointViewer-BsaUH3ZT.d.ts +0 -26
- package/dist/PowerPointViewer-Nxku67uL.d.mts +0 -26
- package/dist/SurfaceChart3DScene-MNFDDCYS.js.br +0 -0
- package/dist/SurfaceChart3DScene-MNFDDCYS.js.gz +0 -0
- package/dist/SurfaceChart3DScene-VSUUH2MX.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-VSUUH2MX.mjs.gz +0 -0
- package/dist/chunk-4LRPKUP7.js.br +0 -0
- package/dist/chunk-4LRPKUP7.js.gz +0 -0
- package/dist/chunk-AJPW5FS7.mjs.br +0 -0
- package/dist/chunk-AJPW5FS7.mjs.gz +0 -0
- package/dist/chunk-TLGPM7SI.js.br +0 -0
- package/dist/chunk-TLGPM7SI.js.gz +0 -0
- package/dist/chunk-VMQLQEGG.js.br +0 -0
- package/dist/chunk-VMQLQEGG.js.gz +0 -0
- package/dist/chunk-XOSQDCHZ.mjs.br +0 -0
- package/dist/chunk-XOSQDCHZ.mjs.gz +0 -0
- package/dist/chunk-YARAQWA4.mjs.br +0 -0
- package/dist/chunk-YARAQWA4.mjs.gz +0 -0
- package/dist/chunk-YQHPV3VP.js.br +0 -0
- package/dist/chunk-YQHPV3VP.js.gz +0 -0
- package/dist/chunk-YW23L4KK.mjs.br +0 -0
- package/dist/chunk-YW23L4KK.mjs.gz +0 -0
- package/dist/dist-55M4L5OI.js.br +0 -0
- package/dist/dist-55M4L5OI.js.gz +0 -0
- package/dist/dist-C5CVVTDM.mjs.br +0 -0
- package/dist/dist-C5CVVTDM.mjs.gz +0 -0
- package/dist/hooks-unstable.d.mts +0 -2300
- package/dist/i18n.d.mts +0 -1
- package/dist/index.d.mts +0 -46
- package/dist/types-ui-NG29h55h.d.mts +0 -712
- package/dist/types-ui-NG29h55h.d.ts +0 -712
- package/dist/usePresenterWindow-DToCijGy.d.ts +0 -1619
- package/dist/usePresenterWindow-DeTm-unp.d.mts +0 -1619
- package/dist/viewer/index.d.mts +0 -129
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
import { C as CollaborationConfig$1, D as UserPresence, E as ConnectionStatus, et as ViewerMode$1, m as PresentationAnimationRuntime, w as CollaborationContextValue } from "./types-BK7Nt13M.js";
|
|
2
|
+
import { PptxAction, PptxData, PptxElement, PptxHandler, PptxSlide, PptxSlideTransition, PptxThemeColorScheme, PptxThemeFontScheme, PptxThemePreset } from "pptx-viewer-core";
|
|
3
|
+
import { CollaborationConfig, ElementAnimationState } from "pptx-viewer-shared";
|
|
4
|
+
import { RefObject } from "react";
|
|
5
|
+
import * as Y from "yjs";
|
|
6
|
+
import { Doc, Doc as YDoc } from "yjs";
|
|
7
|
+
//#region src/viewer/hooks/presentation-mode/types.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* State describing the transition overlay that plays while advancing into a
|
|
10
|
+
* slide that carries a `p:transition`. The outgoing slide is snapshotted into
|
|
11
|
+
* an animated overlay layer while the incoming slide renders underneath on the
|
|
12
|
+
* main stage; the overlay tears down once `durationMs` elapses.
|
|
13
|
+
*/
|
|
14
|
+
interface PresentationTransitionOverlayState {
|
|
15
|
+
/** Index of the leaving slide, rendered (animated) in the overlay layer. */
|
|
16
|
+
outgoingSlideIndex: number;
|
|
17
|
+
/** Index of the arriving slide, already live on the main stage. */
|
|
18
|
+
incomingSlideIndex: number;
|
|
19
|
+
/** The incoming slide's transition definition (drives the CSS animation). */
|
|
20
|
+
transition: PptxSlideTransition;
|
|
21
|
+
/** Resolved transition duration (ms). */
|
|
22
|
+
durationMs: number;
|
|
23
|
+
}
|
|
24
|
+
interface UsePresentationModeInput {
|
|
25
|
+
mode: ViewerMode$1;
|
|
26
|
+
slides: PptxSlide[];
|
|
27
|
+
visibleSlideIndexes: number[];
|
|
28
|
+
activeSlideIndex: number;
|
|
29
|
+
containerRef: React.RefObject<HTMLElement | null>;
|
|
30
|
+
/** Raw PPTX bytes: forwarded to audience window for content sharing. */
|
|
31
|
+
content?: ArrayBuffer | Uint8Array | null;
|
|
32
|
+
onSetMode: (mode: ViewerMode$1) => void;
|
|
33
|
+
onSetActiveSlideIndex: (index: number) => void;
|
|
34
|
+
onPlayActionSound?: (soundPath: string) => void;
|
|
35
|
+
/** Called when L key is pressed during presentation. */
|
|
36
|
+
onToggleLaser?: () => void;
|
|
37
|
+
/** Called when P key is pressed during presentation. */
|
|
38
|
+
onTogglePen?: () => void;
|
|
39
|
+
/** Called when E key is pressed during presentation. */
|
|
40
|
+
onToggleEraser?: () => void;
|
|
41
|
+
/** Called when Ctrl+M is pressed during presentation. */
|
|
42
|
+
onToggleToolbar?: () => void;
|
|
43
|
+
/** Called to persist rehearsal timings into slide transitions. */
|
|
44
|
+
onSaveRehearsalTimings?: (timings: Record<number, number>) => void;
|
|
45
|
+
/** Whether to loop continuously (kiosk or explicit loop setting). */
|
|
46
|
+
loopContinuously?: boolean;
|
|
47
|
+
/** Whether to play animations during the slide show (false = skip all animations). */
|
|
48
|
+
showWithAnimation?: boolean;
|
|
49
|
+
/** Whether to use rehearsed auto-advance timings (false = manual advance only). */
|
|
50
|
+
useTimings?: boolean;
|
|
51
|
+
}
|
|
52
|
+
interface UsePresentationModeResult {
|
|
53
|
+
presentationSlideIndex: number;
|
|
54
|
+
setPresentationSlideIndex: (index: number) => void;
|
|
55
|
+
presentationSlideVisible: boolean;
|
|
56
|
+
/** Active slide-transition overlay, or `null` when no transition is playing. */
|
|
57
|
+
transitionOverlay: PresentationTransitionOverlayState | null;
|
|
58
|
+
/** Tear down the transition overlay once its animation completes. */
|
|
59
|
+
handleTransitionOverlayComplete: () => void;
|
|
60
|
+
presentationAnimations: PresentationAnimationRuntime[];
|
|
61
|
+
presentationElementStates: Map<string, ElementAnimationState>;
|
|
62
|
+
presentationKeyframesCss: string;
|
|
63
|
+
clearPresentationTimers: () => void;
|
|
64
|
+
runPresentationEntranceAnimations: (slideIndex: number) => void;
|
|
65
|
+
movePresentationSlide: (direction: 1 | -1) => void;
|
|
66
|
+
navigateToSlide: (slideIndex: number) => void;
|
|
67
|
+
handlePresentationAction: (action: PptxAction) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Handle a shape click in presentation mode. If the shape is an interactive
|
|
70
|
+
* trigger, play its animation sequence. Returns `true` if handled.
|
|
71
|
+
*/
|
|
72
|
+
handleInteractiveShapeClick: (shapeId: string) => boolean;
|
|
73
|
+
/** Set of shape IDs that are interactive sequence triggers on the current slide. */
|
|
74
|
+
interactiveTriggerShapeIds: ReadonlySet<string>;
|
|
75
|
+
/** Set of shape IDs that are hover animation triggers on the current slide. */
|
|
76
|
+
hoverTriggerShapeIds: ReadonlySet<string>;
|
|
77
|
+
/** Handle hover start on a shape. If the shape has a hover sequence, play it. Returns `true` if handled. */
|
|
78
|
+
handleHoverStart: (shapeId: string) => boolean;
|
|
79
|
+
/** Handle hover end on a shape. Resets the hover sequence for replay. */
|
|
80
|
+
handleHoverEnd: (shapeId: string) => void;
|
|
81
|
+
/** Must be called from a user-gesture handler (click) to satisfy browser fullscreen policy. */
|
|
82
|
+
enterPresentMode: () => void;
|
|
83
|
+
/** Whether presenter view (split-screen with notes) is active instead of fullscreen. */
|
|
84
|
+
presenterMode: boolean;
|
|
85
|
+
/** Enter presenter view mode (no fullscreen, shows notes panel). */
|
|
86
|
+
enterPresenterView: () => void;
|
|
87
|
+
/** Toggle between fullscreen and presenter view during presentation. */
|
|
88
|
+
togglePresenterView: () => void;
|
|
89
|
+
/** Timestamp (ms) when the presentation started: used for elapsed timer. */
|
|
90
|
+
presentationStartTime: number | null;
|
|
91
|
+
/** Whether the current presentation session is in rehearse-timings mode. */
|
|
92
|
+
rehearsing: boolean;
|
|
93
|
+
/** Enter rehearse-timings mode (fullscreen presentation + timing HUD). */
|
|
94
|
+
enterRehearsalMode: () => void;
|
|
95
|
+
/** Recorded timings in ms, keyed by slide index. Populated during rehearsal. */
|
|
96
|
+
recordedTimings: Record<number, number>;
|
|
97
|
+
/** Timestamp when the current slide started (ms since epoch). */
|
|
98
|
+
slideStartTime: number | null;
|
|
99
|
+
/** Whether the rehearsal summary dialog should be shown. */
|
|
100
|
+
showRehearsalSummary: boolean;
|
|
101
|
+
/** Dismiss the rehearsal summary (discard timings). */
|
|
102
|
+
dismissRehearsalSummary: () => void;
|
|
103
|
+
/** Save recorded timings into each slide's transition.advanceAfterMs. */
|
|
104
|
+
saveRehearsalTimings: () => void;
|
|
105
|
+
/** Whether rehearsal timer is paused. */
|
|
106
|
+
rehearsalPaused: boolean;
|
|
107
|
+
/** Toggle the rehearsal timer pause state. */
|
|
108
|
+
toggleRehearsalPause: () => void;
|
|
109
|
+
/** Handle a zoom element click in presentation mode. */
|
|
110
|
+
handleZoomClick: (targetSlideIndex: number, returnSlideIndex: number) => void;
|
|
111
|
+
/** Ref holding the slide index to return to after zoom navigation. */
|
|
112
|
+
zoomReturnSlideIndex: React.RefObject<number | null>;
|
|
113
|
+
/** Navigate back to the zoom summary slide. Returns true if navigation occurred. */
|
|
114
|
+
returnToZoomSlide: () => boolean;
|
|
115
|
+
/** Clear the stored zoom return index. */
|
|
116
|
+
clearZoomReturn: () => void;
|
|
117
|
+
/** Open the audience display in a separate browser window. Returns `true` if successful. */
|
|
118
|
+
openAudienceWindow: () => boolean;
|
|
119
|
+
/** Close the audience display window. */
|
|
120
|
+
closeAudienceWindow: () => void;
|
|
121
|
+
/** Whether the audience window is currently open. */
|
|
122
|
+
isAudienceWindowOpen: () => boolean;
|
|
123
|
+
/** Send a slide index to the audience window explicitly. */
|
|
124
|
+
syncSlideToAudience: (slideIndex: number) => void;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/viewer/hooks/useThemeSwitching.d.ts
|
|
128
|
+
interface UseThemeSwitchingInput {
|
|
129
|
+
/** Ref to the PptxHandler instance. */
|
|
130
|
+
handlerRef: RefObject<PptxHandler | null>;
|
|
131
|
+
/** Current parsed presentation data (null when nothing is loaded). */
|
|
132
|
+
data: PptxData | null;
|
|
133
|
+
/** Callback to update the presentation data after theme switch. */
|
|
134
|
+
onDataChange: (newData: PptxData) => void;
|
|
135
|
+
/** Optional callback fired when theme switch completes successfully. */
|
|
136
|
+
onThemeChanged?: (preset: PptxThemePreset) => void;
|
|
137
|
+
}
|
|
138
|
+
interface ThemeSwitchingResult {
|
|
139
|
+
/** All available built-in theme presets. */
|
|
140
|
+
presets: readonly PptxThemePreset[];
|
|
141
|
+
/**
|
|
142
|
+
* Apply a theme preset to the current presentation.
|
|
143
|
+
* Updates both the in-memory ZIP and all resolved element colours.
|
|
144
|
+
*/
|
|
145
|
+
switchToPreset: (preset: PptxThemePreset) => Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Apply a custom colour scheme (and optional font scheme) to the
|
|
148
|
+
* current presentation.
|
|
149
|
+
*/
|
|
150
|
+
switchToCustom: (colorScheme: PptxThemeColorScheme, fontScheme?: PptxThemeFontScheme, themeName?: string) => Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Get the preset matching the current presentation theme (if any).
|
|
153
|
+
* Returns undefined if the current theme does not match a built-in preset.
|
|
154
|
+
*/
|
|
155
|
+
currentPreset: PptxThemePreset | undefined;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* React hook providing theme switching capabilities for the PowerPoint viewer.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```tsx
|
|
162
|
+
* const { presets, switchToPreset, currentPreset } = useThemeSwitching({
|
|
163
|
+
* handlerRef,
|
|
164
|
+
* data,
|
|
165
|
+
* onDataChange: setData,
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* return (
|
|
169
|
+
* <div>
|
|
170
|
+
* {presets.map(preset => (
|
|
171
|
+
* <button
|
|
172
|
+
* key={preset.id}
|
|
173
|
+
* onClick={() => switchToPreset(preset)}
|
|
174
|
+
* aria-pressed={preset.id === currentPreset?.id}
|
|
175
|
+
* >
|
|
176
|
+
* {preset.name}
|
|
177
|
+
* </button>
|
|
178
|
+
* ))}
|
|
179
|
+
* </div>
|
|
180
|
+
* );
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
declare function useThemeSwitching(input: UseThemeSwitchingInput): ThemeSwitchingResult;
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region ../../node_modules/.bun/lib0@0.2.117/node_modules/lib0/observable.d.ts
|
|
186
|
+
/**
|
|
187
|
+
* Handles named events.
|
|
188
|
+
*
|
|
189
|
+
* @deprecated
|
|
190
|
+
* @template N
|
|
191
|
+
*/
|
|
192
|
+
declare class Observable<N> {
|
|
193
|
+
/**
|
|
194
|
+
* Some desc.
|
|
195
|
+
* @type {Map<N, any>}
|
|
196
|
+
*/
|
|
197
|
+
_observers: Map<N, any>;
|
|
198
|
+
/**
|
|
199
|
+
* @param {N} name
|
|
200
|
+
* @param {function} f
|
|
201
|
+
*/
|
|
202
|
+
on(name: N, f: Function): void;
|
|
203
|
+
/**
|
|
204
|
+
* @param {N} name
|
|
205
|
+
* @param {function} f
|
|
206
|
+
*/
|
|
207
|
+
once(name: N, f: Function): void;
|
|
208
|
+
/**
|
|
209
|
+
* @param {N} name
|
|
210
|
+
* @param {function} f
|
|
211
|
+
*/
|
|
212
|
+
off(name: N, f: Function): void;
|
|
213
|
+
/**
|
|
214
|
+
* Emit a named event. All registered event listeners that listen to the
|
|
215
|
+
* specified name will receive the event.
|
|
216
|
+
*
|
|
217
|
+
* @todo This should catch exceptions
|
|
218
|
+
*
|
|
219
|
+
* @param {N} name The event name.
|
|
220
|
+
* @param {Array<any>} args The arguments that are applied to the event listener.
|
|
221
|
+
*/
|
|
222
|
+
emit(name: N, args: Array<any>): void;
|
|
223
|
+
destroy(): void;
|
|
224
|
+
}
|
|
225
|
+
//#endregion
|
|
226
|
+
//#region ../../node_modules/.bun/y-protocols@1.0.7+253afa400b9c0a30/node_modules/y-protocols/awareness.d.ts
|
|
227
|
+
/**
|
|
228
|
+
* @typedef {Object} MetaClientState
|
|
229
|
+
* @property {number} MetaClientState.clock
|
|
230
|
+
* @property {number} MetaClientState.lastUpdated unix timestamp
|
|
231
|
+
*/
|
|
232
|
+
/**
|
|
233
|
+
* The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information
|
|
234
|
+
* (cursor, username, status, ..). Each client can update its own local state and listen to state changes of
|
|
235
|
+
* remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.
|
|
236
|
+
*
|
|
237
|
+
* Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override
|
|
238
|
+
* its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is
|
|
239
|
+
* applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that
|
|
240
|
+
* a remote client is offline, it may propagate a message with
|
|
241
|
+
* `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a
|
|
242
|
+
* message is received, and the known clock of that client equals the received clock, it will override the state with `null`.
|
|
243
|
+
*
|
|
244
|
+
* Before a client disconnects, it should propagate a `null` state with an updated clock.
|
|
245
|
+
*
|
|
246
|
+
* Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.
|
|
247
|
+
*
|
|
248
|
+
* @extends {Observable<string>}
|
|
249
|
+
*/
|
|
250
|
+
declare class Awareness extends Observable<string> {
|
|
251
|
+
/**
|
|
252
|
+
* @param {Y.Doc} doc
|
|
253
|
+
*/
|
|
254
|
+
constructor(doc: Y.Doc);
|
|
255
|
+
doc: Y.Doc;
|
|
256
|
+
/**
|
|
257
|
+
* @type {number}
|
|
258
|
+
*/
|
|
259
|
+
clientID: number;
|
|
260
|
+
/**
|
|
261
|
+
* Maps from client id to client state
|
|
262
|
+
* @type {Map<number, Object<string, any>>}
|
|
263
|
+
*/
|
|
264
|
+
states: Map<number, {
|
|
265
|
+
[x: string]: any;
|
|
266
|
+
}>;
|
|
267
|
+
/**
|
|
268
|
+
* @type {Map<number, MetaClientState>}
|
|
269
|
+
*/
|
|
270
|
+
meta: Map<number, MetaClientState>;
|
|
271
|
+
_checkInterval: any;
|
|
272
|
+
/**
|
|
273
|
+
* @return {Object<string,any>|null}
|
|
274
|
+
*/
|
|
275
|
+
getLocalState(): {
|
|
276
|
+
[x: string]: any;
|
|
277
|
+
} | null;
|
|
278
|
+
/**
|
|
279
|
+
* @param {Object<string,any>|null} state
|
|
280
|
+
*/
|
|
281
|
+
setLocalState(state: {
|
|
282
|
+
[x: string]: any;
|
|
283
|
+
} | null): void;
|
|
284
|
+
/**
|
|
285
|
+
* @param {string} field
|
|
286
|
+
* @param {any} value
|
|
287
|
+
*/
|
|
288
|
+
setLocalStateField(field: string, value: any): void;
|
|
289
|
+
/**
|
|
290
|
+
* @return {Map<number,Object<string,any>>}
|
|
291
|
+
*/
|
|
292
|
+
getStates(): Map<number, {
|
|
293
|
+
[x: string]: any;
|
|
294
|
+
}>;
|
|
295
|
+
}
|
|
296
|
+
type MetaClientState = {
|
|
297
|
+
clock: number;
|
|
298
|
+
/**
|
|
299
|
+
* unix timestamp
|
|
300
|
+
*/
|
|
301
|
+
lastUpdated: number;
|
|
302
|
+
};
|
|
303
|
+
//#endregion
|
|
304
|
+
//#region src/viewer/hooks/collaboration/useYjsProvider.d.ts
|
|
305
|
+
interface UseYjsProviderInput {
|
|
306
|
+
/**
|
|
307
|
+
* Collaboration config, or `undefined` when collaboration is inactive. The
|
|
308
|
+
* hook is always called (React hook rules) but stays fully dormant, never
|
|
309
|
+
* opening a transport, while config is absent.
|
|
310
|
+
*/
|
|
311
|
+
config?: CollaborationConfig$1;
|
|
312
|
+
}
|
|
313
|
+
interface UseYjsProviderResult {
|
|
314
|
+
/** Current WebSocket connection status. */
|
|
315
|
+
status: ConnectionStatus;
|
|
316
|
+
/** The Yjs awareness instance (null until connected). */
|
|
317
|
+
awareness: Awareness | null;
|
|
318
|
+
/** The Yjs document (null until initialised). */
|
|
319
|
+
doc: YDoc | null;
|
|
320
|
+
/** Local awareness client ID. */
|
|
321
|
+
clientId: number | null;
|
|
322
|
+
/**
|
|
323
|
+
* Whether the provider completed its initial document sync. Local doc
|
|
324
|
+
* writes should be gated on this so a late joiner never seeds its
|
|
325
|
+
* bootstrap deck into a room whose content has not arrived yet. Websocket
|
|
326
|
+
* flips it on the provider's 'synced' event; webrtc flips it on peer sync
|
|
327
|
+
* or after {@link INITIAL_SYNC_GRACE_MS} (a lone fresh-room peer never
|
|
328
|
+
* receives a sync event).
|
|
329
|
+
*/
|
|
330
|
+
synced: boolean;
|
|
331
|
+
/** Manually retry the connection after a timeout or error. */
|
|
332
|
+
retry: () => void;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Lazily loads `yjs` and `y-websocket`, creates a Y.Doc and
|
|
336
|
+
* WebSocketProvider, and tracks the connection lifecycle.
|
|
337
|
+
*
|
|
338
|
+
* If the connection does not succeed within {@link CONNECTION_TIMEOUT_MS},
|
|
339
|
+
* the provider is torn down and status moves to `'error'`. The consumer
|
|
340
|
+
* can call `retry()` to attempt a fresh connection.
|
|
341
|
+
*
|
|
342
|
+
* The Yjs packages are dynamically imported so they are fully
|
|
343
|
+
* tree-shaken when collaboration is not enabled.
|
|
344
|
+
*/
|
|
345
|
+
declare function useYjsProvider({ config }: UseYjsProviderInput): UseYjsProviderResult;
|
|
346
|
+
//#endregion
|
|
347
|
+
//#region src/viewer/hooks/collaboration/usePresenceTracking.d.ts
|
|
348
|
+
interface UsePresenceTrackingInput {
|
|
349
|
+
awareness: Awareness | null;
|
|
350
|
+
localClientId: number | null;
|
|
351
|
+
userName: string;
|
|
352
|
+
userColor: string;
|
|
353
|
+
userAvatar?: string;
|
|
354
|
+
/** Role in the session (broadcaster, viewer, or collaborator). */
|
|
355
|
+
role?: string;
|
|
356
|
+
canvasWidth: number;
|
|
357
|
+
canvasHeight: number;
|
|
358
|
+
}
|
|
359
|
+
interface UsePresenceTrackingResult {
|
|
360
|
+
/** Presence data for all remote users (excludes local). */
|
|
361
|
+
remoteUsers: UserPresence[];
|
|
362
|
+
/** Broadcast a partial presence update for the local user. */
|
|
363
|
+
broadcastPresence: (update: Partial<Omit<UserPresence, 'clientId'>>) => void;
|
|
364
|
+
}
|
|
365
|
+
declare function usePresenceTracking({ awareness, localClientId, userName, userColor, userAvatar, role, canvasWidth, canvasHeight }: UsePresenceTrackingInput): UsePresenceTrackingResult;
|
|
366
|
+
//#endregion
|
|
367
|
+
//#region src/viewer/hooks/collaboration/useCollaborativeState.d.ts
|
|
368
|
+
interface UseCollaborativeStateInput {
|
|
369
|
+
/**
|
|
370
|
+
* Collaboration config, or `undefined` when collaboration is inactive. The
|
|
371
|
+
* hook is always called so the surrounding provider keeps a stable React
|
|
372
|
+
* tree shape; it produces a dormant value (no transport, empty presence)
|
|
373
|
+
* while config is absent.
|
|
374
|
+
*/
|
|
375
|
+
config?: CollaborationConfig$1;
|
|
376
|
+
canvasWidth: number;
|
|
377
|
+
canvasHeight: number;
|
|
378
|
+
}
|
|
379
|
+
declare function useCollaborativeState({ config, canvasWidth, canvasHeight }: UseCollaborativeStateInput): CollaborationContextValue | null;
|
|
380
|
+
//#endregion
|
|
381
|
+
//#region src/viewer/hooks/collaboration/useCollaborativeHistory.d.ts
|
|
382
|
+
interface UseCollaborativeHistoryInput {
|
|
383
|
+
/** The local user's client ID (from Yjs awareness). */
|
|
384
|
+
localClientId: number | null;
|
|
385
|
+
/** Standard history undo function. */
|
|
386
|
+
handleUndo: () => void;
|
|
387
|
+
/** Standard history redo function. */
|
|
388
|
+
handleRedo: () => void;
|
|
389
|
+
/** Whether undo is available. */
|
|
390
|
+
canUndo: boolean;
|
|
391
|
+
/** Whether redo is available. */
|
|
392
|
+
canRedo: boolean;
|
|
393
|
+
}
|
|
394
|
+
interface UseCollaborativeHistoryResult {
|
|
395
|
+
/** Undo the last local change. */
|
|
396
|
+
handleUndo: () => void;
|
|
397
|
+
/** Redo the last undone local change. */
|
|
398
|
+
handleRedo: () => void;
|
|
399
|
+
/** Whether undo is available. */
|
|
400
|
+
canUndo: boolean;
|
|
401
|
+
/** Whether redo is available. */
|
|
402
|
+
canRedo: boolean;
|
|
403
|
+
}
|
|
404
|
+
declare function useCollaborativeHistory({ localClientId: _localClientId, handleUndo, handleRedo, canUndo, canRedo }: UseCollaborativeHistoryInput): UseCollaborativeHistoryResult;
|
|
405
|
+
//#endregion
|
|
406
|
+
//#region src/viewer/hooks/collaboration/useYjsDocumentSync.d.ts
|
|
407
|
+
interface UseYjsDocumentSyncInput {
|
|
408
|
+
/** The Yjs document (from useYjsProvider). null when not collaborating. */
|
|
409
|
+
doc: Doc | null;
|
|
410
|
+
/** Current slides state. */
|
|
411
|
+
slides: PptxSlide[];
|
|
412
|
+
/** Separated master/layout (template) elements, merged back on write-back. */
|
|
413
|
+
templateElementsBySlideId: Record<string, PptxElement[]>;
|
|
414
|
+
/** React state setter for slides. */
|
|
415
|
+
setSlides: React.Dispatch<React.SetStateAction<PptxSlide[]>>;
|
|
416
|
+
/** Whether collaboration is active (status === 'connected'). */
|
|
417
|
+
isConnected: boolean;
|
|
418
|
+
/**
|
|
419
|
+
* Whether the provider completed its initial document sync. Local -> doc
|
|
420
|
+
* writes are gated on this so a late joiner never seeds its bootstrap deck
|
|
421
|
+
* into a room whose real content has not arrived yet. Defaults to true for
|
|
422
|
+
* callers that manage sync readiness themselves.
|
|
423
|
+
*/
|
|
424
|
+
isSynced?: boolean;
|
|
425
|
+
/** Collaboration config (for role and write-back). */
|
|
426
|
+
config?: Pick<CollaborationConfig, 'role' | 'onWriteBack' | 'writeBackDebounceMs'>;
|
|
427
|
+
/**
|
|
428
|
+
* Return the source PPTX bytes for write-back serialization. Only called
|
|
429
|
+
* when role === 'owner' and onWriteBack is set.
|
|
430
|
+
*/
|
|
431
|
+
getSourceBytes?: () => Uint8Array | null;
|
|
432
|
+
}
|
|
433
|
+
declare function useYjsDocumentSync({ doc, slides, templateElementsBySlideId, setSlides, isConnected, isSynced, config, getSourceBytes }: UseYjsDocumentSyncInput): void;
|
|
434
|
+
//#endregion
|
|
435
|
+
//#region src/viewer/hooks/collaboration/useBroadcastFollower.d.ts
|
|
436
|
+
interface UseBroadcastFollowerInput {
|
|
437
|
+
/** The collaboration context (null when collaboration is disabled). */
|
|
438
|
+
collab: CollaborationContextValue | null;
|
|
439
|
+
/** Current local active slide index. */
|
|
440
|
+
activeSlideIndex: number;
|
|
441
|
+
/** Setter for the active slide index. */
|
|
442
|
+
setActiveSlideIndex: (index: number) => void;
|
|
443
|
+
/** Total number of slides (for bounds checking). */
|
|
444
|
+
slideCount: number;
|
|
445
|
+
/**
|
|
446
|
+
* When true, auto-follow stands down (e.g. the local user is manually
|
|
447
|
+
* following a specific peer via the follow bar). Defaults to false.
|
|
448
|
+
*/
|
|
449
|
+
paused?: boolean;
|
|
450
|
+
}
|
|
451
|
+
declare function useBroadcastFollower({ collab, activeSlideIndex, setActiveSlideIndex, slideCount, paused }: UseBroadcastFollowerInput): void;
|
|
452
|
+
//#endregion
|
|
453
|
+
//#region src/viewer/hooks/collaboration/useFollowMode.d.ts
|
|
454
|
+
interface UseFollowModeInput {
|
|
455
|
+
/** The collaboration context (null when collaboration is disabled). */
|
|
456
|
+
collab: CollaborationContextValue | null;
|
|
457
|
+
/** Current local active slide index. */
|
|
458
|
+
activeSlideIndex: number;
|
|
459
|
+
/** Setter for the active slide index. */
|
|
460
|
+
setActiveSlideIndex: (index: number) => void;
|
|
461
|
+
/** Total number of slides (for bounds checking). */
|
|
462
|
+
slideCount: number;
|
|
463
|
+
}
|
|
464
|
+
interface UseFollowModeResult {
|
|
465
|
+
/** The clientId currently being followed, or null. */
|
|
466
|
+
followedClientId: number | null;
|
|
467
|
+
/** Follow the given peer, or `null` to stop following. */
|
|
468
|
+
followUser: (clientId: number | null) => void;
|
|
469
|
+
}
|
|
470
|
+
declare function useFollowMode({ collab, activeSlideIndex, setActiveSlideIndex, slideCount }: UseFollowModeInput): UseFollowModeResult;
|
|
471
|
+
//#endregion
|
|
472
|
+
//#region src/viewer/hooks/presentation-mode/useAnimationPlayback.d.ts
|
|
473
|
+
interface UseAnimationPlaybackInput {
|
|
474
|
+
slides: PptxSlide[];
|
|
475
|
+
onPlayActionSound?: (soundPath: string) => void;
|
|
476
|
+
/** When false, all animations are skipped (elements shown immediately). */
|
|
477
|
+
showWithAnimation?: boolean;
|
|
478
|
+
}
|
|
479
|
+
interface UseAnimationPlaybackResult {
|
|
480
|
+
presentationAnimations: PresentationAnimationRuntime[];
|
|
481
|
+
presentationElementStates: Map<string, ElementAnimationState>;
|
|
482
|
+
presentationKeyframesCss: string;
|
|
483
|
+
interactiveTriggerShapeIds: ReadonlySet<string>;
|
|
484
|
+
hoverTriggerShapeIds: ReadonlySet<string>;
|
|
485
|
+
clearPresentationTimers: () => void;
|
|
486
|
+
playNextAnimationGroup: () => boolean;
|
|
487
|
+
handleInteractiveShapeClick: (shapeId: string) => boolean;
|
|
488
|
+
handleHoverStart: (shapeId: string) => boolean;
|
|
489
|
+
handleHoverEnd: (shapeId: string) => void;
|
|
490
|
+
runPresentationEntranceAnimations: (slideIndex: number) => void;
|
|
491
|
+
/** Exposed so the orchestrator can schedule additional timers (e.g. auto-advance). */
|
|
492
|
+
presentationTimersRef: React.RefObject<number[]>;
|
|
493
|
+
}
|
|
494
|
+
declare function useAnimationPlayback(input: UseAnimationPlaybackInput): UseAnimationPlaybackResult;
|
|
495
|
+
//#endregion
|
|
496
|
+
//#region src/viewer/hooks/presentation-mode/useRehearsalTimings.d.ts
|
|
497
|
+
interface UseRehearsalTimingsInput {
|
|
498
|
+
containerRef: React.RefObject<HTMLElement | null>;
|
|
499
|
+
onSetMode: (mode: ViewerMode$1) => void;
|
|
500
|
+
onSaveRehearsalTimings?: (timings: Record<number, number>) => void;
|
|
501
|
+
setPresentationStartTime: (time: number | null) => void;
|
|
502
|
+
setPresenterMode: (mode: boolean) => void;
|
|
503
|
+
}
|
|
504
|
+
interface UseRehearsalTimingsResult {
|
|
505
|
+
rehearsing: boolean;
|
|
506
|
+
setRehearsing: React.Dispatch<React.SetStateAction<boolean>>;
|
|
507
|
+
recordedTimings: Record<number, number>;
|
|
508
|
+
slideStartTime: number | null;
|
|
509
|
+
showRehearsalSummary: boolean;
|
|
510
|
+
setShowRehearsalSummary: React.Dispatch<React.SetStateAction<boolean>>;
|
|
511
|
+
rehearsalPaused: boolean;
|
|
512
|
+
recordCurrentSlideTime: (slideIndex: number) => void;
|
|
513
|
+
dismissRehearsalSummary: () => void;
|
|
514
|
+
saveRehearsalTimings: () => void;
|
|
515
|
+
enterRehearsalMode: () => void;
|
|
516
|
+
toggleRehearsalPause: () => void;
|
|
517
|
+
}
|
|
518
|
+
declare function useRehearsalTimings(input: UseRehearsalTimingsInput): UseRehearsalTimingsResult;
|
|
519
|
+
//#endregion
|
|
520
|
+
//#region src/viewer/hooks/presentation-mode/usePresentationKeyboard.d.ts
|
|
521
|
+
interface UsePresentationKeyboardInput {
|
|
522
|
+
mode: ViewerMode$1;
|
|
523
|
+
movePresentationSlide: (direction: 1 | -1) => void;
|
|
524
|
+
onSetMode: (mode: ViewerMode$1) => void;
|
|
525
|
+
onToggleLaser?: () => void;
|
|
526
|
+
onTogglePen?: () => void;
|
|
527
|
+
onToggleEraser?: () => void;
|
|
528
|
+
onToggleToolbar?: () => void;
|
|
529
|
+
/** Toggle between presenter view (split-screen with notes) and fullscreen. */
|
|
530
|
+
onTogglePresenterView?: () => void;
|
|
531
|
+
rehearsing: boolean;
|
|
532
|
+
recordCurrentSlideTime: (slideIndex: number) => void;
|
|
533
|
+
presentationSlideIndex: number;
|
|
534
|
+
setShowRehearsalSummary: (value: boolean) => void;
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Registers keyboard shortcuts for presentation mode: arrow/space
|
|
538
|
+
* for slide navigation, Escape to exit, and annotation tool toggles.
|
|
539
|
+
*/
|
|
540
|
+
declare function usePresentationKeyboard(input: UsePresentationKeyboardInput): void;
|
|
541
|
+
//#endregion
|
|
542
|
+
//#region src/viewer/hooks/presentation-mode/useSlideNavigation.d.ts
|
|
543
|
+
interface UseSlideNavigationInput {
|
|
544
|
+
slides: PptxSlide[];
|
|
545
|
+
visibleSlideIndexes: number[];
|
|
546
|
+
presentationSlideIndex: number;
|
|
547
|
+
setPresentationSlideIndex: (index: number) => void;
|
|
548
|
+
setPresentationSlideVisible: (visible: boolean) => void;
|
|
549
|
+
setTransitionOverlay: (state: PresentationTransitionOverlayState | null) => void;
|
|
550
|
+
onSetMode: (mode: ViewerMode$1) => void;
|
|
551
|
+
onSetActiveSlideIndex: (index: number) => void;
|
|
552
|
+
onPlayActionSound?: (soundPath: string) => void;
|
|
553
|
+
loopContinuously?: boolean;
|
|
554
|
+
/** Whether to use rehearsed auto-advance timings. When false, slides advance only on click. */
|
|
555
|
+
useTimings?: boolean;
|
|
556
|
+
playNextAnimationGroup: () => boolean;
|
|
557
|
+
clearPresentationTimers: () => void;
|
|
558
|
+
runPresentationEntranceAnimations: (slideIndex: number) => void;
|
|
559
|
+
presentationTimersRef: {
|
|
560
|
+
current: number[];
|
|
561
|
+
};
|
|
562
|
+
rehearsing: boolean;
|
|
563
|
+
recordCurrentSlideTime: (slideIndex: number) => void;
|
|
564
|
+
setShowRehearsalSummary: (value: boolean) => void;
|
|
565
|
+
}
|
|
566
|
+
interface UseSlideNavigationResult {
|
|
567
|
+
movePresentationSlide: (direction: 1 | -1) => void;
|
|
568
|
+
navigateToSlide: (slideIndex: number) => void;
|
|
569
|
+
handlePresentationAction: (action: PptxAction) => void;
|
|
570
|
+
scheduleAutoAdvanceForSlide: (slideIndex: number) => void;
|
|
571
|
+
}
|
|
572
|
+
declare function useSlideNavigation(input: UseSlideNavigationInput): UseSlideNavigationResult;
|
|
573
|
+
//#endregion
|
|
574
|
+
//#region src/viewer/hooks/presentation-mode/usePresenterWindow.d.ts
|
|
575
|
+
/** Returns true if the current page was opened as an audience tab. */
|
|
576
|
+
declare function isAudienceTab(): boolean;
|
|
577
|
+
interface UsePresenterWindowInput {
|
|
578
|
+
currentSlideIndex: number;
|
|
579
|
+
isPresenterMode: boolean;
|
|
580
|
+
/** Raw PPTX bytes to share with the audience tab via IndexedDB. */
|
|
581
|
+
content?: ArrayBuffer | Uint8Array | null;
|
|
582
|
+
}
|
|
583
|
+
interface UsePresenterWindowResult {
|
|
584
|
+
openAudienceWindow: () => boolean;
|
|
585
|
+
closeAudienceWindow: () => void;
|
|
586
|
+
isAudienceWindowOpen: () => boolean;
|
|
587
|
+
syncSlideToAudience: (slideIndex: number) => void;
|
|
588
|
+
}
|
|
589
|
+
declare function usePresenterWindow(input: UsePresenterWindowInput): UsePresenterWindowResult;
|
|
590
|
+
//#endregion
|
|
591
|
+
//#region src/viewer/hooks/presentation-mode/useAudienceMode.d.ts
|
|
592
|
+
interface UseAudienceModeInput {
|
|
593
|
+
mode: ViewerMode$1;
|
|
594
|
+
onSetMode: (mode: ViewerMode$1) => void;
|
|
595
|
+
onSetActiveSlideIndex: (index: number) => void;
|
|
596
|
+
containerRef: React.RefObject<HTMLElement | null>;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* When the page was opened with the `#pptx-audience` hash, this hook:
|
|
600
|
+
* 1. Auto-enters fullscreen presentation mode after content loads
|
|
601
|
+
* 2. Listens on BroadcastChannel for slide-change messages from the presenter
|
|
602
|
+
* 3. Exits presentation mode when the presenter sends an exit signal
|
|
603
|
+
*/
|
|
604
|
+
declare function useAudienceMode(input: UseAudienceModeInput): void;
|
|
605
|
+
//#endregion
|
|
606
|
+
export { usePresenceTracking as A, UseCollaborativeHistoryInput as C, useCollaborativeState as D, UseCollaborativeStateInput as E, UseThemeSwitchingInput as F, useThemeSwitching as I, UsePresentationModeInput as L, UseYjsProviderResult as M, useYjsProvider as N, UsePresenceTrackingInput as O, ThemeSwitchingResult as P, UsePresentationModeResult as R, useYjsDocumentSync as S, useCollaborativeHistory as T, UseFollowModeResult as _, usePresenterWindow as a, useBroadcastFollower as b, useSlideNavigation as c, UseRehearsalTimingsResult as d, useRehearsalTimings as f, UseFollowModeInput as g, useAnimationPlayback as h, isAudienceTab as i, UseYjsProviderInput as j, UsePresenceTrackingResult as k, usePresentationKeyboard as l, UseAnimationPlaybackResult as m, UsePresenterWindowInput as n, UseSlideNavigationInput as o, UseAnimationPlaybackInput as p, UsePresenterWindowResult as r, UseSlideNavigationResult as s, useAudienceMode as t, UseRehearsalTimingsInput as u, useFollowMode as v, UseCollaborativeHistoryResult as w, UseYjsDocumentSyncInput as x, UseBroadcastFollowerInput as y };
|
|
607
|
+
//# sourceMappingURL=index-XGt7MZpa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-XGt7MZpa.d.ts","names":[],"sources":["../src/viewer/hooks/presentation-mode/types.ts","../src/viewer/hooks/useThemeSwitching.ts","../../../node_modules/.bun/lib0@0.2.117/node_modules/lib0/observable.d.ts","../../../node_modules/.bun/y-protocols@1.0.7+253afa400b9c0a30/node_modules/y-protocols/awareness.d.ts","../src/viewer/hooks/collaboration/useYjsProvider.ts","../src/viewer/hooks/collaboration/usePresenceTracking.ts","../src/viewer/hooks/collaboration/useCollaborativeState.ts","../src/viewer/hooks/collaboration/useCollaborativeHistory.ts","../src/viewer/hooks/collaboration/useYjsDocumentSync.ts","../src/viewer/hooks/collaboration/useBroadcastFollower.ts","../src/viewer/hooks/collaboration/useFollowMode.ts","../src/viewer/hooks/presentation-mode/useAnimationPlayback.ts","../src/viewer/hooks/presentation-mode/useRehearsalTimings.ts","../src/viewer/hooks/presentation-mode/usePresentationKeyboard.ts","../src/viewer/hooks/presentation-mode/useSlideNavigation.ts","../src/viewer/hooks/presentation-mode/usePresenterWindow.ts","../src/viewer/hooks/presentation-mode/useAudienceMode.ts"],"x_google_ignoreList":[2,3],"mappings":"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"}
|