@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 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, ViewCallbacks, PlayerPhase as PlayerPhase$1, PlayerState, PlayerSeekingResult, ReplayRoomParams, PlayerCallbacks, Player, View } from 'white-web-sdk';
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, PublicEvent, RegisterParams } from '@netless/window-manager';
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: SlideApp,
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.8-alpha.0";
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
- async insertImage(url) {
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({ uuid, centerX, centerY, width, height, locked: false });
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.SlideApp = SlideApp;
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=out.js.map
808
- //# sourceMappingURL=index.js.map
1033
+ //# sourceMappingURL=index.js.map