{"version":3,"file":"index.mjs","sources":["../src/utils/store.ts","../src/utils/misc.ts","../src/utils/uid.ts","../src/utils/warn.ts","../src/impl/dynamic-config-parameters.ts","../src/internal.ts","../src/behaviors/lite.ts","../src/impl/appliance-plugin-loader.ts","../src/impl/app-in-mainview-plugin-loader.ts","../src/impl/bridge-runtime.ts","../src/impl/dispose-runtime.ts","../src/impl/FastboardApp.ts","../src/impl/FastboardPlayer.ts","../src/helpers/listen.ts","../src/helpers/docs.ts","../src/behaviors/index.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  dispose(value?: T): void;\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  function dispose(new_value?: T) {\n    if (new_value !== undefined) {\n      set(new_value);\n    }\n    subscribers.clear();\n    stop && stop();\n    stop = undefined;\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    dispose,\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    dispose: internal.dispose,\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","/** Keep factory defaults readable by old dependencies while new consumers retain their source. */\nconst parameterLayersKey = \"__netlessDynamicConfigLayers\";\nconst forbidden = [\"__proto__\", \"prototype\", \"constructor\"];\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n  return (\n    value !== null &&\n    typeof value === \"object\" &&\n    !Array.isArray(value) &&\n    (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null)\n  );\n}\nfunction mergeDefaults(defaults: Record<string, any>, explicit: Record<string, any>): Record<string, any> {\n  const result = { ...defaults };\n  Object.keys(explicit).forEach(key => {\n    if (forbidden.indexOf(key) !== -1 || explicit[key] === undefined) return;\n    result[key] =\n      key !== \"hotKeys\" && key !== \"floatBar\" && isPlainObject(result[key]) && isPlainObject(explicit[key])\n        ? mergeDefaults(result[key], explicit[key])\n        : explicit[key];\n  });\n  return result;\n}\nexport function withDynamicConfigDefaults<T extends object>(defaults: object, explicit: T): T {\n  const result = mergeDefaults(defaults, explicit) as T;\n  Object.defineProperty(result, parameterLayersKey, {\n    value: { version: 1, defaults: { ...defaults }, explicit: { ...explicit } },\n  });\n  return result;\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 as any);\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-alpha.1/dist/main.iife.min.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.3/dist/main.iife.js\",\n  },\n  Plyr: {\n    src: \"https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-plyr/0.2.12/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 { ApplianceMultiPlugin } from \"@netless/appliance-plugin\";\n\nexport async function loadApplianceMultiPluginModule(): Promise<{\n  ApplianceMultiPlugin: typeof ApplianceMultiPlugin;\n}> {\n  return import(\"@netless/appliance-plugin\");\n}\n","import type { AppInMainViewPlugin } from \"@netless/app-in-mainview-plugin\";\n\nexport async function loadAppInMainViewPluginModule(): Promise<{\n  AppInMainViewPlugin: typeof AppInMainViewPlugin;\n}> {\n  return import(\"@netless/app-in-mainview-plugin\");\n}\n","import type { ExtendPlugin, WindowManager } from \"@netless/window-manager\";\nimport type { autorun, toJS } from \"white-web-sdk\";\n\nexport interface FastboardBridgeRuntime {\n  whiteWebSdk: {\n    autorun: typeof autorun;\n    toJS: typeof toJS;\n  };\n  windowManager: {\n    ExtendPlugin: typeof ExtendPlugin;\n  };\n}\n\nexport function attachFastboardBridgeRuntime(manager: WindowManager, runtime: FastboardBridgeRuntime) {\n  (\n    manager as WindowManager & {\n      __fastboardBridgeRuntime?: FastboardBridgeRuntime;\n    }\n  ).__fastboardBridgeRuntime = runtime;\n}\n","export type RuntimeDisposer = () => unknown | Promise<unknown>;\n\n// Release in reverse acquisition order; one failed cleanup must not skip the room.\nexport async function disposeRuntime(disposers: RuntimeDisposer[]): Promise<void> {\n  for (const dispose of [...disposers].reverse()) {\n    try {\n      await dispose();\n    } catch (error) {\n      console.warn(error);\n    }\n  }\n}\n","import { withDynamicConfigDefaults } from \"./dynamic-config-parameters\";\nimport type {\n  AddPageParams,\n  PublicEvent,\n  MountParams,\n  NetlessApp,\n  DocsEvent,\n  DocsEventOptions,\n  PageStateOptions,\n  UnifiedPageState,\n  DispatchDocsEventResult,\n} from \"@netless/window-manager\";\nimport type {\n  AnimationMode,\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  FloatBarOptions,\n  ApplianceNames,\n} from \"white-web-sdk\";\nimport type { SyncedStore, Storage, Diff, DiffOne } from \"@netless/synced-store\";\n\nimport { autorun, DefaultHotKeys, WhiteWebSdk, contentModeScale, toJS } from \"white-web-sdk\";\nimport { BuiltinApps, ExtendPlugin, 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\";\nimport { loadApplianceMultiPluginModule } from \"@fastboard-internal/appliance-plugin-loader\";\nimport { loadAppInMainViewPluginModule } from \"@fastboard-internal/app-in-mainview-plugin-loader\";\nimport { attachFastboardBridgeRuntime } from \"./bridge-runtime\";\nimport { disposeRuntime, type RuntimeDisposer } from \"./dispose-runtime\";\n\nimport type {\n  AppliancePluginOptions,\n  AppliancePluginInstance,\n  ApplianceNames as ExtendApplianceNames,\n  MemberState as ExtendMemberState,\n  PublicEvent as AppliancePublicEvent,\n  PublicListener as AppliancePublicListener,\n  ApplianceMultiPlugin,\n  ApplianceAdaptor,\n  ShapeType as ExtendShapeType,\n} from \"@netless/appliance-plugin\";\n\nimport type {\n  AppInMainViewOptions,\n  AppInMainViewInstance,\n  PublicEvent as AppInMainViewPublicEvent,\n  PublicListener as AppInMainViewPublicListener,\n  AppId,\n  AppValue,\n  AppInMainViewPlugin,\n} from \"@netless/app-in-mainview-plugin\";\n\nfunction noop() {}\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    readonly appliancePlugin?: AppliancePluginInstance,\n    readonly appInMainViewPlugin?: AppInMainViewInstance\n  ) {}\n\n  protected _destroyed = false;\n  private _destroyTask?: Promise<void>;\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    if (this._destroyed) return noop;\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    if (this._destroyed) return noop;\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    if (this._destroyed) return noop;\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  /** @internal */\n  protected _addApplianceListener<K extends AppliancePublicEvent>(\n    name: K,\n    listener: AppliancePublicListener[K]\n  ) {\n    if (this._destroyed || !this.appliancePlugin) return noop;\n    this.appliancePlugin.addListener(name, listener);\n    return () => this.appliancePlugin?.removeListener(name, listener);\n  }\n\n  /** @internal */\n  protected _addAppInMainViewListener<K extends AppInMainViewPublicEvent>(\n    name: K,\n    listener: AppInMainViewPublicListener[K]\n  ) {\n    if (this._destroyed || !this.appInMainViewPlugin) return noop;\n    this.appInMainViewPlugin.addListener(name, listener);\n    return () => this.appInMainViewPlugin?.removeListener(name, listener);\n  }\n\n  /**\n   * Destroy fastboard (disconnect from the whiteboard room).\n   */\n  public destroy() {\n    if (this._destroyTask) return this._destroyTask;\n    if (this._destroyed) return Promise.resolve();\n    this._destroyed = true;\n    return (this._destroyTask = disposeRuntime([\n      () => this.room.disconnect(),\n      () => this.manager.destroy(),\n      () => this.appInMainViewPlugin?.destroy(),\n      () => this.appliancePlugin?.destroy(),\n    ]));\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  ExtendApplianceNames,\n  ExtendMemberState,\n  PageStateOptions,\n  UnifiedPageState,\n  AppliancePluginOptions,\n  AppliancePluginInstance,\n  ApplianceAdaptor,\n  ExtendShapeType,\n};\n\n/** pencil, eraser, rectangle... */\nexport type Appliance = `${ExtendApplianceNames}`;\n/** triangle, star... */\nexport type Shape = `${ShapeType | ExtendShapeType}`;\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 InsertDocsOptions {\n  /** Renderer for static documents. Dynamic documents always use Slide. @default \"docsViewer\" */\n  readonly staticRenderer?: \"docsViewer\" | \"presentation\";\n}\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/{static,dynamic}Convert */\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    value => {\n      this._assertNotDestroyed();\n      return this.room.setWritable(value);\n    }\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    value => {\n      this._assertNotDestroyed();\n      return this.manager.setMainViewSceneIndex(value);\n    }\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  /** @internal */\n  private _visibleApps: Set<AppId> = new Set();\n  /**\n   * visible Apps, when appInMainViewPlugin is not enabled, it will be empty.\n   */\n  readonly visibleApps = readable<Set<AppId>>(this._visibleApps, set => {\n    if (!this.appInMainViewPlugin) {\n      set(this._visibleApps);\n      return;\n    }\n    const apps = this.appInMainViewPlugin.currentPageVisibleApps;\n    if (apps) {\n      this._visibleApps = apps;\n    }\n    set(this._visibleApps);\n    return this._addAppInMainViewListener(\"appMenuChange\", (apps: Map<AppId, AppValue>) => {\n      this._visibleApps = new Set(\n        [...apps.entries()].filter(([_, { status }]) => status === \"visible\").map(([appId]) => appId)\n      );\n      set(this._visibleApps);\n    });\n  });\n\n  /**\n   * Returns `writable && phase === \"connected\"`.\n   */\n  get canOperate(): boolean {\n    return this.room.isWritable && this.room.phase === \"connected\";\n  }\n\n  /**\n   * Undo a step on main view.\n   */\n  undo() {\n    this._assertNotDestroyed();\n    if (this.appliancePlugin) {\n      this.appliancePlugin.undo();\n      return;\n    }\n    this.manager.undo();\n  }\n\n  /**\n   * Redo a step on main view.\n   */\n  redo() {\n    this._assertNotDestroyed();\n    if (this.appliancePlugin) {\n      this.appliancePlugin.redo();\n      return;\n    }\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: ExtendApplianceNames | Appliance, shape?: ShapeType | ExtendShapeType | 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  /** Extended stroke, polygon, star, text/background and eraser configuration. */\n  setMemberState(state: Partial<ExtendMemberState>) {\n    this._assertNotDestroyed();\n    if (this.appliancePlugin) {\n      this.appliancePlugin.setMemberState(state);\n    } else {\n      this.manager.mainView.setMemberState(state as Partial<MemberState>);\n    }\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    this._assertNotDestroyed();\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    this._assertNotDestroyed();\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    const obj = this.appliancePlugin || this.manager.mainView;\n    obj.insertImage({\n      uuid,\n      centerX,\n      centerY,\n      width,\n      height,\n      locked: false,\n      crossOrigin,\n    });\n    obj.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(\n    filename: string,\n    status: ConversionResponse,\n    options?: InsertDocsOptions\n  ): 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(\n    filename: string,\n    response: ProjectorResponse,\n    options?: InsertDocsOptions\n  ): 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, options?: InsertDocsOptions): Promise<string | undefined>;\n\n  insertDocs(\n    arg1: string | InsertDocsParams,\n    arg2?: ConversionResponse | ProjectorResponse | InsertDocsOptions,\n    arg3?: InsertDocsOptions\n  ) {\n    const response = typeof arg1 === \"string\" ? (arg2 as ConversionResponse | ProjectorResponse) : undefined;\n    const options = typeof arg1 === \"string\" ? arg3 : (arg2 as InsertDocsOptions | undefined);\n    const staticAppKind = options?.staticRenderer === \"presentation\" ? \"Presentation\" : \"DocsViewer\";\n    return this._insertDocs(arg1, response, staticAppKind);\n  }\n\n  private _insertDocs(\n    arg1: string | InsertDocsParams,\n    arg2: ConversionResponse | ProjectorResponse | undefined,\n    staticAppKind: \"DocsViewer\" | \"Presentation\"\n  ) {\n    this._assertNotDestroyed();\n    if (typeof arg1 === \"object\" && \"fileType\" in arg1) {\n      return this._insertDocsImpl(arg1, staticAppKind);\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(\n          { fileType: \"pptx\", scenePath, scenes, title, taskId, url },\n          staticAppKind\n        );\n      } else {\n        return this._insertDocsImpl({ fileType: \"pdf\", scenePath, scenes: scenes1, title }, staticAppKind);\n      }\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 }, staticAppKind);\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      return this._insertDocsImpl({ fileType: \"pptx\", scenePath, taskId, title, url }, staticAppKind);\n    } else {\n      throw new Error(\"Invalid input: not found 'progress', 'prefix' nor 'images'\");\n    }\n  }\n\n  /** @internal */\n  private _insertDocsImpl(\n    { fileType, scenePath, title, scenes, ...attributes }: InsertDocsParams,\n    staticAppKind: \"DocsViewer\" | \"Presentation\"\n  ) {\n    this._assertNotDestroyed();\n    switch (fileType) {\n      case \"pdf\":\n        return this.manager.addApp({\n          kind: staticAppKind,\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  /** Controls mainView/DocsViewer/Presentation/Slide. Pages are one-based. */\n  dispatchDocsEvent(event: DocsEvent, options?: DocsEventOptions): Promise<DispatchDocsEventResult> {\n    this._assertNotDestroyed();\n    return this.manager.dispatchDocsEvent(event, options);\n  }\n\n  getPageState(options?: PageStateOptions): Promise<UnifiedPageState> {\n    this._assertNotDestroyed();\n    return this.manager.getPageState(options);\n  }\n\n  /** Focus commit, not a guarantee that the App has rendered successfully. */\n  focusApp(appId: string) {\n    this._assertNotDestroyed();\n    return this.manager.focusApp(appId);\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  override async destroy() {\n    await super.destroy();\n    this.phase.dispose(\"disconnected\");\n    this.writable.dispose(false);\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  enableAppliancePlugin?: AppliancePluginOptions;\n  /** Runtime callbacks/logger/cursor adapter; functions must not be placed in options.extras. */\n  appliancePluginAdaptor?: Omit<ApplianceAdaptor, \"options\">;\n  enableAppInMainViewPlugin?: true | AppInMainViewOptions;\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  enableAppliancePlugin,\n  appliancePluginAdaptor,\n  enableAppInMainViewPlugin,\n}: FastboardOptions) {\n  const isEnableAppliancePlugin = enableAppliancePlugin !== undefined;\n  if (\n    isEnableAppliancePlugin &&\n    (!enableAppliancePlugin?.cdn?.fullWorkerUrl || !enableAppliancePlugin?.cdn?.subWorkerUrl)\n  ) {\n    throw new Error(\"Appliance Plugin requires fullWorkerUrl and subWorkerUrl from the same package version\");\n  }\n\n  const joinRoomParamsWithPlugin = ensure_official_plugins(joinRoomParams);\n  let _ApplianceMultiPlugin: typeof ApplianceMultiPlugin | undefined;\n  if (isEnableAppliancePlugin) {\n    const { ApplianceMultiPlugin } = await loadApplianceMultiPluginModule();\n    _ApplianceMultiPlugin = ApplianceMultiPlugin;\n    if (joinRoomParamsWithPlugin.invisiblePlugins && _ApplianceMultiPlugin) {\n      joinRoomParamsWithPlugin.invisiblePlugins = [\n        ...joinRoomParamsWithPlugin.invisiblePlugins,\n        _ApplianceMultiPlugin,\n      ];\n    }\n  }\n  let _AppInMainViewPlugin: typeof AppInMainViewPlugin | undefined;\n  if (enableAppInMainViewPlugin && joinRoomParamsWithPlugin.invisiblePlugins) {\n    const { AppInMainViewPlugin } = await loadAppInMainViewPluginModule();\n    _AppInMainViewPlugin = AppInMainViewPlugin;\n    joinRoomParamsWithPlugin.invisiblePlugins = [\n      ...joinRoomParamsWithPlugin.invisiblePlugins,\n      AppInMainViewPlugin,\n    ];\n  }\n\n  const sdk = new WhiteWebSdk({\n    ...sdkConfig,\n    useMobXState: true,\n  });\n\n  let 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    withDynamicConfigDefaults(\n      {\n        floatBar: true,\n        hotKeys,\n        useMultiViews: true,\n        disableNewPencil: false,\n        disableMagixEventDispatchLimit: true,\n      },\n      joinRoomParamsWithPlugin\n    ),\n    callbacks\n  );\n  const disposers: RuntimeDisposer[] = [() => room.disconnect()];\n  try {\n    if (room.useMultiViews === false) {\n      throw new Error(\"Fastboard requires useMultiViews=true\");\n    }\n    const remoteHotKeys = (\n      room as unknown as { dynamicConfig?: { joinRoom?: { hotKeys?: Partial<HotKeys> } } }\n    ).dynamicConfig?.joinRoom?.hotKeys;\n    if (joinRoomParams.hotKeys === undefined && remoteHotKeys !== undefined) hotKeys = remoteHotKeys;\n    const syncedStore = await SyncedStorePlugin.init<TEventData>(room);\n    const manager = await WindowManager.mount(\n      withDynamicConfigDefaults(\n        {\n          cursor: true,\n          ...(isEnableAppliancePlugin ? { supportAppliancePlugin: true } : {}),\n        },\n        { ...managerConfig, room }\n      )\n    );\n    disposers.push(() => manager.destroy());\n    if (isEnableAppliancePlugin && WindowManager.supportAppliancePlugin === false) {\n      throw new Error(\"Appliance Plugin requires supportAppliancePlugin=true\");\n    }\n    attachFastboardBridgeRuntime(manager, {\n      whiteWebSdk: {\n        autorun,\n        toJS,\n      },\n      windowManager: {\n        ExtendPlugin,\n      },\n    });\n    let appInMainViewPluginInstance: AppInMainViewInstance | undefined;\n    if (enableAppInMainViewPlugin && _AppInMainViewPlugin) {\n      appInMainViewPluginInstance = await _AppInMainViewPlugin.getInstance(\n        manager,\n        enableAppInMainViewPlugin === true ? undefined : enableAppInMainViewPlugin\n      );\n      disposers.push(() => appInMainViewPluginInstance?.destroy());\n    }\n    let appliancePluginInstance: AppliancePluginInstance | undefined;\n    if (isEnableAppliancePlugin && enableAppliancePlugin && _ApplianceMultiPlugin) {\n      appliancePluginInstance = await _ApplianceMultiPlugin.getInstance(manager, {\n        ...appliancePluginAdaptor,\n        options: enableAppliancePlugin,\n      });\n      disposers.push(() => appliancePluginInstance?.destroy());\n    }\n    if (room.isWritable && ((room as any).floatBarOptions as FloatBarOptions)?.colors.length) {\n      const colors = (room as any).floatBarOptions?.colors;\n      const length = colors.length;\n      const index = room.observerId % length;\n      const color = colors[index];\n      manager.mainView.setMemberState({\n        strokeColor: color,\n        textColor: color,\n      });\n    }\n    manager.mainView.setCameraBound({\n      minContentMode: contentModeScale(0.3),\n      maxContentMode: contentModeScale(3),\n    });\n\n    return new FastboardApp<TEventData>(\n      sdk,\n      room,\n      manager,\n      hotKeys,\n      syncedStore,\n      appliancePluginInstance,\n      appInMainViewPluginInstance\n    );\n  } catch (error) {\n    await disposeRuntime(disposers);\n    throw error;\n  }\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 { autorun, toJS, WhiteWebSdk } from \"white-web-sdk\";\nimport { ExtendPlugin, 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\";\nimport { loadApplianceMultiPluginModule } from \"@fastboard-internal/appliance-plugin-loader\";\nimport { loadAppInMainViewPluginModule } from \"@fastboard-internal/app-in-mainview-plugin-loader\";\nimport { attachFastboardBridgeRuntime } from \"./bridge-runtime\";\nimport { disposeRuntime, type RuntimeDisposer } from \"./dispose-runtime\";\nimport type {\n  AppliancePluginOptions,\n  AppliancePluginInstance,\n  ApplianceMultiPlugin,\n  ApplianceAdaptor,\n} from \"@netless/appliance-plugin\";\nimport type {\n  AppInMainViewPlugin,\n  AppInMainViewOptions,\n  AppInMainViewInstance,\n} from \"@netless/app-in-mainview-plugin\";\nfunction noop() {}\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    readonly appliancePlugin?: AppliancePluginInstance,\n    readonly appInMainViewPlugin?: AppInMainViewInstance\n  ) {}\n\n  protected _destroyed = false;\n  private _destroyTask?: Promise<void>;\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    if (this._destroyed) return noop;\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    if (this._destroyed) return noop;\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    if (this._destroyed) return noop;\n    this.manager.mainView.callbacks.on(name, listener);\n    return () => this.manager.mainView.callbacks.off(name, listener);\n  }\n\n  public destroy() {\n    if (this._destroyTask) return this._destroyTask;\n    if (this._destroyed) return Promise.resolve();\n    this._destroyed = true;\n    return (this._destroyTask = disposeRuntime([\n      () => this.player.callbacks.off(),\n      () => this.manager.destroy(),\n      () => this.appInMainViewPlugin?.destroy(),\n      () => this.appliancePlugin?.destroy(),\n      () => this.player.stop(),\n    ]));\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    value => {\n      this._assertNotDestroyed();\n      return this.player.seekToProgressTime(value);\n    }\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._assertNotDestroyed();\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  enableAppliancePlugin?: AppliancePluginOptions;\n  appliancePluginAdaptor?: Omit<ApplianceAdaptor, \"options\">;\n  enableAppInMainViewPlugin?: true | AppInMainViewOptions;\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  enableAppliancePlugin,\n  appliancePluginAdaptor,\n  enableAppInMainViewPlugin,\n}: FastboardReplayOptions) {\n  const isEnableAppliancePlugin = enableAppliancePlugin !== undefined;\n  if (\n    isEnableAppliancePlugin &&\n    (!enableAppliancePlugin?.cdn?.fullWorkerUrl || !enableAppliancePlugin?.cdn?.subWorkerUrl)\n  ) {\n    throw new Error(\"Appliance Plugin requires fullWorkerUrl and subWorkerUrl from the same package version\");\n  }\n\n  const replayRoomParamsWithPlugin = ensure_official_plugins(replayRoomParams);\n  let _ApplianceMultiPlugin: typeof ApplianceMultiPlugin | undefined;\n  if (isEnableAppliancePlugin) {\n    const { ApplianceMultiPlugin } = await loadApplianceMultiPluginModule();\n    _ApplianceMultiPlugin = ApplianceMultiPlugin;\n    if (replayRoomParamsWithPlugin.invisiblePlugins && _ApplianceMultiPlugin) {\n      replayRoomParamsWithPlugin.invisiblePlugins = [\n        ...replayRoomParamsWithPlugin.invisiblePlugins,\n        _ApplianceMultiPlugin,\n      ];\n    }\n  }\n  let _AppInMainViewPlugin: typeof AppInMainViewPlugin | undefined;\n  if (enableAppInMainViewPlugin && replayRoomParamsWithPlugin.invisiblePlugins) {\n    const { AppInMainViewPlugin } = await loadAppInMainViewPluginModule();\n    _AppInMainViewPlugin = AppInMainViewPlugin;\n    replayRoomParamsWithPlugin.invisiblePlugins = [\n      ...replayRoomParamsWithPlugin.invisiblePlugins,\n      AppInMainViewPlugin,\n    ];\n  }\n\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      ...replayRoomParamsWithPlugin,\n      useMultiViews: true,\n    },\n    callbacks\n  );\n  const disposers: RuntimeDisposer[] = [() => player.callbacks.off(), () => player.stop()];\n  try {\n    const syncedStore = await SyncedStorePlugin.init<TEventData>(player);\n\n    const managerPromise = WindowManager.mount({\n      cursor: true,\n      ...managerConfig,\n      ...(isEnableAppliancePlugin ? { supportAppliancePlugin: true } : {}),\n      room: player,\n    });\n    player.play();\n    const manager = await managerPromise;\n    disposers.push(() => manager.destroy());\n    attachFastboardBridgeRuntime(manager, {\n      whiteWebSdk: {\n        autorun,\n        toJS,\n      },\n      windowManager: {\n        ExtendPlugin,\n      },\n    });\n    let appliancePluginInstance: AppliancePluginInstance | undefined;\n    if (isEnableAppliancePlugin && enableAppliancePlugin && _ApplianceMultiPlugin) {\n      appliancePluginInstance = await _ApplianceMultiPlugin.getInstance(manager, {\n        ...appliancePluginAdaptor,\n        options: enableAppliancePlugin,\n      });\n      disposers.push(() => appliancePluginInstance?.destroy());\n    }\n    let appInMainViewPluginInstance: AppInMainViewInstance | undefined;\n    if (enableAppInMainViewPlugin && _AppInMainViewPlugin) {\n      appInMainViewPluginInstance = await _AppInMainViewPlugin.getInstance(\n        manager,\n        enableAppInMainViewPlugin === true ? undefined : enableAppInMainViewPlugin\n      );\n      disposers.push(() => appInMainViewPluginInstance?.destroy());\n    }\n    player.pause();\n    await player.seekToProgressTime(0);\n\n    return new FastboardPlayer<TEventData>(\n      sdk,\n      player,\n      manager,\n      syncedStore,\n      appliancePluginInstance,\n      appInMainViewPluginInstance\n    );\n  } catch (error) {\n    await disposeRuntime(disposers);\n    throw error;\n  }\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: ViewCallbacks[K]\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 { FastboardApp, WindowManager } from \"../impl\";\nimport type { DocsEvent, DocsEventOptions, DispatchDocsEventResult } from \"@netless/window-manager\";\n\nexport type {\n  DocsEvent,\n  DocsEventOptions,\n  DispatchDocsEventFailureReason,\n  DispatchDocsEventResult,\n} from \"@netless/window-manager\";\n\ntype DocsEventManager = WindowManager & {\n  dispatchDocsEvent?: (event: DocsEvent, options?: DocsEventOptions) => Promise<DispatchDocsEventResult>;\n};\n\n/**\n * Send a page or scale command to mainView, DocsViewer, Presentation, or Slide.\n * This is a wrapper around `WindowManager.dispatchDocsEvent()`.\n *\n * The Promise resolves to a structured acceptance result. Observe\n * `unifiedPageStateChange` for the actual page or relative scale.\n *\n * @example\n * ```js\n * // send \"next page\" to the focused app\n * await dispatchDocsEvent(fastboard, \"nextPage\")\n *\n * // send \"prev page\" to a concrete app\n * await dispatchDocsEvent(fastboard, \"prevPage\", { target: \"Slide-1a2b3c4d\" })\n * ```\n */\nexport function dispatchDocsEvent(\n  fastboard: FastboardApp | WindowManager,\n  event: DocsEvent,\n  options: DocsEventOptions = {}\n): Promise<DispatchDocsEventResult> {\n  const manager = \"manager\" in fastboard ? fastboard.manager : fastboard;\n  const dispatchDocsEvent = (manager as DocsEventManager).dispatchDocsEvent;\n  if (!dispatchDocsEvent) {\n    console.warn(\"window manager does not support dispatchDocsEvent\");\n    return Promise.resolve({\n      accepted: false,\n      reason: \"targetNotSupported\",\n      message: \"window manager does not support dispatchDocsEvent\",\n    });\n  }\n  return dispatchDocsEvent.call(manager, event, options);\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 as any,\n  addHooks,\n});\n"],"names":["WindowManager","noop","apps","_a","_b","_c","_d","SyncedStorePlugin","WhiteWebSdk","autorun","toJS","ExtendPlugin","dispatchDocsEvent"],"mappings":"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"}