@netless/fastboard-core 0.2.12 → 0.3.0-canary.1
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/README.md +9 -0
- package/dist/index.d.ts +295 -3
- package/dist/index.js +249 -200
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +579 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -12
- package/src/behaviors/{register-apps.ts → index.ts} +8 -1
- package/src/impl/{app.ts → FastboardApp.ts} +179 -50
- package/src/impl/FastboardPlayer.ts +203 -0
- package/src/impl/index.ts +4 -0
- package/src/index.ts +2 -3
- package/src/internal.ts +14 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/misc.ts +49 -0
- package/src/utils/store.ts +87 -0
- package/src/utils/uid.ts +12 -0
- package/src/utils/warn.ts +11 -0
- package/dist/chunk-ITPURPVI.mjs +0 -530
- package/dist/chunk-ITPURPVI.mjs.map +0 -1
- package/dist/minimal.d.ts +0 -278
- package/dist/minimal.js +0 -551
- package/dist/minimal.js.map +0 -1
- package/dist/minimal.mjs +0 -9
- package/dist/minimal.mjs.map +0 -1
- package/minimal.mjs +0 -1
- package/src/behaviors/register-slide.ts +0 -11
- package/src/helpers/emitter.ts +0 -21
- package/src/helpers/utils.ts +0 -78
- package/src/helpers/value.ts +0 -84
- package/src/impl/player.ts +0 -122
- package/src/minimal.ts +0 -153
package/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## @netless/fastboard-core
|
|
2
|
+
|
|
3
|
+
A tiny wrapper of white-web-sdk and @netless/window-manager.
|
|
4
|
+
|
|
5
|
+
Used by [@netless/fastboard-ui](https://github.com/netless-io/fastboard/tree/main/packages/fastboard-ui).
|
|
6
|
+
|
|
7
|
+
### License
|
|
8
|
+
|
|
9
|
+
MIT @ [netless](https://github.com/netless-io)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,295 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import '@netless/window-manager';
|
|
1
|
+
import { Size, SceneDefinition, ConvertedFile, RoomPhase as RoomPhase$1, ApplianceNames, ShapeType, MemberState, RoomState, Camera, AnimationMode, Rectangle, Color, ConversionResponse, WhiteWebSdkConfiguration, JoinRoomParams, RoomCallbacks, WhiteWebSdk, Room, HotKeys, ViewCallbacks, PlayerPhase as PlayerPhase$1, PlayerState, PlayerSeekingResult, ReplayRoomParams, PlayerCallbacks, Player } from 'white-web-sdk';
|
|
2
|
+
export { AnimationMode, ApplianceNames, Camera, Color, ConversionResponse, HotKey, HotKeys, JoinRoomParams, MemberState, PlayerSeekingResult, Rectangle, Room, RoomCallbacks, RoomState, SceneDefinition, ShapeType, ViewCallbacks, WhiteWebSdk, WhiteWebSdkConfiguration } from 'white-web-sdk';
|
|
3
|
+
import { AddPageParams, MountParams, WindowManager, PublicEvent } from '@netless/window-manager';
|
|
4
|
+
export { AddPageParams, MountParams, PublicEvent, WindowManager } from '@netless/window-manager';
|
|
5
|
+
|
|
6
|
+
declare type Subscriber<T> = (value: T) => void;
|
|
7
|
+
declare type Unsubscriber = () => void;
|
|
8
|
+
declare type Updater<T> = (value: T) => T;
|
|
9
|
+
declare type StartStopNotifier<T> = (set: Subscriber<T>) => Unsubscriber | void;
|
|
10
|
+
interface Readable<T> {
|
|
11
|
+
readonly value: T;
|
|
12
|
+
subscribe(this: void, run: Subscriber<T>): Unsubscriber;
|
|
13
|
+
reaction(this: void, run: Subscriber<T>): Unsubscriber;
|
|
14
|
+
}
|
|
15
|
+
interface Writable<T> extends Readable<T> {
|
|
16
|
+
set(this: void, value: T): void;
|
|
17
|
+
update(this: void, updater: Updater<T>): void;
|
|
18
|
+
}
|
|
19
|
+
declare function readable<T>(value: T, start?: StartStopNotifier<T>): Readable<T>;
|
|
20
|
+
declare function writable<T>(value: T, start: StartStopNotifier<T> | undefined, set: Subscriber<T>): Writable<T>;
|
|
21
|
+
|
|
22
|
+
declare function getImageSize(url: string, fallback: Size): Promise<Size>;
|
|
23
|
+
declare function makeSlideParams(scenes: SceneDefinition[]): {
|
|
24
|
+
scenes: SceneDefinition[];
|
|
25
|
+
taskId: string;
|
|
26
|
+
url: string;
|
|
27
|
+
};
|
|
28
|
+
declare function convertedFileToScene(f: ConvertedFile, i: number): SceneDefinition;
|
|
29
|
+
|
|
30
|
+
declare function genUID(): string;
|
|
31
|
+
|
|
32
|
+
declare const warnings: {
|
|
33
|
+
readonly "no-ppt-in-scenes": "You're probably inserting the slide app in a wrong way, there shouldn't exist `scenes[0].ppt`.";
|
|
34
|
+
};
|
|
35
|
+
declare function warn(id: keyof typeof warnings): void;
|
|
36
|
+
|
|
37
|
+
declare class FastboardAppBase {
|
|
38
|
+
readonly sdk: WhiteWebSdk;
|
|
39
|
+
readonly room: Room;
|
|
40
|
+
readonly manager: WindowManager;
|
|
41
|
+
readonly hotKeys: Partial<HotKeys>;
|
|
42
|
+
constructor(sdk: WhiteWebSdk, room: Room, manager: WindowManager, hotKeys: Partial<HotKeys>);
|
|
43
|
+
protected _destroyed: boolean;
|
|
44
|
+
protected _assertNotDestroyed(): void;
|
|
45
|
+
protected _addRoomListener<K extends keyof RoomCallbacks>(name: K, listener: RoomCallbacks[K]): () => void;
|
|
46
|
+
protected _addManagerListener<K extends keyof PublicEvent>(name: K, listener: (value: PublicEvent[K]) => void): () => void;
|
|
47
|
+
protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]): () => void;
|
|
48
|
+
destroy(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
declare type RoomPhase = `${RoomPhase$1}`;
|
|
51
|
+
|
|
52
|
+
declare type Appliance = `${ApplianceNames}`;
|
|
53
|
+
declare type Shape = `${ShapeType}`;
|
|
54
|
+
interface InsertDocsStatic {
|
|
55
|
+
readonly fileType: "pdf";
|
|
56
|
+
readonly scenePath: string;
|
|
57
|
+
readonly scenes: SceneDefinition[];
|
|
58
|
+
readonly title?: string;
|
|
59
|
+
}
|
|
60
|
+
interface InsertDocsDynamic {
|
|
61
|
+
readonly fileType: "pptx";
|
|
62
|
+
readonly scenePath: string;
|
|
63
|
+
readonly taskId: string;
|
|
64
|
+
readonly title?: string;
|
|
65
|
+
readonly url?: string;
|
|
66
|
+
/** @example [{ name: '1' }, { name: '2' }, { name: '3' }] */
|
|
67
|
+
readonly scenes?: SceneDefinition[];
|
|
68
|
+
}
|
|
69
|
+
declare type InsertDocsParams = InsertDocsStatic | InsertDocsDynamic;
|
|
70
|
+
declare type SetMemberStateFn = (partialMemberState: Partial<MemberState>) => void;
|
|
71
|
+
declare type RoomStateChanged = (diff: Partial<RoomState>) => void;
|
|
72
|
+
interface AppsStatus {
|
|
73
|
+
[kind: string]: {
|
|
74
|
+
status: "idle" | "loading" | "failed";
|
|
75
|
+
reason?: string;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
declare class FastboardApp extends FastboardAppBase {
|
|
79
|
+
/**
|
|
80
|
+
* Render this app to some DOM.
|
|
81
|
+
*/
|
|
82
|
+
bindContainer(container: HTMLElement): void;
|
|
83
|
+
/**
|
|
84
|
+
* Move window-manager's collector to some place.
|
|
85
|
+
*/
|
|
86
|
+
bindCollector(container: HTMLElement): void;
|
|
87
|
+
/**
|
|
88
|
+
* Is current room writable?
|
|
89
|
+
*/
|
|
90
|
+
readonly writable: Writable<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Current window-manager's windows' state (is it maximized?).
|
|
93
|
+
*/
|
|
94
|
+
readonly boxState: Readable<"normal" | "minimized" | "maximized" | undefined>;
|
|
95
|
+
/**
|
|
96
|
+
* Current window-manager's focused app's id.
|
|
97
|
+
* @example "HelloWorld-1A2b3C4d"
|
|
98
|
+
*/
|
|
99
|
+
readonly focusedApp: Readable<string | undefined>;
|
|
100
|
+
/**
|
|
101
|
+
* How many times can I call `app.redo()`?
|
|
102
|
+
*/
|
|
103
|
+
readonly canRedoSteps: Readable<number>;
|
|
104
|
+
/**
|
|
105
|
+
* How many times can I call `app.undo()`?
|
|
106
|
+
*/
|
|
107
|
+
readonly canUndoSteps: Readable<number>;
|
|
108
|
+
/**
|
|
109
|
+
* Current camera information of main view.
|
|
110
|
+
*
|
|
111
|
+
* Change the camera position by `app.moveCamera()`.
|
|
112
|
+
*/
|
|
113
|
+
readonly camera: Readable<Camera>;
|
|
114
|
+
/**
|
|
115
|
+
* Current tool's info, like "is using pencil?", "what color?".
|
|
116
|
+
*
|
|
117
|
+
* Change the tool by `app.setAppliance()`.
|
|
118
|
+
*/
|
|
119
|
+
readonly memberState: Readable<MemberState>;
|
|
120
|
+
/**
|
|
121
|
+
* 0..n-1, current index of main view scenes.
|
|
122
|
+
*/
|
|
123
|
+
readonly sceneIndex: Writable<number>;
|
|
124
|
+
/**
|
|
125
|
+
* How many pages are in the main view?
|
|
126
|
+
*/
|
|
127
|
+
readonly sceneLength: Readable<number>;
|
|
128
|
+
private _appsStatus;
|
|
129
|
+
/**
|
|
130
|
+
* Apps status.
|
|
131
|
+
*/
|
|
132
|
+
readonly appsStatus: Readable<AppsStatus>;
|
|
133
|
+
/**
|
|
134
|
+
* Undo a step on main view.
|
|
135
|
+
*/
|
|
136
|
+
undo(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Redo a step on main view.
|
|
139
|
+
*/
|
|
140
|
+
redo(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Move current main view's camera position.
|
|
143
|
+
*/
|
|
144
|
+
moveCamera(camera: Partial<Camera> & {
|
|
145
|
+
animationMode?: AnimationMode | undefined;
|
|
146
|
+
}): void;
|
|
147
|
+
/**
|
|
148
|
+
* Move current main view's camera to include a rectangle.
|
|
149
|
+
*/
|
|
150
|
+
moveCameraToContain(rectangle: Rectangle & {
|
|
151
|
+
animationMode?: AnimationMode;
|
|
152
|
+
}): void;
|
|
153
|
+
/**
|
|
154
|
+
* Delete all things on the main view.
|
|
155
|
+
*/
|
|
156
|
+
cleanCurrentScene(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Set current tool, like "pencil".
|
|
159
|
+
*/
|
|
160
|
+
setAppliance(appliance: ApplianceNames | Appliance, shape?: ShapeType | Shape): void;
|
|
161
|
+
setStrokeWidth(strokeWidth: number): void;
|
|
162
|
+
setStrokeColor(strokeColor: Color): void;
|
|
163
|
+
prevPage(): Promise<boolean>;
|
|
164
|
+
nextPage(): Promise<boolean>;
|
|
165
|
+
addPage(params?: AddPageParams): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Insert an image to the main view.
|
|
168
|
+
*/
|
|
169
|
+
insertImage(url: string): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Insert PDF/PPTX from conversion result.
|
|
172
|
+
* @param status https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress
|
|
173
|
+
*/
|
|
174
|
+
insertDocs(filename: string, status: ConversionResponse): Promise<string | undefined>;
|
|
175
|
+
/**
|
|
176
|
+
* Manual way.
|
|
177
|
+
* @example
|
|
178
|
+
* app.insertDocs({
|
|
179
|
+
* fileType: 'pptx',
|
|
180
|
+
* scenePath: `/pptx/${conversion.taskId}`,
|
|
181
|
+
* taskId: conversion.taskId,
|
|
182
|
+
* title: 'Title',
|
|
183
|
+
* })
|
|
184
|
+
*/
|
|
185
|
+
insertDocs(params: InsertDocsParams): Promise<string | undefined>;
|
|
186
|
+
private _insertDocsImpl;
|
|
187
|
+
/**
|
|
188
|
+
* Insert the Monaco Code Editor app.
|
|
189
|
+
*/
|
|
190
|
+
insertCodeEditor(): Promise<string | undefined>;
|
|
191
|
+
/**
|
|
192
|
+
* Insert the Countdown app.
|
|
193
|
+
*/
|
|
194
|
+
insertCountdown(): Promise<string | undefined>;
|
|
195
|
+
/**
|
|
196
|
+
* Insert the Media Player app.
|
|
197
|
+
*/
|
|
198
|
+
insertMedia(title: string, src: string): Promise<string | undefined>;
|
|
199
|
+
/**
|
|
200
|
+
* Insert the GeoGebra app.
|
|
201
|
+
*/
|
|
202
|
+
insertGeoGebra(): Promise<string | undefined>;
|
|
203
|
+
}
|
|
204
|
+
interface FastboardOptions {
|
|
205
|
+
sdkConfig: Omit<WhiteWebSdkConfiguration, "useMobXState"> & {
|
|
206
|
+
region: NonNullable<WhiteWebSdkConfiguration["region"]>;
|
|
207
|
+
};
|
|
208
|
+
joinRoom: Omit<JoinRoomParams, "useMultiViews" | "disableNewPencil" | "disableMagixEventDispatchLimit"> & {
|
|
209
|
+
callbacks?: Partial<RoomCallbacks>;
|
|
210
|
+
};
|
|
211
|
+
managerConfig?: Omit<MountParams, "room">;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a FastboardApp instance.
|
|
215
|
+
* @example
|
|
216
|
+
* let app = await createFastboard({
|
|
217
|
+
* sdkConfig: {
|
|
218
|
+
* appIdentifier: import.meta.env.VITE_APPID,
|
|
219
|
+
* region: 'cn-hz',
|
|
220
|
+
* },
|
|
221
|
+
* joinRoom: {
|
|
222
|
+
* uid: unique_id,
|
|
223
|
+
* uuid: import.meta.env.VITE_ROOM_UUID,
|
|
224
|
+
* roomToken: import.meta.env.VITE_ROOM_TOKEN,
|
|
225
|
+
* },
|
|
226
|
+
* })
|
|
227
|
+
*/
|
|
228
|
+
declare function createFastboard({ sdkConfig, joinRoom: { callbacks, ...joinRoomParams }, managerConfig, }: FastboardOptions): Promise<FastboardApp>;
|
|
229
|
+
|
|
230
|
+
declare class FastboardPlayerBase {
|
|
231
|
+
readonly sdk: WhiteWebSdk;
|
|
232
|
+
readonly player: Player;
|
|
233
|
+
readonly manager: WindowManager;
|
|
234
|
+
constructor(sdk: WhiteWebSdk, player: Player, manager: WindowManager);
|
|
235
|
+
protected _destroyed: boolean;
|
|
236
|
+
protected _assertNotDestroyed(): void;
|
|
237
|
+
protected _addPlayerListener<K extends keyof PlayerCallbacks>(name: K, listener: PlayerCallbacks[K]): () => void;
|
|
238
|
+
protected _addManagerListener<K extends keyof PublicEvent>(name: K, listener: (value: PublicEvent[K]) => void): () => void;
|
|
239
|
+
protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]): () => void;
|
|
240
|
+
destroy(): void;
|
|
241
|
+
}
|
|
242
|
+
declare type PlayerPhase = `${PlayerPhase$1}`;
|
|
243
|
+
|
|
244
|
+
declare class FastboardPlayer extends FastboardPlayerBase {
|
|
245
|
+
/**
|
|
246
|
+
* Render this player to some DOM.
|
|
247
|
+
*/
|
|
248
|
+
bindContainer(container: HTMLElement): void;
|
|
249
|
+
/**
|
|
250
|
+
* Move window-manager's collector to some place.
|
|
251
|
+
*/
|
|
252
|
+
bindCollector(container: HTMLElement): void;
|
|
253
|
+
readonly currentTime: Writable<number>;
|
|
254
|
+
readonly phase: Readable<"waitingFirstFrame" | "playing" | "pause" | "stop" | "ended" | "buffering">;
|
|
255
|
+
readonly canplay: Readable<boolean>;
|
|
256
|
+
private _setSpeed;
|
|
257
|
+
readonly speed: Writable<number>;
|
|
258
|
+
private _setReady;
|
|
259
|
+
readonly ready: Readable<boolean>;
|
|
260
|
+
private _setDuration;
|
|
261
|
+
readonly duration: Readable<number>;
|
|
262
|
+
readonly state: Readable<PlayerState | null>;
|
|
263
|
+
seek(timestamp: number): Promise<PlayerSeekingResult>;
|
|
264
|
+
play(): void;
|
|
265
|
+
pause(): void;
|
|
266
|
+
stop(): void;
|
|
267
|
+
setSpeed(value: number): void;
|
|
268
|
+
}
|
|
269
|
+
interface FastboardReplayOptions {
|
|
270
|
+
sdkConfig: Omit<WhiteWebSdkConfiguration, "useMobXState"> & {
|
|
271
|
+
region: NonNullable<WhiteWebSdkConfiguration["region"]>;
|
|
272
|
+
};
|
|
273
|
+
replayRoom: Omit<ReplayRoomParams, "useMultiViews"> & {
|
|
274
|
+
callbacks?: Partial<PlayerCallbacks>;
|
|
275
|
+
};
|
|
276
|
+
managerConfig?: Omit<MountParams, "room">;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create a FastboardApp instance.
|
|
280
|
+
* @example
|
|
281
|
+
* let player = await replayFastboard({
|
|
282
|
+
* sdkConfig: {
|
|
283
|
+
* appIdentifier: import.meta.env.VITE_APPID,
|
|
284
|
+
* region: 'cn-hz',
|
|
285
|
+
* },
|
|
286
|
+
* replayRoom: {
|
|
287
|
+
* uid: unique_id,
|
|
288
|
+
* uuid: import.meta.env.VITE_ROOM_UUID,
|
|
289
|
+
* roomToken: import.meta.env.VITE_ROOM_TOKEN,
|
|
290
|
+
* },
|
|
291
|
+
* })
|
|
292
|
+
*/
|
|
293
|
+
declare function replayFastboard({ sdkConfig, replayRoom: { callbacks, ...replayRoomParams }, managerConfig, }: FastboardReplayOptions): Promise<FastboardPlayer>;
|
|
294
|
+
|
|
295
|
+
export { Appliance, AppsStatus, FastboardApp, FastboardOptions, FastboardPlayer, FastboardReplayOptions, InsertDocsDynamic, InsertDocsParams, InsertDocsStatic, PlayerPhase, Readable, RoomPhase, RoomStateChanged, SetMemberStateFn, Shape, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable, convertedFileToScene, createFastboard, genUID, getImageSize, makeSlideParams, readable, replayFastboard, warn, writable };
|