@netless/fastboard-core 0.3.12 → 0.3.13-canary.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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Size, SceneDefinition, ConvertedFile, RoomPhase as RoomPhase$1, ApplianceNames, ShapeType, MemberState, RoomState, CameraState, 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, CameraState, 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, RegisterParams, PublicEvent } from '@netless/window-manager';
3
+ import { AddPageParams, MountParams, NetlessApp, WindowManager, 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';
@@ -134,7 +134,7 @@ declare class FastboardApp<TEventData extends Record<string, any> = any> extends
134
134
  /**
135
135
  * Current window-manager's windows' state (is it maximized?).
136
136
  */
137
- readonly boxState: Readable<"minimized" | "maximized" | "normal" | undefined>;
137
+ readonly boxState: Readable<"normal" | "minimized" | "maximized" | undefined>;
138
138
  /**
139
139
  * Current window-manager's focused app's id.
140
140
  * @example "HelloWorld-1A2b3C4d"
@@ -426,12 +426,6 @@ interface FastboardReplayOptions {
426
426
  */
427
427
  declare function replayFastboard<TEventData extends Record<string, any> = any>({ sdkConfig, replayRoom: { callbacks, ...replayRoomParams }, managerConfig, netlessApps, }: FastboardReplayOptions): Promise<FastboardPlayer<TEventData>>;
428
428
 
429
- interface AppsConfig {
430
- [kind: string]: Omit<RegisterParams, "kind">;
431
- }
432
- declare const register: typeof WindowManager.register;
433
- declare const version: string;
434
-
435
429
  declare function addRoomListener<K extends keyof RoomCallbacks>(room: Room, name: K, listener: RoomCallbacks[K]): () => void;
436
430
  declare function addPlayerListener<K extends keyof PlayerCallbacks>(player: Player, name: K, listener: PlayerCallbacks[K]): () => void;
437
431
  /**
@@ -478,4 +472,4 @@ interface DocsEventOptions {
478
472
  */
479
473
  declare function dispatchDocsEvent(fastboard: FastboardApp | WindowManager, event: "prevPage" | "nextPage" | "prevStep" | "nextStep" | "jumpToPage", options?: DocsEventOptions): boolean;
480
474
 
481
- export { Appliance, AppsConfig, AppsStatus, DocsEventOptions, FastboardApp, FastboardOptions, FastboardPlayer, FastboardReplayOptions, InsertDocsDynamic, InsertDocsParams, InsertDocsStatic, PlayerPhase, ProjectorResponse, Readable, RoomPhase, RoomStateChanged, SetMemberStateFn, Shape, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable, addManagerListener, addPlayerListener, addRoomListener, addViewListener, convertedFileToScene, createFastboard, dispatchDocsEvent, genUID, getImageSize, makeSlideParams, readable, register, replayFastboard, version, warn, writable };
475
+ export { Appliance, AppsStatus, DocsEventOptions, FastboardApp, FastboardOptions, FastboardPlayer, FastboardReplayOptions, InsertDocsDynamic, InsertDocsParams, InsertDocsStatic, PlayerPhase, ProjectorResponse, Readable, RoomPhase, RoomStateChanged, SetMemberStateFn, Shape, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable, addManagerListener, addPlayerListener, addRoomListener, addViewListener, convertedFileToScene, createFastboard, dispatchDocsEvent, genUID, getImageSize, makeSlideParams, readable, replayFastboard, warn, writable };
package/dist/index.js CHANGED
@@ -214,6 +214,7 @@ function ensure_official_plugins(joinRoom) {
214
214
  function transform_app_status(status) {
215
215
  return status === "start" ? "loading" : status === "failed" ? "failed" : "idle";
216
216
  }
217
+ var register = windowManager.WindowManager.register.bind(windowManager.WindowManager);
217
218
  var DefaultApps = {
218
219
  Monaco: {
219
220
  src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.14-beta.1/dist/main.iife.js"
@@ -234,20 +235,13 @@ var DefaultApps = {
234
235
  src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-plyr/0.1.3/dist/main.iife.js"
235
236
  }
236
237
  };
237
- windowManager.WindowManager.register({
238
- kind: "Slide",
239
- appOptions: { debug: false },
240
- src: SlideApp__default.default,
241
- addHooks: SlideApp.addHooks
242
- });
243
238
  for (const kind in DefaultApps) {
244
239
  if (Object.prototype.hasOwnProperty.call(DefaultApps, kind)) {
245
240
  const options = DefaultApps[kind];
246
241
  windowManager.WindowManager.register(__spreadValues({ kind }, options));
247
242
  }
248
243
  }
249
- var register = windowManager.WindowManager.register.bind(windowManager.WindowManager);
250
- var version = "0.3.12";
244
+ var version = "0.3.13-canary.0";
251
245
  if (typeof window !== "undefined") {
252
246
  let str = window.__netlessUA || "";
253
247
  str += ` ${"@netless/fastboard"}@${version} `;
@@ -915,6 +909,12 @@ async function replayFastboard(_a) {
915
909
  await player.seekToProgressTime(0);
916
910
  return new FastboardPlayer(sdk, player, manager, syncedStore$1);
917
911
  }
912
+ windowManager.WindowManager.register({
913
+ kind: "Slide",
914
+ appOptions: { debug: false },
915
+ src: SlideApp__default.default,
916
+ addHooks: SlideApp.addHooks
917
+ });
918
918
 
919
919
  // src/helpers/listen.ts
920
920
  function addRoomListener(room, name, listener) {
@@ -1037,9 +1037,7 @@ exports.genUID = genUID;
1037
1037
  exports.getImageSize = getImageSize;
1038
1038
  exports.makeSlideParams = makeSlideParams;
1039
1039
  exports.readable = readable;
1040
- exports.register = register;
1041
1040
  exports.replayFastboard = replayFastboard;
1042
- exports.version = version;
1043
1041
  exports.warn = warn;
1044
1042
  exports.writable = writable;
1045
1043
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/store.ts","../src/utils/misc.ts","../src/utils/uid.ts","../src/utils/warn.ts","../src/internal.ts","../src/behaviors/index.ts","../src/impl/FastboardApp.ts","../src/impl/FastboardPlayer.ts","../src/helpers/listen.ts","../src/helpers/docs.ts"],"sourcesContent":["// This is a simple mimic of svelte/store.\nexport type Subscriber<T> = (value: T) => void;\nexport type Unsubscriber = () => void;\nexport type Updater<T> = (value: T) => T;\nexport type StartStopNotifier<T> = (set: Subscriber<T>) => Unsubscriber | void;\n\nexport interface Readable<T> {\n readonly value: T;\n subscribe(this: void, run: Subscriber<T>): Unsubscriber;\n reaction(this: void, run: Subscriber<T>): Unsubscriber;\n}\n\nexport interface Writable<T> extends Readable<T> {\n set(this: void, value: T): void;\n update(this: void, updater: Updater<T>): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nfunction safe_not_equal(a: unknown, b: unknown) {\n return a != a ? b == b : a !== b || (a && typeof a === \"object\") || typeof a === \"function\";\n}\n\nexport function readable<T>(value: T, start: StartStopNotifier<T> = noop): Readable<T> {\n let stop: Unsubscriber | undefined;\n const subscribers = new Set<Subscriber<T>>();\n function set(new_value: T) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) {\n for (const run of subscribers) {\n run(value);\n }\n }\n }\n }\n function subscribe(run: Subscriber<T>) {\n subscribers.add(run);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(run);\n if (subscribers.size === 0) {\n stop && stop();\n stop = undefined;\n }\n };\n }\n function reaction(run: Subscriber<T>) {\n subscribers.add(run);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n return () => {\n subscribers.delete(run);\n if (subscribers.size === 0) {\n stop && stop();\n stop = undefined;\n }\n };\n }\n return {\n get value() {\n if (subscribers.size === 0) {\n stop = start(set) || noop;\n stop();\n stop = undefined;\n }\n return value;\n },\n subscribe,\n reaction,\n };\n}\n\nexport function writable<T>(value: T, start: StartStopNotifier<T> = noop, set: Subscriber<T>): Writable<T> {\n const internal = readable(value, start);\n return {\n get value() {\n return internal.value;\n },\n subscribe: internal.subscribe,\n reaction: internal.reaction,\n set,\n update(fn: Updater<T>) {\n set(fn(internal.value));\n },\n };\n}\n","import type { ConvertedFile, SceneDefinition, Size } from \"white-web-sdk\";\n\nexport function getImageSize(url: string, fallback: Size, crossOrigin?: boolean | string) {\n return new Promise<Size>(resolve => {\n const img = new Image();\n applyCrossOrigin(img, url, crossOrigin);\n img.onload = () => resolve(img);\n img.onerror = () => resolve(fallback);\n img.src = url;\n });\n}\n\n// https://github.com/pixijs/pixijs/blob/dev/packages/core/src/textures/resources/BaseImageResource.ts#L51\nfunction applyCrossOrigin(image: HTMLImageElement, src: string, crossOrigin?: boolean | string): void {\n if (crossOrigin === undefined && !src.startsWith(\"data:\")) {\n image.crossOrigin = determineCrossOrigin(src);\n } else if (crossOrigin !== false) {\n image.crossOrigin = typeof crossOrigin === \"string\" ? crossOrigin : \"anonymous\";\n }\n}\n\nfunction determineCrossOrigin(src: string): string {\n if (src.startsWith(\"data:\") || typeof window === \"undefined\" || !window.location) {\n return \"\";\n }\n const loc = window.location;\n try {\n const parsedUrl = new URL(src, document.baseURI);\n if (\n parsedUrl.hostname !== loc.hostname ||\n parsedUrl.port !== loc.port ||\n parsedUrl.protocol !== loc.protocol\n ) {\n return \"anonymous\";\n }\n return \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function makeSlideParams(scenes: SceneDefinition[]) {\n const emptyScenes: SceneDefinition[] = [];\n let taskId = \"\";\n let url = \"\";\n\n // e.g. \"ppt(x)://cdn/prefix/dynamicConvert/{taskId}/1.slide\"\n const pptSrcRE = /^pptx?(?<prefix>:\\/\\/\\S+?dynamicConvert)\\/(?<taskId>\\w+)\\//;\n\n for (const { name, ppt } of scenes) {\n // make sure scenesWithoutPPT.length === scenes.length\n emptyScenes.push({ name });\n\n if (!ppt || !ppt.src.startsWith(\"ppt\")) continue;\n\n const match = pptSrcRE.exec(ppt.src);\n if (!match || !match.groups) continue;\n\n taskId = match.groups.taskId;\n url = `https${match.groups.prefix}`;\n break;\n }\n\n return { scenes: emptyScenes, taskId, url };\n}\n\nexport function convertedFileToScene(f: ConvertedFile, i: number): SceneDefinition {\n return {\n name: String(i + 1),\n ppt: {\n src: f.conversionFileUrl,\n width: f.width,\n height: f.height,\n previewURL: f.preview,\n },\n };\n}\n","// Copy from https://github.com/crimx/side-effect-manager/blob/main/src/gen-uid.ts\nconst SOUP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst SOUP_LEN = 62; // SOUP.length\nconst ID_LEN = 20;\nconst reusedIdCarrier = /* @__PURE__ */ Array(ID_LEN);\n\nexport function genUID() {\n for (let i = 0; i < ID_LEN; i++) {\n reusedIdCarrier[i] = SOUP.charAt(Math.random() * SOUP_LEN);\n }\n return reusedIdCarrier.join(\"\");\n}\n","const warnings = {\n \"no-ppt-in-scenes\":\n \"You're probably inserting the slide app in a wrong way, there shouldn't exist `scenes[0].ppt`.\",\n} as const;\nconst warned = new Set<string>();\n\nexport function warn(id: keyof typeof warnings) {\n if (warned.has(id)) return;\n warned.add(id);\n console.warn(warnings[id]);\n}\n","import type { JoinRoomParams, ReplayRoomParams } from \"white-web-sdk\";\nimport type { PublicEvent } from \"@netless/window-manager\";\nimport { WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\n\nexport function ensure_official_plugins<T extends JoinRoomParams | ReplayRoomParams>(joinRoom: T): T {\n const plugins = new Set(joinRoom.invisiblePlugins || []);\n plugins.add(WindowManager);\n plugins.add(SyncedStorePlugin);\n joinRoom.invisiblePlugins = [...plugins];\n return joinRoom;\n}\n\nexport function transform_app_status(status: PublicEvent[\"loadApp\"][\"status\"]) {\n return status === \"start\" ? \"loading\" : status === \"failed\" ? \"failed\" : \"idle\";\n}\n","import type { RegisterParams } from \"@netless/window-manager\";\nimport { WindowManager } from \"@netless/window-manager\";\nimport SlideApp, { apps, addHooks, previewSlide } from \"@netless/app-slide\";\n\nexport type {\n AppOptions as SlideOptions,\n AppResult as SlideController,\n PreviewParams,\n SlidePreviewer,\n} from \"@netless/app-slide\";\nexport { previewSlide, SlideApp, addHooks as addSlideHooks, apps as slideApps };\n\nexport interface AppsConfig {\n [kind: string]: Omit<RegisterParams, \"kind\">;\n}\n\nconst DefaultApps: AppsConfig = {\n Monaco: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.14-beta.1/dist/main.iife.js\",\n },\n Countdown: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-countdown/0.0.2/dist/main.iife.js\",\n },\n GeoGebra: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-geogebra/0.0.4/dist/main.iife.js\",\n appOptions: {\n HTML5Codebase: \"https://flat-storage-cn-hz.whiteboard.agora.io/GeoGebra/HTML5/5.0/web3d\",\n },\n },\n EmbeddedPage: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-embedded-page/0.1.1/dist/main.iife.js\",\n },\n Plyr: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-plyr/0.1.3/dist/main.iife.js\",\n },\n};\n\nWindowManager.register({\n kind: \"Slide\",\n appOptions: { debug: false },\n src: SlideApp,\n addHooks,\n});\n\nfor (const kind in DefaultApps) {\n if (Object.prototype.hasOwnProperty.call(DefaultApps, kind)) {\n const options = DefaultApps[kind];\n WindowManager.register({ kind, ...options });\n }\n}\n\nexport const register = WindowManager.register.bind(WindowManager);\n\ndeclare let __NAME__: string, __VERSION__: string;\n\nexport const version = __VERSION__;\n\nif (typeof window !== \"undefined\") {\n let str = (window as { __netlessUA?: string }).__netlessUA || \"\";\n str += ` ${__NAME__}@${version} `;\n (window as { __netlessUA?: string }).__netlessUA = str;\n}\n","import type { AddPageParams, PublicEvent, MountParams, NetlessApp } from \"@netless/window-manager\";\nimport type {\n AnimationMode,\n ApplianceNames,\n Camera,\n CameraState,\n Color,\n ConversionResponse,\n HotKey,\n HotKeys,\n JoinRoomParams,\n MemberState,\n Rectangle,\n Room,\n RoomPhase as RoomPhaseEnum,\n RoomCallbacks,\n RoomState,\n SceneDefinition,\n ShapeType,\n ViewCallbacks,\n WhiteWebSdkConfiguration,\n} from \"white-web-sdk\";\nimport type { SyncedStore, Storage, Diff, DiffOne } from \"@netless/synced-store\";\n\nimport { DefaultHotKeys, WhiteWebSdk, contentModeScale } from \"white-web-sdk\";\nimport { BuiltinApps, WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\nimport {\n getImageSize,\n genUID,\n convertedFileToScene,\n makeSlideParams,\n readable,\n writable,\n warn,\n} from \"../utils\";\nimport { ensure_official_plugins, transform_app_status } from \"../internal\";\nimport { register } from \"../behaviors\";\n\nclass FastboardAppBase<TEventData extends Record<string, any> = any> {\n public constructor(\n readonly sdk: WhiteWebSdk,\n readonly room: Room,\n readonly manager: WindowManager,\n readonly hotKeys: Partial<HotKeys>,\n readonly syncedStore: SyncedStore<TEventData>\n ) {}\n\n protected _destroyed = false;\n /** @internal */\n protected _assertNotDestroyed() {\n if (this._destroyed) {\n throw new Error(\"FastboardApp has been destroyed\");\n }\n }\n\n /** @internal */\n protected _addRoomListener<K extends keyof RoomCallbacks>(name: K, listener: RoomCallbacks[K]) {\n this._assertNotDestroyed();\n this.room.callbacks.on(name, listener);\n return () => this.room.callbacks.off(name, listener);\n }\n\n /** @internal */\n protected _addManagerListener<K extends keyof PublicEvent>(\n name: K,\n listener: (value: PublicEvent[K]) => void\n ) {\n this._assertNotDestroyed();\n this.manager.emitter.on(name, listener);\n return () => this.manager.emitter.off(name, listener);\n }\n\n /** @internal */\n protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]) {\n this._assertNotDestroyed();\n // Note: the callbacks will be invalid when reconnected, need rebind manually.\n this.manager.mainView.callbacks.on(name, listener);\n return () => this.manager.mainView.callbacks.off(name, listener);\n }\n\n /**\n * Destroy fastboard (disconnect from the whiteboard room).\n */\n public destroy() {\n this._destroyed = true;\n this.manager.destroy();\n return this.room.disconnect();\n }\n}\n\ntype RoomPhase = `${RoomPhaseEnum}`;\n\nexport type {\n AddPageParams,\n AnimationMode,\n ApplianceNames,\n Camera,\n CameraState,\n Color,\n ConversionResponse,\n HotKey,\n HotKeys,\n JoinRoomParams,\n MemberState,\n MountParams,\n NetlessApp,\n PublicEvent,\n Rectangle,\n Room,\n RoomPhase,\n RoomCallbacks,\n RoomState,\n SceneDefinition,\n ShapeType,\n SyncedStore,\n Storage,\n Diff,\n DiffOne,\n ViewCallbacks,\n WhiteWebSdk,\n WhiteWebSdkConfiguration,\n WindowManager,\n};\n\n/** pencil, eraser, rectangle... */\nexport type Appliance = `${ApplianceNames}`;\n/** triangle, star... */\nexport type Shape = `${ShapeType}`;\n\n/** Params for static docs, they are rendered as many images. */\nexport interface InsertDocsStatic {\n readonly fileType: \"pdf\";\n /** Unique string for binding whiteboard view to the doc. Must start with `/`. */\n readonly scenePath: string;\n /** @example [{ name: '1', ppt: { src: 'url/to/ppt/1.png' } }] */\n readonly scenes: SceneDefinition[];\n /** Window title. */\n readonly title?: string;\n}\n\n/** Params for slides, they are rendered in @netless/app-slide with animations. */\nexport interface InsertDocsDynamic {\n readonly fileType: \"pptx\";\n /** Unique string for binding whiteboard view to the doc. Must start with `/`. */\n readonly scenePath: string;\n /** Conversion task id, see https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress. */\n readonly taskId: string;\n /** Window title. */\n readonly title?: string;\n /** Where the slide resource placed. @default `https://convertcdn.netless.link/dynamicConvert` */\n readonly url?: string;\n /** @example [{ name: '1' }, { name: '2' }, { name: '3' }] */\n readonly scenes?: SceneDefinition[];\n}\n\nexport type InsertDocsParams = InsertDocsStatic | InsertDocsDynamic;\n\nexport interface ProjectorResponse {\n uuid: string;\n status: \"Waiting\" | \"Converting\" | \"Finished\" | \"Fail\";\n type: \"dynamic\" | \"static\";\n /** 0..100 */\n convertedPercentage: number;\n /** https://example.org/path/to/dynamicConvert, only when type=dynamic */\n prefix?: string;\n pageCount?: number;\n /** {1:\"{prefix}/{taskId}/preview/1.png\"}, only when type=dynamic and preview=true */\n previews?: Record<number, string>;\n /** {prefix}/{taskId}/jsonOutput/note.json */\n note?: string;\n /** {1:{width,height,url}}, only when type=static */\n images?: Record<number, { width: number; height: number; url: string }>;\n /** 20xxxxx */\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport type SetMemberStateFn = (partialMemberState: Partial<MemberState>) => void;\n\nexport type RoomStateChanged = (diff: Partial<RoomState>) => void;\n\n/** App download progress. */\nexport interface AppsStatus {\n [kind: string]: {\n status: \"idle\" | \"loading\" | \"failed\";\n /** Exist if status is `failed`. */\n reason?: string;\n };\n}\n\nexport class FastboardApp<TEventData extends Record<string, any> = any> extends FastboardAppBase<TEventData> {\n /**\n * Render this app to some DOM.\n */\n bindContainer(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindContainer(container);\n }\n\n /**\n * Move window-manager's collector to some place.\n */\n bindCollector(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindCollectorContainer(container);\n }\n\n /**\n * Is current room writable?\n */\n readonly writable = writable(\n this.room.isWritable,\n set => {\n set(this.room.isWritable);\n return this._addRoomListener(\"onEnableWriteNowChanged\", () => set(this.room.isWritable));\n },\n this.room.setWritable.bind(this.room)\n );\n\n /**\n * Is current room online?\n */\n readonly phase = readable<RoomPhase>(this.room.phase, set => {\n set(this.room.phase);\n return this._addRoomListener(\"onPhaseChanged\", set);\n });\n\n /**\n * Current window-manager's windows' state (is it maximized?).\n */\n readonly boxState = readable(this.manager.boxState, set => {\n set(this.manager.boxState);\n return this._addManagerListener(\"boxStateChange\", set);\n });\n\n /**\n * Current window-manager's focused app's id.\n * @example \"HelloWorld-1A2b3C4d\"\n */\n readonly focusedApp = readable(this.manager.focused, set => {\n set(this.manager.focused);\n return this._addManagerListener(\"focusedChange\", set);\n });\n\n /**\n * How many times can I call `app.redo()`?\n */\n readonly canRedoSteps = readable(this.manager.canRedoSteps, set => {\n set(this.manager.canRedoSteps);\n return this._addManagerListener(\"canRedoStepsChange\", set);\n });\n\n /**\n * How many times can I call `app.undo()`?\n */\n readonly canUndoSteps = readable(this.manager.canUndoSteps, set => {\n set(this.manager.canUndoSteps);\n return this._addManagerListener(\"canUndoStepsChange\", set);\n });\n\n /**\n * Current camera information of main view.\n *\n * Change the camera position by `app.moveCamera()`.\n */\n readonly camera = readable(this.manager.cameraState, set => {\n set(this.manager.cameraState);\n return this._addManagerListener(\"cameraStateChange\", set);\n });\n\n /**\n * Current tool's info, like \"is using pencil?\", \"what color?\".\n *\n * Change the tool by `app.setAppliance()`.\n */\n readonly memberState = readable(this.room.state.memberState, set => {\n set(this.room.state.memberState);\n return this._addRoomListener(\"onRoomStateChanged\", ({ memberState: m }) => m && set(m));\n });\n\n /**\n * 0..n-1, current index of main view scenes.\n */\n readonly sceneIndex = writable(\n this.manager.mainViewSceneIndex,\n set => {\n set(this.manager.mainViewSceneIndex);\n return this._addManagerListener(\"mainViewSceneIndexChange\", set);\n },\n this.manager.setMainViewSceneIndex.bind(this.manager)\n );\n\n /**\n * How many pages are in the main view?\n */\n readonly sceneLength = readable(this.manager.mainViewScenesLength, set => {\n set(this.manager.mainViewScenesLength);\n return this._addManagerListener(\"mainViewScenesLengthChange\", set);\n });\n\n /** @internal */\n private _appsStatus: AppsStatus = {};\n /**\n * Apps status.\n */\n readonly appsStatus = readable<AppsStatus>({}, set =>\n this._addManagerListener(\"loadApp\", ({ kind, status, reason }) => {\n this._appsStatus[kind] = { status: transform_app_status(status), reason };\n set(this._appsStatus);\n })\n );\n\n /**\n * Undo a step on main view.\n */\n undo() {\n this._assertNotDestroyed();\n this.manager.undo();\n }\n\n /**\n * Redo a step on main view.\n */\n redo() {\n this._assertNotDestroyed();\n this.manager.redo();\n }\n\n /**\n * Move current main view's camera position.\n */\n moveCamera(camera: Partial<Camera> & { animationMode?: AnimationMode | undefined }) {\n this._assertNotDestroyed();\n this.manager.moveCamera(camera);\n }\n\n /**\n * Move current main view's camera to include a rectangle.\n */\n moveCameraToContain(rectangle: Rectangle & { animationMode?: AnimationMode }) {\n this._assertNotDestroyed();\n this.manager.moveCameraToContain(rectangle);\n }\n\n /**\n * Delete all things on the main view.\n */\n cleanCurrentScene() {\n this._assertNotDestroyed();\n this.manager.cleanCurrentScene();\n }\n\n /**\n * Set current tool, like \"pencil\".\n */\n setAppliance(appliance: ApplianceNames | Appliance, shape?: ShapeType | Shape) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({\n currentApplianceName: appliance as ApplianceNames,\n shapeType: shape as ShapeType,\n });\n }\n\n /**\n * Set pencil and shape's thickness.\n */\n setStrokeWidth(strokeWidth: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ strokeWidth });\n }\n\n /**\n * Set pencil and shape's color.\n */\n setStrokeColor(strokeColor: Color) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ strokeColor });\n }\n\n /**\n * Set text size. Default is 16.\n */\n setTextSize(textSize: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ textSize });\n }\n\n /**\n * Set text color.\n *\n * @example\n * setTextColor([0x66, 0xcc, 0xff])\n */\n setTextColor(textColor: Color) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ textColor });\n }\n\n /**\n * Toggle dotted line effect on pencil.\n */\n toggleDottedLine(force?: boolean) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ dottedLine: force ?? !this.memberState.value.dottedLine });\n }\n\n /**\n * Set pencil eraser size.\n */\n setPencilEraserSize(size: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ pencilEraserSize: size });\n }\n\n /**\n * Goto previous page (the main whiteboard view).\n */\n prevPage() {\n this._assertNotDestroyed();\n return this.manager.prevPage();\n }\n\n /**\n * Goto next page (the main whiteboard view).\n */\n nextPage() {\n this._assertNotDestroyed();\n return this.manager.nextPage();\n }\n\n /**\n * Goto any page (index range: 0..n-1)\n */\n jumpPage(index: number) {\n this._assertNotDestroyed();\n return this.manager.jumpPage(index);\n }\n\n /**\n * Add one page to the main whiteboard view.\n *\n * @example\n * addPage({ after: true }) // add one page right after current one.\n * nextPage() // then, goto that page.\n */\n addPage(params?: AddPageParams) {\n this._assertNotDestroyed();\n return this.manager.addPage(params);\n }\n\n /**\n * Remove one page at given index or current page (by default).\n *\n * Requires `@netless/window-manager` >= 0.4.30.\n *\n * @example\n * removePage() // remove current page\n */\n removePage(index?: number) {\n this._assertNotDestroyed();\n return this.manager.removePage(index);\n }\n\n /**\n * Insert an image to the main view.\n *\n * @param crossOrigin Whether to load the image with CORS enabled, default is `true`.\n *\n * @example\n * insertImage(\"https://i.imgur.com/CzXTtJV.jpg\")\n */\n async insertImage(url: string, crossOrigin?: boolean | string) {\n this._assertNotDestroyed();\n await this.manager.switchMainViewToWriter();\n\n const { divElement } = this.manager.mainView;\n const containerSize = {\n width: divElement?.scrollWidth || window.innerWidth,\n height: divElement?.scrollHeight || window.innerHeight,\n };\n\n // 1. shrink the image a little to fit container **width**\n const maxWidth = containerSize.width * 0.8;\n let { width, height } = await getImageSize(url, containerSize, crossOrigin);\n const scale = Math.min(maxWidth / width, 1);\n const uuid = genUID();\n const { centerX, centerY } = this.manager.camera;\n width *= scale;\n height *= scale;\n this.manager.mainView.insertImage({\n uuid,\n centerX,\n centerY,\n width,\n height,\n locked: false,\n crossOrigin,\n });\n this.manager.mainView.completeImageUpload(uuid, url);\n\n // 2. move camera to fit image **height**\n width /= 0.8;\n height /= 0.8;\n const originX = centerX - width / 2;\n const originY = centerY - height / 2;\n this.manager.moveCameraToContain({ originX, originY, width, height });\n }\n\n /**\n * Insert PDF/PPTX from conversion result.\n * @param status https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress\n */\n insertDocs(filename: string, status: ConversionResponse): Promise<string | undefined>;\n\n /**\n * Insert PDF/PPTX from projector conversion result.\n * @param response https://developer.netless.link/server-zh/home/server-projector#get-%E6%9F%A5%E8%AF%A2%E4%BB%BB%E5%8A%A1%E8%BD%AC%E6%8D%A2%E8%BF%9B%E5%BA%A6\n */\n insertDocs(filename: string, response: ProjectorResponse): Promise<string | undefined>;\n\n /**\n * Manual way.\n * @example\n * app.insertDocs({\n * fileType: 'pptx',\n * scenePath: `/pptx/${conversion.taskId}`,\n * taskId: conversion.taskId,\n * title: 'Title',\n * })\n */\n insertDocs(params: InsertDocsParams): Promise<string | undefined>;\n\n insertDocs(arg1: string | InsertDocsParams, arg2?: ConversionResponse | ProjectorResponse) {\n this._assertNotDestroyed();\n if (typeof arg1 === \"object\" && \"fileType\" in arg1) {\n return this._insertDocsImpl(arg1);\n } else if (arg2 && arg2.status !== \"Finished\") {\n throw new Error(\"FastboardApp cannot insert a converting doc.\");\n } else if (arg2 && \"progress\" in arg2) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const scenes1 = arg2.progress.convertedFileList.map(convertedFileToScene);\n const { scenes, taskId, url } = makeSlideParams(scenes1);\n if (taskId && url) {\n return this._insertDocsImpl({ fileType: \"pptx\", scenePath, scenes, title, taskId, url });\n } else {\n return this._insertDocsImpl({ fileType: \"pdf\", scenePath, scenes: scenes1, title });\n }\n } else if (arg2 && arg2.prefix) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const taskId = arg2.uuid;\n const url = arg2.prefix;\n this._insertDocsImpl({ fileType: \"pptx\", scenePath, taskId, title, url });\n } else if (arg2 && arg2.images) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const scenes: SceneDefinition[] = [];\n for (const name in arg2.images) {\n const { width, height, url } = arg2.images[name];\n scenes.push({ name, ppt: { width, height, src: url } });\n }\n return this._insertDocsImpl({ fileType: \"pdf\", scenePath, scenes, title });\n } else {\n throw new Error(\"Invalid input: not found 'progress', 'prefix' nor 'images'\");\n }\n }\n\n /** @internal */\n private _insertDocsImpl({ fileType, scenePath, title, scenes, ...attributes }: InsertDocsParams) {\n this._assertNotDestroyed();\n switch (fileType) {\n case \"pdf\":\n return this.manager.addApp({\n kind: \"DocsViewer\",\n options: { scenePath, title, scenes },\n });\n case \"pptx\":\n if (scenes && scenes[0].ppt) {\n warn(\"no-ppt-in-scenes\");\n }\n return this.manager.addApp({\n kind: \"Slide\",\n options: { scenePath, title, scenes },\n attributes,\n });\n }\n }\n\n /**\n * Insert the Media Player app.\n */\n insertMedia(title: string, src: string) {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: BuiltinApps.MediaPlayer,\n options: { title },\n attributes: { src },\n });\n }\n\n /**\n * Insert the Monaco Code Editor app.\n * @deprecated Use `app.manager.addApp({ kind: 'Monaco' })` instead.\n */\n insertCodeEditor() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"Monaco\",\n options: { title: \"Code Editor\" },\n });\n }\n\n /**\n * Insert the Countdown app.\n * @deprecated Use `app.manager.addApp({ kind: 'Countdown' })` instead.\n */\n insertCountdown() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"Countdown\",\n options: { title: \"Countdown\" },\n });\n }\n\n /**\n * Insert the GeoGebra app.\n * @deprecated Use `app.manager.addApp({ kind: 'GeoGebra' })` instead.\n */\n insertGeoGebra() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"GeoGebra\",\n options: { title: \"GeoGebra\" },\n });\n }\n}\n\nexport interface FastboardOptions {\n sdkConfig: Omit<WhiteWebSdkConfiguration, \"useMobXState\"> & {\n region: NonNullable<WhiteWebSdkConfiguration[\"region\"]>;\n };\n joinRoom: Omit<JoinRoomParams, \"useMultiViews\" | \"disableNewPencil\" | \"disableMagixEventDispatchLimit\"> & {\n callbacks?: Partial<Omit<RoomCallbacks, \"onCanRedoStepsUpdate\" | \"onCanUndoStepsUpdate\">>;\n };\n managerConfig?: Omit<MountParams, \"room\">;\n netlessApps?: NetlessApp[];\n}\n\n/**\n * Create a FastboardApp instance.\n * @example\n * let app = await createFastboard({\n * sdkConfig: {\n * appIdentifier: import.meta.env.VITE_APPID,\n * region: 'cn-hz',\n * },\n * joinRoom: {\n * uid: unique_id,\n * uuid: import.meta.env.VITE_ROOM_UUID,\n * roomToken: import.meta.env.VITE_ROOM_TOKEN,\n * },\n * })\n */\nexport async function createFastboard<TEventData extends Record<string, any> = any>({\n sdkConfig,\n joinRoom: { callbacks, ...joinRoomParams },\n managerConfig,\n netlessApps,\n}: FastboardOptions) {\n const sdk = new WhiteWebSdk({\n ...sdkConfig,\n useMobXState: true,\n });\n\n const hotKeys = joinRoomParams.hotKeys || {\n ...DefaultHotKeys,\n changeToSelector: \"s\",\n changeToLaserPointer: \"z\",\n changeToPencil: \"p\",\n changeToRectangle: \"r\",\n changeToEllipse: \"c\",\n changeToEraser: \"e\",\n changeToText: \"t\",\n changeToStraight: \"l\",\n changeToArrow: \"a\",\n changeToHand: \"h\",\n };\n\n if (netlessApps) {\n netlessApps.forEach(app => {\n register({ kind: app.kind, src: app });\n });\n }\n\n const room = await sdk.joinRoom(\n {\n floatBar: true,\n hotKeys,\n ...ensure_official_plugins(joinRoomParams),\n useMultiViews: true,\n disableNewPencil: false,\n disableMagixEventDispatchLimit: true,\n },\n callbacks\n );\n\n const syncedStore = await SyncedStorePlugin.init<TEventData>(room);\n\n const manager = await WindowManager.mount({\n cursor: true,\n ...managerConfig,\n room,\n });\n\n manager.mainView.setCameraBound({\n minContentMode: contentModeScale(0.3),\n maxContentMode: contentModeScale(3),\n });\n\n return new FastboardApp<TEventData>(sdk, room, manager, hotKeys, syncedStore);\n}\n","import type { MountParams, NetlessApp, PublicEvent } from \"@netless/window-manager\";\nimport type {\n Player,\n PlayerPhase as PlayerPhaseEnum,\n PlayerCallbacks,\n PlayerState,\n PlayerSeekingResult,\n ReplayRoomParams,\n ViewCallbacks,\n WhiteWebSdkConfiguration,\n} from \"white-web-sdk\";\nimport type { SyncedStore } from \"@netless/synced-store\";\n\nimport { WhiteWebSdk } from \"white-web-sdk\";\nimport { WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\nimport { readable, writable } from \"../utils\";\nimport { ensure_official_plugins } from \"../internal\";\nimport { register } from \"../behaviors\";\n\nclass FastboardPlayerBase<TEventData extends Record<string, any> = any> {\n public constructor(\n readonly sdk: WhiteWebSdk,\n readonly player: Player,\n readonly manager: WindowManager,\n readonly syncedStore: SyncedStore<TEventData>\n ) {}\n\n protected _destroyed = false;\n /** @internal */\n protected _assertNotDestroyed() {\n if (this._destroyed) {\n throw new Error(\"FastboardApp has been destroyed\");\n }\n }\n\n /** @internal */\n protected _addPlayerListener<K extends keyof PlayerCallbacks>(name: K, listener: PlayerCallbacks[K]) {\n this._assertNotDestroyed();\n this.player.callbacks.on(name, listener);\n return () => this.player.callbacks.off(name, listener);\n }\n\n /** @internal */\n protected _addManagerListener<K extends keyof PublicEvent>(\n name: K,\n listener: (value: PublicEvent[K]) => void\n ) {\n this._assertNotDestroyed();\n this.manager.emitter.on(name, listener);\n return () => this.manager.emitter.off(name, listener);\n }\n\n /** @internal */\n protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]) {\n this._assertNotDestroyed();\n this.manager.mainView.callbacks.on(name, listener);\n return () => this.manager.mainView.callbacks.off(name, listener);\n }\n\n public destroy() {\n this._destroyed = true;\n this.manager.destroy();\n return this.player.callbacks.off();\n }\n}\n\ntype PlayerPhase = `${PlayerPhaseEnum}`;\n\nexport type { PlayerPhase, PlayerSeekingResult };\n\nexport class FastboardPlayer<\n TEventData extends Record<string, any> = any,\n> extends FastboardPlayerBase<TEventData> {\n /**\n * Render this player to some DOM.\n */\n bindContainer(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindContainer(container);\n }\n\n /**\n * Move window-manager's collector to some place.\n */\n bindCollector(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindCollectorContainer(container);\n }\n\n /**\n * Player current time in milliseconds.\n */\n readonly currentTime = writable(\n this.player.progressTime,\n set => {\n set(this.player.progressTime);\n return this._addPlayerListener(\"onProgressTimeChanged\", set);\n },\n this.player.seekToProgressTime.bind(this.player)\n );\n\n /**\n * Player state, like \"is it playing?\".\n */\n readonly phase = readable<PlayerPhase>(this.player.phase, set => {\n set(this.player.phase);\n return this._addPlayerListener(\"onPhaseChanged\", set);\n });\n\n /**\n * Will become true after buffering.\n */\n readonly canplay = readable(this.player.isPlayable, set => {\n set(this.player.isPlayable);\n return this._addPlayerListener(\"onIsPlayableChanged\", set);\n });\n\n /** @internal */\n private _setPlaybackRate!: (value: number) => void;\n /**\n * Playback speed, default `1`.\n */\n readonly playbackRate = writable(\n this.player.playbackSpeed,\n set => {\n this._setPlaybackRate = set;\n set(this.player.playbackSpeed);\n },\n value => {\n this.player.playbackSpeed = value;\n this._setPlaybackRate(value);\n }\n );\n\n /**\n * Playback duration in milliseconds.\n */\n readonly duration = readable(this.player.timeDuration, set => {\n set(this.player.timeDuration);\n });\n\n /**\n * Get state of room at that time, like \"who was in the room?\".\n */\n readonly state = readable<PlayerState>(this.player.state, set => {\n set(this.player.state);\n return this._addPlayerListener(\"onPlayerStateChanged\", () => set(this.player.state));\n });\n\n /**\n * Seek to some time in milliseconds.\n */\n seek(timestamp: number) {\n this._assertNotDestroyed();\n return this.player.seekToProgressTime(timestamp);\n }\n\n /**\n * Change player state to playing.\n */\n play() {\n this._assertNotDestroyed();\n this.player.play();\n }\n\n /**\n * Change player state to paused.\n */\n pause() {\n this._assertNotDestroyed();\n this.player.pause();\n }\n\n /**\n * Change player state to stopped.\n */\n stop() {\n this._assertNotDestroyed();\n this.player.stop();\n }\n\n /**\n * Set playback speed, a shortcut for `speed.set(x)`.\n */\n setPlaybackRate(value: number) {\n this._assertNotDestroyed();\n this.playbackRate.set(value);\n }\n}\n\nexport interface FastboardReplayOptions {\n sdkConfig: Omit<WhiteWebSdkConfiguration, \"useMobXState\"> & {\n region: NonNullable<WhiteWebSdkConfiguration[\"region\"]>;\n };\n replayRoom: Omit<ReplayRoomParams, \"useMultiViews\"> & {\n callbacks?: Partial<PlayerCallbacks>;\n };\n managerConfig?: Omit<MountParams, \"room\">;\n netlessApps?: NetlessApp[];\n}\n\n/**\n * Create a FastboardPlayer instance.\n * @example\n * let player = await replayFastboard({\n * sdkConfig: {\n * appIdentifier: import.meta.env.VITE_APPID,\n * region: 'cn-hz',\n * },\n * replayRoom: {\n * room: \"room uuid\",\n * roomToken: \"NETLESSROOM_...\",\n * beginTimestamp: 1646619090394,\n * duration: 70448,\n * },\n * })\n */\nexport async function replayFastboard<TEventData extends Record<string, any> = any>({\n sdkConfig,\n replayRoom: { callbacks, ...replayRoomParams },\n managerConfig,\n netlessApps,\n}: FastboardReplayOptions) {\n const sdk = new WhiteWebSdk({\n ...sdkConfig,\n useMobXState: true,\n });\n\n if (netlessApps) {\n netlessApps.forEach(app => {\n register({ kind: app.kind, src: app });\n });\n }\n\n const player = await sdk.replayRoom(\n {\n ...ensure_official_plugins(replayRoomParams),\n useMultiViews: true,\n },\n callbacks\n );\n\n const syncedStore = await SyncedStorePlugin.init<TEventData>(player);\n\n const managerPromise = WindowManager.mount({\n cursor: true,\n ...managerConfig,\n room: player,\n });\n\n player.play();\n const manager = await managerPromise;\n player.pause();\n await player.seekToProgressTime(0);\n\n return new FastboardPlayer<TEventData>(sdk, player, manager, syncedStore);\n}\n","import type { PublicEvent, WindowManager } from \"@netless/window-manager\";\nimport type { Player, PlayerCallbacks, Room, RoomCallbacks, View, ViewCallbacks } from \"white-web-sdk\";\n\nexport function addRoomListener<K extends keyof RoomCallbacks>(\n room: Room,\n name: K,\n listener: RoomCallbacks[K]\n) {\n room.callbacks.on(name, listener);\n return () => room.callbacks.off(name, listener);\n}\n\nexport function addPlayerListener<K extends keyof PlayerCallbacks>(\n player: Player,\n name: K,\n listener: PlayerCallbacks[K]\n) {\n player.callbacks.on(name, listener);\n return () => player.callbacks.off(name, listener);\n}\n\n/**\n * Note: view listeners will be invalid on reconnection.\n * You have to rebind them after the phase changed.\n * @example\n * const bindCamera = () => addViewListener(mainView, \"onCameraUpdated\", setCamera)\n * let dispose = bindCamera(), phase_ = \"disconnected\"\n * setCamera(mainView.camera)\n * addRoomListener(room, \"onPhaseChanged\", (phase) => {\n * if (phase === \"connected\" && phase_ === \"reconnecting\") {\n * dispose()\n * dispose = bindCamera()\n * setCamera(mainView.camera)\n * }\n * phase_ = phase\n * })\n */\nexport function addViewListener<K extends keyof ViewCallbacks>(\n view: View,\n name: K,\n listener: (value: ViewCallbacks[K]) => void\n) {\n view.callbacks.on(name, listener);\n return () => view.callbacks.off(name, listener);\n}\n\nexport function addManagerListener<K extends keyof PublicEvent>(\n manager: WindowManager,\n name: K,\n listener: (value: PublicEvent[K]) => void\n): () => void {\n return manager.emitter.on(name, listener);\n}\n","import type { AppResult } from \"@netless/app-slide\";\nimport type { FastboardApp, WindowManager } from \"../impl\";\n\nexport interface DocsEventOptions {\n /** If provided, will dispatch to the specific app. Default to the focused app. */\n appId?: string;\n /** Used by `jumpToPage` event, range from 1 to total pages count. */\n page?: number;\n}\n\n/**\n * Send specific command to the static docs / slide app.\n * Only works for apps that were created by `insertDocs()`.\n *\n * Returns false if failed to find the app or not writable.\n *\n * For static docs, `nextPage` equals to `nextStep`, as with `prevPage` and `prevStep`.\n *\n * @example\n * ```js\n * // send \"next page\" to the focused app\n * dispatchDocsEvent(fastboard, \"nextPage\")\n *\n * // send \"prev page\" to some app\n * dispatchDocsEvent(fastboard, \"prevPage\", {appId:\"Slide-1a2b3c4d\"})\n * ```\n */\nexport function dispatchDocsEvent(\n fastboard: FastboardApp | WindowManager,\n event: \"prevPage\" | \"nextPage\" | \"prevStep\" | \"nextStep\" | \"jumpToPage\",\n options: DocsEventOptions = {}\n): boolean {\n const manager = \"manager\" in fastboard ? fastboard.manager : fastboard;\n\n const appId = options.appId || manager.focused;\n if (!appId) {\n console.warn(\"not found \" + (options.appId || \"focused app\"));\n return false;\n }\n\n let page: number | undefined, input: HTMLInputElement | null;\n\n // Click the DOM elements for static docs\n if (appId.startsWith(\"DocsViewer-\")) {\n const dom = manager.queryOne(appId)?.box?.$footer;\n if (!dom) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n const click = (el: Element | null) => {\n el && el.dispatchEvent(new MouseEvent(\"click\"));\n };\n\n switch (event) {\n case \"prevPage\":\n case \"prevStep\":\n click(dom.querySelector('button[class$=\"btn-page-back\"]'));\n break;\n case \"nextPage\":\n case \"nextStep\":\n click(dom.querySelector('button[class$=\"btn-page-next\"]'));\n break;\n case \"jumpToPage\":\n page = options.page;\n input = dom.querySelector('input[class$=\"page-number-input\"]');\n if (!input || typeof page !== \"number\") {\n console.warn(\"failed to jump\" + (page ? \" to page \" + page : \"\"));\n return false;\n }\n input.value = \"\" + page;\n input.dispatchEvent(new InputEvent(\"change\"));\n break;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n\n return true;\n }\n\n // Check controller for slide docs\n else if (appId.startsWith(\"Slide-\")) {\n const app = manager.queryOne(appId)?.appResult as unknown as AppResult | undefined;\n if (!app) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n return app.prevPage();\n case \"nextPage\":\n return app.nextPage();\n case \"prevStep\":\n return app.prevStep();\n case \"nextStep\":\n return app.nextStep();\n case \"jumpToPage\":\n page = options.page;\n if (typeof page !== \"number\") {\n console.warn(\"failed to jump\" + (page ? \" to page \" + page : \"\"));\n return false;\n }\n return app.jumpToPage(page);\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n // No support for any other kind\n else {\n console.warn(\"not supported app \" + appId);\n return false;\n }\n}\n"],"names":["WindowManager","SyncedStorePlugin","SlideApp","addHooks","BuiltinApps","WhiteWebSdk","DefaultHotKeys","syncedStore","contentModeScale"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/store.ts","../src/utils/misc.ts","../src/utils/uid.ts","../src/utils/warn.ts","../src/internal.ts","../src/behaviors/lite.ts","../src/impl/FastboardApp.ts","../src/impl/FastboardPlayer.ts","../src/behaviors/index.ts","../src/helpers/listen.ts","../src/helpers/docs.ts"],"sourcesContent":["// This is a simple mimic of svelte/store.\nexport type Subscriber<T> = (value: T) => void;\nexport type Unsubscriber = () => void;\nexport type Updater<T> = (value: T) => T;\nexport type StartStopNotifier<T> = (set: Subscriber<T>) => Unsubscriber | void;\n\nexport interface Readable<T> {\n readonly value: T;\n subscribe(this: void, run: Subscriber<T>): Unsubscriber;\n reaction(this: void, run: Subscriber<T>): Unsubscriber;\n}\n\nexport interface Writable<T> extends Readable<T> {\n set(this: void, value: T): void;\n update(this: void, updater: Updater<T>): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nfunction safe_not_equal(a: unknown, b: unknown) {\n return a != a ? b == b : a !== b || (a && typeof a === \"object\") || typeof a === \"function\";\n}\n\nexport function readable<T>(value: T, start: StartStopNotifier<T> = noop): Readable<T> {\n let stop: Unsubscriber | undefined;\n const subscribers = new Set<Subscriber<T>>();\n function set(new_value: T) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) {\n for (const run of subscribers) {\n run(value);\n }\n }\n }\n }\n function subscribe(run: Subscriber<T>) {\n subscribers.add(run);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(run);\n if (subscribers.size === 0) {\n stop && stop();\n stop = undefined;\n }\n };\n }\n function reaction(run: Subscriber<T>) {\n subscribers.add(run);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n return () => {\n subscribers.delete(run);\n if (subscribers.size === 0) {\n stop && stop();\n stop = undefined;\n }\n };\n }\n return {\n get value() {\n if (subscribers.size === 0) {\n stop = start(set) || noop;\n stop();\n stop = undefined;\n }\n return value;\n },\n subscribe,\n reaction,\n };\n}\n\nexport function writable<T>(value: T, start: StartStopNotifier<T> = noop, set: Subscriber<T>): Writable<T> {\n const internal = readable(value, start);\n return {\n get value() {\n return internal.value;\n },\n subscribe: internal.subscribe,\n reaction: internal.reaction,\n set,\n update(fn: Updater<T>) {\n set(fn(internal.value));\n },\n };\n}\n","import type { ConvertedFile, SceneDefinition, Size } from \"white-web-sdk\";\n\nexport function getImageSize(url: string, fallback: Size, crossOrigin?: boolean | string) {\n return new Promise<Size>(resolve => {\n const img = new Image();\n applyCrossOrigin(img, url, crossOrigin);\n img.onload = () => resolve(img);\n img.onerror = () => resolve(fallback);\n img.src = url;\n });\n}\n\n// https://github.com/pixijs/pixijs/blob/dev/packages/core/src/textures/resources/BaseImageResource.ts#L51\nfunction applyCrossOrigin(image: HTMLImageElement, src: string, crossOrigin?: boolean | string): void {\n if (crossOrigin === undefined && !src.startsWith(\"data:\")) {\n image.crossOrigin = determineCrossOrigin(src);\n } else if (crossOrigin !== false) {\n image.crossOrigin = typeof crossOrigin === \"string\" ? crossOrigin : \"anonymous\";\n }\n}\n\nfunction determineCrossOrigin(src: string): string {\n if (src.startsWith(\"data:\") || typeof window === \"undefined\" || !window.location) {\n return \"\";\n }\n const loc = window.location;\n try {\n const parsedUrl = new URL(src, document.baseURI);\n if (\n parsedUrl.hostname !== loc.hostname ||\n parsedUrl.port !== loc.port ||\n parsedUrl.protocol !== loc.protocol\n ) {\n return \"anonymous\";\n }\n return \"\";\n } catch {\n return \"\";\n }\n}\n\nexport function makeSlideParams(scenes: SceneDefinition[]) {\n const emptyScenes: SceneDefinition[] = [];\n let taskId = \"\";\n let url = \"\";\n\n // e.g. \"ppt(x)://cdn/prefix/dynamicConvert/{taskId}/1.slide\"\n const pptSrcRE = /^pptx?(?<prefix>:\\/\\/\\S+?dynamicConvert)\\/(?<taskId>\\w+)\\//;\n\n for (const { name, ppt } of scenes) {\n // make sure scenesWithoutPPT.length === scenes.length\n emptyScenes.push({ name });\n\n if (!ppt || !ppt.src.startsWith(\"ppt\")) continue;\n\n const match = pptSrcRE.exec(ppt.src);\n if (!match || !match.groups) continue;\n\n taskId = match.groups.taskId;\n url = `https${match.groups.prefix}`;\n break;\n }\n\n return { scenes: emptyScenes, taskId, url };\n}\n\nexport function convertedFileToScene(f: ConvertedFile, i: number): SceneDefinition {\n return {\n name: String(i + 1),\n ppt: {\n src: f.conversionFileUrl,\n width: f.width,\n height: f.height,\n previewURL: f.preview,\n },\n };\n}\n","// Copy from https://github.com/crimx/side-effect-manager/blob/main/src/gen-uid.ts\nconst SOUP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst SOUP_LEN = 62; // SOUP.length\nconst ID_LEN = 20;\nconst reusedIdCarrier = /* @__PURE__ */ Array(ID_LEN);\n\nexport function genUID() {\n for (let i = 0; i < ID_LEN; i++) {\n reusedIdCarrier[i] = SOUP.charAt(Math.random() * SOUP_LEN);\n }\n return reusedIdCarrier.join(\"\");\n}\n","const warnings = {\n \"no-ppt-in-scenes\":\n \"You're probably inserting the slide app in a wrong way, there shouldn't exist `scenes[0].ppt`.\",\n} as const;\nconst warned = new Set<string>();\n\nexport function warn(id: keyof typeof warnings) {\n if (warned.has(id)) return;\n warned.add(id);\n console.warn(warnings[id]);\n}\n","import type { JoinRoomParams, ReplayRoomParams } from \"white-web-sdk\";\nimport type { PublicEvent } from \"@netless/window-manager\";\nimport { WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\n\nexport function ensure_official_plugins<T extends JoinRoomParams | ReplayRoomParams>(joinRoom: T): T {\n const plugins = new Set(joinRoom.invisiblePlugins || []);\n plugins.add(WindowManager);\n plugins.add(SyncedStorePlugin);\n joinRoom.invisiblePlugins = [...plugins];\n return joinRoom;\n}\n\nexport function transform_app_status(status: PublicEvent[\"loadApp\"][\"status\"]) {\n return status === \"start\" ? \"loading\" : status === \"failed\" ? \"failed\" : \"idle\";\n}\n","import { WindowManager, type RegisterParams } from \"@netless/window-manager\";\n\nexport const register = WindowManager.register.bind(WindowManager);\n\nexport interface AppsConfig {\n [kind: string]: Omit<RegisterParams, \"kind\">;\n}\n\nconst DefaultApps: AppsConfig = {\n Monaco: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.14-beta.1/dist/main.iife.js\",\n },\n Countdown: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-countdown/0.0.2/dist/main.iife.js\",\n },\n GeoGebra: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-geogebra/0.0.4/dist/main.iife.js\",\n appOptions: {\n HTML5Codebase: \"https://flat-storage-cn-hz.whiteboard.agora.io/GeoGebra/HTML5/5.0/web3d\",\n },\n },\n EmbeddedPage: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-embedded-page/0.1.1/dist/main.iife.js\",\n },\n Plyr: {\n src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-plyr/0.1.3/dist/main.iife.js\",\n },\n};\n\nfor (const kind in DefaultApps) {\n if (Object.prototype.hasOwnProperty.call(DefaultApps, kind)) {\n const options = DefaultApps[kind];\n WindowManager.register({ kind, ...options });\n }\n}\n\ndeclare let __NAME__: string, __VERSION__: string;\n\nexport const version = __VERSION__;\n\nif (typeof window !== \"undefined\") {\n let str = (window as { __netlessUA?: string }).__netlessUA || \"\";\n str += ` ${__NAME__}@${version} `;\n (window as { __netlessUA?: string }).__netlessUA = str;\n}\n","import type { AddPageParams, PublicEvent, MountParams, NetlessApp } from \"@netless/window-manager\";\nimport type {\n AnimationMode,\n ApplianceNames,\n Camera,\n CameraState,\n Color,\n ConversionResponse,\n HotKey,\n HotKeys,\n JoinRoomParams,\n MemberState,\n Rectangle,\n Room,\n RoomPhase as RoomPhaseEnum,\n RoomCallbacks,\n RoomState,\n SceneDefinition,\n ShapeType,\n ViewCallbacks,\n WhiteWebSdkConfiguration,\n} from \"white-web-sdk\";\nimport type { SyncedStore, Storage, Diff, DiffOne } from \"@netless/synced-store\";\n\nimport { DefaultHotKeys, WhiteWebSdk, contentModeScale } from \"white-web-sdk\";\nimport { BuiltinApps, WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\nimport {\n getImageSize,\n genUID,\n convertedFileToScene,\n makeSlideParams,\n readable,\n writable,\n warn,\n} from \"../utils\";\nimport { ensure_official_plugins, transform_app_status } from \"../internal\";\nimport { register } from \"../behaviors/lite\";\n\nclass FastboardAppBase<TEventData extends Record<string, any> = any> {\n public constructor(\n readonly sdk: WhiteWebSdk,\n readonly room: Room,\n readonly manager: WindowManager,\n readonly hotKeys: Partial<HotKeys>,\n readonly syncedStore: SyncedStore<TEventData>\n ) {}\n\n protected _destroyed = false;\n /** @internal */\n protected _assertNotDestroyed() {\n if (this._destroyed) {\n throw new Error(\"FastboardApp has been destroyed\");\n }\n }\n\n /** @internal */\n protected _addRoomListener<K extends keyof RoomCallbacks>(name: K, listener: RoomCallbacks[K]) {\n this._assertNotDestroyed();\n this.room.callbacks.on(name, listener);\n return () => this.room.callbacks.off(name, listener);\n }\n\n /** @internal */\n protected _addManagerListener<K extends keyof PublicEvent>(\n name: K,\n listener: (value: PublicEvent[K]) => void\n ) {\n this._assertNotDestroyed();\n this.manager.emitter.on(name, listener);\n return () => this.manager.emitter.off(name, listener);\n }\n\n /** @internal */\n protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]) {\n this._assertNotDestroyed();\n // Note: the callbacks will be invalid when reconnected, need rebind manually.\n this.manager.mainView.callbacks.on(name, listener);\n return () => this.manager.mainView.callbacks.off(name, listener);\n }\n\n /**\n * Destroy fastboard (disconnect from the whiteboard room).\n */\n public destroy() {\n this._destroyed = true;\n this.manager.destroy();\n return this.room.disconnect();\n }\n}\n\ntype RoomPhase = `${RoomPhaseEnum}`;\n\nexport type {\n AddPageParams,\n AnimationMode,\n ApplianceNames,\n Camera,\n CameraState,\n Color,\n ConversionResponse,\n HotKey,\n HotKeys,\n JoinRoomParams,\n MemberState,\n MountParams,\n NetlessApp,\n PublicEvent,\n Rectangle,\n Room,\n RoomPhase,\n RoomCallbacks,\n RoomState,\n SceneDefinition,\n ShapeType,\n SyncedStore,\n Storage,\n Diff,\n DiffOne,\n ViewCallbacks,\n WhiteWebSdk,\n WhiteWebSdkConfiguration,\n WindowManager,\n};\n\n/** pencil, eraser, rectangle... */\nexport type Appliance = `${ApplianceNames}`;\n/** triangle, star... */\nexport type Shape = `${ShapeType}`;\n\n/** Params for static docs, they are rendered as many images. */\nexport interface InsertDocsStatic {\n readonly fileType: \"pdf\";\n /** Unique string for binding whiteboard view to the doc. Must start with `/`. */\n readonly scenePath: string;\n /** @example [{ name: '1', ppt: { src: 'url/to/ppt/1.png' } }] */\n readonly scenes: SceneDefinition[];\n /** Window title. */\n readonly title?: string;\n}\n\n/** Params for slides, they are rendered in @netless/app-slide with animations. */\nexport interface InsertDocsDynamic {\n readonly fileType: \"pptx\";\n /** Unique string for binding whiteboard view to the doc. Must start with `/`. */\n readonly scenePath: string;\n /** Conversion task id, see https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress. */\n readonly taskId: string;\n /** Window title. */\n readonly title?: string;\n /** Where the slide resource placed. @default `https://convertcdn.netless.link/dynamicConvert` */\n readonly url?: string;\n /** @example [{ name: '1' }, { name: '2' }, { name: '3' }] */\n readonly scenes?: SceneDefinition[];\n}\n\nexport type InsertDocsParams = InsertDocsStatic | InsertDocsDynamic;\n\nexport interface ProjectorResponse {\n uuid: string;\n status: \"Waiting\" | \"Converting\" | \"Finished\" | \"Fail\";\n type: \"dynamic\" | \"static\";\n /** 0..100 */\n convertedPercentage: number;\n /** https://example.org/path/to/dynamicConvert, only when type=dynamic */\n prefix?: string;\n pageCount?: number;\n /** {1:\"{prefix}/{taskId}/preview/1.png\"}, only when type=dynamic and preview=true */\n previews?: Record<number, string>;\n /** {prefix}/{taskId}/jsonOutput/note.json */\n note?: string;\n /** {1:{width,height,url}}, only when type=static */\n images?: Record<number, { width: number; height: number; url: string }>;\n /** 20xxxxx */\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport type SetMemberStateFn = (partialMemberState: Partial<MemberState>) => void;\n\nexport type RoomStateChanged = (diff: Partial<RoomState>) => void;\n\n/** App download progress. */\nexport interface AppsStatus {\n [kind: string]: {\n status: \"idle\" | \"loading\" | \"failed\";\n /** Exist if status is `failed`. */\n reason?: string;\n };\n}\n\nexport class FastboardApp<TEventData extends Record<string, any> = any> extends FastboardAppBase<TEventData> {\n /**\n * Render this app to some DOM.\n */\n bindContainer(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindContainer(container);\n }\n\n /**\n * Move window-manager's collector to some place.\n */\n bindCollector(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindCollectorContainer(container);\n }\n\n /**\n * Is current room writable?\n */\n readonly writable = writable(\n this.room.isWritable,\n set => {\n set(this.room.isWritable);\n return this._addRoomListener(\"onEnableWriteNowChanged\", () => set(this.room.isWritable));\n },\n this.room.setWritable.bind(this.room)\n );\n\n /**\n * Is current room online?\n */\n readonly phase = readable<RoomPhase>(this.room.phase, set => {\n set(this.room.phase);\n return this._addRoomListener(\"onPhaseChanged\", set);\n });\n\n /**\n * Current window-manager's windows' state (is it maximized?).\n */\n readonly boxState = readable(this.manager.boxState, set => {\n set(this.manager.boxState);\n return this._addManagerListener(\"boxStateChange\", set);\n });\n\n /**\n * Current window-manager's focused app's id.\n * @example \"HelloWorld-1A2b3C4d\"\n */\n readonly focusedApp = readable(this.manager.focused, set => {\n set(this.manager.focused);\n return this._addManagerListener(\"focusedChange\", set);\n });\n\n /**\n * How many times can I call `app.redo()`?\n */\n readonly canRedoSteps = readable(this.manager.canRedoSteps, set => {\n set(this.manager.canRedoSteps);\n return this._addManagerListener(\"canRedoStepsChange\", set);\n });\n\n /**\n * How many times can I call `app.undo()`?\n */\n readonly canUndoSteps = readable(this.manager.canUndoSteps, set => {\n set(this.manager.canUndoSteps);\n return this._addManagerListener(\"canUndoStepsChange\", set);\n });\n\n /**\n * Current camera information of main view.\n *\n * Change the camera position by `app.moveCamera()`.\n */\n readonly camera = readable(this.manager.cameraState, set => {\n set(this.manager.cameraState);\n return this._addManagerListener(\"cameraStateChange\", set);\n });\n\n /**\n * Current tool's info, like \"is using pencil?\", \"what color?\".\n *\n * Change the tool by `app.setAppliance()`.\n */\n readonly memberState = readable(this.room.state.memberState, set => {\n set(this.room.state.memberState);\n return this._addRoomListener(\"onRoomStateChanged\", ({ memberState: m }) => m && set(m));\n });\n\n /**\n * 0..n-1, current index of main view scenes.\n */\n readonly sceneIndex = writable(\n this.manager.mainViewSceneIndex,\n set => {\n set(this.manager.mainViewSceneIndex);\n return this._addManagerListener(\"mainViewSceneIndexChange\", set);\n },\n this.manager.setMainViewSceneIndex.bind(this.manager)\n );\n\n /**\n * How many pages are in the main view?\n */\n readonly sceneLength = readable(this.manager.mainViewScenesLength, set => {\n set(this.manager.mainViewScenesLength);\n return this._addManagerListener(\"mainViewScenesLengthChange\", set);\n });\n\n /** @internal */\n private _appsStatus: AppsStatus = {};\n /**\n * Apps status.\n */\n readonly appsStatus = readable<AppsStatus>({}, set =>\n this._addManagerListener(\"loadApp\", ({ kind, status, reason }) => {\n this._appsStatus[kind] = { status: transform_app_status(status), reason };\n set(this._appsStatus);\n })\n );\n\n /**\n * Undo a step on main view.\n */\n undo() {\n this._assertNotDestroyed();\n this.manager.undo();\n }\n\n /**\n * Redo a step on main view.\n */\n redo() {\n this._assertNotDestroyed();\n this.manager.redo();\n }\n\n /**\n * Move current main view's camera position.\n */\n moveCamera(camera: Partial<Camera> & { animationMode?: AnimationMode | undefined }) {\n this._assertNotDestroyed();\n this.manager.moveCamera(camera);\n }\n\n /**\n * Move current main view's camera to include a rectangle.\n */\n moveCameraToContain(rectangle: Rectangle & { animationMode?: AnimationMode }) {\n this._assertNotDestroyed();\n this.manager.moveCameraToContain(rectangle);\n }\n\n /**\n * Delete all things on the main view.\n */\n cleanCurrentScene() {\n this._assertNotDestroyed();\n this.manager.cleanCurrentScene();\n }\n\n /**\n * Set current tool, like \"pencil\".\n */\n setAppliance(appliance: ApplianceNames | Appliance, shape?: ShapeType | Shape) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({\n currentApplianceName: appliance as ApplianceNames,\n shapeType: shape as ShapeType,\n });\n }\n\n /**\n * Set pencil and shape's thickness.\n */\n setStrokeWidth(strokeWidth: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ strokeWidth });\n }\n\n /**\n * Set pencil and shape's color.\n */\n setStrokeColor(strokeColor: Color) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ strokeColor });\n }\n\n /**\n * Set text size. Default is 16.\n */\n setTextSize(textSize: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ textSize });\n }\n\n /**\n * Set text color.\n *\n * @example\n * setTextColor([0x66, 0xcc, 0xff])\n */\n setTextColor(textColor: Color) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ textColor });\n }\n\n /**\n * Toggle dotted line effect on pencil.\n */\n toggleDottedLine(force?: boolean) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ dottedLine: force ?? !this.memberState.value.dottedLine });\n }\n\n /**\n * Set pencil eraser size.\n */\n setPencilEraserSize(size: number) {\n this._assertNotDestroyed();\n this.manager.mainView.setMemberState({ pencilEraserSize: size });\n }\n\n /**\n * Goto previous page (the main whiteboard view).\n */\n prevPage() {\n this._assertNotDestroyed();\n return this.manager.prevPage();\n }\n\n /**\n * Goto next page (the main whiteboard view).\n */\n nextPage() {\n this._assertNotDestroyed();\n return this.manager.nextPage();\n }\n\n /**\n * Goto any page (index range: 0..n-1)\n */\n jumpPage(index: number) {\n this._assertNotDestroyed();\n return this.manager.jumpPage(index);\n }\n\n /**\n * Add one page to the main whiteboard view.\n *\n * @example\n * addPage({ after: true }) // add one page right after current one.\n * nextPage() // then, goto that page.\n */\n addPage(params?: AddPageParams) {\n this._assertNotDestroyed();\n return this.manager.addPage(params);\n }\n\n /**\n * Remove one page at given index or current page (by default).\n *\n * Requires `@netless/window-manager` >= 0.4.30.\n *\n * @example\n * removePage() // remove current page\n */\n removePage(index?: number) {\n this._assertNotDestroyed();\n return this.manager.removePage(index);\n }\n\n /**\n * Insert an image to the main view.\n *\n * @param crossOrigin Whether to load the image with CORS enabled, default is `true`.\n *\n * @example\n * insertImage(\"https://i.imgur.com/CzXTtJV.jpg\")\n */\n async insertImage(url: string, crossOrigin?: boolean | string) {\n this._assertNotDestroyed();\n await this.manager.switchMainViewToWriter();\n\n const { divElement } = this.manager.mainView;\n const containerSize = {\n width: divElement?.scrollWidth || window.innerWidth,\n height: divElement?.scrollHeight || window.innerHeight,\n };\n\n // 1. shrink the image a little to fit container **width**\n const maxWidth = containerSize.width * 0.8;\n let { width, height } = await getImageSize(url, containerSize, crossOrigin);\n const scale = Math.min(maxWidth / width, 1);\n const uuid = genUID();\n const { centerX, centerY } = this.manager.camera;\n width *= scale;\n height *= scale;\n this.manager.mainView.insertImage({\n uuid,\n centerX,\n centerY,\n width,\n height,\n locked: false,\n crossOrigin,\n });\n this.manager.mainView.completeImageUpload(uuid, url);\n\n // 2. move camera to fit image **height**\n width /= 0.8;\n height /= 0.8;\n const originX = centerX - width / 2;\n const originY = centerY - height / 2;\n this.manager.moveCameraToContain({ originX, originY, width, height });\n }\n\n /**\n * Insert PDF/PPTX from conversion result.\n * @param status https://developer.netless.link/server-en/home/server-conversion#get-query-task-conversion-progress\n */\n insertDocs(filename: string, status: ConversionResponse): Promise<string | undefined>;\n\n /**\n * Insert PDF/PPTX from projector conversion result.\n * @param response https://developer.netless.link/server-zh/home/server-projector#get-%E6%9F%A5%E8%AF%A2%E4%BB%BB%E5%8A%A1%E8%BD%AC%E6%8D%A2%E8%BF%9B%E5%BA%A6\n */\n insertDocs(filename: string, response: ProjectorResponse): Promise<string | undefined>;\n\n /**\n * Manual way.\n * @example\n * app.insertDocs({\n * fileType: 'pptx',\n * scenePath: `/pptx/${conversion.taskId}`,\n * taskId: conversion.taskId,\n * title: 'Title',\n * })\n */\n insertDocs(params: InsertDocsParams): Promise<string | undefined>;\n\n insertDocs(arg1: string | InsertDocsParams, arg2?: ConversionResponse | ProjectorResponse) {\n this._assertNotDestroyed();\n if (typeof arg1 === \"object\" && \"fileType\" in arg1) {\n return this._insertDocsImpl(arg1);\n } else if (arg2 && arg2.status !== \"Finished\") {\n throw new Error(\"FastboardApp cannot insert a converting doc.\");\n } else if (arg2 && \"progress\" in arg2) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const scenes1 = arg2.progress.convertedFileList.map(convertedFileToScene);\n const { scenes, taskId, url } = makeSlideParams(scenes1);\n if (taskId && url) {\n return this._insertDocsImpl({ fileType: \"pptx\", scenePath, scenes, title, taskId, url });\n } else {\n return this._insertDocsImpl({ fileType: \"pdf\", scenePath, scenes: scenes1, title });\n }\n } else if (arg2 && arg2.prefix) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const taskId = arg2.uuid;\n const url = arg2.prefix;\n this._insertDocsImpl({ fileType: \"pptx\", scenePath, taskId, title, url });\n } else if (arg2 && arg2.images) {\n const title = arg1;\n const scenePath = `/${arg2.uuid}/${genUID()}`;\n const scenes: SceneDefinition[] = [];\n for (const name in arg2.images) {\n const { width, height, url } = arg2.images[name];\n scenes.push({ name, ppt: { width, height, src: url } });\n }\n return this._insertDocsImpl({ fileType: \"pdf\", scenePath, scenes, title });\n } else {\n throw new Error(\"Invalid input: not found 'progress', 'prefix' nor 'images'\");\n }\n }\n\n /** @internal */\n private _insertDocsImpl({ fileType, scenePath, title, scenes, ...attributes }: InsertDocsParams) {\n this._assertNotDestroyed();\n switch (fileType) {\n case \"pdf\":\n return this.manager.addApp({\n kind: \"DocsViewer\",\n options: { scenePath, title, scenes },\n });\n case \"pptx\":\n if (scenes && scenes[0].ppt) {\n warn(\"no-ppt-in-scenes\");\n }\n return this.manager.addApp({\n kind: \"Slide\",\n options: { scenePath, title, scenes },\n attributes,\n });\n }\n }\n\n /**\n * Insert the Media Player app.\n */\n insertMedia(title: string, src: string) {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: BuiltinApps.MediaPlayer,\n options: { title },\n attributes: { src },\n });\n }\n\n /**\n * Insert the Monaco Code Editor app.\n * @deprecated Use `app.manager.addApp({ kind: 'Monaco' })` instead.\n */\n insertCodeEditor() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"Monaco\",\n options: { title: \"Code Editor\" },\n });\n }\n\n /**\n * Insert the Countdown app.\n * @deprecated Use `app.manager.addApp({ kind: 'Countdown' })` instead.\n */\n insertCountdown() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"Countdown\",\n options: { title: \"Countdown\" },\n });\n }\n\n /**\n * Insert the GeoGebra app.\n * @deprecated Use `app.manager.addApp({ kind: 'GeoGebra' })` instead.\n */\n insertGeoGebra() {\n this._assertNotDestroyed();\n return this.manager.addApp({\n kind: \"GeoGebra\",\n options: { title: \"GeoGebra\" },\n });\n }\n}\n\nexport interface FastboardOptions {\n sdkConfig: Omit<WhiteWebSdkConfiguration, \"useMobXState\"> & {\n region: NonNullable<WhiteWebSdkConfiguration[\"region\"]>;\n };\n joinRoom: Omit<JoinRoomParams, \"useMultiViews\" | \"disableNewPencil\" | \"disableMagixEventDispatchLimit\"> & {\n callbacks?: Partial<Omit<RoomCallbacks, \"onCanRedoStepsUpdate\" | \"onCanUndoStepsUpdate\">>;\n };\n managerConfig?: Omit<MountParams, \"room\">;\n netlessApps?: NetlessApp[];\n}\n\n/**\n * Create a FastboardApp instance.\n * @example\n * let app = await createFastboard({\n * sdkConfig: {\n * appIdentifier: import.meta.env.VITE_APPID,\n * region: 'cn-hz',\n * },\n * joinRoom: {\n * uid: unique_id,\n * uuid: import.meta.env.VITE_ROOM_UUID,\n * roomToken: import.meta.env.VITE_ROOM_TOKEN,\n * },\n * })\n */\nexport async function createFastboard<TEventData extends Record<string, any> = any>({\n sdkConfig,\n joinRoom: { callbacks, ...joinRoomParams },\n managerConfig,\n netlessApps,\n}: FastboardOptions) {\n const sdk = new WhiteWebSdk({\n ...sdkConfig,\n useMobXState: true,\n });\n\n const hotKeys = joinRoomParams.hotKeys || {\n ...DefaultHotKeys,\n changeToSelector: \"s\",\n changeToLaserPointer: \"z\",\n changeToPencil: \"p\",\n changeToRectangle: \"r\",\n changeToEllipse: \"c\",\n changeToEraser: \"e\",\n changeToText: \"t\",\n changeToStraight: \"l\",\n changeToArrow: \"a\",\n changeToHand: \"h\",\n };\n\n if (netlessApps) {\n netlessApps.forEach(app => {\n register({ kind: app.kind, src: app });\n });\n }\n\n const room = await sdk.joinRoom(\n {\n floatBar: true,\n hotKeys,\n ...ensure_official_plugins(joinRoomParams),\n useMultiViews: true,\n disableNewPencil: false,\n disableMagixEventDispatchLimit: true,\n },\n callbacks\n );\n\n const syncedStore = await SyncedStorePlugin.init<TEventData>(room);\n\n const manager = await WindowManager.mount({\n cursor: true,\n ...managerConfig,\n room,\n });\n\n manager.mainView.setCameraBound({\n minContentMode: contentModeScale(0.3),\n maxContentMode: contentModeScale(3),\n });\n\n return new FastboardApp<TEventData>(sdk, room, manager, hotKeys, syncedStore);\n}\n","import type { MountParams, NetlessApp, PublicEvent } from \"@netless/window-manager\";\nimport type {\n Player,\n PlayerPhase as PlayerPhaseEnum,\n PlayerCallbacks,\n PlayerState,\n PlayerSeekingResult,\n ReplayRoomParams,\n ViewCallbacks,\n WhiteWebSdkConfiguration,\n} from \"white-web-sdk\";\nimport type { SyncedStore } from \"@netless/synced-store\";\n\nimport { WhiteWebSdk } from \"white-web-sdk\";\nimport { WindowManager } from \"@netless/window-manager\";\nimport { SyncedStorePlugin } from \"@netless/synced-store\";\nimport { readable, writable } from \"../utils\";\nimport { ensure_official_plugins } from \"../internal\";\nimport { register } from \"../behaviors/lite\";\n\nclass FastboardPlayerBase<TEventData extends Record<string, any> = any> {\n public constructor(\n readonly sdk: WhiteWebSdk,\n readonly player: Player,\n readonly manager: WindowManager,\n readonly syncedStore: SyncedStore<TEventData>\n ) {}\n\n protected _destroyed = false;\n /** @internal */\n protected _assertNotDestroyed() {\n if (this._destroyed) {\n throw new Error(\"FastboardApp has been destroyed\");\n }\n }\n\n /** @internal */\n protected _addPlayerListener<K extends keyof PlayerCallbacks>(name: K, listener: PlayerCallbacks[K]) {\n this._assertNotDestroyed();\n this.player.callbacks.on(name, listener);\n return () => this.player.callbacks.off(name, listener);\n }\n\n /** @internal */\n protected _addManagerListener<K extends keyof PublicEvent>(\n name: K,\n listener: (value: PublicEvent[K]) => void\n ) {\n this._assertNotDestroyed();\n this.manager.emitter.on(name, listener);\n return () => this.manager.emitter.off(name, listener);\n }\n\n /** @internal */\n protected _addMainViewListener<K extends keyof ViewCallbacks>(name: K, listener: ViewCallbacks[K]) {\n this._assertNotDestroyed();\n this.manager.mainView.callbacks.on(name, listener);\n return () => this.manager.mainView.callbacks.off(name, listener);\n }\n\n public destroy() {\n this._destroyed = true;\n this.manager.destroy();\n return this.player.callbacks.off();\n }\n}\n\ntype PlayerPhase = `${PlayerPhaseEnum}`;\n\nexport type { PlayerPhase, PlayerSeekingResult };\n\nexport class FastboardPlayer<\n TEventData extends Record<string, any> = any,\n> extends FastboardPlayerBase<TEventData> {\n /**\n * Render this player to some DOM.\n */\n bindContainer(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindContainer(container);\n }\n\n /**\n * Move window-manager's collector to some place.\n */\n bindCollector(container: HTMLElement) {\n this._assertNotDestroyed();\n this.manager.bindCollectorContainer(container);\n }\n\n /**\n * Player current time in milliseconds.\n */\n readonly currentTime = writable(\n this.player.progressTime,\n set => {\n set(this.player.progressTime);\n return this._addPlayerListener(\"onProgressTimeChanged\", set);\n },\n this.player.seekToProgressTime.bind(this.player)\n );\n\n /**\n * Player state, like \"is it playing?\".\n */\n readonly phase = readable<PlayerPhase>(this.player.phase, set => {\n set(this.player.phase);\n return this._addPlayerListener(\"onPhaseChanged\", set);\n });\n\n /**\n * Will become true after buffering.\n */\n readonly canplay = readable(this.player.isPlayable, set => {\n set(this.player.isPlayable);\n return this._addPlayerListener(\"onIsPlayableChanged\", set);\n });\n\n /** @internal */\n private _setPlaybackRate!: (value: number) => void;\n /**\n * Playback speed, default `1`.\n */\n readonly playbackRate = writable(\n this.player.playbackSpeed,\n set => {\n this._setPlaybackRate = set;\n set(this.player.playbackSpeed);\n },\n value => {\n this.player.playbackSpeed = value;\n this._setPlaybackRate(value);\n }\n );\n\n /**\n * Playback duration in milliseconds.\n */\n readonly duration = readable(this.player.timeDuration, set => {\n set(this.player.timeDuration);\n });\n\n /**\n * Get state of room at that time, like \"who was in the room?\".\n */\n readonly state = readable<PlayerState>(this.player.state, set => {\n set(this.player.state);\n return this._addPlayerListener(\"onPlayerStateChanged\", () => set(this.player.state));\n });\n\n /**\n * Seek to some time in milliseconds.\n */\n seek(timestamp: number) {\n this._assertNotDestroyed();\n return this.player.seekToProgressTime(timestamp);\n }\n\n /**\n * Change player state to playing.\n */\n play() {\n this._assertNotDestroyed();\n this.player.play();\n }\n\n /**\n * Change player state to paused.\n */\n pause() {\n this._assertNotDestroyed();\n this.player.pause();\n }\n\n /**\n * Change player state to stopped.\n */\n stop() {\n this._assertNotDestroyed();\n this.player.stop();\n }\n\n /**\n * Set playback speed, a shortcut for `speed.set(x)`.\n */\n setPlaybackRate(value: number) {\n this._assertNotDestroyed();\n this.playbackRate.set(value);\n }\n}\n\nexport interface FastboardReplayOptions {\n sdkConfig: Omit<WhiteWebSdkConfiguration, \"useMobXState\"> & {\n region: NonNullable<WhiteWebSdkConfiguration[\"region\"]>;\n };\n replayRoom: Omit<ReplayRoomParams, \"useMultiViews\"> & {\n callbacks?: Partial<PlayerCallbacks>;\n };\n managerConfig?: Omit<MountParams, \"room\">;\n netlessApps?: NetlessApp[];\n}\n\n/**\n * Create a FastboardPlayer instance.\n * @example\n * let player = await replayFastboard({\n * sdkConfig: {\n * appIdentifier: import.meta.env.VITE_APPID,\n * region: 'cn-hz',\n * },\n * replayRoom: {\n * room: \"room uuid\",\n * roomToken: \"NETLESSROOM_...\",\n * beginTimestamp: 1646619090394,\n * duration: 70448,\n * },\n * })\n */\nexport async function replayFastboard<TEventData extends Record<string, any> = any>({\n sdkConfig,\n replayRoom: { callbacks, ...replayRoomParams },\n managerConfig,\n netlessApps,\n}: FastboardReplayOptions) {\n const sdk = new WhiteWebSdk({\n ...sdkConfig,\n useMobXState: true,\n });\n\n if (netlessApps) {\n netlessApps.forEach(app => {\n register({ kind: app.kind, src: app });\n });\n }\n\n const player = await sdk.replayRoom(\n {\n ...ensure_official_plugins(replayRoomParams),\n useMultiViews: true,\n },\n callbacks\n );\n\n const syncedStore = await SyncedStorePlugin.init<TEventData>(player);\n\n const managerPromise = WindowManager.mount({\n cursor: true,\n ...managerConfig,\n room: player,\n });\n\n player.play();\n const manager = await managerPromise;\n player.pause();\n await player.seekToProgressTime(0);\n\n return new FastboardPlayer<TEventData>(sdk, player, manager, syncedStore);\n}\n","import { WindowManager } from \"@netless/window-manager\";\nimport SlideApp, { apps, addHooks, previewSlide } from \"@netless/app-slide\";\n\nexport type {\n AppOptions as SlideOptions,\n AppResult as SlideController,\n PreviewParams,\n SlidePreviewer,\n} from \"@netless/app-slide\";\nexport { previewSlide, SlideApp, addHooks as addSlideHooks, apps as slideApps };\n\nWindowManager.register({\n kind: \"Slide\",\n appOptions: { debug: false },\n src: SlideApp,\n addHooks,\n});\n","import type { PublicEvent, WindowManager } from \"@netless/window-manager\";\nimport type { Player, PlayerCallbacks, Room, RoomCallbacks, View, ViewCallbacks } from \"white-web-sdk\";\n\nexport function addRoomListener<K extends keyof RoomCallbacks>(\n room: Room,\n name: K,\n listener: RoomCallbacks[K]\n) {\n room.callbacks.on(name, listener);\n return () => room.callbacks.off(name, listener);\n}\n\nexport function addPlayerListener<K extends keyof PlayerCallbacks>(\n player: Player,\n name: K,\n listener: PlayerCallbacks[K]\n) {\n player.callbacks.on(name, listener);\n return () => player.callbacks.off(name, listener);\n}\n\n/**\n * Note: view listeners will be invalid on reconnection.\n * You have to rebind them after the phase changed.\n * @example\n * const bindCamera = () => addViewListener(mainView, \"onCameraUpdated\", setCamera)\n * let dispose = bindCamera(), phase_ = \"disconnected\"\n * setCamera(mainView.camera)\n * addRoomListener(room, \"onPhaseChanged\", (phase) => {\n * if (phase === \"connected\" && phase_ === \"reconnecting\") {\n * dispose()\n * dispose = bindCamera()\n * setCamera(mainView.camera)\n * }\n * phase_ = phase\n * })\n */\nexport function addViewListener<K extends keyof ViewCallbacks>(\n view: View,\n name: K,\n listener: (value: ViewCallbacks[K]) => void\n) {\n view.callbacks.on(name, listener);\n return () => view.callbacks.off(name, listener);\n}\n\nexport function addManagerListener<K extends keyof PublicEvent>(\n manager: WindowManager,\n name: K,\n listener: (value: PublicEvent[K]) => void\n): () => void {\n return manager.emitter.on(name, listener);\n}\n","import type { AppResult } from \"@netless/app-slide\";\nimport type { FastboardApp, WindowManager } from \"../impl\";\n\nexport interface DocsEventOptions {\n /** If provided, will dispatch to the specific app. Default to the focused app. */\n appId?: string;\n /** Used by `jumpToPage` event, range from 1 to total pages count. */\n page?: number;\n}\n\n/**\n * Send specific command to the static docs / slide app.\n * Only works for apps that were created by `insertDocs()`.\n *\n * Returns false if failed to find the app or not writable.\n *\n * For static docs, `nextPage` equals to `nextStep`, as with `prevPage` and `prevStep`.\n *\n * @example\n * ```js\n * // send \"next page\" to the focused app\n * dispatchDocsEvent(fastboard, \"nextPage\")\n *\n * // send \"prev page\" to some app\n * dispatchDocsEvent(fastboard, \"prevPage\", {appId:\"Slide-1a2b3c4d\"})\n * ```\n */\nexport function dispatchDocsEvent(\n fastboard: FastboardApp | WindowManager,\n event: \"prevPage\" | \"nextPage\" | \"prevStep\" | \"nextStep\" | \"jumpToPage\",\n options: DocsEventOptions = {}\n): boolean {\n const manager = \"manager\" in fastboard ? fastboard.manager : fastboard;\n\n const appId = options.appId || manager.focused;\n if (!appId) {\n console.warn(\"not found \" + (options.appId || \"focused app\"));\n return false;\n }\n\n let page: number | undefined, input: HTMLInputElement | null;\n\n // Click the DOM elements for static docs\n if (appId.startsWith(\"DocsViewer-\")) {\n const dom = manager.queryOne(appId)?.box?.$footer;\n if (!dom) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n const click = (el: Element | null) => {\n el && el.dispatchEvent(new MouseEvent(\"click\"));\n };\n\n switch (event) {\n case \"prevPage\":\n case \"prevStep\":\n click(dom.querySelector('button[class$=\"btn-page-back\"]'));\n break;\n case \"nextPage\":\n case \"nextStep\":\n click(dom.querySelector('button[class$=\"btn-page-next\"]'));\n break;\n case \"jumpToPage\":\n page = options.page;\n input = dom.querySelector('input[class$=\"page-number-input\"]');\n if (!input || typeof page !== \"number\") {\n console.warn(\"failed to jump\" + (page ? \" to page \" + page : \"\"));\n return false;\n }\n input.value = \"\" + page;\n input.dispatchEvent(new InputEvent(\"change\"));\n break;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n\n return true;\n }\n\n // Check controller for slide docs\n else if (appId.startsWith(\"Slide-\")) {\n const app = manager.queryOne(appId)?.appResult as unknown as AppResult | undefined;\n if (!app) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n return app.prevPage();\n case \"nextPage\":\n return app.nextPage();\n case \"prevStep\":\n return app.prevStep();\n case \"nextStep\":\n return app.nextStep();\n case \"jumpToPage\":\n page = options.page;\n if (typeof page !== \"number\") {\n console.warn(\"failed to jump\" + (page ? \" to page \" + page : \"\"));\n return false;\n }\n return app.jumpToPage(page);\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n // No support for any other kind\n else {\n console.warn(\"not supported app \" + appId);\n return false;\n }\n}\n"],"names":["WindowManager","SyncedStorePlugin","BuiltinApps","WhiteWebSdk","DefaultHotKeys","syncedStore","contentModeScale","SlideApp","addHooks"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -209,6 +209,7 @@ function ensure_official_plugins(joinRoom) {
209
209
  function transform_app_status(status) {
210
210
  return status === "start" ? "loading" : status === "failed" ? "failed" : "idle";
211
211
  }
212
+ var register = WindowManager.register.bind(WindowManager);
212
213
  var DefaultApps = {
213
214
  Monaco: {
214
215
  src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.14-beta.1/dist/main.iife.js"
@@ -229,20 +230,13 @@ var DefaultApps = {
229
230
  src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-plyr/0.1.3/dist/main.iife.js"
230
231
  }
231
232
  };
232
- WindowManager.register({
233
- kind: "Slide",
234
- appOptions: { debug: false },
235
- src: SlideApp,
236
- addHooks
237
- });
238
233
  for (const kind in DefaultApps) {
239
234
  if (Object.prototype.hasOwnProperty.call(DefaultApps, kind)) {
240
235
  const options = DefaultApps[kind];
241
236
  WindowManager.register(__spreadValues({ kind }, options));
242
237
  }
243
238
  }
244
- var register = WindowManager.register.bind(WindowManager);
245
- var version = "0.3.12";
239
+ var version = "0.3.13-canary.0";
246
240
  if (typeof window !== "undefined") {
247
241
  let str = window.__netlessUA || "";
248
242
  str += ` ${"@netless/fastboard"}@${version} `;
@@ -910,6 +904,12 @@ async function replayFastboard(_a) {
910
904
  await player.seekToProgressTime(0);
911
905
  return new FastboardPlayer(sdk, player, manager, syncedStore);
912
906
  }
907
+ WindowManager.register({
908
+ kind: "Slide",
909
+ appOptions: { debug: false },
910
+ src: SlideApp,
911
+ addHooks
912
+ });
913
913
 
914
914
  // src/helpers/listen.ts
915
915
  function addRoomListener(room, name, listener) {
@@ -1003,5 +1003,5 @@ function dispatchDocsEvent(fastboard, event, options = {}) {
1003
1003
  }
1004
1004
  }
1005
1005
 
1006
- export { FastboardApp, FastboardPlayer, addManagerListener, addPlayerListener, addRoomListener, addViewListener, convertedFileToScene, createFastboard, dispatchDocsEvent, genUID, getImageSize, makeSlideParams, readable, register, replayFastboard, version, warn, writable };
1006
+ export { FastboardApp, FastboardPlayer, addManagerListener, addPlayerListener, addRoomListener, addViewListener, convertedFileToScene, createFastboard, dispatchDocsEvent, genUID, getImageSize, makeSlideParams, readable, replayFastboard, warn, writable };
1007
1007
  //# sourceMappingURL=index.mjs.map