@netless/fastboard-core 0.3.13 → 0.3.14
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.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -1
- package/dist/index.mjs.map +1 -1
- package/dist/lite.d.ts +4 -0
- package/dist/lite.js +7 -1
- package/dist/lite.js.map +1 -1
- package/dist/lite.mjs +7 -1
- package/dist/lite.mjs.map +1 -1
- package/package.json +1 -1
- package/src/impl/FastboardApp.ts +7 -0
package/dist/index.js
CHANGED
|
@@ -241,7 +241,7 @@ for (const kind in DefaultApps) {
|
|
|
241
241
|
windowManager.WindowManager.register(__spreadValues({ kind }, options));
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
var version = "0.3.
|
|
244
|
+
var version = "0.3.14";
|
|
245
245
|
if (typeof window !== "undefined") {
|
|
246
246
|
let str = window.__netlessUA || "";
|
|
247
247
|
str += ` ${"@netless/fastboard"}@${version} `;
|
|
@@ -404,6 +404,12 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
404
404
|
this._assertNotDestroyed();
|
|
405
405
|
this.manager.bindCollectorContainer(container);
|
|
406
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Returns `writable && phase === "connected"`.
|
|
409
|
+
*/
|
|
410
|
+
get canOperate() {
|
|
411
|
+
return this.room.isWritable && this.room.phase === "connected";
|
|
412
|
+
}
|
|
407
413
|
/**
|
|
408
414
|
* Undo a step on main view.
|
|
409
415
|
*/
|
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/lite.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}\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 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","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"],"names":["WindowManager","SyncedStorePlugin","BuiltinApps","WhiteWebSdk","DefaultHotKeys","syncedStore","contentModeScale","SlideApp","addHooks"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,IAAO,GAAA;AAAC,CAAA;AAEjB,SAAS,cAAA,CAAe,GAAY,CAAY,EAAA;AAC9C,EAAO,OAAA,CAAA,IAAK,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA,KAAM,CAAM,IAAA,CAAA,IAAK,OAAO,CAAA,KAAM,QAAa,IAAA,OAAO,CAAM,KAAA,UAAA,CAAA;AACnF,CAAA;AAEO,SAAS,QAAA,CAAY,KAAU,EAAA,KAAA,GAA8B,IAAmB,EAAA;AACrF,EAAI,IAAA,IAAA,CAAA;AACJ,EAAM,MAAA,WAAA,uBAAkB,GAAmB,EAAA,CAAA;AAC3C,EAAA,SAAS,IAAI,SAAc,EAAA;AACzB,IAAI,IAAA,cAAA,CAAe,KAAO,EAAA,SAAS,CAAG,EAAA;AACpC,MAAQ,KAAA,GAAA,SAAA,CAAA;AACR,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,KAAA,MAAW,OAAO,WAAa,EAAA;AAC7B,UAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAAA,SACX;AAAA,OACF;AAAA,KACF;AAAA,GACF;AACA,EAAA,SAAS,UAAU,GAAoB,EAAA;AACrC,IAAA,WAAA,CAAY,IAAI,GAAG,CAAA,CAAA;AACnB,IAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,MAAO,IAAA,GAAA,KAAA,CAAM,GAAG,CAAK,IAAA,IAAA,CAAA;AAAA,KACvB;AACA,IAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AACT,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,OAAO,GAAG,CAAA,CAAA;AACtB,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAA,IAAA,IAAQ,IAAK,EAAA,CAAA;AACb,QAAO,IAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAA,SAAS,SAAS,GAAoB,EAAA;AACpC,IAAA,WAAA,CAAY,IAAI,GAAG,CAAA,CAAA;AACnB,IAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,MAAO,IAAA,GAAA,KAAA,CAAM,GAAG,CAAK,IAAA,IAAA,CAAA;AAAA,KACvB;AACA,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,OAAO,GAAG,CAAA,CAAA;AACtB,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAA,IAAA,IAAQ,IAAK,EAAA,CAAA;AACb,QAAO,IAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAO,OAAA;AAAA,IACL,IAAI,KAAQ,GAAA;AACV,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAO,IAAA,GAAA,KAAA,CAAM,GAAG,CAAK,IAAA,IAAA,CAAA;AACrB,QAAK,IAAA,EAAA,CAAA;AACL,QAAO,IAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEO,SAAS,QAAY,CAAA,KAAA,EAAU,KAA8B,GAAA,IAAA,EAAM,GAAiC,EAAA;AACzG,EAAM,MAAA,QAAA,GAAW,QAAS,CAAA,KAAA,EAAO,KAAK,CAAA,CAAA;AACtC,EAAO,OAAA;AAAA,IACL,IAAI,KAAQ,GAAA;AACV,MAAA,OAAO,QAAS,CAAA,KAAA,CAAA;AAAA,KAClB;AAAA,IACA,WAAW,QAAS,CAAA,SAAA;AAAA,IACpB,UAAU,QAAS,CAAA,QAAA;AAAA,IACnB,GAAA;AAAA,IACA,OAAO,EAAgB,EAAA;AACrB,MAAI,GAAA,CAAA,EAAA,CAAG,QAAS,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AACF,CAAA;;;ACzFO,SAAS,YAAA,CAAa,GAAa,EAAA,QAAA,EAAgB,WAAgC,EAAA;AACxF,EAAO,OAAA,IAAI,QAAc,CAAW,OAAA,KAAA;AAClC,IAAM,MAAA,GAAA,GAAM,IAAI,KAAM,EAAA,CAAA;AACtB,IAAiB,gBAAA,CAAA,GAAA,EAAK,KAAK,WAAW,CAAA,CAAA;AACtC,IAAI,GAAA,CAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC9B,IAAI,GAAA,CAAA,OAAA,GAAU,MAAM,OAAA,CAAQ,QAAQ,CAAA,CAAA;AACpC,IAAA,GAAA,CAAI,GAAM,GAAA,GAAA,CAAA;AAAA,GACX,CAAA,CAAA;AACH,CAAA;AAGA,SAAS,gBAAA,CAAiB,KAAyB,EAAA,GAAA,EAAa,WAAsC,EAAA;AACpG,EAAA,IAAI,gBAAgB,KAAa,CAAA,IAAA,CAAC,GAAI,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AACzD,IAAM,KAAA,CAAA,WAAA,GAAc,qBAAqB,GAAG,CAAA,CAAA;AAAA,GAC9C,MAAA,IAAW,gBAAgB,KAAO,EAAA;AAChC,IAAA,KAAA,CAAM,WAAc,GAAA,OAAO,WAAgB,KAAA,QAAA,GAAW,WAAc,GAAA,WAAA,CAAA;AAAA,GACtE;AACF,CAAA;AAEA,SAAS,qBAAqB,GAAqB,EAAA;AACjD,EAAI,IAAA,GAAA,CAAI,WAAW,OAAO,CAAA,IAAK,OAAO,MAAW,KAAA,WAAA,IAAe,CAAC,MAAA,CAAO,QAAU,EAAA;AAChF,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,MAAM,MAAO,CAAA,QAAA,CAAA;AACnB,EAAI,IAAA;AACF,IAAA,MAAM,SAAY,GAAA,IAAI,GAAI,CAAA,GAAA,EAAK,SAAS,OAAO,CAAA,CAAA;AAC/C,IACE,IAAA,SAAA,CAAU,QAAa,KAAA,GAAA,CAAI,QAC3B,IAAA,SAAA,CAAU,IAAS,KAAA,GAAA,CAAI,IACvB,IAAA,SAAA,CAAU,QAAa,KAAA,GAAA,CAAI,QAC3B,EAAA;AACA,MAAO,OAAA,WAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,EAAA,CAAA;AAAA,GACD,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,SAAS,gBAAgB,MAA2B,EAAA;AACzD,EAAA,MAAM,cAAiC,EAAC,CAAA;AACxC,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,EAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AAGV,EAAM,MAAA,QAAA,GAAW,WAAC,kEAA2D,CAAA,CAAA;AAE7E,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAI,EAAA,IAAK,MAAQ,EAAA;AAElC,IAAY,WAAA,CAAA,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAA;AAEzB,IAAA,IAAI,CAAC,GAAO,IAAA,CAAC,GAAI,CAAA,GAAA,CAAI,WAAW,KAAK,CAAA;AAAG,MAAA,SAAA;AAExC,IAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,IAAK,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACnC,IAAI,IAAA,CAAC,KAAS,IAAA,CAAC,KAAM,CAAA,MAAA;AAAQ,MAAA,SAAA;AAE7B,IAAA,MAAA,GAAS,MAAM,MAAO,CAAA,MAAA,CAAA;AACtB,IAAM,GAAA,GAAA,CAAA,KAAA,EAAQ,KAAM,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA,CAAA;AACjC,IAAA,MAAA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,WAAa,EAAA,MAAA,EAAQ,GAAI,EAAA,CAAA;AAC5C,CAAA;AAEO,SAAS,oBAAA,CAAqB,GAAkB,CAA4B,EAAA;AACjF,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA;AAAA,IAClB,GAAK,EAAA;AAAA,MACH,KAAK,CAAE,CAAA,iBAAA;AAAA,MACP,OAAO,CAAE,CAAA,KAAA;AAAA,MACT,QAAQ,CAAE,CAAA,MAAA;AAAA,MACV,YAAY,CAAE,CAAA,OAAA;AAAA,KAChB;AAAA,GACF,CAAA;AACF,CAAA;;;AC3EA,IAAM,IAAO,GAAA,gEAAA,CAAA;AACb,IAAM,QAAW,GAAA,EAAA,CAAA;AACjB,IAAM,MAAS,GAAA,EAAA,CAAA;AACf,IAAM,eAAA,yBAAwC,MAAM,CAAA,CAAA;AAE7C,SAAS,MAAS,GAAA;AACvB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,IAAA,eAAA,CAAgB,CAAC,CAAI,GAAA,IAAA,CAAK,OAAO,IAAK,CAAA,MAAA,KAAW,QAAQ,CAAA,CAAA;AAAA,GAC3D;AACA,EAAO,OAAA,eAAA,CAAgB,KAAK,EAAE,CAAA,CAAA;AAChC,CAAA;;;ACXA,IAAM,QAAW,GAAA;AAAA,EACf,kBACE,EAAA,gGAAA;AACJ,CAAA,CAAA;AACA,IAAM,MAAA,uBAAa,GAAY,EAAA,CAAA;AAExB,SAAS,KAAK,EAA2B,EAAA;AAC9C,EAAI,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAAG,IAAA,OAAA;AACpB,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA,CAAA;AACb,EAAQ,OAAA,CAAA,IAAA,CAAK,QAAS,CAAA,EAAE,CAAC,CAAA,CAAA;AAC3B,CAAA;ACLO,SAAS,wBAAqE,QAAgB,EAAA;AACnG,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,QAAS,CAAA,gBAAA,IAAoB,EAAE,CAAA,CAAA;AACvD,EAAA,OAAA,CAAQ,IAAIA,2BAAa,CAAA,CAAA;AACzB,EAAA,OAAA,CAAQ,IAAIC,6BAAiB,CAAA,CAAA;AAC7B,EAAS,QAAA,CAAA,gBAAA,GAAmB,CAAC,GAAG,OAAO,CAAA,CAAA;AACvC,EAAO,OAAA,QAAA,CAAA;AACT,CAAA;AAEO,SAAS,qBAAqB,MAA0C,EAAA;AAC7E,EAAA,OAAO,MAAW,KAAA,OAAA,GAAU,SAAY,GAAA,MAAA,KAAW,WAAW,QAAW,GAAA,MAAA,CAAA;AAC3E,CAAA;ACbO,IAAM,QAAWD,GAAAA,2BAAAA,CAAc,QAAS,CAAA,IAAA,CAAKA,2BAAa,EAAA;AAMjE,IAAM,WAA0B,GAAA;AAAA,EAC9B,MAAQ,EAAA;AAAA,IACN,GAAK,EAAA,sGAAA;AAAA,GACP;AAAA,EACA,SAAW,EAAA;AAAA,IACT,GAAK,EAAA,iGAAA;AAAA,GACP;AAAA,EACA,QAAU,EAAA;AAAA,IACR,GAAK,EAAA,gGAAA;AAAA,IACL,UAAY,EAAA;AAAA,MACV,aAAe,EAAA,yEAAA;AAAA,KACjB;AAAA,GACF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,GAAK,EAAA,qGAAA;AAAA,GACP;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAK,EAAA,4FAAA;AAAA,GACP;AACF,CAAA,CAAA;AAEA,KAAA,MAAW,QAAQ,WAAa,EAAA;AAC9B,EAAA,IAAI,OAAO,SAAU,CAAA,cAAA,CAAe,IAAK,CAAA,WAAA,EAAa,IAAI,CAAG,EAAA;AAC3D,IAAM,MAAA,OAAA,GAAU,YAAY,IAAI,CAAA,CAAA;AAChC,IAAAA,2BAAc,CAAA,QAAA,CAAS,cAAE,CAAA,EAAA,IAAA,EAAA,EAAS,OAAS,CAAA,CAAA,CAAA;AAAA,GAC7C;AACF,CAAA;AAIO,IAAM,OAAU,GAAA,SAAA;AAEvB,IAAI,OAAO,WAAW,WAAa,EAAA;AACjC,EAAI,IAAA,GAAA,GAAO,OAAoC,WAAe,IAAA,EAAA,CAAA;AAC9D,EAAO,GAAA,IAAA,CAAA,CAAA,EAAI,oBAAQ,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAA,CAAA;AAC9B,EAAC,OAAoC,WAAc,GAAA,GAAA,CAAA;AACrD,CAAA;;;ACLA,IAAM,mBAAN,MAAqE;AAAA,EAC5D,WACI,CAAA,GAAA,EACA,IACA,EAAA,OAAA,EACA,SACA,WACT,EAAA;AALS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA,CAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAGX,IAAA,aAAA,CAAA,IAAA,EAAU,YAAa,EAAA,KAAA,CAAA,CAAA;AAAA,GAFpB;AAAA;AAAA,EAIO,mBAAsB,GAAA;AAC9B,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAM,MAAA,IAAI,MAAM,iCAAiC,CAAA,CAAA;AAAA,KACnD;AAAA,GACF;AAAA;AAAA,EAGU,gBAAA,CAAgD,MAAS,QAA4B,EAAA;AAC7F,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,IAAK,CAAA,SAAA,CAAU,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACrC,IAAA,OAAO,MAAM,IAAK,CAAA,IAAA,CAAK,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACrD;AAAA;AAAA,EAGU,mBAAA,CACR,MACA,QACA,EAAA;AACA,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACtC,IAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACtD;AAAA;AAAA,EAGU,oBAAA,CAAoD,MAAS,QAA4B,EAAA;AACjG,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AAEzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,SAAU,CAAA,EAAA,CAAG,MAAM,QAAQ,CAAA,CAAA;AACjD,IAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,SAAS,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACjE;AAAA;AAAA;AAAA;AAAA,EAKO,OAAU,GAAA;AACf,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,QAAQ,OAAQ,EAAA,CAAA;AACrB,IAAO,OAAA,IAAA,CAAK,KAAK,UAAW,EAAA,CAAA;AAAA,GAC9B;AACF,CAAA,CAAA;AAsGa,IAAA,YAAA,GAAN,cAAyE,gBAA6B,CAAA;AAAA,EAAtG,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAoBL;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,UAAW,EAAA,QAAA;AAAA,MAClB,KAAK,IAAK,CAAA,UAAA;AAAA,MACV,CAAO,GAAA,KAAA;AACL,QAAI,GAAA,CAAA,IAAA,CAAK,KAAK,UAAU,CAAA,CAAA;AACxB,QAAO,OAAA,IAAA,CAAK,iBAAiB,yBAA2B,EAAA,MAAM,IAAI,IAAK,CAAA,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA;AAAA,OACzF;AAAA,MACA,IAAK,CAAA,IAAA,CAAK,WAAY,CAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,KACtC,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,OAAQ,EAAA,QAAA,CAAoB,IAAK,CAAA,IAAA,CAAK,OAAO,CAAO,GAAA,KAAA;AAC3D,MAAI,GAAA,CAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AACnB,MAAO,OAAA,IAAA,CAAK,gBAAiB,CAAA,gBAAA,EAAkB,GAAG,CAAA,CAAA;AAAA,KACnD,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,UAAW,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,UAAU,CAAO,GAAA,KAAA;AACzD,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA,CAAA;AACzB,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,gBAAA,EAAkB,GAAG,CAAA,CAAA;AAAA,KACtD,CAAA,CAAA,CAAA;AAMD;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,YAAa,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,SAAS,CAAO,GAAA,KAAA;AAC1D,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,OAAO,CAAA,CAAA;AACxB,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,eAAA,EAAiB,GAAG,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,cAAe,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,cAAc,CAAO,GAAA,KAAA;AACjE,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,YAAY,CAAA,CAAA;AAC7B,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,oBAAA,EAAsB,GAAG,CAAA,CAAA;AAAA,KAC1D,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,cAAe,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,cAAc,CAAO,GAAA,KAAA;AACjE,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,YAAY,CAAA,CAAA;AAC7B,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,oBAAA,EAAsB,GAAG,CAAA,CAAA;AAAA,KAC1D,CAAA,CAAA,CAAA;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,QAAS,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,aAAa,CAAO,GAAA,KAAA;AAC1D,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,WAAW,CAAA,CAAA;AAC5B,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,mBAAA,EAAqB,GAAG,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA,CAAA;AAOD;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,eAAc,QAAS,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,aAAa,CAAO,GAAA,KAAA;AAClE,MAAI,GAAA,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,WAAW,CAAA,CAAA;AAC/B,MAAO,OAAA,IAAA,CAAK,gBAAiB,CAAA,oBAAA,EAAsB,CAAC,EAAE,WAAa,EAAA,CAAA,EAAQ,KAAA,CAAA,IAAK,GAAI,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,KACvF,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,YAAa,EAAA,QAAA;AAAA,MACpB,KAAK,OAAQ,CAAA,kBAAA;AAAA,MACb,CAAO,GAAA,KAAA;AACL,QAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,kBAAkB,CAAA,CAAA;AACnC,QAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,0BAAA,EAA4B,GAAG,CAAA,CAAA;AAAA,OACjE;AAAA,MACA,IAAK,CAAA,OAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,KACtD,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,aAAc,EAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,sBAAsB,CAAO,GAAA,KAAA;AACxE,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,oBAAoB,CAAA,CAAA;AACrC,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,4BAAA,EAA8B,GAAG,CAAA,CAAA;AAAA,KAClE,CAAA,CAAA,CAAA;AAGD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,eAA0B,EAAC,CAAA,CAAA;AAInC;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,YAAa,EAAA,QAAA;AAAA,MAAqB,EAAC;AAAA,MAAG,CAAA,GAAA,KAC7C,KAAK,mBAAoB,CAAA,SAAA,EAAW,CAAC,EAAE,IAAA,EAAM,MAAQ,EAAA,MAAA,EAAa,KAAA;AAChE,QAAK,IAAA,CAAA,WAAA,CAAY,IAAI,CAAI,GAAA,EAAE,QAAQ,oBAAqB,CAAA,MAAM,GAAG,MAAO,EAAA,CAAA;AACxE,QAAA,GAAA,CAAI,KAAK,WAAW,CAAA,CAAA;AAAA,OACrB,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA,EApHA,cAAc,SAAwB,EAAA;AACpC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,cAAc,SAAS,CAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAAwB,EAAA;AACpC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,uBAAuB,SAAS,CAAA,CAAA;AAAA,GAC/C;AAAA;AAAA;AAAA;AAAA,EA8GA,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,QAAQ,IAAK,EAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,QAAQ,IAAK,EAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAyE,EAAA;AAClF,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,WAAW,MAAM,CAAA,CAAA;AAAA,GAChC;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,SAA0D,EAAA;AAC5E,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,oBAAoB,SAAS,CAAA,CAAA;AAAA,GAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAoB,GAAA;AAClB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,QAAQ,iBAAkB,EAAA,CAAA;AAAA,GACjC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,WAAuC,KAA2B,EAAA;AAC7E,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,SAAS,cAAe,CAAA;AAAA,MACnC,oBAAsB,EAAA,SAAA;AAAA,MACtB,SAAW,EAAA,KAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,WAAqB,EAAA;AAClC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,cAAe,CAAA,EAAE,aAAa,CAAA,CAAA;AAAA,GACtD;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,WAAoB,EAAA;AACjC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,cAAe,CAAA,EAAE,aAAa,CAAA,CAAA;AAAA,GACtD;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,QAAkB,EAAA;AAC5B,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,cAAe,CAAA,EAAE,UAAU,CAAA,CAAA;AAAA,GACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,SAAkB,EAAA;AAC7B,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,cAAe,CAAA,EAAE,WAAW,CAAA,CAAA;AAAA,GACpD;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,KAAiB,EAAA;AAChC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,QAAS,CAAA,cAAA,CAAe,EAAE,UAAA,EAAY,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,CAAC,IAAK,CAAA,WAAA,CAAY,KAAM,CAAA,UAAA,EAAY,CAAA,CAAA;AAAA,GAClG;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,IAAc,EAAA;AAChC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,QAAQ,QAAS,CAAA,cAAA,CAAe,EAAE,gBAAA,EAAkB,MAAM,CAAA,CAAA;AAAA,GACjE;AAAA;AAAA;AAAA;AAAA,EAKA,QAAW,GAAA;AACT,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,QAAS,EAAA,CAAA;AAAA,GAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAW,GAAA;AACT,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,QAAS,EAAA,CAAA;AAAA,GAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,KAAe,EAAA;AACtB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,MAAwB,EAAA;AAC9B,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,KAAgB,EAAA;AACzB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAY,CAAA,GAAA,EAAa,WAAgC,EAAA;AAC7D,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAM,MAAA,IAAA,CAAK,QAAQ,sBAAuB,EAAA,CAAA;AAE1C,IAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAA;AACpC,IAAA,MAAM,aAAgB,GAAA;AAAA,MACpB,KAAA,EAAA,CAAO,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,WAAA,KAAe,MAAO,CAAA,UAAA;AAAA,MACzC,MAAA,EAAA,CAAQ,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,YAAA,KAAgB,MAAO,CAAA,WAAA;AAAA,KAC7C,CAAA;AAGA,IAAM,MAAA,QAAA,GAAW,cAAc,KAAQ,GAAA,GAAA,CAAA;AACvC,IAAI,IAAA,EAAE,OAAO,MAAO,EAAA,GAAI,MAAM,YAAa,CAAA,GAAA,EAAK,eAAe,WAAW,CAAA,CAAA;AAC1E,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,GAAI,CAAA,QAAA,GAAW,OAAO,CAAC,CAAA,CAAA;AAC1C,IAAA,MAAM,OAAO,MAAO,EAAA,CAAA;AACpB,IAAA,MAAM,EAAE,OAAA,EAAS,OAAQ,EAAA,GAAI,KAAK,OAAQ,CAAA,MAAA,CAAA;AAC1C,IAAS,KAAA,IAAA,KAAA,CAAA;AACT,IAAU,MAAA,IAAA,KAAA,CAAA;AACV,IAAK,IAAA,CAAA,OAAA,CAAQ,SAAS,WAAY,CAAA;AAAA,MAChC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAQ,EAAA,KAAA;AAAA,MACR,WAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,mBAAoB,CAAA,IAAA,EAAM,GAAG,CAAA,CAAA;AAGnD,IAAS,KAAA,IAAA,GAAA,CAAA;AACT,IAAU,MAAA,IAAA,GAAA,CAAA;AACV,IAAM,MAAA,OAAA,GAAU,UAAU,KAAQ,GAAA,CAAA,CAAA;AAClC,IAAM,MAAA,OAAA,GAAU,UAAU,MAAS,GAAA,CAAA,CAAA;AACnC,IAAA,IAAA,CAAK,QAAQ,mBAAoB,CAAA,EAAE,SAAS,OAAS,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,GACtE;AAAA,EA0BA,UAAA,CAAW,MAAiC,IAA+C,EAAA;AACzF,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAI,OAAO,IAAA,KAAS,QAAY,IAAA,UAAA,IAAc,IAAM,EAAA;AAClD,MAAO,OAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA,CAAA;AAAA,KACvB,MAAA,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,UAAY,EAAA;AAC7C,MAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA,CAAA;AAAA,KAChE,MAAA,IAAW,IAAQ,IAAA,UAAA,IAAc,IAAM,EAAA;AACrC,MAAA,MAAM,KAAQ,GAAA,IAAA,CAAA;AACd,MAAA,MAAM,YAAY,CAAI,CAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAA;AAC3C,MAAA,MAAM,OAAU,GAAA,IAAA,CAAK,QAAS,CAAA,iBAAA,CAAkB,IAAI,oBAAoB,CAAA,CAAA;AACxE,MAAA,MAAM,EAAE,MAAQ,EAAA,MAAA,EAAQ,GAAI,EAAA,GAAI,gBAAgB,OAAO,CAAA,CAAA;AACvD,MAAA,IAAI,UAAU,GAAK,EAAA;AACjB,QAAO,OAAA,IAAA,CAAK,eAAgB,CAAA,EAAE,QAAU,EAAA,MAAA,EAAQ,WAAW,MAAQ,EAAA,KAAA,EAAO,MAAQ,EAAA,GAAA,EAAK,CAAA,CAAA;AAAA,OAClF,MAAA;AACL,QAAO,OAAA,IAAA,CAAK,gBAAgB,EAAE,QAAA,EAAU,OAAO,SAAW,EAAA,MAAA,EAAQ,OAAS,EAAA,KAAA,EAAO,CAAA,CAAA;AAAA,OACpF;AAAA,KACF,MAAA,IAAW,IAAQ,IAAA,IAAA,CAAK,MAAQ,EAAA;AAC9B,MAAA,MAAM,KAAQ,GAAA,IAAA,CAAA;AACd,MAAA,MAAM,YAAY,CAAI,CAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAA;AAC3C,MAAA,MAAM,SAAS,IAAK,CAAA,IAAA,CAAA;AACpB,MAAA,MAAM,MAAM,IAAK,CAAA,MAAA,CAAA;AACjB,MAAK,IAAA,CAAA,eAAA,CAAgB,EAAE,QAAU,EAAA,MAAA,EAAQ,WAAW,MAAQ,EAAA,KAAA,EAAO,KAAK,CAAA,CAAA;AAAA,KAC1E,MAAA,IAAW,IAAQ,IAAA,IAAA,CAAK,MAAQ,EAAA;AAC9B,MAAA,MAAM,KAAQ,GAAA,IAAA,CAAA;AACd,MAAA,MAAM,YAAY,CAAI,CAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAA;AAC3C,MAAA,MAAM,SAA4B,EAAC,CAAA;AACnC,MAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,MAAQ,EAAA;AAC9B,QAAA,MAAM,EAAE,KAAO,EAAA,MAAA,EAAQ,KAAQ,GAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAC/C,QAAO,MAAA,CAAA,IAAA,CAAK,EAAE,IAAA,EAAM,GAAK,EAAA,EAAE,OAAO,MAAQ,EAAA,GAAA,EAAK,GAAI,EAAA,EAAG,CAAA,CAAA;AAAA,OACxD;AACA,MAAO,OAAA,IAAA,CAAK,gBAAgB,EAAE,QAAA,EAAU,OAAO,SAAW,EAAA,MAAA,EAAQ,OAAO,CAAA,CAAA;AAAA,KACpE,MAAA;AACL,MAAM,MAAA,IAAI,MAAM,4DAA4D,CAAA,CAAA;AAAA,KAC9E;AAAA,GACF;AAAA;AAAA,EAGQ,gBAAgB,EAAyE,EAAA;AAAzE,IAAE,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,QAAA,EAAU,SAAW,EAAA,KAAA,EAAO,MA1jBxD,EAAA,GA0jB0B,EAAyC,EAAA,UAAA,GAAA,SAAA,CAAzC,EAAyC,EAAA,CAAvC,UAAU,EAAA,WAAA,EAAW,OAAO,EAAA,QAAA,CAAA,CAAA,CAAA;AACpD,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,KAAA;AACH,QAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,UACzB,IAAM,EAAA,YAAA;AAAA,UACN,OAAS,EAAA,EAAE,SAAW,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,SACrC,CAAA,CAAA;AAAA,MACH,KAAK,MAAA;AACH,QAAA,IAAI,MAAU,IAAA,MAAA,CAAO,CAAC,CAAA,CAAE,GAAK,EAAA;AAC3B,UAAA,IAAA,CAAK,kBAAkB,CAAA,CAAA;AAAA,SACzB;AACA,QAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,UACzB,IAAM,EAAA,OAAA;AAAA,UACN,OAAS,EAAA,EAAE,SAAW,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,UACpC,UAAA;AAAA,SACD,CAAA,CAAA;AAAA,KACL;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,CAAY,OAAe,GAAa,EAAA;AACtC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,MACzB,MAAME,yBAAY,CAAA,WAAA;AAAA,MAClB,OAAA,EAAS,EAAE,KAAM,EAAA;AAAA,MACjB,UAAA,EAAY,EAAE,GAAI,EAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAmB,GAAA;AACjB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,MACzB,IAAM,EAAA,QAAA;AAAA,MACN,OAAA,EAAS,EAAE,KAAA,EAAO,aAAc,EAAA;AAAA,KACjC,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAkB,GAAA;AAChB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,MACzB,IAAM,EAAA,WAAA;AAAA,MACN,OAAA,EAAS,EAAE,KAAA,EAAO,WAAY,EAAA;AAAA,KAC/B,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAiB,GAAA;AACf,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,QAAQ,MAAO,CAAA;AAAA,MACzB,IAAM,EAAA,UAAA;AAAA,MACN,OAAA,EAAS,EAAE,KAAA,EAAO,UAAW,EAAA;AAAA,KAC9B,CAAA,CAAA;AAAA,GACH;AACF,EAAA;AA4BA,eAAsB,gBAA8D,EAK/D,EAAA;AAL+D,EAExE,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IADV,SAAA;AAAA,IACA,QAAU,EAAA,EAAA;AAAA,GA3pBZ,GAypBoF,IAExE,EAAE,GAAA,EAAA,EAAA,EAAA,SAAA,KAAF,EAAgB,EAAA,cAAA,GAAA,SAAA,CAAhB,EAAgB,EAAA,CAAd,WAAF,CAAA,CAAA,EAAA;AAAA,IACV,aAAA;AAAA,IACA,WAAA;AAAA,GAJkF,GAAA,EAAA,CAAA;AAMlF,EAAA,MAAM,GAAM,GAAA,IAAIC,uBAAY,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACvB,SADuB,CAAA,EAAA;AAAA,IAE1B,YAAc,EAAA,IAAA;AAAA,GACf,CAAA,CAAA,CAAA;AAED,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,OAAW,IAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACrCC,0BADqC,CAAA,EAAA;AAAA,IAExC,gBAAkB,EAAA,GAAA;AAAA,IAClB,oBAAsB,EAAA,GAAA;AAAA,IACtB,cAAgB,EAAA,GAAA;AAAA,IAChB,iBAAmB,EAAA,GAAA;AAAA,IACnB,eAAiB,EAAA,GAAA;AAAA,IACjB,cAAgB,EAAA,GAAA;AAAA,IAChB,YAAc,EAAA,GAAA;AAAA,IACd,gBAAkB,EAAA,GAAA;AAAA,IAClB,aAAe,EAAA,GAAA;AAAA,IACf,YAAc,EAAA,GAAA;AAAA,GAChB,CAAA,CAAA;AAEA,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,WAAA,CAAY,QAAQ,CAAO,GAAA,KAAA;AACzB,MAAA,QAAA,CAAS,EAAE,IAAM,EAAA,GAAA,CAAI,IAAM,EAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,KACtC,CAAA,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,IAAA,GAAO,MAAM,GAAI,CAAA,QAAA;AAAA,IACrB,aAAA,CAAA,cAAA,CAAA;AAAA,MACE,QAAU,EAAA,IAAA;AAAA,MACV,OAAA;AAAA,KACG,EAAA,uBAAA,CAAwB,cAAc,CAH3C,CAAA,EAAA;AAAA,MAIE,aAAe,EAAA,IAAA;AAAA,MACf,gBAAkB,EAAA,KAAA;AAAA,MAClB,8BAAgC,EAAA,IAAA;AAAA,KAClC,CAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAMC,aAAc,GAAA,MAAMJ,6BAAkB,CAAA,IAAA,CAAiB,IAAI,CAAA,CAAA;AAEjE,EAAM,MAAA,OAAA,GAAU,MAAMD,2BAAAA,CAAc,KAAM,CAAA,aAAA,CAAA,cAAA,CAAA;AAAA,IACxC,MAAQ,EAAA,IAAA;AAAA,GAAA,EACL,aAFqC,CAAA,EAAA;AAAA,IAGxC,IAAA;AAAA,GACD,CAAA,CAAA,CAAA;AAED,EAAA,OAAA,CAAQ,SAAS,cAAe,CAAA;AAAA,IAC9B,cAAA,EAAgBM,6BAAiB,GAAG,CAAA;AAAA,IACpC,cAAA,EAAgBA,6BAAiB,CAAC,CAAA;AAAA,GACnC,CAAA,CAAA;AAED,EAAA,OAAO,IAAI,YAAyB,CAAA,GAAA,EAAK,IAAM,EAAA,OAAA,EAAS,SAASD,aAAW,CAAA,CAAA;AAC9E,CAAA;AC9rBA,IAAM,sBAAN,MAAwE;AAAA,EAC/D,WACI,CAAA,GAAA,EACA,MACA,EAAA,OAAA,EACA,WACT,EAAA;AAJS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAGX,IAAA,aAAA,CAAA,IAAA,EAAU,YAAa,EAAA,KAAA,CAAA,CAAA;AAAA,GAFpB;AAAA;AAAA,EAIO,mBAAsB,GAAA;AAC9B,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAM,MAAA,IAAI,MAAM,iCAAiC,CAAA,CAAA;AAAA,KACnD;AAAA,GACF;AAAA;AAAA,EAGU,kBAAA,CAAoD,MAAS,QAA8B,EAAA;AACnG,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,MAAO,CAAA,SAAA,CAAU,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACvC,IAAA,OAAO,MAAM,IAAK,CAAA,MAAA,CAAO,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACvD;AAAA;AAAA,EAGU,mBAAA,CACR,MACA,QACA,EAAA;AACA,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACtC,IAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACtD;AAAA;AAAA,EAGU,oBAAA,CAAoD,MAAS,QAA4B,EAAA;AACjG,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,SAAU,CAAA,EAAA,CAAG,MAAM,QAAQ,CAAA,CAAA;AACjD,IAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,SAAS,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,GACjE;AAAA,EAEO,OAAU,GAAA;AACf,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,QAAQ,OAAQ,EAAA,CAAA;AACrB,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,SAAA,CAAU,GAAI,EAAA,CAAA;AAAA,GACnC;AACF,CAAA,CAAA;AAMa,IAAA,eAAA,GAAN,cAEG,mBAAgC,CAAA;AAAA,EAFnC,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAsBL;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,aAAc,EAAA,QAAA;AAAA,MACrB,KAAK,MAAO,CAAA,YAAA;AAAA,MACZ,CAAO,GAAA,KAAA;AACL,QAAI,GAAA,CAAA,IAAA,CAAK,OAAO,YAAY,CAAA,CAAA;AAC5B,QAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,uBAAA,EAAyB,GAAG,CAAA,CAAA;AAAA,OAC7D;AAAA,MACA,IAAK,CAAA,MAAA,CAAO,kBAAmB,CAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,KACjD,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,OAAQ,EAAA,QAAA,CAAsB,IAAK,CAAA,MAAA,CAAO,OAAO,CAAO,GAAA,KAAA;AAC/D,MAAI,GAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AACrB,MAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,gBAAA,EAAkB,GAAG,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,SAAU,EAAA,QAAA,CAAS,IAAK,CAAA,MAAA,CAAO,YAAY,CAAO,GAAA,KAAA;AACzD,MAAI,GAAA,CAAA,IAAA,CAAK,OAAO,UAAU,CAAA,CAAA;AAC1B,MAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,qBAAA,EAAuB,GAAG,CAAA,CAAA;AAAA,KAC1D,CAAA,CAAA,CAAA;AAGD;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AAIR;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,cAAe,EAAA,QAAA;AAAA,MACtB,KAAK,MAAO,CAAA,aAAA;AAAA,MACZ,CAAO,GAAA,KAAA;AACL,QAAA,IAAA,CAAK,gBAAmB,GAAA,GAAA,CAAA;AACxB,QAAI,GAAA,CAAA,IAAA,CAAK,OAAO,aAAa,CAAA,CAAA;AAAA,OAC/B;AAAA,MACA,CAAS,KAAA,KAAA;AACP,QAAA,IAAA,CAAK,OAAO,aAAgB,GAAA,KAAA,CAAA;AAC5B,QAAA,IAAA,CAAK,iBAAiB,KAAK,CAAA,CAAA;AAAA,OAC7B;AAAA,KACF,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,UAAW,EAAA,QAAA,CAAS,IAAK,CAAA,MAAA,CAAO,cAAc,CAAO,GAAA,KAAA;AAC5D,MAAI,GAAA,CAAA,IAAA,CAAK,OAAO,YAAY,CAAA,CAAA;AAAA,KAC7B,CAAA,CAAA,CAAA;AAKD;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,OAAQ,EAAA,QAAA,CAAsB,IAAK,CAAA,MAAA,CAAO,OAAO,CAAO,GAAA,KAAA;AAC/D,MAAI,GAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AACrB,MAAO,OAAA,IAAA,CAAK,mBAAmB,sBAAwB,EAAA,MAAM,IAAI,IAAK,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,KACpF,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA,EAvED,cAAc,SAAwB,EAAA;AACpC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,cAAc,SAAS,CAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAAwB,EAAA;AACpC,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,OAAA,CAAQ,uBAAuB,SAAS,CAAA,CAAA;AAAA,GAC/C;AAAA;AAAA;AAAA;AAAA,EAiEA,KAAK,SAAmB,EAAA;AACtB,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,kBAAA,CAAmB,SAAS,CAAA,CAAA;AAAA,GACjD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAO,IAAK,EAAA,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAQ,GAAA;AACN,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAO,KAAM,EAAA,CAAA;AAAA,GACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAO,IAAK,EAAA,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,KAAe,EAAA;AAC7B,IAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AACzB,IAAK,IAAA,CAAA,YAAA,CAAa,IAAI,KAAK,CAAA,CAAA;AAAA,GAC7B;AACF,EAAA;AA6BA,eAAsB,gBAA8D,EAKzD,EAAA;AALyD,EAEtE,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IADZ,SAAA;AAAA,IACA,UAAY,EAAA,EAAA;AAAA,GA5Nd,GA0NoF,IAEtE,EAAE,GAAA,EAAA,EAAA,EAAA,SAAA,KAAF,EAAgB,EAAA,gBAAA,GAAA,SAAA,CAAhB,EAAgB,EAAA,CAAd,WAAF,CAAA,CAAA,EAAA;AAAA,IACZ,aAAA;AAAA,IACA,WAAA;AAAA,GAJkF,GAAA,EAAA,CAAA;AAMlF,EAAA,MAAM,GAAM,GAAA,IAAIF,uBAAY,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACvB,SADuB,CAAA,EAAA;AAAA,IAE1B,YAAc,EAAA,IAAA;AAAA,GACf,CAAA,CAAA,CAAA;AAED,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,WAAA,CAAY,QAAQ,CAAO,GAAA,KAAA;AACzB,MAAA,QAAA,CAAS,EAAE,IAAM,EAAA,GAAA,CAAI,IAAM,EAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,KACtC,CAAA,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,MAAA,GAAS,MAAM,GAAI,CAAA,UAAA;AAAA,IACvB,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,uBAAwB,CAAA,gBAAgB,CAD7C,CAAA,EAAA;AAAA,MAEE,aAAe,EAAA,IAAA;AAAA,KACjB,CAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAME,aAAc,GAAA,MAAMJ,6BAAkB,CAAA,IAAA,CAAiB,MAAM,CAAA,CAAA;AAEnE,EAAM,MAAA,cAAA,GAAiBD,4BAAc,KAAM,CAAA,aAAA,CAAA,cAAA,CAAA;AAAA,IACzC,MAAQ,EAAA,IAAA;AAAA,GAAA,EACL,aAFsC,CAAA,EAAA;AAAA,IAGzC,IAAM,EAAA,MAAA;AAAA,GACP,CAAA,CAAA,CAAA;AAED,EAAA,MAAA,CAAO,IAAK,EAAA,CAAA;AACZ,EAAA,MAAM,UAAU,MAAM,cAAA,CAAA;AACtB,EAAA,MAAA,CAAO,KAAM,EAAA,CAAA;AACb,EAAM,MAAA,MAAA,CAAO,mBAAmB,CAAC,CAAA,CAAA;AAEjC,EAAA,OAAO,IAAI,eAAA,CAA4B,GAAK,EAAA,MAAA,EAAQ,SAASK,aAAW,CAAA,CAAA;AAC1E,CAAA;;;AC9PO,SAAS,eAAA,CACd,IACA,EAAA,IAAA,EACA,QACA,EAAA;AACA,EAAK,IAAA,CAAA,SAAA,CAAU,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAChC,EAAA,OAAO,MAAM,IAAA,CAAK,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAChD,CAAA;AAEO,SAAS,iBAAA,CACd,MACA,EAAA,IAAA,EACA,QACA,EAAA;AACA,EAAO,MAAA,CAAA,SAAA,CAAU,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAClC,EAAA,OAAO,MAAM,MAAA,CAAO,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAClD,CAAA;AAkBO,SAAS,eAAA,CACd,IACA,EAAA,IAAA,EACA,QACA,EAAA;AACA,EAAK,IAAA,CAAA,SAAA,CAAU,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAChC,EAAA,OAAO,MAAM,IAAA,CAAK,SAAU,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAChD,CAAA;AAEO,SAAS,kBAAA,CACd,OACA,EAAA,IAAA,EACA,QACY,EAAA;AACZ,EAAA,OAAO,OAAQ,CAAA,OAAA,CAAQ,EAAG,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAC1C,CAAA;;;ACzBO,SAAS,iBACd,CAAA,SAAA,EACA,KACA,EAAA,OAAA,GAA4B,EACnB,EAAA;AA/BX,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAgCE,EAAA,MAAM,OAAU,GAAA,SAAA,IAAa,SAAY,GAAA,SAAA,CAAU,OAAU,GAAA,SAAA,CAAA;AAE7D,EAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,OAAA,CAAA;AACvC,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAA,CAAQ,IAAK,CAAA,YAAA,IAAgB,OAAQ,CAAA,KAAA,IAAS,aAAc,CAAA,CAAA,CAAA;AAC5D,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,IAA0B,EAAA,KAAA,CAAA;AAG9B,EAAI,IAAA,KAAA,CAAM,UAAW,CAAA,aAAa,CAAG,EAAA;AACnC,IAAA,MAAM,OAAM,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,QAAA,CAAS,KAAK,CAAtB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,QAAzB,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,CAAA;AAC1C,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAQ,OAAA,CAAA,IAAA,CAAK,2BAA2B,KAAK,CAAA,CAAA;AAC7C,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,KAAA,GAAQ,CAAC,EAAuB,KAAA;AACpC,MAAA,EAAA,IAAM,EAAG,CAAA,aAAA,CAAc,IAAI,UAAA,CAAW,OAAO,CAAC,CAAA,CAAA;AAAA,KAChD,CAAA;AAEA,IAAA,QAAQ,KAAO;AAAA,MACb,KAAK,UAAA,CAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAM,KAAA,CAAA,GAAA,CAAI,aAAc,CAAA,gCAAgC,CAAC,CAAA,CAAA;AACzD,QAAA,MAAA;AAAA,MACF,KAAK,UAAA,CAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAM,KAAA,CAAA,GAAA,CAAI,aAAc,CAAA,gCAAgC,CAAC,CAAA,CAAA;AACzD,QAAA,MAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAQ,KAAA,GAAA,GAAA,CAAI,cAAc,mCAAmC,CAAA,CAAA;AAC7D,QAAA,IAAI,CAAC,KAAA,IAAS,OAAO,IAAA,KAAS,QAAU,EAAA;AACtC,UAAA,OAAA,CAAQ,IAAK,CAAA,gBAAA,IAAoB,IAAO,GAAA,WAAA,GAAc,OAAO,EAAG,CAAA,CAAA,CAAA;AAChE,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AACA,QAAA,KAAA,CAAM,QAAQ,EAAK,GAAA,IAAA,CAAA;AACnB,QAAA,KAAA,CAAM,aAAc,CAAA,IAAI,UAAW,CAAA,QAAQ,CAAC,CAAA,CAAA;AAC5C,QAAA,MAAA;AAAA,MACF;AACE,QAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA,CAAA;AACrC,QAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GAIA,MAAA,IAAA,KAAA,CAAM,UAAW,CAAA,QAAQ,CAAG,EAAA;AACnC,IAAA,MAAM,GAAM,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAS,CAAA,KAAK,MAAtB,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA;AACrC,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAQ,OAAA,CAAA,IAAA,CAAK,2BAA2B,KAAK,CAAA,CAAA;AAC7C,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAA,QAAQ,KAAO;AAAA,MACb,KAAK,UAAA;AACH,QAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,MACtB,KAAK,UAAA;AACH,QAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,MACtB,KAAK,UAAA;AACH,QAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,MACtB,KAAK,UAAA;AACH,QAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,MACtB,KAAK,YAAA;AACH,QAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAA;AACf,QAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,UAAA,OAAA,CAAQ,IAAK,CAAA,gBAAA,IAAoB,IAAO,GAAA,WAAA,GAAc,OAAO,EAAG,CAAA,CAAA,CAAA;AAChE,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,GAAA,CAAI,WAAW,IAAI,CAAA,CAAA;AAAA,MAC5B;AACE,QAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA,CAAA;AACrC,QAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,GAIG,MAAA;AACH,IAAQ,OAAA,CAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA,CAAA;AACzC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;ACzGAL,2BAAAA,CAAc,QAAS,CAAA;AAAA,EACrB,IAAM,EAAA,OAAA;AAAA,EACN,UAAA,EAAY,EAAE,KAAA,EAAO,KAAM,EAAA;AAAA,EAC3B,GAAK,EAAAO,yBAAA;AAAA,YACLC,iBAAA;AACF,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
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/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}\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 * 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 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 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","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"],"names":["WindowManager","SyncedStorePlugin","BuiltinApps","WhiteWebSdk","DefaultHotKeys","syncedStore","contentModeScale","SlideApp","addHooks"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -236,7 +236,7 @@ for (const kind in DefaultApps) {
|
|
|
236
236
|
WindowManager.register(__spreadValues({ kind }, options));
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
var version = "0.3.
|
|
239
|
+
var version = "0.3.14";
|
|
240
240
|
if (typeof window !== "undefined") {
|
|
241
241
|
let str = window.__netlessUA || "";
|
|
242
242
|
str += ` ${"@netless/fastboard"}@${version} `;
|
|
@@ -399,6 +399,12 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
399
399
|
this._assertNotDestroyed();
|
|
400
400
|
this.manager.bindCollectorContainer(container);
|
|
401
401
|
}
|
|
402
|
+
/**
|
|
403
|
+
* Returns `writable && phase === "connected"`.
|
|
404
|
+
*/
|
|
405
|
+
get canOperate() {
|
|
406
|
+
return this.room.isWritable && this.room.phase === "connected";
|
|
407
|
+
}
|
|
402
408
|
/**
|
|
403
409
|
* Undo a step on main view.
|
|
404
410
|
*/
|