@netless/fastboard-core 0.3.8-alpha.0 → 0.3.9
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/dist/index.d.ts +14 -12
- package/dist/index.js +235 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +226 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
- package/src/impl/FastboardApp.ts +33 -3
- package/src/impl/FastboardPlayer.ts +5 -1
- package/src/utils/misc.ts +31 -1
- package/src/utils/store.ts +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Size, SceneDefinition, ConvertedFile, RoomPhase as RoomPhase$1, ApplianceNames, ShapeType, MemberState, RoomState, Camera, AnimationMode, Rectangle, Color, ConversionResponse, WhiteWebSdkConfiguration, JoinRoomParams, RoomCallbacks, WhiteWebSdk, Room, HotKeys,
|
|
1
|
+
import { Size, SceneDefinition, ConvertedFile, RoomPhase as RoomPhase$1, ApplianceNames, ShapeType, MemberState, RoomState, Camera, AnimationMode, Rectangle, Color, ConversionResponse, WhiteWebSdkConfiguration, JoinRoomParams, RoomCallbacks, WhiteWebSdk, Room, HotKeys, PlayerPhase as PlayerPhase$1, PlayerState, PlayerSeekingResult, ReplayRoomParams, PlayerCallbacks, Player, ViewCallbacks, View } from 'white-web-sdk';
|
|
2
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, NetlessApp, WindowManager,
|
|
3
|
+
import { AddPageParams, MountParams, NetlessApp, WindowManager, RegisterParams, PublicEvent } from '@netless/window-manager';
|
|
4
4
|
export { AddPageParams, MountParams, NetlessApp, PublicEvent, WindowManager } from '@netless/window-manager';
|
|
5
5
|
import { SyncedStore } from '@netless/synced-store';
|
|
6
6
|
export { Diff, DiffOne, Storage, SyncedStore } from '@netless/synced-store';
|
|
@@ -22,7 +22,7 @@ interface Writable<T> extends Readable<T> {
|
|
|
22
22
|
declare function readable<T>(value: T, start?: StartStopNotifier<T>): Readable<T>;
|
|
23
23
|
declare function writable<T>(value: T, start: StartStopNotifier<T> | undefined, set: Subscriber<T>): Writable<T>;
|
|
24
24
|
|
|
25
|
-
declare function getImageSize(url: string, fallback: Size): Promise<Size>;
|
|
25
|
+
declare function getImageSize(url: string, fallback: Size, crossOrigin?: boolean | string): Promise<Size>;
|
|
26
26
|
declare function makeSlideParams(scenes: SceneDefinition[]): {
|
|
27
27
|
scenes: SceneDefinition[];
|
|
28
28
|
taskId: string;
|
|
@@ -45,10 +45,6 @@ declare class FastboardAppBase<TEventData extends Record<string, any> = any> {
|
|
|
45
45
|
readonly syncedStore: SyncedStore<TEventData>;
|
|
46
46
|
constructor(sdk: WhiteWebSdk, room: Room, manager: WindowManager, hotKeys: Partial<HotKeys>, syncedStore: SyncedStore<TEventData>);
|
|
47
47
|
protected _destroyed: boolean;
|
|
48
|
-
protected _assertNotDestroyed(): void;
|
|
49
|
-
protected _addRoomListener<K extends keyof RoomCallbacks>(name: K, listener: RoomCallbacks[K]): () => void;
|
|
50
|
-
protected _addManagerListener<K extends keyof PublicEvent>(name: K, listener: (value: PublicEvent[K]) => void): () => void;
|
|
51
|
-
protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]): () => void;
|
|
52
48
|
/**
|
|
53
49
|
* Destroy fastboard (disconnect from the whiteboard room).
|
|
54
50
|
*/
|
|
@@ -223,6 +219,14 @@ declare class FastboardApp<TEventData extends Record<string, any> = any> extends
|
|
|
223
219
|
* setTextColor([0x66, 0xcc, 0xff])
|
|
224
220
|
*/
|
|
225
221
|
setTextColor(textColor: Color): void;
|
|
222
|
+
/**
|
|
223
|
+
* Toggle dotted line effect on pencil.
|
|
224
|
+
*/
|
|
225
|
+
toggleDottedLine(force?: boolean): void;
|
|
226
|
+
/**
|
|
227
|
+
* Set pencil eraser size.
|
|
228
|
+
*/
|
|
229
|
+
setPencilEraserSize(size: number): void;
|
|
226
230
|
/**
|
|
227
231
|
* Goto previous page (the main whiteboard view).
|
|
228
232
|
*/
|
|
@@ -251,10 +255,12 @@ declare class FastboardApp<TEventData extends Record<string, any> = any> extends
|
|
|
251
255
|
/**
|
|
252
256
|
* Insert an image to the main view.
|
|
253
257
|
*
|
|
258
|
+
* @param crossOrigin Whether to load the image with CORS enabled, default is `true`.
|
|
259
|
+
*
|
|
254
260
|
* @example
|
|
255
261
|
* insertImage("https://i.imgur.com/CzXTtJV.jpg")
|
|
256
262
|
*/
|
|
257
|
-
insertImage(url: string): Promise<void>;
|
|
263
|
+
insertImage(url: string, crossOrigin?: boolean | string): Promise<void>;
|
|
258
264
|
/**
|
|
259
265
|
* Insert PDF/PPTX from conversion result.
|
|
260
266
|
* @param status https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress
|
|
@@ -330,10 +336,6 @@ declare class FastboardPlayerBase<TEventData extends Record<string, any> = any>
|
|
|
330
336
|
readonly syncedStore: SyncedStore<TEventData>;
|
|
331
337
|
constructor(sdk: WhiteWebSdk, player: Player, manager: WindowManager, syncedStore: SyncedStore<TEventData>);
|
|
332
338
|
protected _destroyed: boolean;
|
|
333
|
-
protected _assertNotDestroyed(): void;
|
|
334
|
-
protected _addPlayerListener<K extends keyof PlayerCallbacks>(name: K, listener: PlayerCallbacks[K]): () => void;
|
|
335
|
-
protected _addManagerListener<K extends keyof PublicEvent>(name: K, listener: (value: PublicEvent[K]) => void): () => void;
|
|
336
|
-
protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]): () => void;
|
|
337
339
|
destroy(): void;
|
|
338
340
|
}
|
|
339
341
|
type PlayerPhase = `${PlayerPhase$1}`;
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,10 @@ var windowManager = require('@netless/window-manager');
|
|
|
5
5
|
var syncedStore = require('@netless/synced-store');
|
|
6
6
|
var SlideApp = require('@netless/app-slide');
|
|
7
7
|
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var SlideApp__default = /*#__PURE__*/_interopDefault(SlideApp);
|
|
11
|
+
|
|
8
12
|
var __defProp = Object.defineProperty;
|
|
9
13
|
var __defProps = Object.defineProperties;
|
|
10
14
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
@@ -105,20 +109,43 @@ function writable(value, start = noop, set) {
|
|
|
105
109
|
reaction: internal.reaction,
|
|
106
110
|
set,
|
|
107
111
|
update(fn) {
|
|
108
|
-
set(fn(value));
|
|
112
|
+
set(fn(internal.value));
|
|
109
113
|
}
|
|
110
114
|
};
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
// src/utils/misc.ts
|
|
114
|
-
function getImageSize(url, fallback) {
|
|
118
|
+
function getImageSize(url, fallback, crossOrigin) {
|
|
115
119
|
return new Promise((resolve) => {
|
|
116
120
|
const img = new Image();
|
|
121
|
+
applyCrossOrigin(img, url, crossOrigin);
|
|
117
122
|
img.onload = () => resolve(img);
|
|
118
123
|
img.onerror = () => resolve(fallback);
|
|
119
124
|
img.src = url;
|
|
120
125
|
});
|
|
121
126
|
}
|
|
127
|
+
function applyCrossOrigin(image, src, crossOrigin) {
|
|
128
|
+
if (crossOrigin === void 0 && !src.startsWith("data:")) {
|
|
129
|
+
image.crossOrigin = determineCrossOrigin(src);
|
|
130
|
+
} else if (crossOrigin !== false) {
|
|
131
|
+
image.crossOrigin = typeof crossOrigin === "string" ? crossOrigin : "anonymous";
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function determineCrossOrigin(src) {
|
|
135
|
+
if (src.startsWith("data:") || typeof window === "undefined" || !window.location) {
|
|
136
|
+
return "";
|
|
137
|
+
}
|
|
138
|
+
const loc = window.location;
|
|
139
|
+
try {
|
|
140
|
+
const parsedUrl = new URL(src, document.baseURI);
|
|
141
|
+
if (parsedUrl.hostname !== loc.hostname || parsedUrl.port !== loc.port || parsedUrl.protocol !== loc.protocol) {
|
|
142
|
+
return "anonymous";
|
|
143
|
+
}
|
|
144
|
+
return "";
|
|
145
|
+
} catch (e) {
|
|
146
|
+
return "";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
122
149
|
function makeSlideParams(scenes) {
|
|
123
150
|
const emptyScenes = [];
|
|
124
151
|
let taskId = "";
|
|
@@ -205,7 +232,7 @@ var DefaultApps = {
|
|
|
205
232
|
windowManager.WindowManager.register({
|
|
206
233
|
kind: "Slide",
|
|
207
234
|
appOptions: { debug: false },
|
|
208
|
-
src:
|
|
235
|
+
src: SlideApp__default.default,
|
|
209
236
|
addHooks: SlideApp.addHooks
|
|
210
237
|
});
|
|
211
238
|
for (const kind in DefaultApps) {
|
|
@@ -215,7 +242,7 @@ for (const kind in DefaultApps) {
|
|
|
215
242
|
}
|
|
216
243
|
}
|
|
217
244
|
var register = windowManager.WindowManager.register.bind(windowManager.WindowManager);
|
|
218
|
-
var version = "0.3.
|
|
245
|
+
var version = "0.3.9";
|
|
219
246
|
if (typeof window !== "undefined") {
|
|
220
247
|
let str = window.__netlessUA || "";
|
|
221
248
|
str += ` ${"@netless/fastboard"}@${version} `;
|
|
@@ -232,26 +259,33 @@ var FastboardAppBase = class {
|
|
|
232
259
|
this.syncedStore = syncedStore;
|
|
233
260
|
__publicField(this, "_destroyed", false);
|
|
234
261
|
}
|
|
262
|
+
/** @internal */
|
|
235
263
|
_assertNotDestroyed() {
|
|
236
264
|
if (this._destroyed) {
|
|
237
265
|
throw new Error("FastboardApp has been destroyed");
|
|
238
266
|
}
|
|
239
267
|
}
|
|
268
|
+
/** @internal */
|
|
240
269
|
_addRoomListener(name, listener) {
|
|
241
270
|
this._assertNotDestroyed();
|
|
242
271
|
this.room.callbacks.on(name, listener);
|
|
243
272
|
return () => this.room.callbacks.off(name, listener);
|
|
244
273
|
}
|
|
274
|
+
/** @internal */
|
|
245
275
|
_addManagerListener(name, listener) {
|
|
246
276
|
this._assertNotDestroyed();
|
|
247
277
|
this.manager.emitter.on(name, listener);
|
|
248
278
|
return () => this.manager.emitter.off(name, listener);
|
|
249
279
|
}
|
|
280
|
+
/** @internal */
|
|
250
281
|
_addMainViewListener(name, listener) {
|
|
251
282
|
this._assertNotDestroyed();
|
|
252
283
|
this.manager.mainView.callbacks.on(name, listener);
|
|
253
284
|
return () => this.manager.mainView.callbacks.off(name, listener);
|
|
254
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Destroy fastboard (disconnect from the whiteboard room).
|
|
288
|
+
*/
|
|
255
289
|
destroy() {
|
|
256
290
|
this._destroyed = true;
|
|
257
291
|
this.manager.destroy();
|
|
@@ -261,6 +295,9 @@ var FastboardAppBase = class {
|
|
|
261
295
|
var FastboardApp = class extends FastboardAppBase {
|
|
262
296
|
constructor() {
|
|
263
297
|
super(...arguments);
|
|
298
|
+
/**
|
|
299
|
+
* Is current room writable?
|
|
300
|
+
*/
|
|
264
301
|
__publicField(this, "writable", writable(
|
|
265
302
|
this.room.isWritable,
|
|
266
303
|
(set) => {
|
|
@@ -269,34 +306,63 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
269
306
|
},
|
|
270
307
|
this.room.setWritable.bind(this.room)
|
|
271
308
|
));
|
|
309
|
+
/**
|
|
310
|
+
* Is current room online?
|
|
311
|
+
*/
|
|
272
312
|
__publicField(this, "phase", readable(this.room.phase, (set) => {
|
|
273
313
|
set(this.room.phase);
|
|
274
314
|
return this._addRoomListener("onPhaseChanged", set);
|
|
275
315
|
}));
|
|
316
|
+
/**
|
|
317
|
+
* Current window-manager's windows' state (is it maximized?).
|
|
318
|
+
*/
|
|
276
319
|
__publicField(this, "boxState", readable(this.manager.boxState, (set) => {
|
|
277
320
|
set(this.manager.boxState);
|
|
278
321
|
return this._addManagerListener("boxStateChange", set);
|
|
279
322
|
}));
|
|
323
|
+
/**
|
|
324
|
+
* Current window-manager's focused app's id.
|
|
325
|
+
* @example "HelloWorld-1A2b3C4d"
|
|
326
|
+
*/
|
|
280
327
|
__publicField(this, "focusedApp", readable(this.manager.focused, (set) => {
|
|
281
328
|
set(this.manager.focused);
|
|
282
329
|
return this._addManagerListener("focusedChange", set);
|
|
283
330
|
}));
|
|
331
|
+
/**
|
|
332
|
+
* How many times can I call `app.redo()`?
|
|
333
|
+
*/
|
|
284
334
|
__publicField(this, "canRedoSteps", readable(this.manager.canRedoSteps, (set) => {
|
|
285
335
|
set(this.manager.canRedoSteps);
|
|
286
336
|
return this._addManagerListener("canRedoStepsChange", set);
|
|
287
337
|
}));
|
|
338
|
+
/**
|
|
339
|
+
* How many times can I call `app.undo()`?
|
|
340
|
+
*/
|
|
288
341
|
__publicField(this, "canUndoSteps", readable(this.manager.canUndoSteps, (set) => {
|
|
289
342
|
set(this.manager.canUndoSteps);
|
|
290
343
|
return this._addManagerListener("canUndoStepsChange", set);
|
|
291
344
|
}));
|
|
345
|
+
/**
|
|
346
|
+
* Current camera information of main view.
|
|
347
|
+
*
|
|
348
|
+
* Change the camera position by `app.moveCamera()`.
|
|
349
|
+
*/
|
|
292
350
|
__publicField(this, "camera", readable(this.manager.camera, (set) => {
|
|
293
351
|
set(this.manager.camera);
|
|
294
352
|
return this._addMainViewListener("onCameraUpdated", set);
|
|
295
353
|
}));
|
|
354
|
+
/**
|
|
355
|
+
* Current tool's info, like "is using pencil?", "what color?".
|
|
356
|
+
*
|
|
357
|
+
* Change the tool by `app.setAppliance()`.
|
|
358
|
+
*/
|
|
296
359
|
__publicField(this, "memberState", readable(this.room.state.memberState, (set) => {
|
|
297
360
|
set(this.room.state.memberState);
|
|
298
361
|
return this._addRoomListener("onRoomStateChanged", ({ memberState: m }) => m && set(m));
|
|
299
362
|
}));
|
|
363
|
+
/**
|
|
364
|
+
* 0..n-1, current index of main view scenes.
|
|
365
|
+
*/
|
|
300
366
|
__publicField(this, "sceneIndex", writable(
|
|
301
367
|
this.manager.mainViewSceneIndex,
|
|
302
368
|
(set) => {
|
|
@@ -305,11 +371,18 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
305
371
|
},
|
|
306
372
|
this.manager.setMainViewSceneIndex.bind(this.manager)
|
|
307
373
|
));
|
|
374
|
+
/**
|
|
375
|
+
* How many pages are in the main view?
|
|
376
|
+
*/
|
|
308
377
|
__publicField(this, "sceneLength", readable(this.manager.mainViewScenesLength, (set) => {
|
|
309
378
|
set(this.manager.mainViewScenesLength);
|
|
310
379
|
return this._addManagerListener("mainViewScenesLengthChange", set);
|
|
311
380
|
}));
|
|
381
|
+
/** @internal */
|
|
312
382
|
__publicField(this, "_appsStatus", {});
|
|
383
|
+
/**
|
|
384
|
+
* Apps status.
|
|
385
|
+
*/
|
|
313
386
|
__publicField(this, "appsStatus", readable(
|
|
314
387
|
{},
|
|
315
388
|
(set) => this._addManagerListener("loadApp", ({ kind, status, reason }) => {
|
|
@@ -318,34 +391,58 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
318
391
|
})
|
|
319
392
|
));
|
|
320
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Render this app to some DOM.
|
|
396
|
+
*/
|
|
321
397
|
bindContainer(container) {
|
|
322
398
|
this._assertNotDestroyed();
|
|
323
399
|
this.manager.bindContainer(container);
|
|
324
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Move window-manager's collector to some place.
|
|
403
|
+
*/
|
|
325
404
|
bindCollector(container) {
|
|
326
405
|
this._assertNotDestroyed();
|
|
327
406
|
this.manager.bindCollectorContainer(container);
|
|
328
407
|
}
|
|
408
|
+
/**
|
|
409
|
+
* Undo a step on main view.
|
|
410
|
+
*/
|
|
329
411
|
undo() {
|
|
330
412
|
this._assertNotDestroyed();
|
|
331
413
|
this.manager.undo();
|
|
332
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* Redo a step on main view.
|
|
417
|
+
*/
|
|
333
418
|
redo() {
|
|
334
419
|
this._assertNotDestroyed();
|
|
335
420
|
this.manager.redo();
|
|
336
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Move current main view's camera position.
|
|
424
|
+
*/
|
|
337
425
|
moveCamera(camera) {
|
|
338
426
|
this._assertNotDestroyed();
|
|
339
427
|
this.manager.moveCamera(camera);
|
|
340
428
|
}
|
|
429
|
+
/**
|
|
430
|
+
* Move current main view's camera to include a rectangle.
|
|
431
|
+
*/
|
|
341
432
|
moveCameraToContain(rectangle) {
|
|
342
433
|
this._assertNotDestroyed();
|
|
343
434
|
this.manager.moveCameraToContain(rectangle);
|
|
344
435
|
}
|
|
436
|
+
/**
|
|
437
|
+
* Delete all things on the main view.
|
|
438
|
+
*/
|
|
345
439
|
cleanCurrentScene() {
|
|
346
440
|
this._assertNotDestroyed();
|
|
347
441
|
this.manager.cleanCurrentScene();
|
|
348
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* Set current tool, like "pencil".
|
|
445
|
+
*/
|
|
349
446
|
setAppliance(appliance, shape) {
|
|
350
447
|
this._assertNotDestroyed();
|
|
351
448
|
this.manager.mainView.setMemberState({
|
|
@@ -353,39 +450,97 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
353
450
|
shapeType: shape
|
|
354
451
|
});
|
|
355
452
|
}
|
|
453
|
+
/**
|
|
454
|
+
* Set pencil and shape's thickness.
|
|
455
|
+
*/
|
|
356
456
|
setStrokeWidth(strokeWidth) {
|
|
357
457
|
this._assertNotDestroyed();
|
|
358
458
|
this.manager.mainView.setMemberState({ strokeWidth });
|
|
359
459
|
}
|
|
460
|
+
/**
|
|
461
|
+
* Set pencil and shape's color.
|
|
462
|
+
*/
|
|
360
463
|
setStrokeColor(strokeColor) {
|
|
361
464
|
this._assertNotDestroyed();
|
|
362
465
|
this.manager.mainView.setMemberState({ strokeColor });
|
|
363
466
|
}
|
|
467
|
+
/**
|
|
468
|
+
* Set text size. Default is 16.
|
|
469
|
+
*/
|
|
364
470
|
setTextSize(textSize) {
|
|
365
471
|
this._assertNotDestroyed();
|
|
366
472
|
this.manager.mainView.setMemberState({ textSize });
|
|
367
473
|
}
|
|
474
|
+
/**
|
|
475
|
+
* Set text color.
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* setTextColor([0x66, 0xcc, 0xff])
|
|
479
|
+
*/
|
|
368
480
|
setTextColor(textColor) {
|
|
369
481
|
this._assertNotDestroyed();
|
|
370
482
|
this.manager.mainView.setMemberState({ textColor });
|
|
371
483
|
}
|
|
484
|
+
/**
|
|
485
|
+
* Toggle dotted line effect on pencil.
|
|
486
|
+
*/
|
|
487
|
+
toggleDottedLine(force) {
|
|
488
|
+
this._assertNotDestroyed();
|
|
489
|
+
this.manager.mainView.setMemberState({ dottedLine: force != null ? force : !this.memberState.value.dottedLine });
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Set pencil eraser size.
|
|
493
|
+
*/
|
|
494
|
+
setPencilEraserSize(size) {
|
|
495
|
+
this._assertNotDestroyed();
|
|
496
|
+
this.manager.mainView.setMemberState({ pencilEraserSize: size });
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Goto previous page (the main whiteboard view).
|
|
500
|
+
*/
|
|
372
501
|
prevPage() {
|
|
373
502
|
this._assertNotDestroyed();
|
|
374
503
|
return this.manager.prevPage();
|
|
375
504
|
}
|
|
505
|
+
/**
|
|
506
|
+
* Goto next page (the main whiteboard view).
|
|
507
|
+
*/
|
|
376
508
|
nextPage() {
|
|
377
509
|
this._assertNotDestroyed();
|
|
378
510
|
return this.manager.nextPage();
|
|
379
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
* Add one page to the main whiteboard view.
|
|
514
|
+
*
|
|
515
|
+
* @example
|
|
516
|
+
* addPage({ after: true }) // add one page right after current one.
|
|
517
|
+
* nextPage() // then, goto that page.
|
|
518
|
+
*/
|
|
380
519
|
addPage(params) {
|
|
381
520
|
this._assertNotDestroyed();
|
|
382
521
|
return this.manager.addPage(params);
|
|
383
522
|
}
|
|
523
|
+
/**
|
|
524
|
+
* Remove one page at given index or current page (by default).
|
|
525
|
+
*
|
|
526
|
+
* Requires `@netless/window-manager` >= 0.4.30.
|
|
527
|
+
*
|
|
528
|
+
* @example
|
|
529
|
+
* removePage() // remove current page
|
|
530
|
+
*/
|
|
384
531
|
removePage(index) {
|
|
385
532
|
this._assertNotDestroyed();
|
|
386
533
|
return this.manager.removePage(index);
|
|
387
534
|
}
|
|
388
|
-
|
|
535
|
+
/**
|
|
536
|
+
* Insert an image to the main view.
|
|
537
|
+
*
|
|
538
|
+
* @param crossOrigin Whether to load the image with CORS enabled, default is `true`.
|
|
539
|
+
*
|
|
540
|
+
* @example
|
|
541
|
+
* insertImage("https://i.imgur.com/CzXTtJV.jpg")
|
|
542
|
+
*/
|
|
543
|
+
async insertImage(url, crossOrigin) {
|
|
389
544
|
this._assertNotDestroyed();
|
|
390
545
|
await this.manager.switchMainViewToWriter();
|
|
391
546
|
const { divElement } = this.manager.mainView;
|
|
@@ -394,13 +549,21 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
394
549
|
height: (divElement == null ? void 0 : divElement.scrollHeight) || window.innerHeight
|
|
395
550
|
};
|
|
396
551
|
const maxWidth = containerSize.width * 0.8;
|
|
397
|
-
let { width, height } = await getImageSize(url, containerSize);
|
|
552
|
+
let { width, height } = await getImageSize(url, containerSize, crossOrigin);
|
|
398
553
|
const scale = Math.min(maxWidth / width, 1);
|
|
399
554
|
const uuid = genUID();
|
|
400
555
|
const { centerX, centerY } = this.manager.camera;
|
|
401
556
|
width *= scale;
|
|
402
557
|
height *= scale;
|
|
403
|
-
this.manager.mainView.insertImage({
|
|
558
|
+
this.manager.mainView.insertImage({
|
|
559
|
+
uuid,
|
|
560
|
+
centerX,
|
|
561
|
+
centerY,
|
|
562
|
+
width,
|
|
563
|
+
height,
|
|
564
|
+
locked: false,
|
|
565
|
+
crossOrigin
|
|
566
|
+
});
|
|
404
567
|
this.manager.mainView.completeImageUpload(uuid, url);
|
|
405
568
|
width /= 0.8;
|
|
406
569
|
height /= 0.8;
|
|
@@ -443,6 +606,7 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
443
606
|
throw new Error("Invalid input: not found 'progress', 'prefix' nor 'images'");
|
|
444
607
|
}
|
|
445
608
|
}
|
|
609
|
+
/** @internal */
|
|
446
610
|
_insertDocsImpl(_a) {
|
|
447
611
|
var _b = _a, { fileType, scenePath, title, scenes } = _b, attributes = __objRest(_b, ["fileType", "scenePath", "title", "scenes"]);
|
|
448
612
|
this._assertNotDestroyed();
|
|
@@ -463,6 +627,9 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
463
627
|
});
|
|
464
628
|
}
|
|
465
629
|
}
|
|
630
|
+
/**
|
|
631
|
+
* Insert the Media Player app.
|
|
632
|
+
*/
|
|
466
633
|
insertMedia(title, src) {
|
|
467
634
|
this._assertNotDestroyed();
|
|
468
635
|
return this.manager.addApp({
|
|
@@ -471,6 +638,10 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
471
638
|
attributes: { src }
|
|
472
639
|
});
|
|
473
640
|
}
|
|
641
|
+
/**
|
|
642
|
+
* Insert the Monaco Code Editor app.
|
|
643
|
+
* @deprecated Use `app.manager.addApp({ kind: 'Monaco' })` instead.
|
|
644
|
+
*/
|
|
474
645
|
insertCodeEditor() {
|
|
475
646
|
this._assertNotDestroyed();
|
|
476
647
|
return this.manager.addApp({
|
|
@@ -478,6 +649,10 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
478
649
|
options: { title: "Code Editor" }
|
|
479
650
|
});
|
|
480
651
|
}
|
|
652
|
+
/**
|
|
653
|
+
* Insert the Countdown app.
|
|
654
|
+
* @deprecated Use `app.manager.addApp({ kind: 'Countdown' })` instead.
|
|
655
|
+
*/
|
|
481
656
|
insertCountdown() {
|
|
482
657
|
this._assertNotDestroyed();
|
|
483
658
|
return this.manager.addApp({
|
|
@@ -485,6 +660,10 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
485
660
|
options: { title: "Countdown" }
|
|
486
661
|
});
|
|
487
662
|
}
|
|
663
|
+
/**
|
|
664
|
+
* Insert the GeoGebra app.
|
|
665
|
+
* @deprecated Use `app.manager.addApp({ kind: 'GeoGebra' })` instead.
|
|
666
|
+
*/
|
|
488
667
|
insertGeoGebra() {
|
|
489
668
|
this._assertNotDestroyed();
|
|
490
669
|
return this.manager.addApp({
|
|
@@ -552,21 +731,25 @@ var FastboardPlayerBase = class {
|
|
|
552
731
|
this.syncedStore = syncedStore;
|
|
553
732
|
__publicField(this, "_destroyed", false);
|
|
554
733
|
}
|
|
734
|
+
/** @internal */
|
|
555
735
|
_assertNotDestroyed() {
|
|
556
736
|
if (this._destroyed) {
|
|
557
737
|
throw new Error("FastboardApp has been destroyed");
|
|
558
738
|
}
|
|
559
739
|
}
|
|
740
|
+
/** @internal */
|
|
560
741
|
_addPlayerListener(name, listener) {
|
|
561
742
|
this._assertNotDestroyed();
|
|
562
743
|
this.player.callbacks.on(name, listener);
|
|
563
744
|
return () => this.player.callbacks.off(name, listener);
|
|
564
745
|
}
|
|
746
|
+
/** @internal */
|
|
565
747
|
_addManagerListener(name, listener) {
|
|
566
748
|
this._assertNotDestroyed();
|
|
567
749
|
this.manager.emitter.on(name, listener);
|
|
568
750
|
return () => this.manager.emitter.off(name, listener);
|
|
569
751
|
}
|
|
752
|
+
/** @internal */
|
|
570
753
|
_addMainViewListener(name, listener) {
|
|
571
754
|
this._assertNotDestroyed();
|
|
572
755
|
this.manager.mainView.callbacks.on(name, listener);
|
|
@@ -581,6 +764,9 @@ var FastboardPlayerBase = class {
|
|
|
581
764
|
var FastboardPlayer = class extends FastboardPlayerBase {
|
|
582
765
|
constructor() {
|
|
583
766
|
super(...arguments);
|
|
767
|
+
/**
|
|
768
|
+
* Player current time in milliseconds.
|
|
769
|
+
*/
|
|
584
770
|
__publicField(this, "currentTime", writable(
|
|
585
771
|
this.player.progressTime,
|
|
586
772
|
(set) => {
|
|
@@ -589,15 +775,25 @@ var FastboardPlayer = class extends FastboardPlayerBase {
|
|
|
589
775
|
},
|
|
590
776
|
this.player.seekToProgressTime.bind(this.player)
|
|
591
777
|
));
|
|
778
|
+
/**
|
|
779
|
+
* Player state, like "is it playing?".
|
|
780
|
+
*/
|
|
592
781
|
__publicField(this, "phase", readable(this.player.phase, (set) => {
|
|
593
782
|
set(this.player.phase);
|
|
594
783
|
return this._addPlayerListener("onPhaseChanged", set);
|
|
595
784
|
}));
|
|
785
|
+
/**
|
|
786
|
+
* Will become true after buffering.
|
|
787
|
+
*/
|
|
596
788
|
__publicField(this, "canplay", readable(this.player.isPlayable, (set) => {
|
|
597
789
|
set(this.player.isPlayable);
|
|
598
790
|
return this._addPlayerListener("onIsPlayableChanged", set);
|
|
599
791
|
}));
|
|
792
|
+
/** @internal */
|
|
600
793
|
__publicField(this, "_setPlaybackRate");
|
|
794
|
+
/**
|
|
795
|
+
* Playback speed, default `1`.
|
|
796
|
+
*/
|
|
601
797
|
__publicField(this, "playbackRate", writable(
|
|
602
798
|
this.player.playbackSpeed,
|
|
603
799
|
(set) => {
|
|
@@ -609,38 +805,65 @@ var FastboardPlayer = class extends FastboardPlayerBase {
|
|
|
609
805
|
this._setPlaybackRate(value);
|
|
610
806
|
}
|
|
611
807
|
));
|
|
808
|
+
/**
|
|
809
|
+
* Playback duration in milliseconds.
|
|
810
|
+
*/
|
|
612
811
|
__publicField(this, "duration", readable(this.player.timeDuration, (set) => {
|
|
613
812
|
set(this.player.timeDuration);
|
|
614
813
|
}));
|
|
814
|
+
/**
|
|
815
|
+
* Get state of room at that time, like "who was in the room?".
|
|
816
|
+
*/
|
|
615
817
|
__publicField(this, "state", readable(this.player.state, (set) => {
|
|
616
818
|
set(this.player.state);
|
|
617
819
|
return this._addPlayerListener("onPlayerStateChanged", () => set(this.player.state));
|
|
618
820
|
}));
|
|
619
821
|
}
|
|
822
|
+
/**
|
|
823
|
+
* Render this player to some DOM.
|
|
824
|
+
*/
|
|
620
825
|
bindContainer(container) {
|
|
621
826
|
this._assertNotDestroyed();
|
|
622
827
|
this.manager.bindContainer(container);
|
|
623
828
|
}
|
|
829
|
+
/**
|
|
830
|
+
* Move window-manager's collector to some place.
|
|
831
|
+
*/
|
|
624
832
|
bindCollector(container) {
|
|
625
833
|
this._assertNotDestroyed();
|
|
626
834
|
this.manager.bindCollectorContainer(container);
|
|
627
835
|
}
|
|
836
|
+
/**
|
|
837
|
+
* Seek to some time in milliseconds.
|
|
838
|
+
*/
|
|
628
839
|
seek(timestamp) {
|
|
629
840
|
this._assertNotDestroyed();
|
|
630
841
|
return this.player.seekToProgressTime(timestamp);
|
|
631
842
|
}
|
|
843
|
+
/**
|
|
844
|
+
* Change player state to playing.
|
|
845
|
+
*/
|
|
632
846
|
play() {
|
|
633
847
|
this._assertNotDestroyed();
|
|
634
848
|
this.player.play();
|
|
635
849
|
}
|
|
850
|
+
/**
|
|
851
|
+
* Change player state to paused.
|
|
852
|
+
*/
|
|
636
853
|
pause() {
|
|
637
854
|
this._assertNotDestroyed();
|
|
638
855
|
this.player.pause();
|
|
639
856
|
}
|
|
857
|
+
/**
|
|
858
|
+
* Change player state to stopped.
|
|
859
|
+
*/
|
|
640
860
|
stop() {
|
|
641
861
|
this._assertNotDestroyed();
|
|
642
862
|
this.player.stop();
|
|
643
863
|
}
|
|
864
|
+
/**
|
|
865
|
+
* Set playback speed, a shortcut for `speed.set(x)`.
|
|
866
|
+
*/
|
|
644
867
|
setPlaybackRate(value) {
|
|
645
868
|
this._assertNotDestroyed();
|
|
646
869
|
this.playbackRate.set(value);
|
|
@@ -773,7 +996,10 @@ function dispatchDocsEvent(fastboard, event, options = {}) {
|
|
|
773
996
|
}
|
|
774
997
|
}
|
|
775
998
|
|
|
776
|
-
exports
|
|
999
|
+
Object.defineProperty(exports, 'SlideApp', {
|
|
1000
|
+
enumerable: true,
|
|
1001
|
+
get: function () { return SlideApp__default.default; }
|
|
1002
|
+
});
|
|
777
1003
|
Object.defineProperty(exports, 'addSlideHooks', {
|
|
778
1004
|
enumerable: true,
|
|
779
1005
|
get: function () { return SlideApp.addHooks; }
|
|
@@ -804,5 +1030,4 @@ exports.replayFastboard = replayFastboard;
|
|
|
804
1030
|
exports.version = version;
|
|
805
1031
|
exports.warn = warn;
|
|
806
1032
|
exports.writable = writable;
|
|
807
|
-
//# sourceMappingURL=
|
|
808
|
-
//# sourceMappingURL=index.js.map
|
|
1033
|
+
//# sourceMappingURL=index.js.map
|