@netless/window-manager 1.0.17-beta.1 → 1.0.17

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/callback.ts","../src/Utils/AppCreateQueue.ts","../src/InternalEmitter.ts","../src/Register/storage.ts","../src/Register/loader.ts","../src/Register/index.ts","../src/Utils/Common.ts","../src/AppListener.ts","../src/Utils/error.ts","../node_modules/.pnpm/side-effect-manager@0.1.5/node_modules/side-effect-manager/dist/side-effect-manager.es.js","../src/Utils/Reactive.ts","../src/App/Storage/StorageEvent.ts","../src/App/Storage/utils.ts","../src/App/Storage/index.ts","../src/App/AppContext.ts","../src/App/AppPageStateImpl.ts","../node_modules/.pnpm/@netless+telebox-insider@0.3.0/node_modules/@netless/telebox-insider/dist/telebox-insider.es.js","../src/BoxManager.ts","../src/Utils/attributesLogStringify.ts","../src/Utils/log.ts","../src/Helper.ts","../node_modules/.pnpm/svelte@3.59.2/node_modules/svelte/internal/index.mjs","../src/Cursor/Cursor.svelte","../src/Cursor/icons2.ts","../src/Cursor/Cursor.ts","../src/image/pencil-cursor.png","../src/image/selector-cursor.png","../src/image/eraser-cursor.png","../src/image/shape-cursor.svg","../src/image/text-cursor.svg","../src/image/laser-pointer-cursor.svg","../src/image/pencil-eraser-1.svg","../src/image/pencil-eraser-2.svg","../src/image/pencil-eraser-3.svg","../src/Cursor/icons.ts","../src/Cursor/index.ts","../src/Utils/extendClass.ts","../src/AttributesDelegate.ts","../src/Page/index.ts","../src/BoxEmitter.ts","../src/App/AppProxy.ts","../src/View/ViewManager.ts","../src/View/MainView.ts","../src/RedoUndo.ts","../src/AppManager.ts","../src/ContainerResizeObserver.ts","../src/PageState.ts","../src/ReconnectRefresher.ts","../src/Utils/RoomHacker.ts","../src/BuiltinApps.ts","../src/View/IframeBridge.ts","../src/ExtendPluginManager.ts","../src/Utils/resolveAppOptions.ts","../src/utils/extendClass.ts","../src/index.ts"],"sourcesContent":["export enum Events {\n AppMove = \"AppMove\",\n AppFocus = \"AppFocus\",\n AppResize = \"AppResize\",\n AppBoxStateChange = \"AppBoxStateChange\",\n GetAttributes = \"GetAttributes\",\n UpdateWindowManagerWrapper = \"UpdateWindowManagerWrapper\",\n InitReplay = \"InitReplay\",\n WindowCreated = \"WindowCreated\",\n SetMainViewScenePath = \"SetMainViewScenePath\",\n SetMainViewSceneIndex = \"SetMainViewSceneIndex\",\n SetAppFocusIndex = \"SetAppFocusIndex\",\n SwitchViewsToFreedom = \"SwitchViewsToFreedom\",\n MoveCamera = \"MoveCamera\",\n MoveCameraToContain = \"MoveCameraToContain\",\n CursorMove = \"CursorMove\",\n RootDirRemoved = \"RootDirRemoved\",\n Refresh = \"Refresh\",\n InitMainViewCamera = \"InitMainViewCamera\",\n}\n\nexport const MagixEventName = \"__WindowManger\";\nexport const EnsureReconnectEvent = \"__WindowMangerEnsureReconnected__\";\n\nexport enum AppAttributes {\n Size = \"size\",\n Position = \"position\",\n SceneIndex = \"SceneIndex\",\n ZIndex = \"zIndex\",\n}\n\nexport enum AppEvents {\n setBoxSize = \"setBoxSize\",\n setBoxMinSize = \"setBoxMinSize\",\n destroy = \"destroy\",\n}\n\nexport enum AppStatus {\n StartCreate = \"StartCreate\",\n}\n\nexport enum CursorState {\n Leave = \"leave\",\n Normal = \"normal\",\n}\n\nexport const REQUIRE_VERSION = \"2.16.1\";\n\nexport const MIN_WIDTH = 340 / 720;\nexport const MIN_HEIGHT = 340 / 720;\n\nexport const SET_SCENEPATH_DELAY = 100; // 设置 scenePath 的延迟事件\n\nexport const DEFAULT_CONTAINER_RATIO = 9 / 16;\n\nexport const ROOT_DIR = \"/\";\nexport const INIT_DIR = \"/init\";\n\nexport const SETUP_APP_DELAY = 50;\n","import Emittery from \"emittery\";\nimport type {\n TeleBoxColorScheme,\n TELE_BOX_STATE,\n TeleBoxState,\n NotMinimizedBoxState,\n} from \"@netless/telebox-insider\";\nimport type { CameraState, SceneState, View, ViewVisionMode } from \"white-web-sdk\";\nimport type { LoadAppEvent } from \"./Register\";\nimport type { PageState } from \"./Page\";\nimport type {\n BoxBlurredPayload,\n BoxClosePayload,\n BoxFocusPayload,\n BoxMovePayload,\n BoxResizePayload,\n BoxStateChangePayload,\n} from \"./BoxEmitter\";\nimport type { AppPayload } from \"./typings\";\n\nexport type PublicEvent = {\n mainViewModeChange: ViewVisionMode;\n boxStateChange: `${TELE_BOX_STATE}`;\n darkModeChange: boolean;\n prefersColorSchemeChange: TeleBoxColorScheme;\n cameraStateChange: CameraState;\n mainViewScenePathChange: string;\n mainViewSceneIndexChange: number;\n focusedChange: string | undefined;\n mainViewScenesLengthChange: number;\n canRedoStepsChange: number;\n canUndoStepsChange: number;\n loadApp: LoadAppEvent;\n ready: undefined; // 所有 APP 创建完毕时触发\n sceneStateChange: SceneState;\n pageStateChange: PageState;\n fullscreenChange: boolean;\n appsChange: string[]; // APP 列表变化时触发\n onBoxMove: BoxMovePayload;\n onBoxResize: BoxResizePayload;\n onBoxFocus: BoxFocusPayload;\n onBoxBlurred: BoxBlurredPayload;\n onBoxClose: BoxClosePayload;\n onBoxStateChange: BoxStateChangePayload;\n onMainViewMounted: View;\n onMainViewRebind: View;\n onAppViewMounted: AppPayload;\n onAppSetup: string;\n onAppScenePathChange: AppPayload;\n onBoxesStatusChange: Map<string, TeleBoxState>;\n onLastNotMinimizedBoxesStatusChange: Map<string, NotMinimizedBoxState>;\n};\n\nexport type CallbacksType = Emittery<PublicEvent>;\nexport const callbacks: CallbacksType = new Emittery();\n","import { callbacks } from \"../callback\";\nimport { SETUP_APP_DELAY } from \"../constants\";\n\nexport type Invoker<T = any> = () => Promise<T | undefined>;\n\nexport class AppCreateQueue {\n private list: Invoker[] = [];\n private currentInvoker: Invoker | undefined;\n private timer: number | undefined;\n public isEmit = false;\n\n private initInterval() {\n return setInterval(() => {\n this.invoke();\n }, 50);\n }\n\n public push<T>(item: Invoker<T>) {\n this.list.push(item);\n this.invoke();\n if (this.timer === undefined && this.list.length > 0) {\n this.timer = this.initInterval();\n }\n }\n\n public invoke() {\n if (this.list.length === 0) {\n return;\n }\n if (this.currentInvoker !== undefined) {\n return;\n }\n\n const item = this.list.shift();\n if (item) {\n this.currentInvoker = item;\n item()\n .then(() => {\n this.invoked();\n })\n .catch(error => {\n console.error(`[WindowManager]: create app error: ${error.message}`);\n this.invoked();\n });\n }\n }\n\n private invoked = () => {\n this.currentInvoker = undefined;\n if (this.list.length === 0) {\n this.clear();\n this.emitReady();\n }\n };\n\n private clear = () => {\n clearInterval(this.timer);\n this.timer = undefined;\n };\n\n public emitReady() {\n if (!this.isEmit) {\n setTimeout(() => {\n callbacks.emit(\"ready\");\n }, SETUP_APP_DELAY);\n }\n this.isEmit = true;\n }\n\n public empty() {\n this.list = [];\n this.clear();\n }\n\n public destroy() {\n if (this.timer) {\n this.clear();\n }\n }\n}\n","import Emittery from \"emittery\";\nimport type { AppInitState, CursorMovePayload } from \"./index\";\nimport type { NotMinimizedBoxState, TeleBoxState } from \"@netless/telebox-insider\";\n\nexport type RemoveSceneParams = {\n scenePath: string;\n index?: number;\n};\n\nexport type EmitterEvent = {\n onCreated: undefined;\n InitReplay: AppInitState;\n error: Error;\n seekStart: undefined;\n seek: number;\n mainViewMounted: undefined;\n observerIdChange: number;\n boxStateChange: string;\n playgroundSizeChange: DOMRect;\n startReconnect: undefined;\n onReconnected: undefined;\n removeScenes: RemoveSceneParams;\n cursorMove: CursorMovePayload;\n updateManagerRect: undefined;\n focusedChange: { focused: string | undefined; prev: string | undefined };\n rootDirRemoved: undefined; // 根目录整个被删除\n rootDirSceneRemoved: string; // 根目录下的场景被删除\n setReadonly: boolean;\n changePageState: undefined;\n writableChange: boolean;\n containerSizeRatioUpdate: number;\n wrapperRectChange: { width: number; height: number; origin?: string };\n boxesStatusChange: Map<string, TeleBoxState>;\n lastNotMinimizedBoxesStatusChange: Map<string, NotMinimizedBoxState>;\n};\n\nexport type EmitterType = Emittery<EmitterEvent>;\nexport const internalEmitter: EmitterType = new Emittery();\n","const DatabaseName = \"__WindowManagerAppCache\";\n\nlet db: IDBDatabase;\nlet store: IDBObjectStore;\n\nexport type Item = {\n kind: string;\n sourceCode: string;\n};\n\nexport const initDb = async () => {\n db = await createDb();\n};\n\nexport const setItem = (key: string, val: any) => {\n if (!db) return;\n return addRecord(db, { kind: key, sourceCode: val });\n};\n\nexport const getItem = async (key: string): Promise<Item | null> => {\n if (!db) return null;\n return await query(db, key);\n};\n\nexport const removeItem = (key: string) => {\n if (!db) return;\n return deleteRecord(db, key);\n};\n\nfunction createDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DatabaseName, 2);\n request.onerror = e => {\n reject(e);\n };\n\n request.onupgradeneeded = (event: any) => {\n const db = event.target.result as IDBDatabase;\n if (!db.objectStoreNames.contains(\"apps\")) {\n store = db.createObjectStore(\"apps\", { keyPath: \"kind\" });\n store.createIndex(\"kind\", \"kind\", { unique: true });\n }\n };\n\n request.onsuccess = () => {\n const db = request.result;\n resolve(db);\n };\n });\n}\n\nfunction query<T>(db: IDBDatabase, val: string): Promise<T | null> {\n return new Promise((resolve, reject) => {\n const index = db.transaction([\"apps\"]).objectStore(\"apps\").index(\"kind\");\n const request = index.get(val);\n request.onerror = e => reject(e);\n request.onsuccess = () => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n}\n\nfunction addRecord(db: IDBDatabase, payload: any): Promise<void> {\n return new Promise((resolve, reject) => {\n const request = db.transaction([\"apps\"], \"readwrite\").objectStore(\"apps\").add(payload);\n request.onsuccess = () => resolve();\n request.onerror = () => reject();\n });\n}\n\nfunction deleteRecord(db: IDBDatabase, key: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const request = db.transaction([\"apps\"], \"readwrite\").objectStore(\"apps\").delete(key);\n request.onsuccess = () => resolve();\n request.onerror = () => reject();\n });\n}\n","import { callbacks } from \"../callback\";\nimport { getItem, setItem } from \"./storage\";\nimport type { NetlessApp } from \"../typings\";\n\nconst Prefix = \"NetlessApp\";\n\nconst TIMEOUT = 10000; // 下载 script 10 秒超时\n\nexport const getScript = async (url: string): Promise<string> => {\n const item = await getItem(url);\n if (item) {\n return item.sourceCode;\n } else {\n const result = await fetchWithTimeout(url, { timeout: TIMEOUT });\n const text = await result.text();\n await setItem(url, text);\n return text;\n }\n};\n\nexport const executeScript = (text: string, appName: string): NetlessApp => {\n let result = Function(text + `\\n;return ${appName}`)();\n if (typeof result === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n result = window[appName];\n }\n return result;\n};\n\nexport const loadApp = async (url: string, key: string, name?: string): Promise<NetlessApp> => {\n const appName = name || Prefix + key;\n callbacks.emit(\"loadApp\", { kind: key, status: \"start\" });\n\n let text: string;\n try {\n text = await getScript(url);\n if (!text || text.length === 0) {\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: \"script is empty.\" });\n throw new Error(\"[WindowManager]: script is empty.\");\n }\n } catch (error) {\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: error.message });\n throw error;\n }\n return getResult(text, appName, key);\n};\n\nconst getResult = (text: string, appName: string, key: string): NetlessApp => {\n try {\n const result = executeScript(text, appName);\n callbacks.emit(\"loadApp\", { kind: key, status: \"success\" });\n return result;\n } catch (error: any) {\n if (error.message.includes(\"Can only have one anonymous define call per script file\")) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const define = window.define;\n if (\"function\" == typeof define && define.amd) {\n delete define.amd;\n }\n const result = executeScript(text, appName);\n callbacks.emit(\"loadApp\", { kind: key, status: \"success\" });\n return result;\n }\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: error.message });\n throw error;\n }\n};\n\nasync function fetchWithTimeout(resource: string, options: RequestInit & { timeout: number }) {\n const { timeout = 10000 } = options;\n\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: controller.signal,\n headers: {\n \"content-type\": \"text/plain\",\n },\n });\n clearTimeout(id);\n\n return response;\n}\n","import Emittery from \"emittery\";\nimport { loadApp } from \"./loader\";\nimport type { NetlessApp, RegisterEvents, RegisterParams } from \"../typings\";\n\nexport type LoadAppEvent = {\n kind: string;\n status: \"start\" | \"success\" | \"failed\";\n reason?: string;\n};\n\nexport type SyncRegisterAppPayload = { kind: string; src: string; name: string | undefined };\nexport type SyncRegisterApp = (payload: SyncRegisterAppPayload) => void;\n\nclass AppRegister {\n public kindEmitters: Map<string, Emittery<RegisterEvents>> = new Map();\n public registered: Map<string, RegisterParams> = new Map();\n public appClassesCache: Map<string, Promise<NetlessApp>> = new Map();\n public appClasses: Map<string, () => Promise<NetlessApp>> = new Map();\n\n private syncRegisterApp: SyncRegisterApp | null = null;\n\n public setSyncRegisterApp(fn: SyncRegisterApp) {\n this.syncRegisterApp = fn;\n }\n\n public onSyncRegisterAppChange = (payload: SyncRegisterAppPayload) => {\n this.register({ kind: payload.kind, src: payload.src });\n };\n\n public async register(params: RegisterParams): Promise<void> {\n this.appClassesCache.delete(params.kind);\n this.registered.set(params.kind, params);\n\n const paramSrc = params.src;\n let downloadApp: () => Promise<NetlessApp>;\n\n if (typeof paramSrc === \"string\") {\n downloadApp = async () => {\n const result = (await loadApp(paramSrc, params.kind, params.name)) as any;\n if (result.__esModule) {\n return result.default;\n }\n return result;\n };\n if (this.syncRegisterApp) {\n this.syncRegisterApp({ kind: params.kind, src: paramSrc, name: params.name });\n }\n }\n if (typeof paramSrc === \"function\") {\n downloadApp = async () => {\n let appClass = (await paramSrc()) as any;\n if (appClass) {\n if (appClass.__esModule || appClass.default) {\n appClass = appClass.default;\n }\n return appClass;\n } else {\n throw new Error(`[WindowManager]: load remote script failed, ${paramSrc}`);\n }\n };\n }\n if (typeof paramSrc === \"object\") {\n downloadApp = async () => paramSrc;\n }\n this.appClasses.set(params.kind, async () => {\n let app = this.appClassesCache.get(params.kind);\n if (!app) {\n app = downloadApp();\n this.appClassesCache.set(params.kind, app);\n }\n return app;\n });\n\n if (params.addHooks) {\n const emitter = this.createKindEmitter(params.kind);\n if (emitter) {\n params.addHooks(emitter);\n }\n }\n }\n\n public unregister(kind: string) {\n this.appClasses.delete(kind);\n this.appClassesCache.delete(kind);\n this.registered.delete(kind);\n const kindEmitter = this.kindEmitters.get(kind);\n if (kindEmitter) {\n kindEmitter.clearListeners();\n this.kindEmitters.delete(kind);\n }\n }\n\n public async notifyApp<T extends keyof RegisterEvents>(\n kind: string,\n event: T,\n payload: RegisterEvents[T]\n ) {\n const emitter = this.kindEmitters.get(kind);\n await emitter?.emit(event, payload);\n }\n\n private createKindEmitter(kind: string) {\n if (!this.kindEmitters.has(kind)) {\n const emitter = new Emittery<RegisterEvents>();\n this.kindEmitters.set(kind, emitter);\n }\n return this.kindEmitters.get(kind);\n }\n}\n\nexport const appRegister = new AppRegister();\n","import { appRegister } from \"../Register\";\nimport { debounce } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { ROOT_DIR } from \"../constants\";\nimport { ScenePathType } from \"white-web-sdk\";\nimport { v4 } from \"uuid\";\nimport type { PublicEvent } from \"../callback\";\nimport type { Displayer, ViewVisionMode, Room, View, SceneDefinition } from \"white-web-sdk\";\nimport type Emittery from \"emittery\";\n\nexport const genAppId = async (kind: string) => {\n const impl = await appRegister.appClasses.get(kind)?.();\n if (impl && impl.config?.singleton) {\n return kind;\n }\n return `${kind}-${v4().replace(\"-\", \"\").slice(0, 8)}`;\n};\n\nexport const setViewFocusScenePath = (view: View, focusScenePath: string) => {\n if (view.focusScenePath !== focusScenePath) {\n view.focusScenePath = focusScenePath;\n return view;\n }\n};\n\nexport const setViewSceneIndex = (view: View, index: number) => {\n if (view.focusSceneIndex !== index) {\n view.focusSceneIndex = index;\n return view;\n }\n};\n\nexport const setScenePath = (room: Room | undefined, scenePath: string) => {\n if (room && room.isWritable) {\n if (room.state.sceneState.scenePath !== scenePath) {\n const nextScenePath = scenePath === \"/\" ? \"\" : scenePath;\n room.setScenePath(nextScenePath);\n }\n }\n};\n\nexport const getScenePath = (\n room: Room | undefined,\n dir: string | undefined,\n index: number\n): string | undefined => {\n if (room && dir) {\n const scenes = entireScenes(room);\n const scene = scenes[dir]?.[index];\n if (scene) {\n return `${dir}/${scene.name}`;\n }\n }\n};\n\nexport const removeScenes = (room: Room | undefined, scenePath: string, index?: number) => {\n if (room) {\n const type = room.scenePathType(scenePath);\n if (type !== ScenePathType.None) {\n (room.removeScenes as any)(scenePath, index);\n }\n }\n};\n\nexport const setViewMode = (view: View, mode: ViewVisionMode) => {\n if (!(view as any).didRelease && view.mode !== mode) {\n view.mode = mode;\n }\n};\n\nexport const emitError = (error: Error) => {\n if (internalEmitter.listenerCount(\"error\") > 0) {\n internalEmitter.emit(\"error\", error);\n } else {\n console.log(\"[WindowManager]:\", error);\n }\n};\n\nexport const addEmitterOnceListener = (event: any, listener: any) => {\n internalEmitter.once(event).then(listener);\n};\n\nexport const notifyMainViewModeChange = debounce(\n (callbacks: Emittery<PublicEvent>, mode: ViewVisionMode) => {\n callbacks.emit(\"mainViewModeChange\", mode);\n },\n 200\n);\n\nexport const makeValidScenePath = (displayer: Displayer, scenePath: string, index = 0) => {\n const scenes = entireScenes(displayer)[scenePath];\n if (!scenes) return;\n const scene = scenes[index];\n if (!scene) return;\n const firstSceneName = scene.name;\n if (scenePath === ROOT_DIR) {\n return `/${firstSceneName}`;\n } else {\n return `${scenePath}/${firstSceneName}`;\n }\n};\n\nexport const entireScenes = (displayer: Displayer) => {\n return displayer.entireScenes();\n};\n\nexport const putScenes = (\n room: Room | undefined,\n path: string,\n scenes: SceneDefinition[],\n index?: number\n) => {\n for (let i = 0; i < scenes.length; ++i) {\n if (scenes[i].name?.includes(\"/\")) {\n throw new Error(\"scenes name can not have '/'\");\n }\n }\n return room?.putScenes(path, scenes, index);\n};\n\nexport const isValidScenePath = (scenePath: string) => {\n return scenePath.startsWith(\"/\");\n};\n\nexport const parseSceneDir = (scenePath: string) => {\n const sceneList = scenePath.split(\"/\");\n sceneList.pop();\n let sceneDir = sceneList.join(\"/\");\n // \"/page1\" 的 dir 为 \"/\"\n if (sceneDir === \"\") {\n sceneDir = \"/\";\n }\n return sceneDir;\n};\n\nexport const ensureValidScenePath = (scenePath: string) => {\n if (scenePath.endsWith(\"/\")) {\n return scenePath.slice(0, -1);\n } else {\n return scenePath;\n }\n};\n\nexport const getVersionNumber = (version: string) => {\n const versionString = version\n .split(\".\")\n .map(s => s.padStart(2, \"0\"))\n .join(\"\");\n return parseInt(versionString);\n};\n\nexport const wait = (time: number) => new Promise(resolve => setTimeout(resolve, time));\n\n// rootDirPage: /page1 || / page2\n// notRootDirPage: /dir1/page1 || /dir1/page2\nexport const isRootDirPage = (scenePath: string) => {\n const delimiterCount = scenePath.split(\"\").reduce((prev, cur) => {\n if (cur === ROOT_DIR) {\n prev += 1;\n }\n return prev;\n }, 0);\n return delimiterCount === 1;\n};\n","import { callbacks } from \"./callback\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { Events, MagixEventName } from \"./constants\";\n// import { isEqual, omit } from \"lodash\";\nimport { setViewFocusScenePath } from \"./Utils/Common\";\nimport type { Event } from \"white-web-sdk\";\nimport type { AppManager } from \"./AppManager\";\nimport type { TeleBoxState } from \"@netless/telebox-insider\";\n\ntype SetAppFocusIndex = {\n type: \"main\" | \"app\";\n appID?: string;\n index: number;\n};\n\nexport class AppListeners {\n private displayer = this.manager.displayer;\n\n constructor(private manager: AppManager) {}\n\n private get boxManager() {\n return this.manager.boxManager;\n }\n\n public addListeners() {\n this.displayer.addMagixEventListener(MagixEventName, this.mainMagixEventListener);\n }\n\n public removeListeners() {\n this.displayer.removeMagixEventListener(MagixEventName, this.mainMagixEventListener);\n }\n\n private mainMagixEventListener = (event: Event) => {\n if (event.authorId !== this.displayer.observerId) {\n const data = event.payload;\n switch (data.eventName) {\n case Events.AppMove: {\n this.appMoveHandler(data.payload);\n break;\n }\n case Events.AppResize: {\n this.appResizeHandler(data.payload);\n break;\n }\n case Events.AppBoxStateChange: {\n this.boxStateChangeHandler(data.payload);\n break;\n }\n case Events.SetMainViewScenePath: {\n this.setMainViewScenePathHandler(data.payload);\n break;\n }\n case Events.CursorMove: {\n this.cursorMoveHandler(data.payload);\n break;\n }\n case Events.RootDirRemoved: {\n this.rootDirRemovedHandler();\n break;\n }\n case Events.Refresh: {\n this.refreshHandler();\n break;\n }\n case Events.InitMainViewCamera: {\n this.initMainViewCameraHandler();\n break;\n }\n case Events.SetAppFocusIndex: {\n this.setAppFocusViewIndexHandler(data.payload);\n break;\n }\n default:\n break;\n }\n }\n };\n\n private appMoveHandler = (payload: any) => {\n this.boxManager?.moveBox(payload);\n };\n\n private appResizeHandler = (payload: any) => {\n this.boxManager?.resizeBox(Object.assign(payload, { skipUpdate: true }));\n this.manager.room?.refreshViewSize();\n };\n\n private boxStateChangeHandler = (state: TeleBoxState) => {\n callbacks.emit(\"boxStateChange\", state);\n };\n\n private setMainViewScenePathHandler = ({ nextScenePath }: { nextScenePath: string }) => {\n setViewFocusScenePath(this.manager.mainView, nextScenePath);\n callbacks.emit(\"mainViewScenePathChange\", nextScenePath);\n };\n\n private cursorMoveHandler = (payload: any) => {\n internalEmitter.emit(\"cursorMove\", payload);\n };\n\n private rootDirRemovedHandler = () => {\n this.manager.createRootDirScenesCallback();\n this.manager.mainViewProxy.rebind();\n internalEmitter.emit(\"rootDirRemoved\");\n };\n\n private refreshHandler = () => {\n this.manager.windowManger._refresh();\n };\n\n private initMainViewCameraHandler = () => {\n this.manager.mainViewProxy.addCameraReaction();\n };\n\n private setAppFocusViewIndexHandler = (payload: SetAppFocusIndex) => {\n if (payload.type === \"main\") {\n this.manager.setSceneIndexWithoutSync(payload.index);\n } else if (payload.type === \"app\" && payload.appID) {\n const app = this.manager.appProxies.get(payload.appID);\n if (app) {\n app.setSceneIndexWithoutSync(payload.index);\n }\n }\n };\n}\n","export class AppCreateError extends Error {\n override message = \"[WindowManager]: app duplicate exists and cannot be created again\";\n}\n\nexport class AppNotRegisterError extends Error {\n constructor(kind: string) {\n super(`[WindowManager]: app ${kind} need register or provide src`);\n }\n}\n\nexport class AppManagerNotInitError extends Error {\n override message = \"[WindowManager]: AppManager must be initialized\";\n}\n\nexport class WhiteWebSDKInvalidError extends Error {\n constructor(version: string) {\n super(`[WindowManager]: white-web-sdk version must large than ${version}`);\n }\n}\n\nexport class ParamsInvalidError extends Error {\n override message = \"[WindowManager]: kind must be a valid string\";\n}\n\nexport class BoxNotCreatedError extends Error {\n override message = \"[WindowManager]: box need created\";\n}\n\nexport class InvalidScenePath extends Error {\n override message = `[WindowManager]: ScenePath should start with \"/\"`;\n}\n\nexport class BoxManagerNotFoundError extends Error {\n override message = \"[WindowManager]: boxManager not found\";\n}\n\nexport class BindContainerRoomPhaseInvalidError extends Error {\n override message = \"[WindowManager]: room phase only Connected can be bindContainer\";\n}\n","const e=\"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",s=e.length,t=Array(20),r=()=>{for(let r=0;r<20;r++)t[r]=e.charAt(Math.random()*s);return t.join(\"\")};class o{constructor(){this.disposers=new Map}add(e,s=r()){return this.flush(s),this.disposers.set(s,e()),s}addDisposer(e,s=r()){return this.flush(s),this.disposers.set(s,e),s}addEventListener(e,s,t,o,i=r()){return this.add((()=>(e.addEventListener(s,t,o),()=>e.removeEventListener(s,t,o))),i),i}setTimeout(e,s,t=r()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(t),e()}),s);return()=>window.clearTimeout(r)}),t)}setInterval(e,s,t=r()){return this.add((()=>{const t=window.setInterval(e,s);return()=>window.clearInterval(t)}),t)}remove(e){const s=this.disposers.get(e);return this.disposers.delete(e),s}flush(e){const s=this.remove(e);if(s)try{s()}catch(t){console.error(t)}}flushAll(){this.disposers.forEach((e=>{try{e()}catch(s){console.error(s)}})),this.disposers.clear()}}export{o as SideEffectManager,r as genUID};\n//# sourceMappingURL=side-effect-manager.es.js.map\n","import { listenUpdated, unlistenUpdated, reaction, UpdateEventKind } from \"white-web-sdk\";\nimport type { AkkoObjectUpdatedProperty, AkkoObjectUpdatedListener } from \"white-web-sdk\";\nimport { isObject } from \"lodash\";\n\n// 兼容 13 和 14 版本 SDK\nexport const onObjectByEvent = (event: UpdateEventKind) => {\n return (object: any, func: () => void) => {\n if (object === undefined) return;\n if (listenUpdated) {\n const listener = (events: readonly AkkoObjectUpdatedProperty<any>[]) => {\n const kinds = events.map(e => e.kind);\n if (kinds.includes(event)) {\n func();\n }\n };\n listenUpdated(object, listener);\n func();\n return () => unlistenUpdated(object, listener);\n } else {\n return reaction(\n () => object,\n () => {\n func();\n },\n {\n fireImmediately: true,\n }\n );\n }\n };\n};\n\nexport const safeListenPropsUpdated = <T extends Record<string, unknown>>(\n getProps: () => T | null | undefined,\n callback: AkkoObjectUpdatedListener<T>,\n onDestroyed?: (props: unknown) => void\n) => {\n let disposeListenUpdated: (() => void) | null = null;\n const disposeReaction = reaction(\n getProps,\n () => {\n if (disposeListenUpdated) {\n disposeListenUpdated();\n disposeListenUpdated = null;\n }\n const props = getProps();\n if (isObject(props)) {\n disposeListenUpdated = () => unlistenUpdated(props, callback);\n listenUpdated(props, callback);\n } else {\n onDestroyed?.(props);\n }\n },\n { fireImmediately: true }\n );\n\n return () => {\n disposeListenUpdated?.();\n disposeReaction();\n };\n};\n\nexport const onObjectRemoved = onObjectByEvent(UpdateEventKind.Removed);\nexport const onObjectInserted = onObjectByEvent(UpdateEventKind.Inserted);\n","export type StorageEventListener<T> = (event: T) => void;\n\nexport class StorageEvent<TMessage> {\n listeners = new Set<StorageEventListener<TMessage>>();\n\n get length(): number {\n return this.listeners.size;\n }\n\n dispatch(message: TMessage): void {\n this.listeners.forEach(callback => callback(message));\n }\n\n addListener(listener: StorageEventListener<TMessage>): void {\n this.listeners.add(listener);\n }\n\n removeListener(listener: StorageEventListener<TMessage>): void {\n this.listeners.delete(listener);\n }\n}\n","import { has } from \"lodash\";\nimport { genUID } from \"side-effect-manager\";\nimport type { AutoRefValue, ExtractRawValue, RefValue } from \"./typings\";\n\nexport const plainObjectKeys = Object.keys as <T>(o: T) => Array<Extract<keyof T, string>>;\n\nexport function isRef<TValue = unknown>(e: unknown): e is RefValue<TValue> {\n return Boolean(has(e, \"__isRef\"));\n}\n\nexport function makeRef<TValue>(v: TValue): RefValue<TValue> {\n return { k: genUID(), v, __isRef: true };\n}\n\nexport function makeAutoRef<TValue>(v: TValue): AutoRefValue<TValue> {\n return isRef<ExtractRawValue<TValue>>(v) ? v : makeRef(v as ExtractRawValue<TValue>);\n}\n","import type { AkkoObjectUpdatedProperty } from \"white-web-sdk\";\nimport type { AppContext } from \"../AppContext\";\nimport type {\n Diff,\n MaybeRefValue,\n RefValue,\n StorageStateChangedEvent,\n StorageStateChangedListener,\n StorageStateChangedListenerDisposer,\n} from \"./typings\";\n\nimport { get, has, isObject, mapValues, noop, size } from \"lodash\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { safeListenPropsUpdated } from \"../../Utils/Reactive\";\nimport { StorageEvent } from \"./StorageEvent\";\nimport { isRef, makeRef, plainObjectKeys } from \"./utils\";\n\nexport * from \"./typings\";\n\nexport const STORAGE_NS = \"_WM-STORAGE_\";\n\nexport class Storage<TState extends Record<string, any> = any> implements Storage<TState> {\n readonly id: string | null;\n readonly maxIllusionQueueSize = 500;\n\n private readonly _context: AppContext;\n private readonly _sideEffect = new SideEffectManager();\n private _state: TState;\n private _destroyed = false;\n\n private _refMap = new WeakMap<any, RefValue>();\n\n /**\n * `setState` alters local state immediately before sending to server. This will cache the old value for onStateChanged diffing.\n */\n private _lastValue = new Map<string | number | symbol, TState[Extract<keyof TState, string>]>();\n\n constructor(context: AppContext, id?: string, defaultState?: TState) {\n if (defaultState && !isObject(defaultState)) {\n throw new Error(`Default state for Storage ${id} is not an object.`);\n }\n\n this._context = context;\n this.id = id || null;\n\n this._state = {} as TState;\n const rawState = this._getRawState(this._state);\n\n if (this._context.getIsWritable()) {\n if (this.id === null) {\n if (context.isAddApp && defaultState) {\n this.setState(defaultState);\n }\n } else {\n if (rawState === this._state || !isObject(rawState)) {\n if (!get(this._context.getAttributes(), [STORAGE_NS])) {\n this._context.updateAttributes([STORAGE_NS], {});\n }\n this._context.updateAttributes([STORAGE_NS, this.id], this._state);\n if (defaultState) {\n this.setState(defaultState);\n }\n }\n }\n }\n\n // strip mobx\n plainObjectKeys(rawState).forEach(key => {\n if (this.id === null && key === STORAGE_NS) {\n return;\n }\n try {\n const rawValue = isObject(rawState[key])\n ? JSON.parse(JSON.stringify(rawState[key]))\n : rawState[key];\n if (isRef<TState[Extract<keyof TState, string>]>(rawValue)) {\n this._state[key] = rawValue.v;\n if (isObject(rawValue.v)) {\n this._refMap.set(rawValue.v, rawValue);\n }\n } else {\n this._state[key] = rawValue;\n }\n } catch (e) {\n console.error(e);\n }\n });\n\n this._sideEffect.addDisposer(\n safeListenPropsUpdated(\n () =>\n this.id === null\n ? context.getAttributes()\n : get(context.getAttributes(), [STORAGE_NS, this.id]),\n this._updateProperties.bind(this),\n this.destroy.bind(this)\n )\n );\n }\n\n get state(): Readonly<TState> {\n if (this._destroyed) {\n console.warn(`Accessing state on destroyed Storage \"${this.id}\"`);\n }\n return this._state;\n }\n\n readonly onStateChanged = new StorageEvent<StorageStateChangedEvent<TState>>();\n\n addStateChangedListener(\n handler: StorageStateChangedListener<TState>\n ): StorageStateChangedListenerDisposer {\n this.onStateChanged.addListener(handler);\n return () => this.onStateChanged.removeListener(handler);\n }\n\n ensureState(state: Partial<TState>): void {\n return this.setState(\n plainObjectKeys(state).reduce((payload, key) => {\n if (!has(this._state, key)) {\n payload[key] = state[key];\n }\n return payload;\n }, {} as Partial<TState>)\n );\n }\n\n setState(state: Partial<TState>): void {\n if (this._destroyed) {\n console.error(new Error(`Cannot call setState on destroyed Storage \"${this.id}\".`));\n return;\n }\n\n if (!this._context.getIsWritable()) {\n console.error(\n new Error(`Cannot setState on Storage \"${this.id}\" without writable access`),\n state\n );\n return;\n }\n\n const keys = plainObjectKeys(state);\n if (keys.length > 0) {\n keys.forEach(key => {\n const value = state[key];\n if (value === this._state[key]) {\n return;\n }\n\n if (value === void 0) {\n this._lastValue.set(key, this._state[key]);\n delete this._state[key];\n this._setRawState(key, value);\n } else {\n this._lastValue.set(key, this._state[key]);\n this._state[key] = value as TState[Extract<keyof TState, string>];\n\n let payload: MaybeRefValue<typeof value> = value;\n if (isObject(value)) {\n let refValue = this._refMap.get(value);\n if (!refValue) {\n refValue = makeRef(value);\n this._refMap.set(value, refValue);\n }\n payload = refValue;\n }\n\n this._setRawState(key, payload);\n }\n });\n }\n }\n\n /**\n * Empty storage data.\n */\n emptyStorage(): void {\n if (size(this._state) <= 0) {\n return;\n }\n\n if (this._destroyed) {\n console.error(new Error(`Cannot empty destroyed Storage \"${this.id}\".`));\n return;\n }\n\n if (!this._context.getIsWritable()) {\n console.error(new Error(`Cannot empty Storage \"${this.id}\" without writable access.`));\n return;\n }\n\n this.setState(mapValues(this._state, noop as () => undefined));\n }\n\n /**\n * Delete storage index with all of its data and destroy the Storage instance.\n */\n deleteStorage(): void {\n if (this.id === null) {\n throw new Error(`Cannot delete main Storage`);\n }\n\n if (!this._context.getIsWritable()) {\n console.error(new Error(`Cannot delete Storage \"${this.id}\" without writable access.`));\n return;\n }\n\n this.destroy();\n\n this._context.updateAttributes([STORAGE_NS, this.id], void 0);\n }\n\n get destroyed(): boolean {\n return this._destroyed;\n }\n\n /**\n * Destroy the Storage instance. The data will be kept.\n */\n destroy() {\n this._destroyed = true;\n this._sideEffect.flushAll();\n }\n\n private _getRawState(): TState | undefined;\n private _getRawState(defaultValue: TState): TState;\n private _getRawState(defaultValue?: TState): TState | undefined {\n if (this.id === null) {\n return this._context.getAttributes() ?? defaultValue;\n } else {\n return get(this._context.getAttributes(), [STORAGE_NS, this.id], defaultValue);\n }\n }\n\n private _setRawState(key: string, value: any): void {\n if (this.id === null) {\n if (key === STORAGE_NS) {\n throw new Error(`Cannot set attribute internal filed \"${STORAGE_NS}\"`);\n }\n return this._context.updateAttributes([key], value);\n } else {\n return this._context.updateAttributes([STORAGE_NS, this.id, key], value);\n }\n }\n\n private _updateProperties(\n actions: ReadonlyArray<AkkoObjectUpdatedProperty<TState, string>>\n ): void {\n if (this._destroyed) {\n console.error(\n new Error(`Cannot call _updateProperties on destroyed Storage \"${this.id}\".`)\n );\n return;\n }\n\n if (actions.length > 0) {\n const diffs: Diff<TState> = {};\n\n for (let i = 0; i < actions.length; i++) {\n try {\n const action = actions[i];\n const key = action.key as Extract<keyof TState, string>;\n\n if (this.id === null && key === STORAGE_NS) {\n continue;\n }\n\n const value = isObject(action.value)\n ? JSON.parse(JSON.stringify(action.value))\n : action.value;\n let oldValue: TState[Extract<keyof TState, string>] | undefined;\n if (this._lastValue.has(key)) {\n oldValue = this._lastValue.get(key);\n this._lastValue.delete(key);\n }\n\n switch (action.kind) {\n case 2: {\n // Removed\n if (has(this._state, key)) {\n oldValue = this._state[key];\n delete this._state[key];\n }\n diffs[key] = { oldValue };\n break;\n }\n default: {\n let newValue = value;\n\n if (isRef<TState[Extract<keyof TState, string>]>(value)) {\n const { k, v } = value;\n const curValue = this._state[key];\n if (isObject(curValue) && this._refMap.get(curValue)?.k === k) {\n newValue = curValue;\n } else {\n newValue = v;\n if (isObject(v)) {\n this._refMap.set(v, value);\n }\n }\n }\n\n if (newValue !== this._state[key]) {\n oldValue = this._state[key];\n this._state[key] = newValue;\n }\n\n diffs[key] = { newValue, oldValue };\n break;\n }\n }\n } catch (e) {\n console.error(e);\n }\n }\n\n this.onStateChanged.dispatch(diffs);\n }\n }\n}\n","import { BoxNotCreatedError } from \"../Utils/error\";\nimport { putScenes } from \"../Utils/Common\";\nimport { Storage } from \"./Storage\";\nimport {\n autorun,\n listenDisposed,\n listenUpdated,\n reaction,\n unlistenDisposed,\n unlistenUpdated,\n toJS,\n} from \"white-web-sdk\";\nimport type {\n Room,\n SceneDefinition,\n View,\n EventListener as WhiteEventListener,\n} from \"white-web-sdk\";\nimport type { NotMinimizedBoxState, ReadonlyTeleBox, TeleBoxState } from \"@netless/telebox-insider\";\nimport type Emittery from \"emittery\";\nimport type { BoxManager } from \"../BoxManager\";\nimport type { AppEmitterEvent, WindowManager } from \"../index\";\nimport type { AppManager } from \"../AppManager\";\nimport type { AppProxy } from \"./AppProxy\";\nimport type {\n MagixEventAddListener,\n MagixEventDispatcher,\n MagixEventRemoveListener,\n} from \"./MagixEvent\";\nimport type { AddPageParams, PageController, PageState } from \"../Page\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { callbacks } from \"../callback\";\n\nexport class AppContext<TAttributes extends {} = any, TMagixEventPayloads = any, TAppOptions = any>\n implements PageController\n{\n static readonly kind = \"AppContext\";\n public readonly emitter: Emittery<AppEmitterEvent<TAttributes>>;\n public readonly mobxUtils = {\n autorun,\n reaction,\n toJS,\n };\n public readonly objectUtils = {\n listenUpdated,\n unlistenUpdated,\n listenDisposed,\n unlistenDisposed,\n };\n\n private store = this.manager.store;\n public readonly isAddApp: boolean;\n public readonly isReplay = this.manager.isReplay;\n\n constructor(\n private manager: AppManager,\n private boxManager: BoxManager,\n public appId: string,\n private appProxy: AppProxy,\n private appOptions?: TAppOptions | (() => TAppOptions)\n ) {\n this.emitter = appProxy.appEmitter;\n this.isAddApp = appProxy.isAddApp;\n }\n\n public getManager = (): AppManager => {\n return this.manager;\n };\n\n public getBoxManager = (): BoxManager => {\n return this.boxManager;\n };\n\n public getWindowManager = (): WindowManager => {\n return this.manager.windowManger;\n };\n\n public getBoxStatus = (): TeleBoxState | undefined => {\n return this.manager.store.getBoxStatus(this.appId);\n };\n\n public getLastNotMinimizedBoxStatus = (): NotMinimizedBoxState | undefined => {\n return this.manager.store.getLastNotMinimizedBoxStatus(this.appId);\n };\n\n public getDisplayer = () => {\n return this.manager.displayer;\n };\n\n public getAppProxy = (): AppProxy => {\n return this.appProxy;\n };\n\n /** @deprecated Use context.storage.state instead. */\n public getAttributes = (): TAttributes | undefined => {\n return this.appProxy.attributes;\n };\n\n public getScenes = (): SceneDefinition[] | undefined => {\n const appAttr = this.store.getAppAttributes(this.appId);\n if (appAttr?.isDynamicPPT) {\n return this.appProxy.scenes;\n } else {\n return appAttr?.options[\"scenes\"];\n }\n };\n\n public getView = (): View | undefined => {\n return this.appProxy.view;\n };\n\n public mountView = (dom: HTMLElement): void => {\n const view = this.getView();\n if (view) {\n view.divElement = dom as HTMLDivElement;\n setTimeout(() => {\n // 渲染需要时间,延迟 refresh\n this.getRoom()?.refreshViewSize();\n callbacks.emit(\"onAppViewMounted\", { appId: this.appId, view });\n }, 1000);\n }\n };\n\n public getInitScenePath = () => {\n return this.manager.getAppInitPath(this.appId);\n };\n\n /** Get App writable status. */\n public getIsWritable = (): boolean => {\n return this.manager.canOperate;\n };\n\n /** Get the App Window UI box. */\n public getBox = (): ReadonlyTeleBox => {\n const box = this.boxManager.getBox(this.appId);\n if (box) {\n return box;\n } else {\n throw new BoxNotCreatedError();\n }\n };\n\n public getRoom = (): Room | undefined => {\n return this.manager.room;\n };\n\n /** @deprecated Use context.storage.setState instead. */\n public setAttributes = (attributes: TAttributes) => {\n this.manager.safeSetAttributes({ [this.appId]: attributes });\n };\n\n /** @deprecated Use context.storage.setState instead. */\n public updateAttributes = (keys: string[], value: any) => {\n if (this.manager.attributes[this.appId]) {\n this.manager.safeUpdateAttributes([this.appId, ...keys], value);\n }\n };\n\n public setScenePath = async (scenePath: string): Promise<void> => {\n if (!this.appProxy.box) return;\n this.appProxy.setFullPath(scenePath);\n // 兼容 15 版本 SDK 的切页\n this.getRoom()?.setScenePath(scenePath);\n };\n\n /** Get the local App options. */\n public getAppOptions = (): TAppOptions | undefined => {\n return typeof this.appOptions === \"function\"\n ? (this.appOptions as () => TAppOptions)()\n : this.appOptions;\n };\n\n private _storage?: Storage<TAttributes>;\n\n /** Main Storage for attributes. */\n public get storage(): Storage<TAttributes> {\n if (!this._storage) {\n this._storage = new Storage(this);\n }\n return this._storage;\n }\n\n /**\n * Create separated storages for flexible state management.\n * @param storeId Namespace for the storage. Storages of the same namespace share the same data.\n * @param defaultState Default state for initial storage creation.\n * @returns\n */\n public createStorage = <TState extends {}>(\n storeId: string,\n defaultState?: TState\n ): Storage<TState> => {\n const storage = new Storage(this, storeId, defaultState);\n this.emitter.on(\"destroy\", () => {\n storage.destroy();\n });\n return storage;\n };\n\n /** Dispatch events to other clients (and self). */\n public dispatchMagixEvent: MagixEventDispatcher<TMagixEventPayloads> = (...args) => {\n // can't dispatch events on replay mode\n const appScopeEvent = `${this.appId}:${args[0]}`;\n return this.manager.room?.dispatchMagixEvent(appScopeEvent, args[1]);\n };\n\n /** Listen to events from others clients (and self messages). */\n public addMagixEventListener: MagixEventAddListener<TMagixEventPayloads> = (\n event,\n handler,\n options\n ) => {\n const appScopeEvent = `${this.appId}:${event}`;\n this.manager.displayer.addMagixEventListener(\n appScopeEvent,\n handler as WhiteEventListener,\n options\n );\n return () =>\n this.manager.displayer.removeMagixEventListener(\n appScopeEvent,\n handler as WhiteEventListener\n );\n };\n\n /** Remove a Magix event listener. */\n public removeMagixEventListener = this.manager.displayer.removeMagixEventListener.bind(\n this.manager.displayer\n ) as MagixEventRemoveListener<TMagixEventPayloads>;\n\n /** PageController */\n public nextPage = async (): Promise<boolean> => {\n const nextIndex = this.pageState.index + 1;\n if (nextIndex > this.pageState.length - 1) {\n console.warn(\"[WindowManager] nextPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(nextIndex);\n return true;\n };\n\n public jumpPage = async (index: number): Promise<boolean> => {\n if (!(0 <= index && index < this.pageState.length)) {\n console.warn(\"[WindowManager] nextPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(index);\n return true;\n };\n\n public prevPage = async (): Promise<boolean> => {\n const nextIndex = this.pageState.index - 1;\n if (nextIndex < 0) {\n console.warn(\"[WindowManager] prevPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(nextIndex);\n return true;\n };\n\n public addPage = async (params?: AddPageParams) => {\n const after = params?.after;\n const scene = params?.scene;\n const scenePath = this.appProxy.scenePath;\n if (!scenePath) return;\n if (after) {\n const nextIndex = this.pageState.index + 1;\n putScenes(this.manager.room, scenePath, [scene || {}], nextIndex);\n } else {\n putScenes(this.manager.room, scenePath, [scene || {}]);\n }\n };\n\n public removePage = async (index?: number): Promise<boolean> => {\n const needRemoveIndex = index === undefined ? this.pageState.index : index;\n if (this.pageState.length === 1) {\n console.warn(`[WindowManager]: can not remove the last page`);\n return false;\n }\n if (needRemoveIndex < 0 || needRemoveIndex >= this.pageState.length) {\n console.warn(`[WindowManager]: page index ${index} out of range`);\n return false;\n }\n return this.appProxy.removeSceneByIndex(needRemoveIndex);\n };\n\n public get pageState(): PageState {\n return this.appProxy.pageState;\n }\n\n public get kind(): string {\n return this.appProxy.kind;\n }\n\n /** Dispatch a local event to `manager.onAppEvent()`. */\n public dispatchAppEvent(type: string, value?: any): void {\n internalEmitter.emit(`custom-${this.kind}` as any, {\n kind: this.kind,\n appId: this.appId,\n type,\n value,\n });\n }\n}\n","import type { Displayer, ScenesCallbacksNode, View } from \"white-web-sdk\";\nimport type { PageState } from \"../Page\";\n\nexport type AppPageStateParams = {\n displayer: Displayer;\n scenePath: string | undefined;\n view: View | undefined;\n notifyPageStateChange: () => void;\n};\n\nexport class AppPageStateImpl {\n private sceneNode: ScenesCallbacksNode | null = null;\n\n constructor(private params: AppPageStateParams) {\n const { displayer, scenePath } = this.params;\n if (scenePath) {\n this.sceneNode = displayer.createScenesCallback(scenePath, {\n onAddScene: this.onSceneChange,\n onRemoveScene: this.onSceneChange,\n });\n }\n }\n\n private onSceneChange = (node: ScenesCallbacksNode) => {\n this.sceneNode = node;\n this.params.notifyPageStateChange();\n };\n\n public getFullPath(index: number) {\n const scenes = this.sceneNode?.scenes;\n if (this.params.scenePath && scenes) {\n const name = scenes[index];\n if (name) {\n return `${this.params.scenePath}/${name}`;\n }\n }\n }\n\n public toObject(): PageState {\n return {\n index: this.params.view?.focusSceneIndex || 0,\n length: this.sceneNode?.scenes.length || 0,\n };\n }\n\n public destroy() {\n this.sceneNode?.dispose();\n }\n}\n","var fancyScrollbar = \"\";\nvar style$4 = \"\";\nvar eventemitter3 = { exports: {} };\n(function(module) {\n var has = Object.prototype.hasOwnProperty, prefix = \"~\";\n function Events() {\n }\n if (Object.create) {\n Events.prototype = /* @__PURE__ */ Object.create(null);\n if (!new Events().__proto__)\n prefix = false;\n }\n function EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n }\n function addListener(emitter, event, fn, context, once) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"The listener must be a function\");\n }\n var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;\n if (!emitter._events[evt])\n emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn)\n emitter._events[evt].push(listener);\n else\n emitter._events[evt] = [emitter._events[evt], listener];\n return emitter;\n }\n function clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0)\n emitter._events = new Events();\n else\n delete emitter._events[evt];\n }\n function EventEmitter2() {\n this._events = new Events();\n this._eventsCount = 0;\n }\n EventEmitter2.prototype.eventNames = function eventNames() {\n var names = [], events, name;\n if (this._eventsCount === 0)\n return names;\n for (name in events = this._events) {\n if (has.call(events, name))\n names.push(prefix ? name.slice(1) : name);\n }\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n return names;\n };\n EventEmitter2.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event, handlers = this._events[evt];\n if (!handlers)\n return [];\n if (handlers.fn)\n return [handlers.fn];\n for (var i2 = 0, l = handlers.length, ee = new Array(l); i2 < l; i2++) {\n ee[i2] = handlers[i2].fn;\n }\n return ee;\n };\n EventEmitter2.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event, listeners = this._events[evt];\n if (!listeners)\n return 0;\n if (listeners.fn)\n return 1;\n return listeners.length;\n };\n EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt])\n return false;\n var listeners = this._events[evt], len = arguments.length, args, i2;\n if (listeners.fn) {\n if (listeners.once)\n this.removeListener(event, listeners.fn, void 0, true);\n switch (len) {\n case 1:\n return listeners.fn.call(listeners.context), true;\n case 2:\n return listeners.fn.call(listeners.context, a1), true;\n case 3:\n return listeners.fn.call(listeners.context, a1, a2), true;\n case 4:\n return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n for (i2 = 1, args = new Array(len - 1); i2 < len; i2++) {\n args[i2 - 1] = arguments[i2];\n }\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length, j;\n for (i2 = 0; i2 < length; i2++) {\n if (listeners[i2].once)\n this.removeListener(event, listeners[i2].fn, void 0, true);\n switch (len) {\n case 1:\n listeners[i2].fn.call(listeners[i2].context);\n break;\n case 2:\n listeners[i2].fn.call(listeners[i2].context, a1);\n break;\n case 3:\n listeners[i2].fn.call(listeners[i2].context, a1, a2);\n break;\n case 4:\n listeners[i2].fn.call(listeners[i2].context, a1, a2, a3);\n break;\n default:\n if (!args)\n for (j = 1, args = new Array(len - 1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n listeners[i2].fn.apply(listeners[i2].context, args);\n }\n }\n }\n return true;\n };\n EventEmitter2.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n };\n EventEmitter2.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n };\n EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt])\n return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n var listeners = this._events[evt];\n if (listeners.fn) {\n if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n clearEvent(this, evt);\n }\n } else {\n for (var i2 = 0, events = [], length = listeners.length; i2 < length; i2++) {\n if (listeners[i2].fn !== fn || once && !listeners[i2].once || context && listeners[i2].context !== context) {\n events.push(listeners[i2]);\n }\n }\n if (events.length)\n this._events[evt] = events.length === 1 ? events[0] : events;\n else\n clearEvent(this, evt);\n }\n return this;\n };\n EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt])\n clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n return this;\n };\n EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;\n EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;\n EventEmitter2.prefixed = prefix;\n EventEmitter2.EventEmitter = EventEmitter2;\n {\n module.exports = EventEmitter2;\n }\n})(eventemitter3);\nvar EventEmitter = eventemitter3.exports;\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar __assign = function() {\n __assign = Object.assign || function __assign2(t2) {\n for (var s2, i2 = 1, n = arguments.length; i2 < n; i2++) {\n s2 = arguments[i2];\n for (var p in s2)\n if (Object.prototype.hasOwnProperty.call(s2, p))\n t2[p] = s2[p];\n }\n return t2;\n };\n return __assign.apply(this, arguments);\n};\nfunction __rest(s2, e2) {\n var t2 = {};\n for (var p in s2)\n if (Object.prototype.hasOwnProperty.call(s2, p) && e2.indexOf(p) < 0)\n t2[p] = s2[p];\n if (s2 != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i2 = 0, p = Object.getOwnPropertySymbols(s2); i2 < p.length; i2++) {\n if (e2.indexOf(p[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p[i2]))\n t2[p[i2]] = s2[p[i2]];\n }\n return t2;\n}\nvar prevTime = 0;\nvar onNextFrame = typeof window !== \"undefined\" && window.requestAnimationFrame !== void 0 ? function(callback) {\n return window.requestAnimationFrame(callback);\n} : function(callback) {\n var timestamp = Date.now();\n var timeToCall = Math.max(0, 16.7 - (timestamp - prevTime));\n prevTime = timestamp + timeToCall;\n setTimeout(function() {\n return callback(prevTime);\n }, timeToCall);\n};\nvar createStep = function(setRunNextFrame) {\n var processToRun = [];\n var processToRunNextFrame = [];\n var numThisFrame = 0;\n var isProcessing2 = false;\n var i2 = 0;\n var cancelled = /* @__PURE__ */ new WeakSet();\n var toKeepAlive = /* @__PURE__ */ new WeakSet();\n var renderStep = {\n cancel: function(process) {\n var indexOfCallback = processToRunNextFrame.indexOf(process);\n cancelled.add(process);\n if (indexOfCallback !== -1) {\n processToRunNextFrame.splice(indexOfCallback, 1);\n }\n },\n process: function(frame2) {\n var _a;\n isProcessing2 = true;\n _a = [processToRunNextFrame, processToRun], processToRun = _a[0], processToRunNextFrame = _a[1];\n processToRunNextFrame.length = 0;\n numThisFrame = processToRun.length;\n if (numThisFrame) {\n var process_1;\n for (i2 = 0; i2 < numThisFrame; i2++) {\n process_1 = processToRun[i2];\n process_1(frame2);\n if (toKeepAlive.has(process_1) === true && !cancelled.has(process_1)) {\n renderStep.schedule(process_1);\n setRunNextFrame(true);\n }\n }\n }\n isProcessing2 = false;\n },\n schedule: function(process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n var addToCurrentBuffer = immediate && isProcessing2;\n var buffer = addToCurrentBuffer ? processToRun : processToRunNextFrame;\n cancelled.delete(process);\n if (keepAlive)\n toKeepAlive.add(process);\n if (buffer.indexOf(process) === -1) {\n buffer.push(process);\n if (addToCurrentBuffer)\n numThisFrame = processToRun.length;\n }\n }\n };\n return renderStep;\n};\nvar maxElapsed = 40;\nvar defaultElapsed = 1 / 60 * 1e3;\nvar useDefaultElapsed = true;\nvar willRunNextFrame = false;\nvar isProcessing = false;\nvar frame = {\n delta: 0,\n timestamp: 0\n};\nvar stepsOrder = [\"read\", \"update\", \"preRender\", \"render\", \"postRender\"];\nvar setWillRunNextFrame = function(willRun) {\n return willRunNextFrame = willRun;\n};\nvar steps = /* @__PURE__ */ stepsOrder.reduce(function(acc, key) {\n acc[key] = createStep(setWillRunNextFrame);\n return acc;\n}, {});\nvar sync = /* @__PURE__ */ stepsOrder.reduce(function(acc, key) {\n var step = steps[key];\n acc[key] = function(process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n if (!willRunNextFrame)\n startLoop();\n step.schedule(process, keepAlive, immediate);\n return process;\n };\n return acc;\n}, {});\nvar processStep = function(stepId) {\n return steps[stepId].process(frame);\n};\nvar processFrame = function(timestamp) {\n willRunNextFrame = false;\n frame.delta = useDefaultElapsed ? defaultElapsed : Math.max(Math.min(timestamp - frame.timestamp, maxElapsed), 1);\n if (!useDefaultElapsed)\n defaultElapsed = frame.delta;\n frame.timestamp = timestamp;\n isProcessing = true;\n stepsOrder.forEach(processStep);\n isProcessing = false;\n if (willRunNextFrame) {\n useDefaultElapsed = false;\n onNextFrame(processFrame);\n }\n};\nvar startLoop = function() {\n willRunNextFrame = true;\n useDefaultElapsed = true;\n if (!isProcessing)\n onNextFrame(processFrame);\n};\nvar clamp$1 = function(min, max) {\n return function(v) {\n return Math.max(Math.min(v, max), min);\n };\n};\nvar sanitize = function(v) {\n return v % 1 ? Number(v.toFixed(5)) : v;\n};\nvar singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))$/i;\nvar number = {\n test: function(v) {\n return typeof v === \"number\";\n },\n parse: parseFloat,\n transform: function(v) {\n return v;\n }\n};\nvar alpha = __assign(__assign({}, number), { transform: clamp$1(0, 1) });\nvar scale = __assign(__assign({}, number), { default: 1 });\nvar createUnitType = function(unit) {\n return {\n test: function(v) {\n return typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1;\n },\n parse: parseFloat,\n transform: function(v) {\n return \"\" + v + unit;\n }\n };\n};\nvar degrees = createUnitType(\"deg\");\nvar percent = createUnitType(\"%\");\nvar px = createUnitType(\"px\");\nvar progressPercentage = __assign(__assign({}, percent), { parse: function(v) {\n return percent.parse(v) / 100;\n}, transform: function(v) {\n return percent.transform(v * 100);\n} });\nvar getValueFromFunctionString = function(value) {\n return value.substring(value.indexOf(\"(\") + 1, value.lastIndexOf(\")\"));\n};\nvar clampRgbUnit = clamp$1(0, 255);\nvar isRgba = function(v) {\n return v.red !== void 0;\n};\nvar isHsla = function(v) {\n return v.hue !== void 0;\n};\nfunction getValuesAsArray(value) {\n return getValueFromFunctionString(value).replace(/(,|\\/)/g, \" \").split(/ \\s*/);\n}\nvar splitColorValues = function(terms) {\n return function(v) {\n if (typeof v !== \"string\")\n return v;\n var values = {};\n var valuesArray = getValuesAsArray(v);\n for (var i2 = 0; i2 < 4; i2++) {\n values[terms[i2]] = valuesArray[i2] !== void 0 ? parseFloat(valuesArray[i2]) : 1;\n }\n return values;\n };\n};\nvar rgbaTemplate = function(_a) {\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha2 = _b === void 0 ? 1 : _b;\n return \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha2 + \")\";\n};\nvar hslaTemplate = function(_a) {\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha2 = _b === void 0 ? 1 : _b;\n return \"hsla(\" + hue + \", \" + saturation + \", \" + lightness + \", \" + alpha2 + \")\";\n};\nvar rgbUnit = __assign(__assign({}, number), { transform: function(v) {\n return Math.round(clampRgbUnit(v));\n} });\nfunction isColorString(color2, colorType) {\n return color2.startsWith(colorType) && singleColorRegex.test(color2);\n}\nvar rgba = {\n test: function(v) {\n return typeof v === \"string\" ? isColorString(v, \"rgb\") : isRgba(v);\n },\n parse: splitColorValues([\"red\", \"green\", \"blue\", \"alpha\"]),\n transform: function(_a) {\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\n return rgbaTemplate({\n red: rgbUnit.transform(red),\n green: rgbUnit.transform(green),\n blue: rgbUnit.transform(blue),\n alpha: sanitize(alpha.transform(alpha$1))\n });\n }\n};\nvar hsla = {\n test: function(v) {\n return typeof v === \"string\" ? isColorString(v, \"hsl\") : isHsla(v);\n },\n parse: splitColorValues([\"hue\", \"saturation\", \"lightness\", \"alpha\"]),\n transform: function(_a) {\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\n return hslaTemplate({\n hue: Math.round(hue),\n saturation: percent.transform(sanitize(saturation)),\n lightness: percent.transform(sanitize(lightness)),\n alpha: sanitize(alpha.transform(alpha$1))\n });\n }\n};\nvar hex = __assign(__assign({}, rgba), { test: function(v) {\n return typeof v === \"string\" && isColorString(v, \"#\");\n}, parse: function(v) {\n var r2 = \"\";\n var g = \"\";\n var b = \"\";\n if (v.length > 4) {\n r2 = v.substr(1, 2);\n g = v.substr(3, 2);\n b = v.substr(5, 2);\n } else {\n r2 = v.substr(1, 1);\n g = v.substr(2, 1);\n b = v.substr(3, 1);\n r2 += r2;\n g += g;\n b += b;\n }\n return {\n red: parseInt(r2, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: 1\n };\n} });\nvar color = {\n test: function(v) {\n return typeof v === \"string\" && singleColorRegex.test(v) || isRgba(v) || isHsla(v);\n },\n parse: function(v) {\n if (rgba.test(v)) {\n return rgba.parse(v);\n } else if (hsla.test(v)) {\n return hsla.parse(v);\n } else if (hex.test(v)) {\n return hex.parse(v);\n }\n return v;\n },\n transform: function(v) {\n if (isRgba(v)) {\n return rgba.transform(v);\n } else if (isHsla(v)) {\n return hsla.transform(v);\n }\n return v;\n }\n};\nvar createStyler = function(_a) {\n var onRead2 = _a.onRead, onRender2 = _a.onRender, _b = _a.uncachedValues, uncachedValues = _b === void 0 ? /* @__PURE__ */ new Set() : _b, _c = _a.useCache, useCache = _c === void 0 ? true : _c;\n return function(_a2) {\n if (_a2 === void 0) {\n _a2 = {};\n }\n var props = __rest(_a2, []);\n var state = {};\n var changedValues = [];\n var hasChanged = false;\n function setValue(key, value) {\n if (key.startsWith(\"--\")) {\n props.hasCSSVariable = true;\n }\n var currentValue = state[key];\n state[key] = value;\n if (state[key] === currentValue)\n return;\n if (changedValues.indexOf(key) === -1) {\n changedValues.push(key);\n }\n if (!hasChanged) {\n hasChanged = true;\n sync.render(styler.render);\n }\n }\n var styler = {\n get: function(key, forceRead) {\n if (forceRead === void 0) {\n forceRead = false;\n }\n var useCached = !forceRead && useCache && !uncachedValues.has(key) && state[key] !== void 0;\n return useCached ? state[key] : onRead2(key, props);\n },\n set: function(values, value) {\n if (typeof values === \"string\") {\n setValue(values, value);\n } else {\n for (var key in values) {\n setValue(key, values[key]);\n }\n }\n return this;\n },\n render: function(forceRender) {\n if (forceRender === void 0) {\n forceRender = false;\n }\n if (hasChanged || forceRender === true) {\n onRender2(state, props, changedValues);\n hasChanged = false;\n changedValues.length = 0;\n }\n return this;\n }\n };\n return styler;\n };\n};\nvar CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;\nvar REPLACE_TEMPLATE = \"$1-$2\";\nvar camelToDash = function(str) {\n return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();\n};\nvar camelCache = /* @__PURE__ */ new Map();\nvar dashCache = /* @__PURE__ */ new Map();\nvar prefixes = [\"Webkit\", \"Moz\", \"O\", \"ms\", \"\"];\nvar numPrefixes = prefixes.length;\nvar isBrowser = typeof document !== \"undefined\";\nvar testElement;\nvar setDashPrefix = function(key, prefixed) {\n return dashCache.set(key, camelToDash(prefixed));\n};\nvar testPrefix = function(key) {\n testElement = testElement || document.createElement(\"div\");\n for (var i2 = 0; i2 < numPrefixes; i2++) {\n var prefix = prefixes[i2];\n var noPrefix = prefix === \"\";\n var prefixedPropertyName = noPrefix ? key : prefix + key.charAt(0).toUpperCase() + key.slice(1);\n if (prefixedPropertyName in testElement.style || noPrefix) {\n if (noPrefix && key === \"clipPath\" && dashCache.has(key)) {\n return;\n }\n camelCache.set(key, prefixedPropertyName);\n setDashPrefix(key, (noPrefix ? \"\" : \"-\") + camelToDash(prefixedPropertyName));\n }\n }\n};\nvar setServerProperty = function(key) {\n return setDashPrefix(key, key);\n};\nvar prefixer = function(key, asDashCase) {\n if (asDashCase === void 0) {\n asDashCase = false;\n }\n var cache2 = asDashCase ? dashCache : camelCache;\n if (!cache2.has(key)) {\n isBrowser ? testPrefix(key) : setServerProperty(key);\n }\n return cache2.get(key) || key;\n};\nvar axes = [\"\", \"X\", \"Y\", \"Z\"];\nvar order = [\"translate\", \"scale\", \"rotate\", \"skew\", \"transformPerspective\"];\nvar transformProps = /* @__PURE__ */ order.reduce(function(acc, key) {\n return axes.reduce(function(axesAcc, axesKey) {\n axesAcc.push(key + axesKey);\n return axesAcc;\n }, acc);\n}, [\"x\", \"y\", \"z\"]);\nvar transformPropDictionary = /* @__PURE__ */ transformProps.reduce(function(dict, key) {\n dict[key] = true;\n return dict;\n}, {});\nfunction isTransformProp(key) {\n return transformPropDictionary[key] === true;\n}\nfunction sortTransformProps(a, b) {\n return transformProps.indexOf(a) - transformProps.indexOf(b);\n}\nvar transformOriginProps = /* @__PURE__ */ new Set([\"originX\", \"originY\", \"originZ\"]);\nfunction isTransformOriginProp(key) {\n return transformOriginProps.has(key);\n}\nvar int = /* @__PURE__ */ __assign(/* @__PURE__ */ __assign({}, number), { transform: Math.round });\nvar valueTypes = {\n color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n radius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n zIndex: int,\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int\n};\nvar getValueType = function(key) {\n return valueTypes[key];\n};\nvar getValueAsType = function(value, type) {\n return type && typeof value === \"number\" ? type.transform(value) : value;\n};\nvar SCROLL_LEFT = \"scrollLeft\";\nvar SCROLL_TOP = \"scrollTop\";\nvar scrollKeys = /* @__PURE__ */ new Set([SCROLL_LEFT, SCROLL_TOP]);\nvar blacklist = /* @__PURE__ */ new Set([SCROLL_LEFT, SCROLL_TOP, \"transform\"]);\nvar translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\"\n};\nfunction isCustomTemplate(v) {\n return typeof v === \"function\";\n}\nfunction buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone) {\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n }\n var transformString = \"\";\n var transformHasZ = false;\n transformKeys.sort(sortTransformProps);\n var numTransformKeys = transformKeys.length;\n for (var i2 = 0; i2 < numTransformKeys; i2++) {\n var key = transformKeys[i2];\n transformString += (translateAlias[key] || key) + \"(\" + transform[key] + \") \";\n transformHasZ = key === \"z\" ? true : transformHasZ;\n }\n if (!transformHasZ && enableHardwareAcceleration) {\n transformString += \"translateZ(0)\";\n } else {\n transformString = transformString.trim();\n }\n if (isCustomTemplate(state.transform)) {\n transformString = state.transform(transform, transformIsDefault ? \"\" : transformString);\n } else if (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\nfunction buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone) {\n if (enableHardwareAcceleration === void 0) {\n enableHardwareAcceleration = true;\n }\n if (styles === void 0) {\n styles = {};\n }\n if (transform === void 0) {\n transform = {};\n }\n if (transformOrigin === void 0) {\n transformOrigin = {};\n }\n if (transformKeys === void 0) {\n transformKeys = [];\n }\n if (isDashCase === void 0) {\n isDashCase = false;\n }\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n }\n var transformIsDefault = true;\n var hasTransform = false;\n var hasTransformOrigin = false;\n for (var key in state) {\n var value = state[key];\n var valueType = getValueType(key);\n var valueAsType = getValueAsType(value, valueType);\n if (isTransformProp(key)) {\n hasTransform = true;\n transform[key] = valueAsType;\n transformKeys.push(key);\n if (transformIsDefault) {\n if (valueType.default && value !== valueType.default || !valueType.default && value !== 0) {\n transformIsDefault = false;\n }\n }\n } else if (isTransformOriginProp(key)) {\n transformOrigin[key] = valueAsType;\n hasTransformOrigin = true;\n } else if (!blacklist.has(key) || !isCustomTemplate(valueAsType)) {\n styles[prefixer(key, isDashCase)] = valueAsType;\n }\n }\n if (hasTransform || typeof state.transform === \"function\") {\n styles.transform = buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone);\n }\n if (hasTransformOrigin) {\n styles.transformOrigin = (transformOrigin.originX || \"50%\") + \" \" + (transformOrigin.originY || \"50%\") + \" \" + (transformOrigin.originZ || 0);\n }\n return styles;\n}\nfunction createStyleBuilder(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.enableHardwareAcceleration, enableHardwareAcceleration = _c === void 0 ? true : _c, _d = _b.isDashCase, isDashCase = _d === void 0 ? true : _d, _e = _b.allowTransformNone, allowTransformNone = _e === void 0 ? true : _e;\n var styles = {};\n var transform = {};\n var transformOrigin = {};\n var transformKeys = [];\n return function(state) {\n transformKeys.length = 0;\n buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone);\n return styles;\n };\n}\nfunction onRead(key, options) {\n var element = options.element, preparseOutput = options.preparseOutput;\n var defaultValueType = getValueType(key);\n if (isTransformProp(key)) {\n return defaultValueType ? defaultValueType.default || 0 : 0;\n } else if (scrollKeys.has(key)) {\n return element[key];\n } else {\n var domValue = window.getComputedStyle(element, null).getPropertyValue(prefixer(key, true)) || 0;\n return preparseOutput && defaultValueType && defaultValueType.test(domValue) && defaultValueType.parse ? defaultValueType.parse(domValue) : domValue;\n }\n}\nfunction onRender(state, _a, changedValues) {\n var element = _a.element, buildStyles = _a.buildStyles, hasCSSVariable = _a.hasCSSVariable;\n Object.assign(element.style, buildStyles(state));\n if (hasCSSVariable) {\n var numChangedValues = changedValues.length;\n for (var i2 = 0; i2 < numChangedValues; i2++) {\n var key = changedValues[i2];\n if (key.startsWith(\"--\")) {\n element.style.setProperty(key, state[key]);\n }\n }\n }\n if (changedValues.indexOf(SCROLL_LEFT) !== -1) {\n element[SCROLL_LEFT] = state[SCROLL_LEFT];\n }\n if (changedValues.indexOf(SCROLL_TOP) !== -1) {\n element[SCROLL_TOP] = state[SCROLL_TOP];\n }\n}\nvar cssStyler = /* @__PURE__ */ createStyler({\n onRead,\n onRender,\n uncachedValues: scrollKeys\n});\nfunction createCssStyler(element, _a) {\n if (_a === void 0) {\n _a = {};\n }\n var enableHardwareAcceleration = _a.enableHardwareAcceleration, allowTransformNone = _a.allowTransformNone, props = __rest(_a, [\"enableHardwareAcceleration\", \"allowTransformNone\"]);\n return cssStyler(__assign({ element, buildStyles: createStyleBuilder({\n enableHardwareAcceleration,\n allowTransformNone\n }), preparseOutput: true }, props));\n}\nvar camelCaseAttributes = /* @__PURE__ */ new Set([\"baseFrequency\", \"diffuseConstant\", \"kernelMatrix\", \"kernelUnitLength\", \"keySplines\", \"keyTimes\", \"limitingConeAngle\", \"markerHeight\", \"markerWidth\", \"numOctaves\", \"targetX\", \"targetY\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"stdDeviation\", \"tableValues\"]);\nvar defaultOrigin = 0.5;\nvar svgAttrsTemplate = function() {\n return {\n style: {}\n };\n};\nvar progressToPixels = function(progress, length) {\n return px.transform(progress * length);\n};\nvar unmeasured = { x: 0, y: 0, width: 0, height: 0 };\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\" ? origin : px.transform(offset + size * origin);\n}\nfunction calculateSVGTransformOrigin(dimensions, originX, originY) {\n return calcOrigin(originX, dimensions.x, dimensions.width) + \" \" + calcOrigin(originY, dimensions.y, dimensions.height);\n}\nvar svgStyleConfig = {\n enableHardwareAcceleration: false,\n isDashCase: false\n};\nfunction buildSVGAttrs(_a, dimensions, totalPathLength, cssBuilder, attrs, isDashCase) {\n if (dimensions === void 0) {\n dimensions = unmeasured;\n }\n if (cssBuilder === void 0) {\n cssBuilder = createStyleBuilder(svgStyleConfig);\n }\n if (attrs === void 0) {\n attrs = svgAttrsTemplate();\n }\n if (isDashCase === void 0) {\n isDashCase = true;\n }\n var attrX = _a.attrX, attrY = _a.attrY, originX = _a.originX, originY = _a.originY, pathLength = _a.pathLength, _b = _a.pathSpacing, pathSpacing = _b === void 0 ? 1 : _b, _c = _a.pathOffset, pathOffset = _c === void 0 ? 0 : _c, state = __rest(_a, [\"attrX\", \"attrY\", \"originX\", \"originY\", \"pathLength\", \"pathSpacing\", \"pathOffset\"]);\n var style2 = cssBuilder(state);\n for (var key in style2) {\n if (key === \"transform\") {\n attrs.style.transform = style2[key];\n } else {\n var attrKey = isDashCase && !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n attrs[attrKey] = style2[key];\n }\n }\n if (originX !== void 0 || originY !== void 0 || style2.transform) {\n attrs.style.transformOrigin = calculateSVGTransformOrigin(dimensions, originX !== void 0 ? originX : defaultOrigin, originY !== void 0 ? originY : defaultOrigin);\n }\n if (attrX !== void 0)\n attrs.x = attrX;\n if (attrY !== void 0)\n attrs.y = attrY;\n if (totalPathLength !== void 0 && pathLength !== void 0) {\n attrs[isDashCase ? \"stroke-dashoffset\" : \"strokeDashoffset\"] = progressToPixels(-pathOffset, totalPathLength);\n attrs[isDashCase ? \"stroke-dasharray\" : \"strokeDasharray\"] = progressToPixels(pathLength, totalPathLength) + \" \" + progressToPixels(pathSpacing, totalPathLength);\n }\n return attrs;\n}\nfunction createAttrBuilder(dimensions, totalPathLength, isDashCase) {\n if (isDashCase === void 0) {\n isDashCase = true;\n }\n var attrs = svgAttrsTemplate();\n var cssBuilder = createStyleBuilder(svgStyleConfig);\n return function(state) {\n return buildSVGAttrs(state, dimensions, totalPathLength, cssBuilder, attrs, isDashCase);\n };\n}\nvar getDimensions = function(element) {\n return typeof element.getBBox === \"function\" ? element.getBBox() : element.getBoundingClientRect();\n};\nvar getSVGElementDimensions = function(element) {\n try {\n return getDimensions(element);\n } catch (e2) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n};\nvar isPath = function(element) {\n return element.tagName === \"path\";\n};\nvar svgStyler = /* @__PURE__ */ createStyler({\n onRead: function(key, _a) {\n var element = _a.element;\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n if (!isTransformProp(key)) {\n return element.getAttribute(key);\n } else {\n var valueType = getValueType(key);\n return valueType ? valueType.default || 0 : 0;\n }\n },\n onRender: function(state, _a) {\n var element = _a.element, buildAttrs = _a.buildAttrs;\n var attrs = buildAttrs(state);\n for (var key in attrs) {\n if (key === \"style\") {\n Object.assign(element.style, attrs.style);\n } else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n});\nvar svg = function(element) {\n var dimensions = getSVGElementDimensions(element);\n var pathLength = isPath(element) && element.getTotalLength ? element.getTotalLength() : void 0;\n return svgStyler({\n element,\n buildAttrs: createAttrBuilder(dimensions, pathLength)\n });\n};\nvar viewport = /* @__PURE__ */ createStyler({\n useCache: false,\n onRead: function(key) {\n return key === \"scrollTop\" ? window.pageYOffset : window.pageXOffset;\n },\n onRender: function(_a) {\n var _b = _a.scrollTop, scrollTop = _b === void 0 ? 0 : _b, _c = _a.scrollLeft, scrollLeft = _c === void 0 ? 0 : _c;\n return window.scrollTo(scrollLeft, scrollTop);\n }\n});\nvar cache = /* @__PURE__ */ new WeakMap();\nvar isHTMLElement = function(node) {\n return node instanceof HTMLElement || typeof node.click === \"function\";\n};\nvar isSVGElement = function(node) {\n return node instanceof SVGElement || \"ownerSVGElement\" in node;\n};\nvar createDOMStyler = function(node, props) {\n var styler;\n if (node === window) {\n styler = viewport(node);\n } else if (isHTMLElement(node)) {\n styler = createCssStyler(node, props);\n } else if (isSVGElement(node)) {\n styler = svg(node);\n }\n cache.set(node, styler);\n return styler;\n};\nvar getStyler = function(node, props) {\n return cache.has(node) ? cache.get(node) : createDOMStyler(node, props);\n};\nfunction index(nodeOrSelector, props) {\n var node = typeof nodeOrSelector === \"string\" ? document.querySelector(nodeOrSelector) : nodeOrSelector;\n return getStyler(node, props);\n}\nvar shallowequal = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n if (ret !== void 0) {\n return !!ret;\n }\n if (objA === objB) {\n return true;\n }\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n if (!bHasOwnProperty(key)) {\n return false;\n }\n var valueA = objA[key];\n var valueB = objB[key];\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n if (ret === false || ret === void 0 && valueA !== valueB) {\n return false;\n }\n }\n return true;\n};\nconst e$1 = \"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", s$1 = e$1.length, t$1 = Array(20), r$1 = () => {\n for (let r2 = 0; r2 < 20; r2++)\n t$1[r2] = e$1.charAt(Math.random() * s$1);\n return t$1.join(\"\");\n};\nclass o {\n constructor() {\n this.disposers = /* @__PURE__ */ new Map();\n }\n add(e2, s2 = r$1()) {\n return this.flush(s2), this.disposers.set(s2, e2()), s2;\n }\n addDisposer(e2, s2 = r$1()) {\n return this.flush(s2), this.disposers.set(s2, e2), s2;\n }\n addEventListener(e2, s2, t2, o2, i2 = r$1()) {\n return this.add(() => (e2.addEventListener(s2, t2, o2), () => e2.removeEventListener(s2, t2, o2)), i2), i2;\n }\n setTimeout(e2, s2, t2 = r$1()) {\n return this.add(() => {\n const r2 = window.setTimeout(() => {\n this.remove(t2), e2();\n }, s2);\n return () => window.clearTimeout(r2);\n }, t2);\n }\n setInterval(e2, s2, t2 = r$1()) {\n return this.add(() => {\n const t3 = window.setInterval(e2, s2);\n return () => window.clearInterval(t3);\n }, t2);\n }\n remove(e2) {\n const s2 = this.disposers.get(e2);\n return this.disposers.delete(e2), s2;\n }\n flush(e2) {\n const s2 = this.remove(e2);\n if (s2)\n try {\n s2();\n } catch (t2) {\n console.error(t2);\n }\n }\n flushAll() {\n this.disposers.forEach((e2) => {\n try {\n e2();\n } catch (s2) {\n console.error(s2);\n }\n }), this.disposers.clear();\n }\n}\nvar e = Object.defineProperty, s = (\"undefined\" != typeof require && require, (s2, r2, t2) => (((s3, r3, t3) => {\n r3 in s3 ? e(s3, r3, { enumerable: true, configurable: true, writable: true, value: t3 }) : s3[r3] = t3;\n})(s2, \"symbol\" != typeof r2 ? r2 + \"\" : r2, t2), t2));\nclass r {\n constructor(e2, r2) {\n s(this, \"_value\"), s(this, \"_beforeDestroys\"), s(this, \"_subscribers\"), this._value = e2, r2 && (this.compare = r2);\n }\n get value() {\n return this._value;\n }\n setValue(e2, s2) {\n if (!this.compare(e2, this._value)) {\n const r2 = this._value;\n this._value = e2, this._subscribers && this._subscribers.forEach((t2) => t2(e2, r2, s2));\n }\n }\n reaction(e2) {\n return this._subscribers || (this._subscribers = /* @__PURE__ */ new Set()), this._subscribers.add(e2), () => {\n this._subscribers && this._subscribers.delete(e2);\n };\n }\n subscribe(e2, s2) {\n const r2 = this.reaction(e2);\n return e2(this._value, void 0, s2), r2;\n }\n derive(e2, s2, t2) {\n const i2 = new r(e2(this.value, void 0, t2), s2), o2 = this.reaction((s3, r2, t3) => {\n i2.setValue(e2(s3, r2, t3));\n });\n return i2.addBeforeDestroy(o2), i2;\n }\n destroy() {\n this._beforeDestroys && (this._beforeDestroys.forEach((e2) => e2()), this._beforeDestroys.clear()), this._subscribers && this._subscribers.clear();\n }\n addBeforeDestroy(e2) {\n return this._beforeDestroys || (this._beforeDestroys = /* @__PURE__ */ new Set()), this._beforeDestroys.add(e2), () => {\n this._beforeDestroys && this._beforeDestroys.delete(e2);\n };\n }\n compare(e2, s2) {\n return e2 === s2;\n }\n}\nfunction t(e2, s2, t2, i2) {\n let o2 = e2.map((e3) => e3.value);\n const u2 = new r(s2(o2, void 0, i2), t2);\n return e2.forEach((e3, r2) => {\n const t3 = e3.reaction((e4, t4, i3) => {\n const c2 = o2.slice();\n c2[r2] = e4;\n const n = o2;\n o2 = c2, u2.setValue(s2(c2, n, i3), i3);\n });\n u2.addBeforeDestroy(t3);\n }), u2;\n}\nfunction i(e2, s2) {\n Object.keys(s2).forEach((r2) => {\n u(e2, r2, s2[r2]);\n });\n}\nfunction u(e2, s2, r2) {\n var t2;\n return Object.defineProperties(e2, { [s2]: { get: () => r2.value }, [`_${s2}$`]: { value: r2 }, [`set${t2 = s2, t2[0].toUpperCase() + t2.slice(1)}`]: { value: (e3, s3) => r2.setValue(e3, s3) } }), e2;\n}\nfunction c(e2) {\n const s2 = (s3) => {\n const r2 = e2.addDisposer(() => {\n s3.destroy();\n });\n return s3.addBeforeDestroy(() => {\n e2.remove(r2);\n }), s3;\n };\n return { bindSideEffect: s2, combine: (e3, r2, i2, o2) => s2(t(e3, r2, i2, o2)), createVal: (e3, t2) => s2(new r(e3, t2)) };\n}\nvar style$3 = \"\";\nvar TELE_BOX_COLOR_SCHEME = /* @__PURE__ */ ((TELE_BOX_COLOR_SCHEME2) => {\n TELE_BOX_COLOR_SCHEME2[\"Light\"] = \"light\";\n TELE_BOX_COLOR_SCHEME2[\"Dark\"] = \"dark\";\n TELE_BOX_COLOR_SCHEME2[\"Auto\"] = \"auto\";\n return TELE_BOX_COLOR_SCHEME2;\n})(TELE_BOX_COLOR_SCHEME || {});\nvar TELE_BOX_STATE = /* @__PURE__ */ ((TELE_BOX_STATE2) => {\n TELE_BOX_STATE2[\"Normal\"] = \"normal\";\n TELE_BOX_STATE2[\"Minimized\"] = \"minimized\";\n TELE_BOX_STATE2[\"Maximized\"] = \"maximized\";\n return TELE_BOX_STATE2;\n})(TELE_BOX_STATE || {});\nvar TELE_BOX_EVENT = /* @__PURE__ */ ((TELE_BOX_EVENT2) => {\n TELE_BOX_EVENT2[\"DarkMode\"] = \"dark_mode\";\n TELE_BOX_EVENT2[\"PrefersColorScheme\"] = \"prefers_color_scheme\";\n TELE_BOX_EVENT2[\"Close\"] = \"close\";\n TELE_BOX_EVENT2[\"Focus\"] = \"focus\";\n TELE_BOX_EVENT2[\"Blur\"] = \"blur\";\n TELE_BOX_EVENT2[\"Move\"] = \"move\";\n TELE_BOX_EVENT2[\"Resize\"] = \"resize\";\n TELE_BOX_EVENT2[\"IntrinsicMove\"] = \"intrinsic_move\";\n TELE_BOX_EVENT2[\"IntrinsicResize\"] = \"intrinsic_resize\";\n TELE_BOX_EVENT2[\"VisualResize\"] = \"visual_resize\";\n TELE_BOX_EVENT2[\"ZIndex\"] = \"z_index\";\n TELE_BOX_EVENT2[\"State\"] = \"state\";\n TELE_BOX_EVENT2[\"Minimized\"] = \"minimized\";\n TELE_BOX_EVENT2[\"Maximized\"] = \"maximized\";\n TELE_BOX_EVENT2[\"Readonly\"] = \"readonly\";\n TELE_BOX_EVENT2[\"Destroyed\"] = \"destroyed\";\n TELE_BOX_EVENT2[\"BoxStatus\"] = \"box_status\";\n TELE_BOX_EVENT2[\"LastNotMinimizedBoxStatus\"] = \"last_not_minimized_box_status\";\n TELE_BOX_EVENT2[\"ForceTop\"] = \"force_top\";\n TELE_BOX_EVENT2[\"ForceNormal\"] = \"force_normal\";\n return TELE_BOX_EVENT2;\n})(TELE_BOX_EVENT || {});\nvar TELE_BOX_DELEGATE_EVENT = /* @__PURE__ */ ((TELE_BOX_DELEGATE_EVENT2) => {\n TELE_BOX_DELEGATE_EVENT2[\"Close\"] = \"close\";\n TELE_BOX_DELEGATE_EVENT2[\"Maximize\"] = \"maximize\";\n TELE_BOX_DELEGATE_EVENT2[\"Minimize\"] = \"minimize\";\n return TELE_BOX_DELEGATE_EVENT2;\n})(TELE_BOX_DELEGATE_EVENT || {});\nvar TELE_BOX_RESIZE_HANDLE = /* @__PURE__ */ ((TELE_BOX_RESIZE_HANDLE2) => {\n TELE_BOX_RESIZE_HANDLE2[\"North\"] = \"n\";\n TELE_BOX_RESIZE_HANDLE2[\"South\"] = \"s\";\n TELE_BOX_RESIZE_HANDLE2[\"West\"] = \"w\";\n TELE_BOX_RESIZE_HANDLE2[\"East\"] = \"e\";\n TELE_BOX_RESIZE_HANDLE2[\"NorthWest\"] = \"nw\";\n TELE_BOX_RESIZE_HANDLE2[\"NorthEast\"] = \"ne\";\n TELE_BOX_RESIZE_HANDLE2[\"SouthEast\"] = \"se\";\n TELE_BOX_RESIZE_HANDLE2[\"SouthWest\"] = \"sw\";\n return TELE_BOX_RESIZE_HANDLE2;\n})(TELE_BOX_RESIZE_HANDLE || {});\nconst TeleBoxDragHandleType = \"dh\";\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction preventEvent(ev) {\n ev.stopPropagation();\n if (ev.cancelable) {\n ev.preventDefault();\n }\n}\nfunction flattenEvent(ev) {\n return ev.touches ? ev.touches[0] : ev;\n}\nfunction genUniqueKey() {\n return Date.now().toString().slice(6) + Math.random().toString().slice(2, 8);\n}\nlet defaultBoxCount = 1;\nfunction getBoxDefaultName() {\n return `New Box ${defaultBoxCount++}`;\n}\nfunction isTruthy(value) {\n return Boolean(value);\n}\nfunction isFalsy(value) {\n return !value;\n}\nclass DefaultTitleBar {\n constructor({\n readonly = false,\n title,\n buttons,\n onEvent,\n onDragStart,\n namespace = \"telebox\",\n state = TELE_BOX_STATE.Normal,\n boxStatus,\n forceTop = false,\n forceNormal = false\n } = {}) {\n this.$btns = [];\n this.sideEffect = new o();\n this.lastTitleBarClick = {\n timestamp: 0,\n clientX: -100,\n clientY: -100\n };\n this.handleTitleBarClick = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if (ev.button !== 0) {\n return;\n }\n if ((_a = ev.target.dataset) == null ? void 0 : _a.teleTitleBarNoDblClick) {\n return;\n }\n preventEvent(ev);\n const now = Date.now();\n if (now - this.lastTitleBarClick.timestamp <= 500) {\n if (Math.abs(ev.clientX - this.lastTitleBarClick.clientX) <= 5 && Math.abs(ev.clientY - this.lastTitleBarClick.clientY) <= 5) {\n if (this.onEvent) {\n this.onEvent({ type: TELE_BOX_DELEGATE_EVENT.Maximize });\n }\n }\n } else if (this.onDragStart) {\n this.onDragStart(ev);\n }\n this.lastTitleBarClick.timestamp = now;\n this.lastTitleBarClick.clientX = ev.clientX;\n this.lastTitleBarClick.clientY = ev.clientY;\n };\n this.lastTitleBarTouch = {\n timestamp: 0,\n clientX: -100,\n clientY: -100\n };\n this.handleTitleBarTouch = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if ((_a = ev.target.dataset) == null ? void 0 : _a.teleTitleBarNoDblClick) {\n return;\n }\n preventEvent(ev);\n const now = Date.now();\n const {\n clientX = this.lastTitleBarTouch.clientX + 100,\n clientY = this.lastTitleBarTouch.clientY + 100\n } = ev.touches[0] || {};\n if (now - this.lastTitleBarTouch.timestamp <= 500) {\n if (Math.abs(clientX - this.lastTitleBarTouch.clientX) <= 10 && Math.abs(clientY - this.lastTitleBarTouch.clientY) <= 10) {\n if (this.onEvent) {\n this.onEvent({ type: TELE_BOX_DELEGATE_EVENT.Maximize });\n }\n }\n } else if (this.onDragStart) {\n this.onDragStart(ev);\n }\n this.lastTitleBarTouch.timestamp = now;\n this.lastTitleBarTouch.clientX = clientX;\n this.lastTitleBarTouch.clientY = clientY;\n };\n this.readonly = readonly;\n this.onEvent = onEvent;\n this.onDragStart = onDragStart;\n this.namespace = namespace;\n this.title = title;\n this.state = state;\n this.boxStatus = boxStatus;\n this.forceTop = forceTop;\n this.forceNormal = forceNormal;\n this.buttons = buttons || (forceNormal ? [\n {\n type: TELE_BOX_DELEGATE_EVENT.Close,\n iconClassName: this.wrapClassName(\"titlebar-icon-close\")\n }\n ] : [\n {\n type: TELE_BOX_DELEGATE_EVENT.Minimize,\n iconClassName: this.wrapClassName(\"titlebar-icon-minimize\")\n },\n {\n type: TELE_BOX_DELEGATE_EVENT.Maximize,\n iconClassName: this.wrapClassName(\"titlebar-icon-maximize\"),\n isActive: (state2) => state2 === TELE_BOX_STATE.Maximized\n },\n {\n type: TELE_BOX_DELEGATE_EVENT.Close,\n iconClassName: this.wrapClassName(\"titlebar-icon-close\")\n }\n ]);\n this.$dragArea = this.renderDragArea();\n }\n setTitle(title) {\n this.title = title;\n if (this.$title) {\n this.$title.textContent = title;\n this.$title.title = title;\n }\n }\n setState(state) {\n if (this.state !== state) {\n this.state = state;\n this.buttons.forEach((btn, i2) => {\n if (btn.isActive) {\n this.$btns[i2].classList.toggle(\n \"is-active\",\n btn.isActive(state)\n );\n }\n });\n }\n }\n setBoxStatus(boxStatus) {\n if (this.boxStatus !== boxStatus) {\n this.boxStatus = boxStatus;\n if (boxStatus) {\n this.buttons.forEach((btn, i2) => {\n if (btn.isActive) {\n this.$btns[i2].classList.toggle(\n \"is-active\",\n btn.isActive(boxStatus)\n );\n }\n });\n }\n }\n }\n setReadonly(readonly) {\n if (this.readonly !== readonly) {\n this.readonly = readonly;\n }\n }\n render() {\n if (!this.$titleBar) {\n this.$titleBar = document.createElement(\"div\");\n this.$titleBar.className = this.wrapClassName(\"titlebar\");\n const $titleArea = document.createElement(\"div\");\n $titleArea.className = this.wrapClassName(\"title-area\");\n $titleArea.dataset.teleBoxHandle = TeleBoxDragHandleType;\n this.$title = document.createElement(\"h1\");\n this.$title.className = this.wrapClassName(\"title\");\n this.$title.dataset.teleBoxHandle = TeleBoxDragHandleType;\n if (this.title) {\n this.$title.textContent = this.title;\n this.$title.title = this.title;\n }\n $titleArea.appendChild(this.$title);\n $titleArea.appendChild(this.$dragArea);\n const $buttonsContainer = document.createElement(\"div\");\n $buttonsContainer.className = this.wrapClassName(\"titlebar-btns\");\n this.buttons.forEach(({ iconClassName, isActive }, i2) => {\n const teleTitleBarBtnIndex = String(i2);\n const $btn = document.createElement(\"button\");\n $btn.className = `${this.wrapClassName(\n \"titlebar-btn\"\n )} ${iconClassName}`;\n $btn.dataset.teleTitleBarBtnIndex = teleTitleBarBtnIndex;\n $btn.dataset.teleTitleBarNoDblClick = \"true\";\n if (isActive) {\n $btn.classList.toggle(\"is-active\", isActive(this.boxStatus || this.state));\n }\n this.$btns.push($btn);\n $buttonsContainer.appendChild($btn);\n });\n this.sideEffect.addEventListener(\n $buttonsContainer,\n \"click\",\n (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n const target = ev.target;\n const teleTitleBarBtnIndex = Number(\n (_a = target.dataset) == null ? void 0 : _a.teleTitleBarBtnIndex\n );\n if (!Number.isNaN(teleTitleBarBtnIndex) && teleTitleBarBtnIndex < this.buttons.length) {\n preventEvent(ev);\n const btn = this.buttons[teleTitleBarBtnIndex];\n if (this.onEvent) {\n this.onEvent({\n type: btn.type,\n value: btn.value\n });\n }\n }\n }\n );\n this.$titleBar.appendChild($titleArea);\n this.$titleBar.appendChild($buttonsContainer);\n }\n return this.$titleBar;\n }\n renderDragArea() {\n const $dragArea = document.createElement(\"div\");\n $dragArea.className = this.wrapClassName(\"drag-area\");\n $dragArea.dataset.teleBoxHandle = TeleBoxDragHandleType;\n this.sideEffect.addEventListener(\n $dragArea,\n \"mousedown\",\n this.handleTitleBarClick\n );\n this.sideEffect.addEventListener(\n $dragArea,\n \"touchstart\",\n this.handleTitleBarTouch,\n { passive: true }\n );\n return $dragArea;\n }\n dragHandle() {\n return this.$titleBar;\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n destroy() {\n this.sideEffect.flushAll();\n if (this.$titleBar) {\n this.$titleBar = void 0;\n this.$title = void 0;\n this.$btns.length = 0;\n this.onDragStart = void 0;\n this.onEvent = void 0;\n }\n }\n}\nclass TeleBox {\n constructor({\n id = genUniqueKey(),\n title = getBoxDefaultName(),\n prefersColorScheme = TELE_BOX_COLOR_SCHEME.Light,\n darkMode,\n visible = true,\n width = 0.5,\n height = 0.5,\n minWidth = 0,\n minHeight = 0,\n x = 0.1,\n y = 0.1,\n minimized = false,\n maximized = false,\n readonly = false,\n resizable = true,\n draggable = true,\n fence = true,\n fixRatio = false,\n focus = false,\n zIndex = 100,\n namespace = \"telebox\",\n titleBar,\n content,\n footer,\n styles,\n containerRect = {\n x: 0,\n y: 0,\n width: window.innerWidth,\n height: window.innerHeight\n },\n collectorRect,\n boxStatus,\n lastNotMinimizedBoxStatus,\n forceTop = false,\n forceNormal = false,\n isDragContent = false\n } = {}) {\n this._renderSideEffect = new o();\n this.handleTrackStart = (ev) => {\n var _a;\n return (_a = this._handleTrackStart) == null ? void 0 : _a.call(this, ev);\n };\n this._sideEffect = new o();\n this._valSideEffectBinder = c(this._sideEffect);\n const { combine, createVal } = this._valSideEffectBinder;\n this.id = id;\n this.namespace = namespace;\n this.events = new EventEmitter();\n this._delegateEvents = new EventEmitter();\n const boxStatus$ = createVal(boxStatus);\n const lastNotMinimizedBoxStatus$ = createVal(lastNotMinimizedBoxStatus);\n const prefersColorScheme$ = createVal(\n prefersColorScheme\n );\n prefersColorScheme$.reaction((prefersColorScheme2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(\n TELE_BOX_EVENT.PrefersColorScheme,\n prefersColorScheme2\n );\n }\n });\n const darkMode$ = createVal(Boolean(darkMode));\n if (darkMode == null) {\n prefersColorScheme$.subscribe(\n (prefersColorScheme2, _, skipUpdate) => {\n this._sideEffect.add(() => {\n if (prefersColorScheme2 === \"auto\") {\n const prefersDark = window.matchMedia(\n \"(prefers-color-scheme: dark)\"\n );\n if (prefersDark) {\n darkMode$.setValue(\n prefersDark.matches,\n skipUpdate\n );\n const handler = (evt) => {\n darkMode$.setValue(evt.matches, skipUpdate);\n };\n prefersDark.addListener(handler);\n return () => prefersDark.removeListener(handler);\n } else {\n return noop;\n }\n } else {\n darkMode$.setValue(\n prefersColorScheme2 === \"dark\",\n skipUpdate\n );\n return noop;\n }\n }, \"prefers-color-scheme\");\n }\n );\n }\n darkMode$.reaction((darkMode2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.DarkMode, darkMode2);\n }\n });\n const containerRect$ = createVal(containerRect, shallowequal);\n const collectorRect$ = createVal(collectorRect, shallowequal);\n const forceTop$ = createVal(forceTop);\n forceTop$.reaction((forceTop2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ForceTop, forceTop2 || false);\n }\n });\n const forceNormal$ = createVal(forceNormal);\n forceNormal$.reaction((forceNormal2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ForceNormal, forceNormal2 || false);\n }\n });\n const isDragContent$ = createVal(isDragContent);\n const title$ = createVal(title);\n title$.reaction((title2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.titleBar.setTitle(title2);\n }\n });\n const visible$ = createVal(visible);\n visible$.reaction((visible2, _, skipUpdate) => {\n if (!skipUpdate && !visible2) {\n this.events.emit(TELE_BOX_EVENT.Close);\n }\n });\n const readonly$ = createVal(readonly);\n readonly$.reaction((readonly2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Readonly, readonly2);\n }\n });\n const resizable$ = createVal(resizable);\n const draggable$ = createVal(draggable);\n const fence$ = createVal(fence);\n const fixRatio$ = createVal(fixRatio);\n const zIndex$ = createVal(zIndex);\n zIndex$.reaction((zIndex2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ZIndex, zIndex2);\n }\n });\n const focus$ = createVal(focus);\n focus$.reaction((focus2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(\n focus2 ? TELE_BOX_EVENT.Focus : TELE_BOX_EVENT.Blur\n );\n }\n });\n const minimized$ = createVal(minimized);\n minimized$.reaction((minimized2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Minimized, minimized2);\n }\n });\n const maximized$ = createVal(maximized);\n maximized$.reaction((maximized2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Maximized, maximized2);\n }\n });\n const state$ = combine(\n [minimized$, maximized$, boxStatus$],\n ([minimized2, maximized2, boxStatus2]) => minimized2 ? TELE_BOX_STATE.Minimized : maximized2 ? TELE_BOX_STATE.Maximized : !boxStatus2 ? TELE_BOX_STATE.Normal : boxStatus2\n );\n state$.reaction((state, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.State, state);\n }\n });\n const minSize$ = createVal(\n {\n width: clamp(minWidth, 0, 1),\n height: clamp(minHeight, 0, 1)\n },\n shallowequal\n );\n const intrinsicSize$ = createVal(\n {\n width: clamp(width, minSize$.value.width, 1),\n height: clamp(height, minSize$.value.height, 1)\n },\n shallowequal\n );\n minSize$.reaction((minSize, _, skipUpdate) => {\n intrinsicSize$.setValue(\n {\n width: clamp(width, minSize.width, 1),\n height: clamp(height, minSize.height, 1)\n },\n skipUpdate\n );\n });\n intrinsicSize$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.IntrinsicResize, size);\n }\n });\n const size$ = combine(\n [intrinsicSize$, maximized$, boxStatus$],\n ([intrinsicSize, maximized2, boxStatus2]) => {\n if (maximized2 || boxStatus2 === TELE_BOX_STATE.Maximized) {\n return { width: 1, height: 1 };\n }\n return intrinsicSize;\n },\n shallowequal\n );\n size$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Resize, size);\n }\n });\n const visualSize$ = combine(\n [size$, minimized$, containerRect$, collectorRect$, boxStatus$],\n ([size, minimized2, containerRect2, collectorRect2, boxStatus2]) => {\n if ((minimized2 || boxStatus2 === TELE_BOX_STATE.Minimized) && collectorRect2) {\n return {\n width: collectorRect2.width / size.width / containerRect2.width,\n height: collectorRect2.height / size.height / containerRect2.height\n };\n }\n return size;\n },\n shallowequal\n );\n visualSize$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.VisualResize, size);\n }\n });\n const intrinsicCoord$ = createVal(\n { x: clamp(x, 0, 1), y: clamp(y, 0, 1) },\n shallowequal\n );\n intrinsicCoord$.reaction((coord, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.IntrinsicMove, coord);\n }\n });\n const coord$ = combine(\n [\n intrinsicCoord$,\n intrinsicSize$,\n containerRect$,\n collectorRect$,\n minimized$,\n maximized$,\n boxStatus$,\n lastNotMinimizedBoxStatus$\n ],\n ([\n intrinsicCoord,\n intrinsicSize,\n containerRect2,\n collectorRect2,\n minimized2,\n maximized2,\n boxStatus2,\n lastNotMinimizedBoxStatus2\n ]) => {\n if ((minimized2 || boxStatus2 === TELE_BOX_STATE.Minimized) && collectorRect2) {\n if (maximized2 || lastNotMinimizedBoxStatus2 === TELE_BOX_STATE.Maximized) {\n return {\n x: (collectorRect2.x + collectorRect2.width / 2) / containerRect2.width - 1 / 2,\n y: (collectorRect2.y + collectorRect2.height / 2) / containerRect2.height - 1 / 2\n };\n }\n return {\n x: (collectorRect2.x + collectorRect2.width / 2) / containerRect2.width - intrinsicSize.width / 2,\n y: (collectorRect2.y + collectorRect2.height / 2) / containerRect2.height - intrinsicSize.height / 2\n };\n }\n if (maximized2 || boxStatus2 === TELE_BOX_STATE.Maximized) {\n return { x: 0, y: 0 };\n }\n return intrinsicCoord;\n },\n shallowequal\n );\n coord$.reaction((coord, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Move, coord);\n }\n });\n this.titleBar = titleBar || new DefaultTitleBar({\n readonly: readonly$.value,\n title: title$.value,\n namespace: this.namespace,\n boxStatus: boxStatus$.value,\n forceTop: forceTop$.value,\n forceNormal: forceNormal$.value,\n onDragStart: (event) => {\n var _a;\n return (_a = this._handleTrackStart) == null ? void 0 : _a.call(this, event);\n },\n onEvent: (event) => {\n if (this._delegateEvents.listeners.length > 0) {\n this._delegateEvents.emit(event.type);\n } else {\n switch (event.type) {\n case TELE_BOX_DELEGATE_EVENT.Maximize: {\n if (!boxStatus$.value) {\n maximized$.setValue(!maximized$.value);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Minimize: {\n if (!boxStatus$.value) {\n minimized$.setValue(true);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Close: {\n visible$.setValue(false);\n break;\n }\n default: {\n console.error(\n \"Unsupported titleBar event:\",\n event\n );\n break;\n }\n }\n }\n }\n });\n readonly$.reaction((readonly2) => {\n this.titleBar.setReadonly(readonly2);\n });\n boxStatus$.reaction((boxStatus2) => {\n this.titleBar.setBoxStatus(boxStatus2);\n });\n const $userContent$ = createVal(content);\n const $userFooter$ = createVal(footer);\n const $userStyles$ = createVal(styles);\n const valConfig = {\n prefersColorScheme: prefersColorScheme$,\n darkMode: darkMode$,\n containerRect: containerRect$,\n collectorRect: collectorRect$,\n title: title$,\n visible: visible$,\n readonly: readonly$,\n resizable: resizable$,\n draggable: draggable$,\n fence: fence$,\n fixRatio: fixRatio$,\n focus: focus$,\n zIndex: zIndex$,\n minimized: minimized$,\n maximized: maximized$,\n $userContent: $userContent$,\n $userFooter: $userFooter$,\n $userStyles: $userStyles$,\n forceTop: forceTop$,\n forceNormal: forceNormal$,\n isDragContent: isDragContent$\n };\n i(this, valConfig);\n this._state$ = state$;\n this._minSize$ = minSize$;\n this._size$ = size$;\n this._intrinsicSize$ = intrinsicSize$;\n this._visualSize$ = visualSize$;\n this._coord$ = coord$;\n this._intrinsicCoord$ = intrinsicCoord$;\n this._boxStatus$ = boxStatus$;\n this._lastNotMinimizedBoxStatus$ = lastNotMinimizedBoxStatus$;\n if (this.fixRatio) {\n this.transform(\n coord$.value.x,\n coord$.value.y,\n size$.value.width,\n size$.value.height,\n true\n );\n }\n this.$box = this.render();\n }\n get boxStatus() {\n return this._boxStatus$.value;\n }\n set boxStatus(boxStatus) {\n this._boxStatus$.setValue(boxStatus);\n }\n get lastNotMinimizedBoxStatus() {\n return this._lastNotMinimizedBoxStatus$.value;\n }\n get darkMode() {\n return this._darkMode$.value;\n }\n get state() {\n return this._state$.value;\n }\n setState(state, skipUpdate = false) {\n switch (state) {\n case TELE_BOX_STATE.Maximized: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(true, skipUpdate);\n break;\n }\n case TELE_BOX_STATE.Minimized: {\n this.setMinimized(true, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n default: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n }\n return this;\n }\n setBoxStatus(boxStatus, skipUpdate = false) {\n if (boxStatus === TELE_BOX_STATE.Minimized) {\n if (this._boxStatus$.value && this._boxStatus$.value !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(this._boxStatus$.value, skipUpdate);\n }\n } else {\n this.setLastNotMinimizedBoxStatus(void 0, skipUpdate);\n }\n this._boxStatus$.setValue(boxStatus, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.BoxStatus, { id: this.id, boxStatus });\n }\n return this;\n }\n setLastNotMinimizedBoxStatus(lastNotMinimizedBoxStatus, skipUpdate = false) {\n this._lastNotMinimizedBoxStatus$.setValue(lastNotMinimizedBoxStatus, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.LastNotMinimizedBoxStatus, { id: this.id, lastNotMinimizedBoxStatus });\n }\n return this;\n }\n get minWidth() {\n return this._minSize$.value.width;\n }\n get minHeight() {\n return this._minSize$.value.height;\n }\n setMinWidth(minWidth, skipUpdate = false) {\n this._minSize$.setValue(\n { width: minWidth, height: this.minHeight },\n skipUpdate\n );\n return this;\n }\n setMinHeight(minHeight, skipUpdate = false) {\n this._minSize$.setValue(\n { width: this.minWidth, height: minHeight },\n skipUpdate\n );\n return this;\n }\n get intrinsicWidth() {\n return this._intrinsicSize$.value.width;\n }\n get intrinsicHeight() {\n return this._intrinsicSize$.value.height;\n }\n resize(width, height, skipUpdate = false) {\n this._intrinsicSize$.setValue({ width, height }, skipUpdate);\n return this;\n }\n get width() {\n return this._size$.value.width;\n }\n get height() {\n return this._size$.value.height;\n }\n get absoluteWidth() {\n return this.width * this.containerRect.width;\n }\n get absoluteHeight() {\n return this.height * this.containerRect.height;\n }\n get visualWidth() {\n return this._visualSize$.value.width;\n }\n get visualHeight() {\n return this._visualSize$.value.height;\n }\n get intrinsicX() {\n return this._intrinsicCoord$.value.x;\n }\n get intrinsicY() {\n return this._intrinsicCoord$.value.y;\n }\n move(x, y, skipUpdate = false) {\n this._intrinsicCoord$.setValue({ x, y }, skipUpdate);\n return this;\n }\n get x() {\n return this._coord$.value.x;\n }\n get y() {\n return this._coord$.value.y;\n }\n transform(x, y, width, height, skipUpdate = false) {\n if (this.fixRatio) {\n const newHeight = this.intrinsicHeight / this.intrinsicWidth * width;\n if (y !== this.intrinsicY) {\n y -= newHeight - height;\n }\n height = newHeight;\n }\n if (y < 0) {\n y = 0;\n if (height > this.intrinsicHeight) {\n height = this.intrinsicHeight;\n }\n }\n this._intrinsicCoord$.setValue(\n {\n x: width >= this.minWidth ? x : this.intrinsicX,\n y: height >= this.minHeight ? y : this.intrinsicY\n },\n skipUpdate\n );\n this._intrinsicSize$.setValue(\n {\n width: clamp(width, this.minWidth, 1),\n height: clamp(height, this.minHeight, 1)\n },\n skipUpdate\n );\n return this;\n }\n mount(container) {\n container.appendChild(this.render());\n return this;\n }\n unmount() {\n if (this.$box) {\n this.$box.remove();\n }\n return this;\n }\n mountContent(content) {\n this.set$userContent(content);\n return this;\n }\n unmountContent() {\n this.set$userContent(void 0);\n return this;\n }\n mountFooter(footer) {\n this.set$userFooter(footer);\n return this;\n }\n unmountFooter() {\n this.set$userFooter(void 0);\n return this;\n }\n getUserStyles() {\n return this.$userStyles;\n }\n mountStyles(styles) {\n let $styles;\n if (typeof styles === \"string\") {\n $styles = document.createElement(\"style\");\n $styles.textContent = styles;\n } else {\n $styles = styles;\n }\n this.set$userStyles($styles);\n return this;\n }\n unmountStyles() {\n this.set$userStyles(void 0);\n return this;\n }\n render(root) {\n if (root) {\n if (root === this.$box) {\n return this.$box;\n } else {\n this.$box = root;\n }\n } else {\n if (this.$box) {\n return this.$box;\n } else {\n this.$box = document.createElement(\"div\");\n }\n }\n this._renderSideEffect.flushAll();\n this.$box.classList.add(this.wrapClassName(\"box\"));\n const bindClassName = (el, val, className, predicate = isTruthy) => {\n return this._renderSideEffect.add(() => {\n const wrappedClassName = this.wrapClassName(className);\n return val.subscribe((value) => {\n el.classList.toggle(wrappedClassName, predicate(value));\n });\n });\n };\n bindClassName(this.$box, this._readonly$, \"readonly\");\n bindClassName(this.$box, this._draggable$, \"no-drag\", isFalsy);\n bindClassName(this.$box, this._resizable$, \"no-resize\", isFalsy);\n bindClassName(this.$box, this._focus$, \"blur\", isFalsy);\n bindClassName(this.$box, this._darkMode$, \"color-scheme-dark\");\n bindClassName(\n this.$box,\n this._darkMode$,\n \"color-scheme-light\",\n isFalsy\n );\n this._renderSideEffect.add(() => {\n const minimizedClassName = this.wrapClassName(\"minimized\");\n const maximizedClassName = this.wrapClassName(\"maximized\");\n const MAXIMIZED_TIMER_ID = \"box-maximized-timer\";\n return this._state$.subscribe((state) => {\n this.$box.classList.toggle(\n minimizedClassName,\n state === TELE_BOX_STATE.Minimized\n );\n if (state === TELE_BOX_STATE.Maximized) {\n this._renderSideEffect.flush(MAXIMIZED_TIMER_ID);\n this.$box.classList.toggle(maximizedClassName, true);\n } else {\n this._renderSideEffect.setTimeout(\n () => {\n this.$box.classList.toggle(\n maximizedClassName,\n false\n );\n },\n 0,\n MAXIMIZED_TIMER_ID\n );\n }\n });\n });\n this._renderSideEffect.add(\n () => this._visible$.subscribe((visible) => {\n if (visible) {\n this.$box.style.removeProperty(\"display\");\n } else {\n this.$box.style.display = \"none\";\n }\n })\n );\n this._renderSideEffect.add(\n () => this._zIndex$.subscribe((zIndex) => {\n this.$box.style.zIndex = String(zIndex);\n })\n );\n const boxStyler = index(this.$box);\n this.$box.dataset.teleBoxID = this.id;\n this.$box.style.width = this.absoluteWidth + \"px\";\n this.$box.style.height = this.absoluteHeight + \"px\";\n const translateX = this.x * this.containerRect.width + this.containerRect.x;\n const translateY = this.y * this.containerRect.height + this.containerRect.y;\n this.$box.style.transform = `translate(${translateX - 10}px,${translateY - 10}px)`;\n this._valSideEffectBinder.combine(\n [\n this._coord$,\n this._size$,\n this._minimized$,\n this._containerRect$,\n this._collectorRect$,\n this._boxStatus$\n ],\n ([coord, size, minimized, containerRect, collectorRect, boxStatus]) => {\n const absoluteWidth = size.width * containerRect.width;\n const absoluteHeight = size.height * containerRect.height;\n return {\n width: absoluteWidth + ((minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? 1 : 0),\n height: absoluteHeight + ((minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? 1 : 0),\n x: coord.x * containerRect.width,\n y: coord.y * containerRect.height,\n scaleX: (minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? collectorRect.width / absoluteWidth : 1,\n scaleY: (minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? collectorRect.height / absoluteHeight : 1\n };\n },\n shallowequal\n ).subscribe((styles) => {\n boxStyler.set(styles);\n });\n boxStyler.set({ x: translateX, y: translateY });\n const $boxMain = document.createElement(\"div\");\n $boxMain.className = this.wrapClassName(\"box-main\");\n this.$box.appendChild($boxMain);\n const $titleBar = document.createElement(\"div\");\n $titleBar.className = this.wrapClassName(\"titlebar-wrap\");\n $titleBar.appendChild(this.titleBar.render());\n this.$titleBar = $titleBar;\n const $contentWrap = document.createElement(\"div\");\n $contentWrap.className = this.wrapClassName(\"content-wrap\");\n const $content = document.createElement(\"div\");\n $content.className = this.wrapClassName(\"content\") + \" tele-fancy-scrollbar\";\n this.$content = $content;\n if (this.isDragContent) {\n this.$content.appendChild(this.titleBar.$dragArea);\n }\n this._renderSideEffect.add(() => {\n let last$userStyles;\n return this._$userStyles$.subscribe(($userStyles) => {\n if (last$userStyles) {\n last$userStyles.remove();\n }\n last$userStyles = $userStyles;\n if ($userStyles) {\n $contentWrap.appendChild($userStyles);\n }\n });\n });\n this._renderSideEffect.add(() => {\n let last$userContent;\n return this._$userContent$.subscribe(($userContent) => {\n if (last$userContent) {\n last$userContent.remove();\n }\n last$userContent = $userContent;\n if ($userContent) {\n $content.appendChild($userContent);\n }\n });\n });\n $contentWrap.appendChild($content);\n const $footer = document.createElement(\"div\");\n $footer.className = this.wrapClassName(\"footer-wrap\");\n this.$footer = $footer;\n this._renderSideEffect.add(() => {\n let last$userFooter;\n return this._$userFooter$.subscribe(($userFooter) => {\n if (last$userFooter) {\n last$userFooter.remove();\n }\n last$userFooter = $userFooter;\n if ($userFooter) {\n $footer.appendChild($userFooter);\n }\n });\n });\n $boxMain.appendChild($titleBar);\n $boxMain.appendChild($contentWrap);\n $boxMain.appendChild($footer);\n this._renderResizeHandlers();\n return this.$box;\n }\n _renderResizeHandlers() {\n const $resizeHandles = document.createElement(\"div\");\n $resizeHandles.className = this.wrapClassName(\"resize-handles\");\n Object.values(TELE_BOX_RESIZE_HANDLE).forEach((handleType) => {\n const $handle = document.createElement(\"div\");\n $handle.className = this.wrapClassName(handleType) + \" \" + this.wrapClassName(\"resize-handle\");\n $handle.dataset.teleBoxHandle = handleType;\n $resizeHandles.appendChild($handle);\n });\n this.$box.appendChild($resizeHandles);\n const TRACKING_DISPOSER_ID = \"handle-tracking-listener\";\n const transformingClassName = this.wrapClassName(\"transforming\");\n let $trackMask;\n let trackStartX = 0;\n let trackStartY = 0;\n let trackStartWidth = 0;\n let trackStartHeight = 0;\n let trackStartPageX = 0;\n let trackStartPageY = 0;\n let trackingHandle;\n const handleTracking = (ev) => {\n if (this.state !== TELE_BOX_STATE.Normal) {\n return;\n }\n preventEvent(ev);\n let { pageX, pageY } = flattenEvent(ev);\n if (pageY < 0) {\n pageY = 0;\n }\n const offsetX = (pageX - trackStartPageX) / this.containerRect.width;\n const offsetY = (pageY - trackStartPageY) / this.containerRect.height;\n switch (trackingHandle) {\n case TELE_BOX_RESIZE_HANDLE.North: {\n this.transform(\n this.x,\n trackStartY + offsetY,\n this.width,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.South: {\n this.transform(\n this.x,\n this.y,\n this.width,\n trackStartHeight + offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.West: {\n this.transform(\n trackStartX + offsetX,\n this.y,\n trackStartWidth - offsetX,\n this.height\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.East: {\n this.transform(\n this.x,\n this.y,\n trackStartWidth + offsetX,\n this.height\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.NorthWest: {\n this.transform(\n trackStartX + offsetX,\n trackStartY + offsetY,\n trackStartWidth - offsetX,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.NorthEast: {\n this.transform(\n this.x,\n trackStartY + offsetY,\n trackStartWidth + offsetX,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.SouthEast: {\n this.transform(\n this.x,\n this.y,\n trackStartWidth + offsetX,\n trackStartHeight + offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.SouthWest: {\n this.transform(\n trackStartX + offsetX,\n this.y,\n trackStartWidth - offsetX,\n trackStartHeight + offsetY\n );\n break;\n }\n default: {\n if (this.fence) {\n this.move(\n clamp(trackStartX + offsetX, 0, 1 - this.width),\n clamp(trackStartY + offsetY, 0, 1 - this.height)\n );\n } else {\n const xOverflowOffset = 20 / this.containerRect.width;\n const yOverflowOffset = 20 / this.containerRect.height;\n this.move(\n clamp(\n trackStartX + offsetX,\n xOverflowOffset - this.width,\n 1 - xOverflowOffset\n ),\n clamp(trackStartY + offsetY, 0, 1 - yOverflowOffset)\n );\n }\n break;\n }\n }\n };\n const handleTrackEnd = (ev) => {\n trackingHandle = void 0;\n if (!$trackMask) {\n return;\n }\n preventEvent(ev);\n this.$box.classList.toggle(transformingClassName, false);\n this._sideEffect.flush(TRACKING_DISPOSER_ID);\n $trackMask.remove();\n };\n const handleTrackStart = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if (ev.button != null && ev.button !== 0) {\n return;\n }\n if (!this.draggable || trackingHandle || this.state !== TELE_BOX_STATE.Normal) {\n return;\n }\n const target = ev.target;\n if ((_a = target.dataset) == null ? void 0 : _a.teleBoxHandle) {\n preventEvent(ev);\n trackStartX = this.x;\n trackStartY = this.y;\n trackStartWidth = this.width;\n trackStartHeight = this.height;\n ({ pageX: trackStartPageX, pageY: trackStartPageY } = flattenEvent(ev));\n trackingHandle = target.dataset.teleBoxHandle;\n if (!$trackMask) {\n $trackMask = document.createElement(\"div\");\n }\n const cursor = trackingHandle ? this.wrapClassName(`cursor-${trackingHandle}`) : \"\";\n $trackMask.className = this.wrapClassName(\n `track-mask${cursor ? ` ${cursor}` : \"\"}`\n );\n this.$box.appendChild($trackMask);\n this.$box.classList.add(transformingClassName);\n this._sideEffect.add(() => {\n window.addEventListener(\"mousemove\", handleTracking);\n window.addEventListener(\"touchmove\", handleTracking, {\n passive: false\n });\n window.addEventListener(\"mouseup\", handleTrackEnd);\n window.addEventListener(\"touchend\", handleTrackEnd, {\n passive: false\n });\n window.addEventListener(\"touchcancel\", handleTrackEnd, {\n passive: false\n });\n return () => {\n window.removeEventListener(\"mousemove\", handleTracking);\n window.removeEventListener(\"touchmove\", handleTracking);\n window.removeEventListener(\"mouseup\", handleTrackEnd);\n window.removeEventListener(\"touchend\", handleTrackEnd);\n window.removeEventListener(\n \"touchcancel\",\n handleTrackEnd\n );\n };\n }, TRACKING_DISPOSER_ID);\n }\n };\n this._handleTrackStart = handleTrackStart;\n this._sideEffect.addEventListener(\n $resizeHandles,\n \"mousedown\",\n handleTrackStart,\n {},\n \"box-resizeHandles-mousedown\"\n );\n this._sideEffect.addEventListener(\n $resizeHandles,\n \"touchstart\",\n handleTrackStart,\n { passive: false },\n \"box-resizeHandles-touchstart\"\n );\n }\n destroy() {\n this.$box.remove();\n this.events.emit(TELE_BOX_EVENT.Destroyed);\n this._sideEffect.flushAll();\n this._renderSideEffect.flushAll();\n this.events.removeAllListeners();\n this._delegateEvents.removeAllListeners();\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n}\nfunction noop() {\n return;\n}\nvar style$2 = \"\";\nvar collectorSVG = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxNiI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxwYXRoIHN0cm9rZT0iIzdCODhBMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIGQ9Ik0uNyAxLjJoMTYuNnYxMy42SC43eiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSIjN0I4OEEwIiBkPSJNNCA1LjVoNnYxLjRINHpNNCA5LjVoMTB2MS40SDR6IiAvPgogICAgPC9nPgo8L3N2Zz4K\";\nclass TeleBoxCollector {\n constructor({\n visible = true,\n readonly = false,\n darkMode = false,\n namespace = \"telebox\",\n styles = {},\n onClick,\n getBoxesStatus\n }) {\n this.$appMenuContainer = document.createElement(\"div\");\n this.handleCollectorClick = () => {\n if (!this._readonly && this.onClick) {\n this.onClick();\n }\n };\n this._visible = visible;\n this._readonly = readonly;\n this._darkMode = darkMode;\n this.namespace = namespace;\n this.styles = styles;\n this.onClick = onClick;\n this.getBoxesStatus = getBoxesStatus;\n }\n get boxesStatus() {\n var _a;\n return (_a = this.getBoxesStatus) == null ? void 0 : _a.call(this);\n }\n get visible() {\n return this._visible;\n }\n get readonly() {\n return this._readonly;\n }\n get darkMode() {\n return this._darkMode;\n }\n mount(root) {\n root.appendChild(this.render());\n return this;\n }\n unmount() {\n if (this.$collector) {\n this.$collector.remove();\n }\n return this;\n }\n hasMinimizedBox() {\n const boxesStatus = this.boxesStatus;\n if (boxesStatus) {\n for (const status of boxesStatus.values()) {\n if (status === TELE_BOX_STATE.Minimized) {\n return true;\n }\n }\n }\n return false;\n }\n updateBoxesStatus() {\n const hasMinimizedBox = this.hasMinimizedBox();\n this.setVisible(hasMinimizedBox);\n }\n setVisible(visible) {\n if (this._visible !== visible) {\n this._visible = visible;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"collector-visible\"),\n visible\n );\n }\n }\n return this;\n }\n setReadonly(readonly) {\n if (this._readonly !== readonly) {\n this._readonly = readonly;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"collector-readonly\"),\n readonly\n );\n }\n }\n return this;\n }\n setDarkMode(darkMode) {\n if (this._darkMode !== darkMode) {\n this._darkMode = darkMode;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"color-scheme-dark\"),\n darkMode\n );\n this.$collector.classList.toggle(\n this.wrapClassName(\"color-scheme-light\"),\n !darkMode\n );\n }\n }\n return this;\n }\n setStyles(styles) {\n Object.assign(this.styles, styles);\n if (this.$collector) {\n const $collector = this.$collector;\n Object.keys(styles).forEach((key) => {\n const value = styles[key];\n if (value != null) {\n $collector.style[key] = value;\n }\n });\n }\n return this;\n }\n render() {\n if (!this.$collector) {\n this.$collector = document.createElement(\"button\");\n this.$collector.className = this.wrapClassName(\"collector\");\n this.$collector.style.backgroundImage = `url('${collectorSVG}')`;\n this.$collector.addEventListener(\n \"click\",\n this.handleCollectorClick\n );\n if (this._visible) {\n this.$collector.classList.add(\n this.wrapClassName(\"collector-visible\")\n );\n }\n if (this._readonly) {\n this.$collector.classList.add(\n this.wrapClassName(\"collector-readonly\")\n );\n }\n this.$collector.classList.add(\n this.wrapClassName(\n this._darkMode ? \"color-scheme-dark\" : \"color-scheme-light\"\n )\n );\n this.$appMenuContainer.classList.add(this.wrapClassName(\"collector-shadow\"));\n this.$collector.append(this.$appMenuContainer);\n this.setStyles(this.styles);\n }\n return this.$collector;\n }\n destroy() {\n if (this.$collector) {\n this.$collector.removeEventListener(\n \"click\",\n this.handleCollectorClick\n );\n this.$collector.remove();\n this.$collector = void 0;\n }\n this.onClick = void 0;\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n}\nTeleBoxCollector.kind = \"TeleBoxCollector\";\nvar TELE_BOX_MANAGER_EVENT = /* @__PURE__ */ ((TELE_BOX_MANAGER_EVENT2) => {\n TELE_BOX_MANAGER_EVENT2[\"Focused\"] = \"focused\";\n TELE_BOX_MANAGER_EVENT2[\"Blurred\"] = \"blurred\";\n TELE_BOX_MANAGER_EVENT2[\"Created\"] = \"created\";\n TELE_BOX_MANAGER_EVENT2[\"Removed\"] = \"removed\";\n TELE_BOX_MANAGER_EVENT2[\"State\"] = \"state\";\n TELE_BOX_MANAGER_EVENT2[\"Maximized\"] = \"maximized\";\n TELE_BOX_MANAGER_EVENT2[\"Minimized\"] = \"minimized\";\n TELE_BOX_MANAGER_EVENT2[\"Move\"] = \"move\";\n TELE_BOX_MANAGER_EVENT2[\"Resize\"] = \"resize\";\n TELE_BOX_MANAGER_EVENT2[\"IntrinsicMove\"] = \"intrinsic_move\";\n TELE_BOX_MANAGER_EVENT2[\"IntrinsicResize\"] = \"intrinsic_resize\";\n TELE_BOX_MANAGER_EVENT2[\"VisualResize\"] = \"visual_resize\";\n TELE_BOX_MANAGER_EVENT2[\"ZIndex\"] = \"z_index\";\n TELE_BOX_MANAGER_EVENT2[\"PrefersColorScheme\"] = \"prefers_color_scheme\";\n TELE_BOX_MANAGER_EVENT2[\"DarkMode\"] = \"dark_mode\";\n TELE_BOX_MANAGER_EVENT2[\"BoxStatus\"] = \"box_status\";\n TELE_BOX_MANAGER_EVENT2[\"LastNotMinimizedBoxStatus\"] = \"last_not_minimized_box_status\";\n return TELE_BOX_MANAGER_EVENT2;\n})(TELE_BOX_MANAGER_EVENT || {});\nvar style$1 = \"\";\nclass MaxTitleBar extends DefaultTitleBar {\n constructor(config) {\n super(config);\n this.boxes = config.boxes;\n this.focusedBox = config.focusedBox;\n this.containerRect = config.containerRect;\n this.darkMode = config.darkMode;\n this.getBoxesStatus = config.getBoxesStatus;\n }\n get boxesStatus() {\n var _a;\n return (_a = this.getBoxesStatus) == null ? void 0 : _a.call(this);\n }\n hasMaximizedBoxInStatus() {\n if (this.getBoxesStatus) {\n const boxesStatus = this.getBoxesStatus();\n if (boxesStatus.size) {\n const hasMaximizedBox = [...boxesStatus.values()].find((state) => state === TELE_BOX_STATE.Maximized);\n return !!hasMaximizedBox;\n }\n }\n return false;\n }\n get MaximizedBoxes() {\n if (this.getBoxesStatus) {\n const boxesStatus = this.getBoxesStatus();\n if (boxesStatus) {\n return this.boxes.filter((box) => boxesStatus && boxesStatus.get(box.id) === TELE_BOX_STATE.Maximized && !box.forceTop);\n }\n }\n return [];\n }\n focusBox(box) {\n var _a, _b;\n if (this.focusedBox && this.focusedBox === box) {\n return;\n }\n if (this.$titles) {\n const { children } = this.$titles.firstElementChild;\n if (this.state === TELE_BOX_STATE.Maximized && !this.hasMaximizedBoxInStatus()) {\n for (let i2 = children.length - 1; i2 >= 0; i2 -= 1) {\n const $tab = children[i2];\n const id = (_a = $tab.dataset) == null ? void 0 : _a.teleBoxID;\n if (id) {\n if (box && id === box.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n true\n );\n } else if (this.focusedBox && id === this.focusedBox.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n false\n );\n }\n }\n }\n } else if (this.hasMaximizedBoxInStatus()) {\n for (let i2 = children.length - 1; i2 >= 0; i2 -= 1) {\n const $tab = children[i2];\n const id = (_b = $tab.dataset) == null ? void 0 : _b.teleBoxID;\n if (id) {\n if (box && id === box.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n true\n );\n } else if (this.focusedBox && id === this.focusedBox.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n false\n );\n }\n }\n }\n }\n }\n this.focusedBox = box;\n }\n setContainerRect(rect) {\n this.containerRect = rect;\n if (this.$titleBar) {\n const { x, y, width } = rect;\n this.$titleBar.style.transform = `translate(${x}px, ${y}px)`;\n this.$titleBar.style.width = width + \"px\";\n }\n }\n updateBoxesStatus() {\n if (this.hasMaximizedBoxInStatus()) {\n this.setBoxStatus(TELE_BOX_STATE.Maximized);\n }\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && this.boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setBoxes(boxes) {\n this.boxes = boxes;\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setState(state) {\n super.setState(state);\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n state === TELE_BOX_STATE.Maximized && this.boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setReadonly(readonly) {\n super.setReadonly(readonly);\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"readonly\"),\n this.readonly\n );\n }\n }\n setDarkMode(darkMode) {\n if (darkMode !== this.darkMode) {\n this.darkMode = darkMode;\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"color-scheme-dark\"),\n darkMode\n );\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"color-scheme-light\"),\n !darkMode\n );\n }\n }\n }\n render() {\n const $titleBar = super.render();\n const { x, y, width } = this.containerRect;\n $titleBar.style.transform = `translate(${x}px, ${y}px)`;\n $titleBar.style.width = width + \"px\";\n $titleBar.classList.add(this.wrapClassName(\"max-titlebar\"));\n $titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && this.boxes.length > 0\n );\n $titleBar.classList.toggle(\n this.wrapClassName(\"readonly\"),\n this.readonly\n );\n $titleBar.classList.add(\n this.wrapClassName(\n this.darkMode ? \"color-scheme-dark\" : \"color-scheme-light\"\n )\n );\n const $titlesArea = document.createElement(\"div\");\n $titlesArea.classList.add(this.wrapClassName(\"titles-area\"));\n $titleBar.insertBefore($titlesArea, $titleBar.firstElementChild);\n this.updateTitles();\n return $titleBar;\n }\n destroy() {\n super.destroy();\n this.$titles = void 0;\n this.boxes.length = 0;\n this.focusedBox = void 0;\n }\n updateTitles() {\n if (this.$titleBar && (this.state === TELE_BOX_STATE.Maximized || this.hasMaximizedBoxInStatus())) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-single-title\"),\n this.boxes.length === 1 || this.hasMaximizedBoxInStatus() && this.MaximizedBoxes.length === 1\n );\n if (this.boxes.length === 1 || this.hasMaximizedBoxInStatus() && this.MaximizedBoxes.length === 1) {\n this.setTitle(this.boxes[0].title);\n } else {\n this.$titleBar.replaceChild(\n this.renderTitles(),\n this.$titleBar.firstElementChild\n );\n }\n }\n }\n renderTitles() {\n this.$titles = document.createElement(\"div\");\n this.$titles.className = this.wrapClassName(\"titles\");\n this.$titles.addEventListener(\n \"wheel\",\n (ev) => {\n ev.currentTarget.scrollBy({\n left: ev.deltaY > 0 ? 250 : -250,\n behavior: \"smooth\"\n });\n },\n { passive: false }\n );\n const $content = document.createElement(\"div\");\n $content.className = this.wrapClassName(\"titles-content\");\n this.$titles.appendChild($content);\n (this.hasMaximizedBoxInStatus() ? this.MaximizedBoxes : this.boxes).forEach((box) => {\n const $tab = document.createElement(\"button\");\n $tab.className = this.wrapClassName(\"titles-tab\");\n $tab.textContent = box.title;\n $tab.dataset.teleBoxID = box.id;\n $tab.dataset.teleTitleBarNoDblClick = \"true\";\n if (this.focusedBox && box.id === this.focusedBox.id) {\n $tab.classList.add(this.wrapClassName(\"titles-tab-focus\"));\n }\n $content.appendChild($tab);\n });\n return this.$titles;\n }\n}\nvar style = \"\";\nclass AppMenu {\n constructor(props) {\n this.namespace = \"telebox-app-menu\";\n this.badge = document.createElement(\"div\");\n this.menuView = document.createElement(\"div\");\n this.containerClickHandler = () => {\n if (this.manager.readonly) {\n return;\n }\n const isShowMenuView = getComputedStyle(this.menuView).display === \"flex\";\n if (isShowMenuView) {\n this.menuView.style.display = \"none\";\n } else {\n this.menuView.style.display = \"flex\";\n }\n };\n this.menuViewClickHandler = (e2) => {\n e2.stopPropagation();\n e2.stopImmediatePropagation();\n const target = e2.target;\n const id = target.getAttribute(`data-${this.c(\"app-id\")}`);\n if (id) {\n const lastNotMinimizedBoxStatus = this.manager.getLastNotMinimizedBoxStatus(id) || TELE_BOX_STATE.Normal;\n const zIndex = (lastNotMinimizedBoxStatus === TELE_BOX_STATE.Maximized ? this.manager.getMaxMaximizedBoxZIndex() : this.manager.getMaxNormalBoxZIndex()) + 1;\n this.manager.setBox(id, {\n status: lastNotMinimizedBoxStatus,\n zIndex\n }, false, () => {\n this.manager.focusBox(id);\n });\n return;\n }\n };\n this.updatePrefersColorSchemeHandler = () => {\n this.container.classList.remove(this.theme);\n this.theme = this.manager.prefersColorScheme;\n this.container.classList.add(this.theme);\n };\n this.appMenuChange = () => {\n const minimizedBoxesStatus = this.manager.getMinimizedBoxesStatus();\n this.render(minimizedBoxesStatus);\n };\n this.container = props.container;\n this.manager = props.manager;\n this.theme = props.theme;\n this.getBoxesStatus = props.getBoxesStatus;\n this.init();\n }\n get boxesStatus() {\n var _a;\n return ((_a = this.getBoxesStatus) == null ? void 0 : _a.call(this)) || /* @__PURE__ */ new Map();\n }\n get minimizedBoxesStatus() {\n const arr = [];\n this.boxesStatus.forEach((status) => {\n if (status === TELE_BOX_STATE.Minimized) {\n arr.push(status);\n }\n });\n return arr;\n }\n c(className) {\n return `${this.namespace}-${className}`;\n }\n setContainer(container) {\n if (this.container) {\n this.container.remove();\n }\n this.container = container;\n this.init();\n }\n createDefaultAppMenu() {\n this.badge.classList.add(this.c(\"app-menu-badge\"));\n this.menuView.classList.add(this.c(\"app-menu-tooltip\"));\n this.container.classList.add(this.c(\"app-menu-container\"), this.theme);\n this.menuView.addEventListener(\"click\", this.menuViewClickHandler);\n this.container.append(this.badge, this.menuView);\n }\n async init() {\n this.createDefaultAppMenu();\n this.appMenuChange();\n }\n createMinimizedItem(appId) {\n const appItem = document.createElement(\"div\");\n appItem.classList.add(this.c(\"app-menu-item\"));\n appItem.setAttribute(`data-${this.c(\"app-id\")}`, appId);\n const titleDiv = document.createElement(\"div\");\n titleDiv.classList.add(this.c(\"app-menu-item-title\"));\n const app = this.manager.getBox(appId);\n titleDiv.innerText = (app == null ? void 0 : app.title) || appId;\n appItem.appendChild(titleDiv);\n return appItem;\n }\n renderMenuView(minimizedBoxesStatus) {\n const items = [];\n minimizedBoxesStatus.forEach((_, appId) => {\n items.push(this.createMinimizedItem(appId));\n });\n this.menuView.append(...items);\n }\n render(minimizedBoxesStatus) {\n this.menuView.style.display = \"none\";\n this.badge.innerText = \"\";\n this.menuView.innerHTML = \"\";\n if (minimizedBoxesStatus.size === 0) {\n this.container.style.display = \"none\";\n } else {\n this.badge.innerText = minimizedBoxesStatus.size.toString();\n this.renderMenuView(minimizedBoxesStatus);\n this.container.style.display = \"block\";\n }\n }\n destroy() {\n this.badge.remove();\n this.menuView.removeEventListener(\"click\", this.menuViewClickHandler);\n this.menuView.remove();\n this.container.remove();\n }\n}\nclass TeleBoxManager {\n constructor({\n root = document.body,\n prefersColorScheme = TELE_BOX_COLOR_SCHEME.Light,\n minimized = false,\n maximized = false,\n fence = true,\n containerRect = {\n x: 0,\n y: 0,\n width: window.innerWidth,\n height: window.innerHeight\n },\n collector,\n namespace = \"telebox\",\n readonly = false,\n useBoxesStatus = false\n } = {}) {\n this.events = new EventEmitter();\n this._sideEffect = new o();\n this.useBoxesStatus = useBoxesStatus;\n const { combine, createVal } = c(this._sideEffect);\n this.root = root;\n this.namespace = namespace;\n this.boxes$ = createVal([]);\n this.topBox$ = this.boxes$.derive((boxes) => {\n if (boxes.length > 0) {\n let currentTopBox = void 0;\n const topBox = boxes.reduce((topBox2, box) => {\n if (box.forceTop) {\n return topBox2;\n }\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized) {\n return topBox2;\n }\n if (!topBox2) {\n topBox2 = box;\n return topBox2;\n }\n return topBox2.zIndex > box.zIndex ? topBox2 : box;\n }, currentTopBox);\n return topBox;\n }\n return;\n });\n this.boxesStatus$ = /* @__PURE__ */ new Map();\n this.lastNotMinimizedBoxesStatus$ = /* @__PURE__ */ new Map();\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const prefersDark$ = createVal(false);\n if (prefersDark) {\n prefersDark$.setValue(prefersDark.matches);\n this._sideEffect.add(() => {\n const handler = (evt) => {\n prefersDark$.setValue(evt.matches);\n };\n prefersDark.addListener(handler);\n return () => prefersDark.removeListener(handler);\n });\n }\n const prefersColorScheme$ = createVal(prefersColorScheme);\n prefersColorScheme$.reaction((prefersColorScheme2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setPrefersColorScheme(prefersColorScheme2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(\n TELE_BOX_MANAGER_EVENT.PrefersColorScheme,\n prefersColorScheme2\n );\n }\n });\n this._darkMode$ = combine(\n [prefersDark$, prefersColorScheme$],\n ([prefersDark2, prefersColorScheme2]) => prefersColorScheme2 === \"auto\" ? prefersDark2 : prefersColorScheme2 === \"dark\"\n );\n this._darkMode$.reaction((darkMode, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setDarkMode(darkMode, skipUpdate));\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.DarkMode, darkMode);\n }\n });\n const readonly$ = createVal(readonly);\n readonly$.reaction((readonly2, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setReadonly(readonly2, skipUpdate));\n });\n const minimized$ = createVal(minimized);\n const maximized$ = createVal(maximized);\n maximized$.reaction((maximized2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setMaximized(maximized2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Maximized, maximized2);\n }\n });\n const state$ = combine(\n [minimized$, maximized$],\n ([minimized2, maximized2]) => minimized2 ? TELE_BOX_STATE.Minimized : maximized2 ? TELE_BOX_STATE.Maximized : TELE_BOX_STATE.Normal\n );\n state$.reaction((state, _, skipUpdate) => {\n this.maxTitleBar.setState(state);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.State, state);\n }\n });\n const fence$ = createVal(fence);\n fence$.subscribe((fence2, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setFence(fence2, skipUpdate));\n });\n const containerRect$ = createVal(containerRect, shallowequal);\n containerRect$.reaction((containerRect2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setContainerRect(containerRect2, skipUpdate)\n );\n this.maxTitleBar.setContainerRect(containerRect2);\n });\n const collector$ = createVal(\n collector === null ? null : collector || new TeleBoxCollector({\n visible: minimized,\n readonly,\n namespace\n }).mount(root)\n );\n collector$.subscribe((collector2) => {\n if (collector2) {\n collector2.setVisible(minimized$.value);\n collector2.setReadonly(readonly$.value);\n collector2.setDarkMode(this._darkMode$.value);\n if (this.useBoxesStatus && this.appMenu) {\n this.appMenu.setContainer(collector2.$appMenuContainer);\n }\n this._sideEffect.add(() => {\n collector2.getBoxesStatus = () => {\n return this.boxesStatus$;\n };\n collector2.onClick = () => {\n if (!readonly$.value) {\n if (!this.useBoxesStatus) {\n minimized$.setValue(false);\n } else if (this.useBoxesStatus && this.appMenu) {\n this.appMenu.containerClickHandler();\n }\n }\n };\n return () => collector2.destroy();\n }, \"collect-onClick\");\n }\n });\n readonly$.subscribe(\n (readonly2) => {\n var _a;\n return (_a = collector$.value) == null ? void 0 : _a.setReadonly(readonly2);\n }\n );\n this._darkMode$.subscribe((darkMode) => {\n var _a;\n (_a = collector$.value) == null ? void 0 : _a.setDarkMode(darkMode);\n });\n this._calcCollectorRect = () => {\n var _a;\n if ((_a = collector$.value) == null ? void 0 : _a.$collector) {\n const { x, y, width, height } = collector$.value.$collector.getBoundingClientRect();\n const rootRect = this.root.getBoundingClientRect();\n return {\n x: x - rootRect.x,\n y: y - rootRect.y,\n width,\n height\n };\n }\n return;\n };\n this._setCollectorRect = (collectorRect) => {\n var _a;\n if ((_a = collector$.value) == null ? void 0 : _a.$collector) {\n collectorRect$.setValue(collectorRect);\n }\n };\n const collectorRect$ = createVal(\n minimized$.value ? this._calcCollectorRect() : void 0\n );\n collectorRect$.subscribe((collectorRect, _, skipUpdate) => {\n this.boxes.forEach((box) => {\n box.setCollectorRect(collectorRect, skipUpdate);\n });\n });\n minimized$.subscribe((minimized2, _, skipUpdate) => {\n var _a;\n (_a = collector$.value) == null ? void 0 : _a.setVisible(minimized2);\n if (minimized2) {\n this._setCollectorRect(this._calcCollectorRect());\n }\n this.boxes.forEach(\n (box) => box.setMinimized(minimized2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Minimized, minimized2);\n }\n });\n const closeBtnClassName = this.wrapClassName(\"titlebar-icon-close\");\n const checkFocusBox = (ev) => {\n var _a;\n if (readonly$.value) {\n return;\n }\n const target = ev.target;\n if (!target.tagName) {\n return;\n }\n for (let el = target; el; el = el.parentElement) {\n if (el.classList && el.classList.contains(closeBtnClassName)) {\n return;\n }\n const id = (_a = el.dataset) == null ? void 0 : _a.teleBoxID;\n if (id) {\n const box = this.getBox(id);\n if (box) {\n if (!this.useBoxesStatus) {\n this.makeBoxTop(box);\n } else {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Normal) {\n const maxNormalBoxZIndex = this.getMaxNormalBoxZIndex();\n if (maxNormalBoxZIndex > box.zIndex) {\n this.setBox(box, {\n zIndex: maxNormalBoxZIndex + 1\n }, false);\n }\n } else if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Maximized) {\n const maxMaximizedBoxZIndex = this.getMaxMaximizedBoxZIndex();\n if (maxMaximizedBoxZIndex > box.zIndex) {\n this.setBox(box, {\n zIndex: maxMaximizedBoxZIndex + 1\n }, false);\n }\n this.makeMaximizedTopBoxFocus();\n }\n }\n this.focusBox(box);\n return;\n }\n }\n }\n };\n this._sideEffect.addEventListener(\n window,\n \"mousedown\",\n checkFocusBox,\n true\n );\n this._sideEffect.addEventListener(\n window,\n \"touchstart\",\n checkFocusBox,\n true\n );\n this.maxTitleBar = new MaxTitleBar({\n darkMode: this.darkMode,\n readonly: readonly$.value,\n namespace: this.namespace,\n state: state$.value,\n boxes: this.boxes$.value,\n containerRect: containerRect$.value,\n getBoxesStatus: () => {\n return this.boxesStatus$;\n },\n onEvent: (event) => {\n switch (event.type) {\n case TELE_BOX_DELEGATE_EVENT.Maximize: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n this.setBox(box, {\n status: TELE_BOX_STATE.Normal,\n zIndex: this.getMaxNormalBoxZIndex() + 1\n }, false, () => {\n this.makeMaximizedTopBoxFocus();\n });\n }\n }\n } else {\n maximized$.setValue(!maximized$.value);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Minimize: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n let isFocusChanged = false;\n if (box.focus) {\n this.blurBox(box);\n isFocusChanged = true;\n }\n this.setBox(box, {\n status: TELE_BOX_STATE.Minimized,\n zIndex: -1\n }, false);\n if (isFocusChanged) {\n this.focusTopBox();\n } else {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n } else {\n minimized$.setValue(true);\n }\n break;\n }\n case TELE_BOX_EVENT.Close: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n let isFocusChanged = false;\n if (box.focus) {\n this.blurBox(box);\n isFocusChanged = true;\n }\n this.remove(box, false);\n if (isFocusChanged) {\n this.focusTopBox();\n } else {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n } else {\n this.removeTopBox();\n this.focusTopBox();\n }\n break;\n }\n }\n }\n });\n readonly$.subscribe(\n (readonly2) => this.maxTitleBar.setReadonly(readonly2)\n );\n this._darkMode$.subscribe((darkMode) => {\n this.maxTitleBar.setDarkMode(darkMode);\n });\n this.boxes$.reaction((boxes) => {\n this.maxTitleBar.setBoxes(boxes);\n });\n const valConfig = {\n prefersColorScheme: prefersColorScheme$,\n containerRect: containerRect$,\n collector: collector$,\n collectorRect: collectorRect$,\n readonly: readonly$,\n fence: fence$,\n minimized: minimized$,\n maximized: maximized$\n };\n i(this, valConfig);\n this._state$ = state$;\n this.root.appendChild(this.maxTitleBar.render());\n if (useBoxesStatus) {\n this.appMenu = this.createMinimizedAppMenu();\n }\n }\n get boxes() {\n return this.boxes$.value;\n }\n get topBox() {\n return this.topBox$.value;\n }\n get forceTopBoxes() {\n return this.boxes.find((box) => box.forceTop);\n }\n get maxForceTopBox() {\n return this.boxes.reduce((maxTopBox, box) => {\n var _a;\n if (box.forceTop && box.zIndex > ((_a = maxTopBox == null ? void 0 : maxTopBox.zIndex) != null ? _a : 0)) {\n return box;\n }\n return maxTopBox;\n }, void 0);\n }\n get forceNormalBoxes() {\n return this.boxes.find((box) => box.forceNormal);\n }\n get darkMode() {\n return this._darkMode$.value;\n }\n get state() {\n return this._state$.value;\n }\n setState(state, skipUpdate = false) {\n switch (state) {\n case TELE_BOX_STATE.Maximized: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(true, skipUpdate);\n break;\n }\n case TELE_BOX_STATE.Minimized: {\n this.setMinimized(true, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n default: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n }\n return this;\n }\n setBoxStatus(boxId, boxStatus, skipUpdate = false) {\n if (boxStatus) {\n const oldBoxStatus = this.boxesStatus$.get(boxId);\n this.boxesStatus$.set(boxId, boxStatus);\n if (boxStatus === TELE_BOX_STATE.Minimized && oldBoxStatus !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(boxId, oldBoxStatus, skipUpdate);\n } else if (oldBoxStatus === TELE_BOX_STATE.Minimized && boxStatus !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(boxId, void 0, skipUpdate);\n }\n } else {\n this.boxesStatus$.delete(boxId);\n this.setLastNotMinimizedBoxStatus(boxId, void 0, skipUpdate);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.BoxStatus, { id: boxId, boxStatus });\n }\n }\n getBoxStatus(boxId) {\n return this.boxesStatus$.get(boxId);\n }\n get boxesStatus() {\n return this.boxesStatus$;\n }\n get lastNotMinimizedBoxesStatus() {\n return this.lastNotMinimizedBoxesStatus$;\n }\n setBoxesStatus(boxesStatus, skipUpdate = false) {\n this.boxesStatus$ = boxesStatus;\n this.effectBoxesStatusChange(skipUpdate);\n }\n getBoxesStatus() {\n return this.boxesStatus$;\n }\n effectBoxStatusChange() {\n if (!this.useBoxesStatus) {\n return;\n }\n if (this.collector) {\n this.collector.updateBoxesStatus();\n if (this.hasMinimizedBox()) {\n this._setCollectorRect(this._calcCollectorRect());\n }\n }\n if (this.appMenu) {\n this.appMenu.appMenuChange();\n }\n if (this.maxTitleBar) {\n this.maxTitleBar.updateBoxesStatus();\n }\n }\n effectBoxesStatusTimerFunc(skipUpdate) {\n if (!this.useBoxesStatus) {\n return;\n }\n let newTopBox;\n const curTopBox = this.topBox;\n this.boxes.forEach((box) => {\n var _a;\n const boxStatus = this.boxesStatus$.get(box.id);\n if (boxStatus) {\n if (boxStatus !== TELE_BOX_STATE.Minimized && !this.isForceTop(box) && box.zIndex > ((_a = newTopBox == null ? void 0 : newTopBox.zIndex) != null ? _a : 0)) {\n newTopBox = box;\n }\n box.setBoxStatus(boxStatus, skipUpdate);\n }\n });\n this.effectBoxStatusChange();\n if (newTopBox && curTopBox !== newTopBox) {\n this.topBox$.setValue(newTopBox);\n }\n if (!newTopBox && curTopBox) {\n this.topBox$.setValue(void 0);\n }\n }\n async effectBoxesStatusChange(skipUpdate = false) {\n var _a, _b;\n if (!this.useBoxesStatus) {\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.timer) {\n clearTimeout(this.effectBoxesStatusTimer.timer);\n if (this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(!!((_a = this.effectBoxesStatusTimer) == null ? void 0 : _a.skipUpdate));\n }\n }\n this.effectBoxesStatusTimer = void 0;\n return;\n }\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.timer) {\n if (this.effectBoxesStatusTimer.skipUpdate !== skipUpdate) {\n clearTimeout(this.effectBoxesStatusTimer.timer);\n if (this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(!!((_b = this.effectBoxesStatusTimer) == null ? void 0 : _b.skipUpdate));\n }\n this.effectBoxesStatusTimer.skipUpdate = skipUpdate;\n } else {\n return;\n }\n }\n if (!this.effectBoxesStatusTimer) {\n this.effectBoxesStatusTimer = {\n skipUpdate,\n timer: void 0,\n resolve: void 0\n };\n }\n if (this.effectBoxesStatusTimer) {\n const _skipUpdate = await new Promise((resolve) => {\n this.effectBoxesStatusTimer.resolve = resolve;\n this.effectBoxesStatusTimer.timer = setTimeout(() => {\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(this.effectBoxesStatusTimer.skipUpdate);\n }\n }, 100);\n });\n this.effectBoxesStatusTimerFunc(_skipUpdate);\n this.effectBoxesStatusTimer = void 0;\n }\n }\n hasBoxesStatus() {\n if (!this.useBoxesStatus) {\n return false;\n }\n return this.boxesStatus$.size > 0;\n }\n hasMinimizedBox() {\n if (!this.useBoxesStatus) {\n return false;\n }\n return this.boxes.some((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized);\n }\n getMinimizedBoxesStatus() {\n const minimizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Minimized) {\n minimizedBoxes.set(boxId, boxStatus);\n }\n });\n return minimizedBoxes;\n }\n getNotMinimizedBoxesStatus() {\n const notMinimizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus !== TELE_BOX_STATE.Minimized) {\n notMinimizedBoxes.set(boxId, boxStatus);\n }\n });\n return notMinimizedBoxes;\n }\n getAllMaximizedBoxesStatus() {\n const maximizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Maximized) {\n maximizedBoxes.set(boxId, boxStatus);\n }\n });\n return maximizedBoxes;\n }\n getAllNormalBoxesStatus() {\n const normalBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Normal) {\n normalBoxes.set(boxId, boxStatus);\n }\n });\n return normalBoxes;\n }\n getLastNotMinimizedBoxStatus(boxId) {\n return this.lastNotMinimizedBoxesStatus$.get(boxId);\n }\n setLastNotMinimizedBoxStatus(boxId, lastNotMinimizedBoxStatus, skipUpdate = false) {\n if (lastNotMinimizedBoxStatus) {\n this.lastNotMinimizedBoxesStatus$.set(boxId, lastNotMinimizedBoxStatus);\n } else {\n this.lastNotMinimizedBoxesStatus$.delete(boxId);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.LastNotMinimizedBoxStatus, { id: boxId, boxStatus: lastNotMinimizedBoxStatus });\n }\n }\n setLastNotMinimizedBoxesStatus(lastNotMinimizedBoxesStatus, skipUpdate = false) {\n this.lastNotMinimizedBoxesStatus$ = lastNotMinimizedBoxesStatus;\n this.effectLastNotMinimizedBoxStatusChange(skipUpdate);\n }\n async effectLastNotMinimizedBoxStatusChange(skipUpdate = false) {\n var _a, _b;\n if (!this.useBoxesStatus) {\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.timer) {\n clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer);\n if (this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((_a = this.effectLastNotMinimizedBoxStatusTimer) == null ? void 0 : _a.skipUpdate));\n }\n }\n this.effectLastNotMinimizedBoxStatusTimer = void 0;\n return;\n }\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.timer) {\n clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer);\n if (this.effectLastNotMinimizedBoxStatusTimer.skipUpdate !== skipUpdate) {\n if (this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((_b = this.effectLastNotMinimizedBoxStatusTimer) == null ? void 0 : _b.skipUpdate));\n }\n this.effectLastNotMinimizedBoxStatusTimer.skipUpdate = skipUpdate;\n } else {\n return;\n }\n }\n if (!this.effectLastNotMinimizedBoxStatusTimer) {\n this.effectLastNotMinimizedBoxStatusTimer = {\n skipUpdate,\n timer: void 0,\n resolve: void 0\n };\n }\n if (this.effectLastNotMinimizedBoxStatusTimer) {\n const _skipUpdate = await new Promise((resolve) => {\n this.effectLastNotMinimizedBoxStatusTimer.resolve = resolve;\n this.effectLastNotMinimizedBoxStatusTimer.timer = setTimeout(() => {\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(this.effectLastNotMinimizedBoxStatusTimer.skipUpdate);\n }\n }, 100);\n });\n this.effectLastNotMinimizedBoxStatusFunc(_skipUpdate);\n this.effectLastNotMinimizedBoxStatusTimer = void 0;\n }\n }\n effectLastNotMinimizedBoxStatusFunc(skipUpdate = false) {\n if (!this.useBoxesStatus) {\n return;\n }\n this.boxes.forEach((box) => {\n const boxStatus = this.lastNotMinimizedBoxesStatus$.get(box.id);\n if (boxStatus) {\n box.setLastNotMinimizedBoxStatus(boxStatus, skipUpdate);\n }\n });\n }\n getUnabledBoxesStatusZIndex() {\n return this.topBox ? this.topBox.zIndex : 99;\n }\n getMaxMaximizedBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Maximized && !this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 99);\n }\n getMaxNormalBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Normal && !this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 299);\n }\n getMaxForceTopBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 699);\n }\n isForceNormal(box) {\n return box._forceNormal$.value;\n }\n isForceTop(box) {\n return box._forceTop$.value;\n }\n create(config = {}, smartPosition = true) {\n const box = new TeleBox({\n zIndex: config.forceTop ? this.getMaxForceTopBoxZIndex() + 1 : this.getMaxNormalBoxZIndex() + 1,\n ...smartPosition ? this.smartPosition(config) : config,\n darkMode: this.darkMode,\n prefersColorScheme: this.prefersColorScheme,\n maximized: this.maximized,\n minimized: this.minimized,\n fence: this.fence,\n namespace: this.namespace,\n containerRect: this.containerRect,\n readonly: this.readonly,\n collectorRect: this.collectorRect\n });\n box.mount(this.root);\n this.boxes$.setValue([...this.boxes, box]);\n if (box.boxStatus && this.useBoxesStatus) {\n this.setBox(box, {\n status: box.boxStatus,\n lastNotMinimizedBoxStatus: box._lastNotMinimizedBoxStatus$.value\n }, true);\n }\n if (box.focus) {\n this.focusBox(box);\n if (smartPosition) {\n this.makeBoxTop(box);\n }\n }\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Maximize, () => {\n if (this.useBoxesStatus && box.boxStatus) {\n if (box._forceNormal$.value) {\n return;\n }\n if (box.boxStatus === TELE_BOX_STATE.Maximized) {\n this.setBox(box.id, {\n status: TELE_BOX_STATE.Normal,\n zIndex: this.getMaxNormalBoxZIndex() + 1\n }, false);\n } else {\n [...this.boxes].filter((box2) => box2.boxStatus === TELE_BOX_STATE.Normal && !this.isForceNormal(box2)).sort((a, b) => a.zIndex - b.zIndex).forEach((box2) => {\n if (box2.boxStatus === TELE_BOX_STATE.Normal) {\n this.setBox(box2.id, {\n status: TELE_BOX_STATE.Maximized,\n zIndex: this.getMaxMaximizedBoxZIndex() + 1\n }, false);\n }\n });\n this.makeMaximizedTopBoxFocus();\n }\n } else {\n this.setMaximized(!this.maximized);\n }\n });\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Minimize, () => {\n if (box.boxStatus && this.useBoxesStatus) {\n if (box._forceNormal$.value) {\n return;\n }\n if (box.focus) {\n this.blurBox(box);\n }\n this.setBox(box, {\n status: TELE_BOX_STATE.Minimized,\n zIndex: -1\n }, false, () => {\n this.focusTopBox();\n });\n } else {\n this.setMinimized(true);\n }\n });\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Close, () => {\n if (this.useBoxesStatus && box.focus) {\n this.blurBox(box);\n }\n this.remove(box);\n this.focusTopBox();\n });\n box._coord$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Move, box);\n }\n });\n box._size$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Resize, box);\n }\n });\n box._intrinsicCoord$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.IntrinsicMove, box);\n }\n });\n box._intrinsicSize$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.IntrinsicResize, box);\n }\n });\n box._visualSize$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.VisualResize, box);\n }\n });\n box._zIndex$.reaction((_, __, skipUpdate) => {\n if (this.boxes.length > 0) {\n let currentTopBox = void 0;\n const topBox = this.boxes.reduce((topBox2, box2) => {\n if (this.isForceTop(box2)) {\n return topBox2;\n }\n if (box2.boxStatus && box2.boxStatus === TELE_BOX_STATE.Minimized) {\n return topBox2;\n }\n if (!topBox2) {\n topBox2 = box2;\n return topBox2;\n }\n return topBox2.zIndex > box2.zIndex ? topBox2 : box2;\n }, currentTopBox);\n this.topBox$.setValue(topBox);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.ZIndex, box);\n }\n });\n this.events.emit(TELE_BOX_MANAGER_EVENT.Created, box);\n return box;\n }\n query(config) {\n return config ? this.boxes.filter(this.teleBoxMatcher(config)) : [...this.boxes];\n }\n queryOne(config) {\n return config ? this.boxes.find(this.teleBoxMatcher(config)) : this.boxes[0];\n }\n update(boxID, config, skipUpdate = false) {\n const box = this.boxes.find((box2) => box2.id === boxID);\n if (box) {\n return this.updateBox(box, config, skipUpdate);\n }\n }\n updateAll(config, skipUpdate = false) {\n this.boxes.forEach((box) => {\n this.updateBox(box, config, skipUpdate);\n });\n }\n setBox(boxOrID, options, skipUpdate = false, effectFunc) {\n const box = this.getBox(boxOrID);\n if (box) {\n const { status, zIndex, lastNotMinimizedBoxStatus } = options;\n if (status) {\n this.setBoxStatus(box.id, status, skipUpdate);\n box.setBoxStatus(status, skipUpdate);\n this.effectBoxStatusChange();\n }\n if (zIndex) {\n box.setZIndex(zIndex, skipUpdate);\n }\n if (lastNotMinimizedBoxStatus) {\n this.setLastNotMinimizedBoxStatus(box.id, lastNotMinimizedBoxStatus, skipUpdate);\n box.setLastNotMinimizedBoxStatus(lastNotMinimizedBoxStatus, skipUpdate);\n }\n effectFunc && effectFunc();\n }\n }\n remove(boxOrID, skipUpdate = false, effectFunc) {\n const box = this.getBox(boxOrID);\n const index2 = this.getBoxIndex(boxOrID);\n if (index2 >= 0) {\n const boxes = this.boxes.slice();\n const deletedBoxes = boxes.splice(index2, 1);\n this.boxes$.setValue(boxes);\n deletedBoxes.forEach((box2) => box2.destroy());\n if (box && this.useBoxesStatus) {\n this.setBoxStatus(box.id, void 0, skipUpdate);\n this.setLastNotMinimizedBoxStatus(box.id, void 0, skipUpdate);\n this.effectBoxStatusChange();\n effectFunc && effectFunc();\n }\n if (!skipUpdate) {\n if (this.boxes.length <= 0) {\n this.setMaximized(false);\n this.setMinimized(false);\n }\n this.events.emit(TELE_BOX_MANAGER_EVENT.Removed, deletedBoxes);\n }\n return deletedBoxes[0];\n }\n return;\n }\n removeTopBox() {\n if (this.topBox) {\n return this.remove(this.topBox);\n }\n return;\n }\n removeAll(skipUpdate = false) {\n const deletedBoxes = this.boxes$.value;\n this.boxes$.setValue([]);\n deletedBoxes.forEach((box) => box.destroy());\n this.boxesStatus$.clear();\n this.lastNotMinimizedBoxesStatus$.clear();\n if (!skipUpdate) {\n if (this.boxes.length <= 0) {\n this.setMaximized(false);\n this.setMinimized(false);\n }\n this.events.emit(TELE_BOX_MANAGER_EVENT.Removed, deletedBoxes);\n }\n return deletedBoxes;\n }\n destroy(skipUpdate = false) {\n this.events.removeAllListeners();\n this._sideEffect.flushAll();\n this.removeAll(skipUpdate);\n Object.keys(this).forEach((key) => {\n const value = this[key];\n if (value instanceof r) {\n value.destroy();\n }\n });\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n focusBox(boxOrID, skipUpdate = false) {\n const targetBox = this.getBox(boxOrID);\n if (targetBox) {\n this.boxes.forEach((box) => {\n if (targetBox === box) {\n let focusChanged = false;\n if (!targetBox.focus) {\n focusChanged = true;\n targetBox.setFocus(true, skipUpdate);\n }\n if (focusChanged && !skipUpdate) {\n this.events.emit(\n TELE_BOX_MANAGER_EVENT.Focused,\n targetBox\n );\n }\n } else if (box.focus) {\n this.blurBox(box, skipUpdate);\n }\n });\n if (!this.useBoxesStatus) {\n this.maxTitleBar.focusBox(targetBox);\n } else if (this.useBoxesStatus && this.maxTitleBar.hasMaximizedBoxInStatus()) {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n focusTopBox() {\n if (this.topBox && !this.topBox.focus) {\n return this.focusBox(this.topBox);\n }\n }\n blurBox(boxOrID, skipUpdate = false) {\n const targetBox = this.getBox(boxOrID);\n if (targetBox) {\n if (targetBox.focus) {\n targetBox.setFocus(false, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Blurred, targetBox);\n }\n }\n if (this.maxTitleBar.focusedBox === targetBox) {\n this.maxTitleBar.focusBox();\n }\n }\n }\n blurAll(skipUpdate = false) {\n this.boxes.forEach((box) => {\n if (box.focus) {\n box.setFocus(false, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Blurred, box);\n }\n }\n });\n if (this.maxTitleBar.focusedBox) {\n this.maxTitleBar.focusBox();\n }\n }\n teleBoxMatcher(config) {\n const keys = Object.keys(config);\n return (box) => keys.every((key) => config[key] === box[key]);\n }\n updateBox(box, config, skipUpdate = false) {\n if (config.x != null || config.y != null) {\n box.move(\n config.x == null ? box.intrinsicX : config.x,\n config.y == null ? box.intrinsicY : config.y,\n skipUpdate\n );\n }\n if (config.width != null || config.height != null) {\n box.resize(\n config.width == null ? box.intrinsicWidth : config.width,\n config.height == null ? box.intrinsicHeight : config.height,\n skipUpdate\n );\n }\n if (config.title != null) {\n box.setTitle(config.title);\n this.maxTitleBar.updateTitles();\n }\n if (config.visible != null) {\n box.setVisible(config.visible, skipUpdate);\n }\n if (config.minHeight != null) {\n box.setMinHeight(config.minHeight, skipUpdate);\n }\n if (config.minWidth != null) {\n box.setMinWidth(config.minWidth, skipUpdate);\n }\n if (config.resizable != null) {\n box.setResizable(config.resizable, skipUpdate);\n }\n if (config.draggable != null) {\n box.setDraggable(config.draggable, skipUpdate);\n }\n if (config.fixRatio != null) {\n box.setFixRatio(config.fixRatio, skipUpdate);\n }\n if (config.zIndex != null) {\n box.setZIndex(config.zIndex, skipUpdate);\n }\n if (config.content != null) {\n box.mountContent(config.content);\n }\n if (config.footer != null) {\n box.mountFooter(config.footer);\n }\n if (this.useBoxesStatus && (config.boxStatus || config.lastNotMinimizedBoxStatus)) {\n this.setBox(box, {\n status: config.boxStatus,\n lastNotMinimizedBoxStatus: config.lastNotMinimizedBoxStatus\n }, skipUpdate);\n }\n if (config.forceTop != null) {\n box.setForceTop(config.forceTop, skipUpdate);\n }\n if (config.forceNormal != null) {\n box.setForceNormal(config.forceNormal, skipUpdate);\n }\n }\n smartPosition(config = {}) {\n let { x, y } = config;\n const { width = 0.5, height = 0.5 } = config;\n if (x == null) {\n let vx = 20;\n if (config.forceTop) {\n const forceTopBox = this.maxForceTopBox || this.topBox;\n if (forceTopBox) {\n vx = forceTopBox.intrinsicX * this.containerRect.width + 20;\n if (vx > this.containerRect.width - width * this.containerRect.width) {\n vx = 20;\n }\n }\n } else if (this.topBox) {\n vx = this.topBox.intrinsicX * this.containerRect.width + 20;\n if (vx > this.containerRect.width - width * this.containerRect.width) {\n vx = 20;\n }\n } else if (this.hasMinimizedBox()) {\n vx = [...this.boxes].filter((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized && box.lastNotMinimizedBoxStatus && box.lastNotMinimizedBoxStatus === TELE_BOX_STATE.Normal).reduce((maxX, box) => {\n return Math.max(maxX, box.intrinsicX * this.containerRect.width + 20);\n }, vx);\n }\n x = vx / this.containerRect.width;\n }\n if (y == null) {\n let vy = 20;\n if (config.forceTop) {\n const forceTopBox = this.maxForceTopBox || this.topBox;\n if (forceTopBox) {\n vy = forceTopBox.intrinsicY * this.containerRect.height + 20;\n if (vy > this.containerRect.height - height * this.containerRect.height) {\n vy = 20;\n }\n }\n } else if (this.topBox) {\n vy = this.topBox.intrinsicY * this.containerRect.height + 20;\n if (vy > this.containerRect.height - height * this.containerRect.height) {\n vy = 20;\n }\n } else if (this.hasMinimizedBox()) {\n vy = [...this.boxes].filter((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized && box.lastNotMinimizedBoxStatus && box.lastNotMinimizedBoxStatus === TELE_BOX_STATE.Normal).reduce((maxY, box) => {\n return Math.max(maxY, box.intrinsicY * this.containerRect.height + 20);\n }, vy);\n }\n y = vy / this.containerRect.height;\n }\n return { ...config, x, y, width, height };\n }\n makeBoxTop(box, skipUpdate = false) {\n if (!this.useBoxesStatus && this.topBox) {\n if (box !== this.topBox) {\n box.setZIndex(this.topBox.zIndex + 1, skipUpdate);\n }\n } else if (this.useBoxesStatus)\n ;\n }\n getMaximizedTopBox() {\n if (!this.useBoxesStatus) {\n return void 0;\n }\n let maximizedBox;\n if (this.maxTitleBar.hasMaximizedBoxInStatus()) {\n maximizedBox = this.maxTitleBar.MaximizedBoxes.reduce((topBox, currentBox) => {\n if (!topBox) {\n return currentBox;\n }\n return topBox.zIndex > currentBox.zIndex ? topBox : currentBox;\n });\n }\n return maximizedBox;\n }\n makeMaximizedTopBoxFocus() {\n if (!this.useBoxesStatus) {\n return;\n }\n const maximizedBox = this.getMaximizedTopBox();\n this.maxTitleBar.focusBox(maximizedBox);\n }\n getBoxIndex(boxOrID) {\n return typeof boxOrID === \"string\" ? this.boxes.findIndex((box) => box.id === boxOrID) : this.boxes.findIndex((box) => box === boxOrID);\n }\n getBox(boxOrID) {\n return typeof boxOrID === \"string\" ? this.boxes.find((box) => box.id === boxOrID) : boxOrID;\n }\n createMinimizedAppMenu() {\n var _a, _b;\n if ((_a = this.collector) == null ? void 0 : _a.$appMenuContainer) {\n return new AppMenu({\n manager: this,\n container: (_b = this.collector) == null ? void 0 : _b.$appMenuContainer,\n theme: this.prefersColorScheme ? \"dark\" : \"light\",\n getBoxesStatus: () => {\n return this.boxesStatus$;\n }\n });\n }\n return;\n }\n}\nTeleBoxManager.kind = \"TeleBoxManager\";\nexport { DefaultTitleBar, TELE_BOX_COLOR_SCHEME, TELE_BOX_DELEGATE_EVENT, TELE_BOX_EVENT, TELE_BOX_MANAGER_EVENT, TELE_BOX_RESIZE_HANDLE, TELE_BOX_STATE, TeleBox, TeleBoxCollector, TeleBoxDragHandleType, TeleBoxManager };\n//# sourceMappingURL=telebox-insider.es.js.map\n","import { AppAttributes, Events, MIN_HEIGHT, MIN_WIDTH } from \"./constants\";\nimport { debounce } from \"lodash\";\nimport { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport { WindowManager } from \"./index\";\nimport type { BoxEmitterType } from \"./BoxEmitter\";\nimport type { AddAppOptions, AppInitState } from \"./index\";\nimport type {\n TeleBoxManagerUpdateConfig,\n TeleBoxManagerCreateConfig,\n ReadonlyTeleBox,\n TeleBoxManagerConfig,\n TeleBoxColorScheme,\n TeleBoxRect,\n TeleBoxConfig,\n TeleBoxState,\n NotMinimizedBoxState,\n} from \"@netless/telebox-insider\";\nimport type Emittery from \"emittery\";\nimport type { NetlessApp } from \"./typings\";\nimport type { View } from \"white-web-sdk\";\nimport type { CallbacksType } from \"./callback\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { getExtendClass, TeleBoxManager, TeleBoxCollector } from \"./Utils/extendClass\";\n\nexport { TELE_BOX_STATE };\n\nexport type CreateBoxParams = {\n appId: string;\n app: NetlessApp;\n view?: View;\n emitter?: Emittery;\n options?: AddAppOptions;\n canOperate?: boolean;\n smartPosition?: boolean;\n boxStatus?: TeleBoxState;\n forceTop?: boolean;\n forceNormal?: boolean;\n isDragContent?: boolean;\n};\n\ntype AppId = { appId: string };\n\ntype MoveBoxParams = AppId & { x: number; y: number };\n\ntype ResizeBoxParams = AppId & { width: number; height: number; skipUpdate: boolean };\n\ntype SetBoxMinSizeParams = AppId & { minWidth: number; minHeight: number };\n\ntype SetBoxTitleParams = AppId & { title: string };\n\nexport type CreateTeleBoxManagerConfig = {\n collectorContainer?: HTMLElement;\n collectorStyles?: Partial<CSSStyleDeclaration>;\n prefersColorScheme?: TeleBoxColorScheme;\n useBoxesStatus?: boolean;\n};\n\nexport type BoxManagerContext = {\n safeSetAttributes: (attributes: any) => void;\n getMainView: () => View;\n updateAppState: (appId: string, field: AppAttributes, value: any) => void;\n setBoxStatus: (appId: string, status?: TeleBoxState) => void;\n setLastNotMinimizedBoxStatus: (appId: string, status?: NotMinimizedBoxState) => void;\n emitter: EmitterType;\n boxEmitter: BoxEmitterType;\n callbacks: CallbacksType;\n canOperate: () => boolean;\n notifyContainerRectUpdate: (rect: TeleBoxRect) => void;\n cleanFocus: () => void;\n setAppFocus: (appId: string) => void;\n};\n\nexport const createBoxManager = (\n manager: WindowManager,\n callbacks: CallbacksType,\n emitter: EmitterType,\n boxEmitter: BoxEmitterType,\n options: CreateTeleBoxManagerConfig\n) => {\n const BoxManagerClass = getExtendClass(BoxManager, WindowManager.extendClass);\n return new BoxManagerClass(\n {\n safeSetAttributes: (attributes: any) => manager.safeSetAttributes(attributes),\n getMainView: () => manager.mainView,\n updateAppState: (...args) => manager.appManager?.store.updateAppState(...args),\n setBoxStatus: (id: string, boxStatus?: TeleBoxState) =>\n manager.appManager?.store.setBoxStatus(id, boxStatus),\n setLastNotMinimizedBoxStatus: (\n id: string,\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState\n ) =>\n manager.appManager?.store.setLastNotMinimizedBoxStatus(\n id,\n lastNotMinimizedBoxStatus\n ),\n canOperate: () => manager.canOperate,\n notifyContainerRectUpdate: (rect: TeleBoxRect) =>\n manager.appManager?.notifyContainerRectUpdate(rect),\n cleanFocus: () => manager.appManager?.store.cleanFocus(),\n setAppFocus: (appId: string) => manager.appManager?.store.setAppFocus(appId, true),\n callbacks,\n emitter,\n boxEmitter,\n },\n options\n );\n};\n\nexport class BoxManager {\n static readonly kind = \"BoxManager\";\n public teleBoxManager: TeleBoxManager;\n\n constructor(\n private context: BoxManagerContext,\n private createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig\n ) {\n const { emitter, callbacks, boxEmitter } = context;\n this.teleBoxManager = this.setupBoxManager(createTeleBoxManagerConfig);\n\n // 使用 _xxx$.reaction 订阅修改的值, 不管有没有 skipUpdate, 修改值都会触发回调\n this.teleBoxManager._state$.reaction(state => {\n callbacks.emit(\"boxStateChange\", state);\n emitter.emit(\"boxStateChange\", state);\n });\n\n this.teleBoxManager._darkMode$.reaction(darkMode => {\n callbacks.emit(\"darkModeChange\", darkMode);\n });\n this.teleBoxManager._prefersColorScheme$.reaction(colorScheme => {\n callbacks.emit(\"prefersColorSchemeChange\", colorScheme);\n });\n\n // ppt 在最小化后刷新恢复正常大小,拿不到正确的宽高,需要手动触发一下窗口的 resize\n this.teleBoxManager._minimized$.reaction(minimized => {\n if (!minimized) {\n setTimeout(() => {\n const offset = 0.001 * (Math.random() > 0.5 ? 1 : -1);\n this.teleBoxManager.boxes.forEach(box => {\n box.resize(box.intrinsicWidth + offset, box.intrinsicHeight + offset, true);\n });\n }, 400);\n }\n });\n\n // events.on 的值则会根据 skipUpdate 来决定是否触发回调\n this.teleBoxManager.events.on(\"minimized\", minimized => {\n this.context.safeSetAttributes({ minimized });\n if (minimized) {\n this.context.cleanFocus();\n this.blurAllBox();\n } else {\n const topBox = this.getTopBox();\n if (topBox) {\n this.context.setAppFocus(topBox.id);\n this.focusBox({ appId: topBox.id }, false);\n }\n }\n });\n this.teleBoxManager.events.on(\"maximized\", maximized => {\n this.context.safeSetAttributes({ maximized });\n });\n this.teleBoxManager.events.on(\"removed\", boxes => {\n boxes.forEach(box => {\n boxEmitter.emit(\"close\", { appId: box.id });\n });\n });\n this.teleBoxManager.events.on(\n \"intrinsic_move\",\n debounce((box: ReadonlyTeleBox): void => {\n boxEmitter.emit(\"move\", { appId: box.id, x: box.intrinsicX, y: box.intrinsicY });\n }, 50)\n );\n this.teleBoxManager.events.on(\n \"intrinsic_resize\",\n debounce((box: ReadonlyTeleBox): void => {\n boxEmitter.emit(\"resize\", {\n appId: box.id,\n width: box.intrinsicWidth,\n height: box.intrinsicHeight,\n });\n }, 200)\n );\n this.teleBoxManager.events.on(\"focused\", box => {\n if (box) {\n if (this.canOperate) {\n boxEmitter.emit(\"focus\", { appId: box.id });\n } else {\n this.teleBoxManager.blurBox(box.id);\n }\n }\n });\n this.teleBoxManager.events.on(\"blurred\", box => {\n if (box) {\n if (this.canOperate) {\n boxEmitter.emit(\"blurred\", { appId: box.id });\n }\n }\n });\n this.teleBoxManager.events.on(\"z_index\", box => {\n this.context.updateAppState(box.id, AppAttributes.ZIndex, box.zIndex);\n });\n this.teleBoxManager.events.on(\n \"box_status\",\n (box: { id: string; boxStatus?: TeleBoxState }) => {\n if (this.canOperate) {\n this.context.setBoxStatus(box.id, box.boxStatus);\n }\n }\n );\n this.teleBoxManager.events.on(\n \"last_not_minimized_box_status\",\n (box: { id: string; boxStatus?: NotMinimizedBoxState }) => {\n if (this.canOperate) {\n this.context.setLastNotMinimizedBoxStatus(box.id, box.boxStatus);\n }\n }\n );\n emitter.on(\"playgroundSizeChange\", () => this.updateManagerRect());\n emitter.on(\"updateManagerRect\", () => this.updateManagerRect());\n }\n\n private get mainView() {\n return this.context.getMainView();\n }\n\n private get canOperate() {\n return this.context.canOperate();\n }\n\n public get boxState() {\n return this.teleBoxManager.state;\n }\n\n public get maximized() {\n return this.teleBoxManager.maximized;\n }\n\n public get minimized() {\n return this.teleBoxManager.minimized;\n }\n\n public get darkMode() {\n return this.teleBoxManager.darkMode;\n }\n\n public get prefersColorScheme(): TeleBoxColorScheme {\n return this.teleBoxManager.prefersColorScheme;\n }\n\n public get boxSize() {\n return this.teleBoxManager.boxes.length;\n }\n\n public createBox(params: CreateBoxParams): void {\n if (!this.teleBoxManager) return;\n let { minwidth = MIN_WIDTH, minheight = MIN_HEIGHT } = params.app.config ?? {};\n const { width, height } = params.app.config ?? {};\n const title = params.options?.title || params.appId;\n const rect = this.teleBoxManager.containerRect;\n\n if (minwidth > 1) {\n minwidth = minwidth / rect.width;\n }\n\n if (minheight > 1) {\n minheight = minheight / rect.height;\n }\n\n const createBoxConfig: TeleBoxManagerCreateConfig = {\n title,\n minWidth: minwidth,\n minHeight: minheight,\n width,\n height,\n id: params.appId,\n boxStatus: params.boxStatus,\n forceTop: params.forceTop,\n forceNormal: params.forceNormal,\n isDragContent: params.isDragContent,\n };\n this.teleBoxManager.create(createBoxConfig, params.smartPosition);\n this.context.emitter.emit(`${params.appId}${Events.WindowCreated}` as any);\n }\n\n public setBoxInitState(appId: string): void {\n const box = this.teleBoxManager.queryOne({ id: appId });\n if (box) {\n if (box.state === TELE_BOX_STATE.Maximized) {\n this.context.boxEmitter.emit(\"resize\", {\n appId: appId,\n x: box.x,\n y: box.y,\n width: box.intrinsicWidth,\n height: box.intrinsicHeight,\n });\n }\n }\n }\n public setBoxesStatus(status?: Record<string, TeleBoxState>): void {\n const map = new Map(Object.entries(status ?? {}));\n this.teleBoxManager.setBoxesStatus(map, true);\n this.context.callbacks.emit(\"onBoxesStatusChange\", map);\n this.context.emitter.emit(\"boxesStatusChange\", map);\n }\n\n // public setBoxStatus(appId: string, status?: TeleBoxState, skipUpdate = false): void {\n // this.teleBoxManager.update(appId, { boxStatus: status }, true);\n // }\n\n public setLastNotMinimizedBoxesStatus(status?: Record<string, NotMinimizedBoxState>): void {\n const map = new Map(Object.entries(status ?? {}));\n this.teleBoxManager.setLastNotMinimizedBoxesStatus(map, true);\n this.context.callbacks.emit(\"onLastNotMinimizedBoxesStatusChange\", map);\n this.context.emitter.emit(\"lastNotMinimizedBoxesStatusChange\", map);\n }\n\n // public setLastNotMinimizedBoxStatus(appId: string, status?: NotMinimizedBoxState): void {\n // this.teleBoxManager.update(appId, { lastNotMinimizedBoxStatus: status }, true);\n // }\n\n public setupBoxManager(\n createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig\n ): TeleBoxManager {\n const root = WindowManager.wrapper ? WindowManager.wrapper : document.body;\n const rect = root.getBoundingClientRect();\n const initManagerState: TeleBoxManagerConfig = {\n root: root,\n containerRect: {\n x: 0,\n y: 0,\n width: rect.width,\n height: rect.height,\n },\n fence: false,\n prefersColorScheme: createTeleBoxManagerConfig?.prefersColorScheme,\n useBoxesStatus: createTeleBoxManagerConfig?.useBoxesStatus || false,\n };\n\n const TeleBoxManagerClass = getExtendClass(TeleBoxManager, WindowManager.extendClass);\n const manager = new TeleBoxManagerClass(initManagerState);\n if (this.teleBoxManager) {\n this.teleBoxManager.destroy();\n }\n this.teleBoxManager = manager;\n const container = createTeleBoxManagerConfig?.collectorContainer || WindowManager.wrapper;\n if (container) {\n this.setCollectorContainer(container);\n }\n return manager;\n }\n\n public setCollectorContainer(container: HTMLElement) {\n const TeleBoxCollectorClass = getExtendClass(TeleBoxCollector, WindowManager.extendClass);\n const collector = new TeleBoxCollectorClass({\n styles: this.createTeleBoxManagerConfig?.collectorStyles,\n }).mount(container);\n this.teleBoxManager.setCollector(collector);\n }\n\n public getBox(appId: string): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.queryOne({ id: appId });\n }\n\n public closeBox(appId: string, skipUpdate = false): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.remove(appId, skipUpdate);\n }\n\n public boxIsFocus(appId: string): boolean | undefined {\n const box = this.getBox(appId);\n return box?.focus;\n }\n\n public getFocusBox(): ReadonlyTeleBox | undefined {\n const boxes = this.teleBoxManager.query({ focus: true });\n return boxes[0];\n }\n\n public getTopBox(): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.topBox;\n }\n\n public updateBoxState(state?: AppInitState): void {\n if (!state) return;\n const box = this.getBox(state.id);\n if (box) {\n this.teleBoxManager.update(\n box.id,\n {\n x: state.x,\n y: state.y,\n width: state.width || 0.5,\n height: state.height || 0.5,\n zIndex: state.zIndex,\n boxStatus: state.boxStatus,\n lastNotMinimizedBoxStatus: state.lastNotMinimizedBoxStatus,\n forceTop: state.forceTop,\n forceNormal: state.forceNormal,\n isDragContent: state.isDragContent,\n },\n true\n );\n setTimeout(() => {\n if (state.focus) {\n this.teleBoxManager.focusBox(box.id, true);\n }\n if (state.maximized != null) {\n this.teleBoxManager.setMaximized(Boolean(state.maximized), true);\n }\n if (state.minimized != null) {\n this.teleBoxManager.setMinimized(Boolean(state.minimized), true);\n }\n }, 50);\n if (!state.boxStatus) {\n this.context.callbacks.emit(\"boxStateChange\", this.teleBoxManager.state);\n }\n }\n }\n\n public updateManagerRect(): void {\n const rect = this.mainView.divElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n const containerRect = { x: 0, y: 0, width: rect.width, height: rect.height };\n this.teleBoxManager.setContainerRect(containerRect);\n this.context.notifyContainerRectUpdate(this.teleBoxManager.containerRect);\n }\n }\n\n public moveBox({ appId, x, y }: MoveBoxParams): void {\n this.teleBoxManager.update(appId, { x, y }, true);\n }\n\n public focusBox({ appId }: AppId, skipUpdate = true): void {\n this.teleBoxManager.focusBox(appId, skipUpdate);\n }\n\n public resizeBox({ appId, width, height, skipUpdate }: ResizeBoxParams): void {\n this.teleBoxManager.update(appId, { width, height }, skipUpdate);\n }\n\n public setBoxMinSize(params: SetBoxMinSizeParams): void {\n this.teleBoxManager.update(\n params.appId,\n {\n minWidth: params.minWidth,\n minHeight: params.minHeight,\n },\n true\n );\n }\n\n public setBoxTitle(params: SetBoxTitleParams): void {\n this.teleBoxManager.update(params.appId, { title: params.title }, true);\n }\n\n public blurAllBox(): void {\n this.teleBoxManager.blurAll();\n }\n\n public updateAll(config: TeleBoxManagerUpdateConfig): void {\n this.teleBoxManager.updateAll(config);\n }\n\n public setMaximized(maximized: boolean, skipUpdate = true): void {\n if (maximized !== this.maximized) {\n this.teleBoxManager.setMaximized(maximized, skipUpdate);\n }\n }\n\n public setMinimized(minimized: boolean, skipUpdate = true) {\n this.teleBoxManager.setMinimized(minimized, skipUpdate);\n }\n\n public focusTopBox(): void {\n const boxes = this.teleBoxManager.query();\n if (boxes.length >= 1) {\n const box = this.getTopBox();\n if (box) {\n this.focusBox({ appId: box.id }, false);\n }\n }\n }\n\n public updateBox(id: string, payload: TeleBoxConfig, skipUpdate = true): void {\n this.teleBoxManager.update(id, payload, skipUpdate);\n }\n\n public setReadonly(readonly: boolean) {\n this.teleBoxManager.setReadonly(readonly);\n }\n\n public setPrefersColorScheme(colorScheme: TeleBoxColorScheme) {\n this.teleBoxManager.setPrefersColorScheme(colorScheme);\n }\n\n public setZIndex(id: string, zIndex: number, skipUpdate = true) {\n this.teleBoxManager.update(id, { zIndex }, skipUpdate);\n }\n\n public destroy() {\n this.teleBoxManager.destroy();\n }\n}\n","/** 合法标识符形式的 key 省略引号,形如 `{aaa:undefined}` */\nfunction formatAttributesLogObjectKey(key: string): string {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\ntype AttributesLogRecord = Record<string, unknown>;\n\n/**\n * attributes 调试日志:对象/数组会写成近似 JS 字面量(保留 `undefined`、数组空洞),避免 `[object Object]`;\n * 并处理 BigInt、循环引用等。\n */\nexport function stringifyForAttributesLog(\n value: unknown,\n seen?: WeakSet<AttributesLogRecord>\n): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n const t = typeof value;\n if (t === \"bigint\") {\n return `${value}n`;\n }\n if (t === \"symbol\") {\n return String(value);\n }\n if (t === \"function\") {\n const fn = value as (...args: unknown[]) => unknown;\n return `[Function ${fn.name || \"anonymous\"}]`;\n }\n if (t !== \"object\") {\n return t === \"string\" ? JSON.stringify(value as string) : String(value);\n }\n\n const obj = value as AttributesLogRecord;\n if (seen?.has(obj)) {\n return \"[Circular]\";\n }\n\n const nextSeen = seen ?? new WeakSet<AttributesLogRecord>();\n nextSeen.add(obj);\n try {\n if (Array.isArray(value)) {\n return `[${Array.from(value as unknown[], item =>\n stringifyForAttributesLog(item, nextSeen)\n ).join(\",\")}]`;\n }\n if (value instanceof Date) {\n return JSON.stringify(value.toISOString());\n }\n if (value instanceof RegExp) {\n return String(value);\n }\n const keys = Object.keys(obj);\n const pairs = keys.map(k => {\n let v: unknown;\n try {\n v = obj[k];\n } catch {\n return `${formatAttributesLogObjectKey(k)}:[Threw]`;\n }\n return `${formatAttributesLogObjectKey(k)}:${stringifyForAttributesLog(v, nextSeen)}`;\n });\n return `{${pairs.join(\",\")}}`;\n } catch {\n return \"[Unserializable]\";\n } finally {\n nextSeen.delete(obj);\n }\n}\n\n/** 仅一层 key 合并:可作为 attributes 片段的「普通对象」(非数组、Date 等) */\nexport function isShallowMergeAttributesRecord(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n );\n}\n","import type { Logger } from \"white-web-sdk\";\nimport {\n isShallowMergeAttributesRecord,\n stringifyForAttributesLog,\n} from \"./attributesLogStringify\";\nimport { WindowManager } from \"../index\";\n\n/** ArgusLog 经 `logger.info` 上报的单条字符串上限(含前缀) */\nconst ARGUS_LOG_INFO_MAX_LENGTH = 1500;\n\nfunction truncateArgusLogInfoMessage(message: string): string {\n if (message.length <= ARGUS_LOG_INFO_MAX_LENGTH) {\n return message;\n }\n const ellipsis = \"…\";\n return message.slice(0, ARGUS_LOG_INFO_MAX_LENGTH - ellipsis.length) + ellipsis;\n}\n\nfunction keysPathEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport const log = (...args: any[]): void => {\n if (WindowManager.debug) {\n console.log(`[WindowManager]:`, ...args);\n }\n};\n\n/**\n * 按 `[window-manager][tagName]` 前缀输出。\n * 若传入 `debounceTime`(毫秒):窗口内多次 `log` 不立即输出,只在连续停止调用满 `debounceTime` 后输出**最后一次**的参数(尾部 debounce)。\n */\nexport class LocalConsole {\n private pendingArgs: unknown[] | null = null;\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly name: string, private readonly debounceTime?: number) {}\n\n private flush(): void {\n this.flushTimer = null;\n const args = this.pendingArgs;\n this.pendingArgs = null;\n if (args === null) {\n return;\n }\n console.log(`[window-manager][${this.name}]: ${args.join(\", \")}`);\n }\n\n log(...args: unknown[]): void {\n const ms = this.debounceTime;\n if (ms != null && ms > 0) {\n this.pendingArgs = args;\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => this.flush(), ms);\n return;\n }\n console.log(`[window-manager][${this.name}]: ${args.join(\", \")}`);\n }\n\n /**\n * 销毁:清除 debounce 定时器与未输出的暂存参数。\n * 持有 LocalConsole 的类在销毁时应调用。\n */\n destroy(): void {\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n this.pendingArgs = null;\n }\n}\n\n/**\n * 按 `[WindowManager][tagName]` 前缀输出。\n * 若传入 `debounceTime`(毫秒):窗口内多次 `log` 不立即输出,只在连续停止调用满 `debounceTime` 后输出**最后一次**的参数(尾部 debounce)。\n */\nexport class ArgusLog {\n private pendingArgs: unknown[] | null = null;\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** debounce 窗口内按一层 key 合并;同 key 后者覆盖;非普通对象则整段待输出被本次值替换 */\n private pendingShallowMerge:\n | { kind: \"record\"; label: string; data: Record<string, unknown> }\n | { kind: \"atom\"; label: string; value: unknown }\n | null = null;\n private shallowMergeTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** debounce 窗口内 safeUpdateAttributes:同 keys 数组则只更新 value,否则追加一段,flush 时拼成一条 */\n private pendingUpdateSegments: { keys: string[]; value: unknown }[] | null = null;\n private updateMergeTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private readonly logger: Logger,\n private readonly name: string,\n private readonly debounceTime?: number\n ) {}\n\n private emitInfo(message: string): void {\n this.logger.info(truncateArgusLogInfoMessage(message));\n }\n\n private flush(): void {\n this.flushTimer = null;\n const args = this.pendingArgs;\n this.pendingArgs = null;\n if (args === null) {\n return;\n }\n this.emitInfo(`[WindowManager][${this.name}]: ${args.join(\", \")}`);\n }\n\n private flushShallowMerge(): void {\n this.shallowMergeTimer = null;\n const p = this.pendingShallowMerge;\n this.pendingShallowMerge = null;\n if (p === null) {\n return;\n }\n const body =\n p.kind === \"record\"\n ? stringifyForAttributesLog(p.data)\n : stringifyForAttributesLog(p.value);\n this.emitInfo(`[WindowManager][${this.name}]: ${p.label} ${body}`);\n // 输出后释放合并对象引用,避免长时间持有 attributes 快照\n if (p.kind === \"record\") {\n for (const k of Object.keys(p.data)) {\n delete p.data[k];\n }\n }\n }\n\n log(...args: unknown[]): void {\n const ms = this.debounceTime;\n if (ms != null && ms > 0) {\n this.pendingArgs = args;\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => this.flush(), ms);\n return;\n }\n this.emitInfo(`[WindowManager][${this.name}]: ${args.join(\", \")}`);\n }\n\n /**\n * 带 debounce 时:窗口内多次调用会把「一层 key」合并进同一条日志(不同 key 并存,同 key 取最后一次)。\n * `payload` 为普通对象时做浅合并;否则视为原子值,覆盖当前待合并状态(丢弃此前累积的对象 key)。\n * 无 debounce 或时间为 0 时立即输出。\n */\n logDebouncedShallowMerge(label: string, payload: unknown): void {\n const ms = this.debounceTime;\n const debounced = ms != null && ms > 0;\n\n const emit = (text: string): void => {\n this.emitInfo(`[WindowManager][${this.name}]: ${label} ${text}`);\n };\n\n if (!debounced) {\n emit(stringifyForAttributesLog(payload));\n return;\n }\n\n if (this.shallowMergeTimer != null) {\n clearTimeout(this.shallowMergeTimer);\n this.shallowMergeTimer = null;\n }\n\n if (isShallowMergeAttributesRecord(payload)) {\n if (this.pendingShallowMerge?.kind === \"record\") {\n this.pendingShallowMerge = {\n kind: \"record\",\n label,\n data: { ...this.pendingShallowMerge.data, ...payload },\n };\n } else {\n this.pendingShallowMerge = { kind: \"record\", label, data: { ...payload } };\n }\n } else {\n this.pendingShallowMerge = { kind: \"atom\", label, value: payload };\n }\n\n this.shallowMergeTimer = setTimeout(() => this.flushShallowMerge(), ms);\n }\n\n private flushUpdateAttributesMerge(): void {\n this.updateMergeTimer = null;\n const segments = this.pendingUpdateSegments;\n this.pendingUpdateSegments = null;\n if (segments === null || segments.length === 0) {\n return;\n }\n const parts = segments.map(\n s => `${s.keys.join(\", \")} ${stringifyForAttributesLog(s.value)}`\n );\n this.emitInfo(`[WindowManager][${this.name}]: safeUpdateAttributes ${parts.join(\" | \")}`);\n for (const s of segments) {\n s.keys.length = 0;\n s.value = undefined;\n }\n segments.length = 0;\n }\n\n /**\n * 带 debounce 时:连续调用若 `keys` 与上一段完全相同则覆盖该段的 `value`;否则追加一段。\n * flush 时输出一条日志,多段用 ` | ` 连接。\n */\n logDebouncedUpdateAttributes(keys: string[], value: unknown): void {\n const ms = this.debounceTime;\n const debounced = ms != null && ms > 0;\n const keysCopy = [...keys];\n\n if (!debounced) {\n this.emitInfo(\n `[WindowManager][${this.name}]: safeUpdateAttributes ${keysCopy.join(\n \", \"\n )} ${stringifyForAttributesLog(value)}`\n );\n return;\n }\n\n if (this.updateMergeTimer != null) {\n clearTimeout(this.updateMergeTimer);\n this.updateMergeTimer = null;\n }\n\n if (this.pendingUpdateSegments === null || this.pendingUpdateSegments.length === 0) {\n this.pendingUpdateSegments = [{ keys: keysCopy, value }];\n } else {\n const last = this.pendingUpdateSegments[this.pendingUpdateSegments.length - 1];\n if (keysPathEqual(last.keys, keysCopy)) {\n last.value = value;\n } else {\n this.pendingUpdateSegments.push({ keys: keysCopy, value });\n }\n }\n\n this.updateMergeTimer = setTimeout(() => this.flushUpdateAttributesMerge(), ms);\n }\n\n /**\n * 销毁:清除所有 `setTimeout` debounce 定时器,并丢弃尚未输出的暂存日志(不补打日志)。\n * WindowManager 销毁时应调用,避免泄漏与销毁后仍触发 `logger.info`。\n */\n destroy(): void {\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.shallowMergeTimer != null) {\n clearTimeout(this.shallowMergeTimer);\n this.shallowMergeTimer = null;\n }\n if (this.updateMergeTimer != null) {\n clearTimeout(this.updateMergeTimer);\n this.updateMergeTimer = null;\n }\n this.pendingArgs = null;\n this.pendingShallowMerge = null;\n this.pendingUpdateSegments = null;\n }\n\n /** 与 `destroy()` 相同,保留旧名以兼容 */\n dispose(): void {\n this.destroy();\n }\n}\n","import pRetry from \"p-retry\";\nimport type { Room, RoomMember } from \"white-web-sdk\";\nimport { WhiteVersion } from \"white-web-sdk\";\nimport { REQUIRE_VERSION } from \"./constants\";\nimport { WindowManager } from \"./index\";\nimport { getVersionNumber } from \"./Utils/Common\";\nimport { WhiteWebSDKInvalidError } from \"./Utils/error\";\nimport { log } from \"./Utils/log\";\n\nexport const setupWrapper = (\n root: HTMLElement\n): {\n playground: HTMLDivElement;\n wrapper: HTMLDivElement;\n sizer: HTMLDivElement;\n mainViewElement: HTMLDivElement;\n} => {\n const playground = document.createElement(\"div\");\n playground.className = \"netless-window-manager-playground\";\n\n const sizer = document.createElement(\"div\");\n sizer.className = \"netless-window-manager-sizer\";\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"netless-window-manager-wrapper\";\n\n const mainViewElement = document.createElement(\"div\");\n mainViewElement.className = \"netless-window-manager-main-view\";\n\n playground.appendChild(sizer);\n sizer.appendChild(wrapper);\n wrapper.appendChild(mainViewElement);\n root.appendChild(playground);\n WindowManager.wrapper = wrapper;\n\n return { playground, wrapper, sizer, mainViewElement };\n};\n\nexport const checkVersion = () => {\n const version = getVersionNumber(WhiteVersion);\n if (version < getVersionNumber(REQUIRE_VERSION)) {\n throw new WhiteWebSDKInvalidError(REQUIRE_VERSION);\n }\n};\n\nexport const findMemberByUid = (room: Room | undefined, uid: string) => {\n const roomMembers = room?.state.roomMembers || [];\n let maxMemberId = -1; // 第一个进入房间的用户 memberId 是 0\n let result: RoomMember | undefined = undefined;\n for (const member of roomMembers) {\n if (member.payload?.uid === uid && maxMemberId < member.memberId) {\n maxMemberId = member.memberId;\n result = member;\n }\n }\n return result;\n};\n\nexport const createInvisiblePlugin = async (room: Room): Promise<WindowManager> => {\n let manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (manager) return manager;\n\n let resolve!: (manager: WindowManager) => void;\n const promise = new Promise<WindowManager>(r => {\n // @ts-expect-error Set private property.\n WindowManager._resolve = resolve = r;\n });\n\n let wasReadonly = false;\n const canOperate = isRoomTokenWritable(room);\n if (!room.isWritable && canOperate) {\n wasReadonly = true;\n await pRetry(\n async count => {\n log(`switching to writable (x${count})`);\n await room.setWritable(true);\n },\n { retries: 10, maxTimeout: 5000 }\n );\n }\n if (room.isWritable) {\n log(\"creating InvisiblePlugin...\");\n room.createInvisiblePlugin(WindowManager, {}).catch(console.warn);\n } else {\n if (canOperate) console.warn(\"[WindowManager]: failed to switch to writable\");\n console.warn(\"[WindowManager]: waiting for others to create the plugin...\");\n }\n\n const timeout = setTimeout(() => {\n console.warn(\"[WindowManager]: no one called createInvisiblePlugin() after 20 seconds\");\n }, 20_000);\n\n const abort = setTimeout(() => {\n throw new Error(\"[WindowManager]: no one called createInvisiblePlugin() after 60 seconds\");\n }, 60_000);\n\n const interval = setInterval(() => {\n manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (manager) {\n clearTimeout(abort);\n clearTimeout(timeout);\n clearInterval(interval);\n resolve(manager);\n if (wasReadonly && room.isWritable) {\n setTimeout(() => room.setWritable(false).catch(console.warn), 500);\n }\n }\n }, 200);\n\n return promise;\n};\n\nconst isRoomTokenWritable = (room: Room) => {\n try {\n const str = atob(room.roomToken.slice(\"NETLESSROOM_\".length));\n const index = str.indexOf(\"&role=\");\n const role = +str[index + \"&role=\".length];\n return role < 2;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nfunction split_css_unit(value) {\n const split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n return split ? [parseFloat(split[1]), split[2] || 'px'] : [value, 'px'];\n}\nconst contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\n/**\n * Resize observer singleton.\n * One listener per element only!\n * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ\n */\nclass ResizeObserverSingleton {\n constructor(options) {\n this.options = options;\n this._listeners = 'WeakMap' in globals ? new WeakMap() : undefined;\n }\n observe(element, listener) {\n this._listeners.set(element, listener);\n this._getObserver().observe(element, this.options);\n return () => {\n this._listeners.delete(element);\n this._observer.unobserve(element); // this line can probably be removed\n };\n }\n _getObserver() {\n var _a;\n return (_a = this._observer) !== null && _a !== void 0 ? _a : (this._observer = new ResizeObserver((entries) => {\n var _a;\n for (const entry of entries) {\n ResizeObserverSingleton.entries.set(entry.target, entry);\n (_a = this._listeners.get(entry.target)) === null || _a === void 0 ? void 0 : _a(entry);\n }\n }));\n }\n}\n// Needs to be written like this to pass the tree-shake-test\nResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined;\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction comment(content) {\n return document.createComment(content);\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_immediate_propagation(fn) {\n return function (event) {\n event.stopImmediatePropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set && always_set_through_set_attribute.indexOf(key) === -1) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction set_dynamic_element_data(tag) {\n return (/-/.test(tag)) ? set_custom_element_data_map : set_attributes;\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n /* push */ p(...inputs) {\n _inputs = inputs;\n _inputs.forEach(input => group.push(input));\n },\n /* remove */ r() {\n _inputs.forEach(input => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction init_binding_group_dynamic(group, indexes) {\n let _group = get_binding_group(group);\n let _inputs;\n function get_binding_group(group) {\n for (let i = 0; i < indexes.length; i++) {\n group = group[indexes[i]] = group[indexes[i]] || [];\n }\n return group;\n }\n function push() {\n _inputs.forEach(input => _group.push(input));\n }\n function remove() {\n _inputs.forEach(input => _group.splice(_group.indexOf(input), 1));\n }\n return {\n /* update */ u(new_indexes) {\n indexes = new_indexes;\n const new_group = get_binding_group(group);\n if (new_group !== _group) {\n remove();\n _group = new_group;\n push();\n }\n },\n /* push */ p(...inputs) {\n _inputs = inputs;\n push();\n },\n /* remove */ r: remove\n };\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction claim_comment(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 8, (node) => {\n node.data = '' + data;\n return undefined;\n }, () => comment(data), true);\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n text.data = data;\n}\nfunction set_data_contenteditable(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n text.data = data;\n}\nfunction set_data_maybe_contenteditable(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable(text, data);\n }\n else {\n set_data(text, data);\n }\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value == null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== undefined) {\n select.selectedIndex = -1; // no option should be selected\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked');\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_iframe_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n // make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n // see https://github.com/sveltejs/svelte/issues/4233\n fn();\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nconst resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'content-box' });\nconst resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'border-box' });\nconst resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'device-pixel-content-box' });\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n /** #7364 target for <template> may be provided as #document-fragment(11) */\n else\n this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n const options = { direction: 'in' };\n let config = fn(node, params, options);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config(options);\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n const options = { direction: 'out' };\n let config = fn(node, params, options);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = { direction: 'both' };\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n // defer updates until all the DOM shuffling is done\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\nconst _boolean_attributes = [\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n];\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n */\nconst boolean_attributes = new Set([..._boolean_attributes]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&amp;' : (ch === '\"' ? '&quot;' : '&lt;'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${escape_attribute_value(style_object[key])};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.59.2' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation, has_stop_immediate_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n if (has_stop_immediate_propagation)\n modifiers.push('stopImmediatePropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_contenteditable_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_maybe_contenteditable_dev(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable_dev(text, data);\n }\n else {\n set_data_dev(text, data);\n }\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, ResizeObserverSingleton, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_iframe_resize_listener, add_location, add_render_callback, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_comment, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, comment, component_subscribe, compute_rest_props, compute_slots, construct_svelte_component, construct_svelte_component_dev, contenteditable_truthy_values, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, flush_render_callbacks, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, head_selector, identity, init, init_binding_group, init_binding_group_dynamic, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, resize_observer_border_box, resize_observer_content_box, resize_observer_device_pixel_content_box, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_custom_element_data_map, set_data, set_data_contenteditable, set_data_contenteditable_dev, set_data_dev, set_data_maybe_contenteditable, set_data_maybe_contenteditable_dev, set_dynamic_element_data, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, split_css_unit, spread, src_url_equal, start_hydrating, stop_immediate_propagation, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","<script lang=\"ts\">\n import { isEmpty } from \"lodash\";\n import { ApplianceNames } from \"white-web-sdk\";\n\n export let uid: string;\n export let cursorName: string;\n export let tagName: string | undefined;\n export let backgroundColor: string;\n export let appliance: string;\n export let x: number;\n export let y: number;\n export let src: string | undefined;\n export let visible: boolean;\n export let avatar: string;\n export let theme: string;\n export let color: string;\n export let cursorTagBackgroundColor: string;\n export let opacity: number;\n export let pencilEraserSize: number | undefined;\n export let custom: boolean | undefined;\n\n $: hasName = !isEmpty(cursorName);\n $: hasTagName = !isEmpty(tagName);\n $: hasAvatar = !isEmpty(avatar);\n $: display = visible ? \"\" : \"none\";\n $: isLaserPointer = appliance === ApplianceNames.laserPointer;\n $: isLaserPointerPencilEraser = isLaserPointer || appliance === ApplianceNames.pencilEraser;\n $: offset = isLaserPointerPencilEraser ? \"netless-window-manager-laserPointer-pencilEraser-offset\" : \"\";\n $: pencilEraserSize3ImageOffset = pencilEraserSize === 3 ? \"netless-window-manager-pencilEraser-3-offset\" : \"\";\n\n const computedAvatarStyle = () => {\n return Object.entries({\n width: (hasName ? 19 : 28) + \"px\",\n height: (hasName ? 19 : 28) + \"px\",\n position: hasName ? \"initial\" : \"absolute\",\n \"border-color\": hasName ? \"white\" : backgroundColor,\n \"margin-right\": (hasName ? 4 : 0) + \"px\",\n })\n .map(([key, v]) => `${key}: ${v}`)\n .join(\";\");\n };\n</script>\n\n<div\n class={\"netless-window-manager-cursor-mid\" + (custom ? \" netless-window-manager-cursor-custom\" : \"\")}\n style=\"transform: translateX({x}px) translateY({y}px);display: {display}\"\n data-cursor-uid={uid}\n>\n {#if !isLaserPointer}\n <div class=\"netless-window-manager-cursor-name {offset} {pencilEraserSize3ImageOffset}\">\n <div\n class={theme}\n style=\"background-color: {backgroundColor};color: {color};opacity: {opacity}\"\n >\n {#if hasAvatar}\n <img\n class=\"netless-window-manager-cursor-selector-avatar\"\n style={computedAvatarStyle()}\n src={avatar}\n alt=\"avatar\"\n />\n {/if}\n <span style=\"overflow: hidden;white-space: nowrap;text-overflow: ellipsis;max-width: 80px\">{cursorName}</span>\n {#if hasTagName}\n <span class=\"netless-window-manager-cursor-tag-name\" style=\"background-color: {cursorTagBackgroundColor}\">\n {tagName}\n </span>\n {/if}\n </div>\n </div>\n {/if}\n <div class=\"cursor-image-wrapper\">\n <img\n class=\"netless-window-manager-cursor-{appliance}-image {pencilEraserSize3ImageOffset}\"\n {src}\n alt={appliance}\n />\n </div>\n</div>\n","import type { MemberState } from \"white-web-sdk\";\nimport { ApplianceNames } from \"white-web-sdk\";\n\ntype Color = string;\n\nconst staticCircle = `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23000' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23FFF'/%3E%3C/g%3E%3C/svg%3E`;\n\nfunction circleUrl(color: Color): string {\n return `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23${color}' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23${color}'/%3E%3C/g%3E%3C/svg%3E`;\n}\n\nfunction crossUrl(color: Color): string {\n return `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' fill='none'%3E%3Cpath d='M5 12H19' stroke='%23${color}' stroke-linejoin='round'/%3E%3Cpath d='M12 5V19' stroke='%23${color}' stroke-linejoin='round'/%3E%3C/svg%3E`;\n}\n\nfunction cssCursor(url: string): string {\n return `url(\"${url}\") 12 12, auto`;\n}\n\nfunction makeStyleContent(config: { [cursor: string]: string }): string {\n let result = \"\";\n for (const cursor in config) {\n result += `.netless-whiteboard.${cursor} {cursor: ${config[cursor]}}\\n`;\n }\n return result;\n}\n\nconst $style = document.createElement(\"style\");\n\nexport function enableLocal(memberState: MemberState): () => void {\n const [r, g, b] = memberState.strokeColor;\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n $style.textContent = makeStyleContent({\n \"cursor-pencil\": cssCursor(circleUrl(hex)),\n \"cursor-eraser\": cssCursor(staticCircle),\n \"cursor-rectangle\": cssCursor(crossUrl(hex)),\n \"cursor-ellipse\": cssCursor(crossUrl(hex)),\n \"cursor-straight\": cssCursor(crossUrl(hex)),\n \"cursor-arrow\": cssCursor(crossUrl(hex)),\n \"cursor-shape\": cssCursor(crossUrl(hex)),\n });\n document.head.appendChild($style);\n\n return () => {\n if ($style.parentNode == null) return;\n document.head.removeChild($style);\n };\n}\n\nconst shapeAppliances: Set<ApplianceNames> = new Set([\n ApplianceNames.rectangle,\n ApplianceNames.ellipse,\n ApplianceNames.straight,\n ApplianceNames.arrow,\n ApplianceNames.shape,\n]);\n\nexport function remoteIcon(applianceName: ApplianceNames, hex: string): string | undefined {\n if (applianceName === ApplianceNames.pencil) {\n return circleUrl(hex);\n } else if (applianceName === ApplianceNames.eraser) {\n return staticCircle;\n } else if (shapeAppliances.has(applianceName)) {\n return crossUrl(hex);\n }\n}\n","import type { RoomMember } from \"white-web-sdk\";\nimport type { CursorOptions } from \"../index\";\nimport type { AppManager } from \"../AppManager\";\nimport type { Position } from \"../AttributesDelegate\";\nimport type { CursorManager } from \"./index\";\n\nimport { omit } from \"lodash\";\nimport { ApplianceNames } from \"white-web-sdk\";\n\nimport { findMemberByUid } from \"../Helper\";\nimport App from \"./Cursor.svelte\";\nimport { remoteIcon } from \"./icons2\";\n\nexport type Payload = {\n [key: string]: any;\n};\n\nexport class Cursor {\n private member?: RoomMember;\n private timer?: number;\n private component?: App;\n private style: CursorOptions[\"style\"] & string = \"default\";\n\n constructor(\n private manager: AppManager,\n private memberId: string,\n private cursorManager: CursorManager,\n private wrapper?: HTMLElement\n ) {\n this.updateMember();\n this.createCursor();\n this.autoHidden();\n this.setStyle(cursorManager.style);\n }\n\n public move = (position: Position) => {\n if (position.type === \"main\") {\n const rect = this.cursorManager.wrapperRect;\n if (this.component && rect) {\n this.autoHidden();\n this.moveCursor(position, rect, this.manager.mainView);\n }\n } else {\n const focusView = this.cursorManager.focusView;\n const viewRect = focusView?.divElement?.getBoundingClientRect();\n const viewCamera = focusView?.camera;\n if (focusView && viewRect && viewCamera && this.component) {\n this.autoHidden();\n this.moveCursor(position, viewRect, focusView);\n }\n }\n };\n\n public setStyle = (style: typeof this.style) => {\n this.style = style;\n if (this.component) {\n this.component.$set({\n src: this.getIcon(),\n custom: this.isCustomIcon(),\n });\n }\n };\n\n public leave = () => {\n this.hide();\n };\n\n private moveCursor(cursor: Position, rect: DOMRect, view: any) {\n const { x, y, type } = cursor;\n const point = view?.screen.convertPointToScreen(x, y);\n if (point) {\n let translateX = point.x - 2;\n let translateY = point.y - 18;\n if (this.isCustomIcon()) {\n translateX -= 11;\n translateY += 4;\n }\n if (type === \"app\") {\n const wrapperRect = this.cursorManager.wrapperRect;\n if (wrapperRect) {\n translateX = translateX + rect.x - wrapperRect.x;\n translateY = translateY + rect.y - wrapperRect.y;\n }\n }\n if (point.x < 0 || point.x > rect.width || point.y < 0 || point.y > rect.height) {\n this.component?.$set({ visible: false, x: translateX, y: translateY });\n } else {\n this.component?.$set({ visible: true, x: translateX, y: translateY });\n }\n }\n }\n\n public get memberApplianceName() {\n return this.member?.memberState?.currentApplianceName;\n }\n\n public get memberColor() {\n const rgb = this.member?.memberState?.strokeColor.join(\",\");\n return `rgb(${rgb})`;\n }\n\n public get memberColorHex(): string {\n const [r, g, b] = this.member?.memberState?.strokeColor || [236, 52, 85];\n return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n }\n\n private get payload(): Payload | undefined {\n return this.member?.payload;\n }\n\n public get memberCursorName() {\n return this.payload?.nickName || this.payload?.cursorName || this.memberId;\n }\n\n private get memberTheme() {\n if (this.payload?.theme) {\n return \"netless-window-manager-cursor-inner-mellow\";\n } else {\n return \"netless-window-manager-cursor-inner\";\n }\n }\n\n private get memberCursorTextColor() {\n return this.payload?.cursorTextColor || \"#FFFFFF\";\n }\n\n private get memberCursorTagBackgroundColor() {\n return this.payload?.cursorTagBackgroundColor || this.memberColor;\n }\n\n private get memberAvatar() {\n return this.payload?.avatar;\n }\n\n private get memberOpacity() {\n if (!this.memberCursorName && !this.memberAvatar) {\n return 0;\n } else {\n return 1;\n }\n }\n\n private get memberTagName(): string | undefined {\n return this.payload?.cursorTagName;\n }\n\n private autoHidden() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = window.setTimeout(() => {\n this.hide();\n }, 1000 * 10); // 10 秒钟自动隐藏\n }\n\n private async createCursor() {\n if (this.member && this.wrapper) {\n this.component = new App({\n target: this.wrapper,\n props: this.initProps(),\n });\n }\n }\n\n private initProps() {\n return {\n uid: this.memberId,\n x: 0,\n y: 0,\n appliance: this.memberApplianceName as string,\n avatar: this.memberAvatar,\n src: this.getIcon(),\n custom: this.isCustomIcon(),\n visible: false,\n backgroundColor: this.memberColor,\n cursorName: this.memberCursorName,\n theme: this.memberTheme,\n color: this.memberCursorTextColor,\n cursorTagBackgroundColor: this.memberCursorTagBackgroundColor,\n opacity: this.memberOpacity,\n tagName: this.memberTagName,\n pencilEraserSize: this.member?.memberState.pencilEraserSize,\n };\n }\n\n private getIcon(): string | undefined {\n if (!this.member) return;\n\n const { memberApplianceName, memberColorHex } = this;\n const { userApplianceIcons, applianceIcons } = this.cursorManager;\n\n let iconsKey: string | undefined = this.memberApplianceName;\n if (iconsKey === ApplianceNames.pencilEraser) {\n iconsKey = `${iconsKey}${this.member?.memberState.pencilEraserSize || 1}`;\n }\n\n const userApplianceSrc = iconsKey && userApplianceIcons[iconsKey];\n if (userApplianceSrc) return userApplianceSrc;\n\n if (this.style === \"custom\" && memberApplianceName) {\n const customApplianceSrc = remoteIcon(memberApplianceName, memberColorHex);\n if (customApplianceSrc) return customApplianceSrc;\n }\n\n const applianceSrc = applianceIcons[iconsKey || ApplianceNames.shape];\n return applianceSrc || applianceIcons[ApplianceNames.shape];\n }\n\n private isCustomIcon(): boolean {\n if (!this.member) return false;\n\n const { memberApplianceName, memberColorHex } = this;\n const { userApplianceIcons } = this.cursorManager;\n\n let iconsKey: string | undefined = this.memberApplianceName;\n if (iconsKey === ApplianceNames.pencilEraser) {\n iconsKey = `${iconsKey}${this.member?.memberState.pencilEraserSize || 1}`;\n }\n\n const userApplianceSrc = iconsKey && userApplianceIcons[iconsKey];\n if (userApplianceSrc) return false;\n\n if (this.style === \"custom\" && memberApplianceName) {\n const customApplianceSrc = remoteIcon(memberApplianceName, memberColorHex);\n if (customApplianceSrc) return true;\n }\n\n return false;\n }\n\n public updateMember() {\n this.member = findMemberByUid(this.manager.room, this.memberId);\n this.updateComponent();\n return this.member;\n }\n\n private updateComponent() {\n this.component?.$set(omit(this.initProps(), [\"x\", \"y\"]));\n }\n\n public destroy() {\n if (this.component) {\n this.component.$destroy();\n }\n this.cursorManager.cursorInstances.delete(this.memberId);\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n\n public hide() {\n if (this.component) {\n this.component.$set({ visible: false });\n this.destroy();\n }\n }\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjhweCIgaGVpZ2h0PSIyOHB4IiB2aWV3Qm94PSIwIDAgMjggMjgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU1LjEgKDc4MTM2KSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT7nvJbnu4QgMjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgeD0iLTEyMC4wJSIgeT0iLTEyMC4wJSIgd2lkdGg9IjM0MC4wJSIgaGVpZ2h0PSIzNDAuMCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0xIj4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hC0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5LjAwMDAwMCwgOS4wMDAwMDApIiBmaWxsPSIjRkYwMTAwIj4KICAgICAgICAgICAgPGNpcmNsZSBpZD0i5qSt5ZyG5b2iIiBmaWx0ZXI9InVybCgjZmlsdGVyLTEpIiBjeD0iNSIgY3k9IjUiIHI9IjUiPjwvY2lyY2xlPgogICAgICAgICAgICA8cGF0aCBkPSJNNSw4IEM2LjY1Njg1NDI1LDggOCw2LjY1Njg1NDI1IDgsNSBDOCwzLjM0MzE0NTc1IDYuNjU2ODU0MjUsMiA1LDIgQzMuMzQzMTQ1NzUsMiAyLDMuMzQzMTQ1NzUgMiw1IEMyLDYuNjU2ODU0MjUgMy4zNDMxNDU3NSw4IDUsOCBaIE01LDYuMjg1NzE0MjkgQzQuMjg5OTE5NjEsNi4yODU3MTQyOSAzLjcxNDI4NTcxLDUuNzEwMDgwMzkgMy43MTQyODU3MSw1IEMzLjcxNDI4NTcxLDQuMjg5OTE5NjEgNC4yODk5MTk2MSwzLjcxNDI4NTcxIDUsMy43MTQyODU3MSBDNS43MTAwODAzOSwzLjcxNDI4NTcxIDYuMjg1NzE0MjksNC4yODk5MTk2MSA2LjI4NTcxNDI5LDUgQzYuMjg1NzE0MjksNS43MTAwODAzOSA1LjcxMDA4MDM5LDYuMjg1NzE0MjkgNSw2LjI4NTcxNDI5IFoiIGlkPSLmpK3lnIblvaIiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAxOCAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSIyNSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAyNiAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIyNSIgaGVpZ2h0PSIzMyIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCAzNCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIzMyIgaGVpZ2h0PSI0OSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","import { ApplianceNames } from \"white-web-sdk\";\nimport pencil from \"../image/pencil-cursor.png\";\nimport selector from \"../image/selector-cursor.png\";\nimport eraser from \"../image/eraser-cursor.png\";\nimport shape from \"../image/shape-cursor.svg\";\nimport text from \"../image/text-cursor.svg\";\nimport laser from \"../image/laser-pointer-cursor.svg\";\nimport pencilEraser1 from \"../image/pencil-eraser-1.svg\";\nimport pencilEraser2 from \"../image/pencil-eraser-2.svg\";\nimport pencilEraser3 from \"../image/pencil-eraser-3.svg\";\n\nexport const ApplianceMap: {\n [key: string]: string;\n} = {\n [ApplianceNames.pencil]: pencil,\n [ApplianceNames.selector]: selector,\n [ApplianceNames.eraser]: eraser,\n [ApplianceNames.shape]: shape,\n [ApplianceNames.text]: text,\n [ApplianceNames.laserPointer]: laser,\n [\"pencilEraser1\"]: pencilEraser1,\n [\"pencilEraser2\"]: pencilEraser2,\n [\"pencilEraser3\"]: pencilEraser3,\n};\n","import { ApplianceNames, isRoom } from \"white-web-sdk\";\nimport { Cursor } from \"./Cursor\";\nimport { CursorState, Events } from \"../constants\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { WindowManager } from \"../index\";\nimport type { CursorMovePayload, ApplianceIcons, CursorOptions } from \"../index\";\nimport type { PositionType } from \"../AttributesDelegate\";\nimport type { Point, Room, RoomMember, RoomState, View } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport { ApplianceMap } from \"./icons\";\nimport { findMemberByUid } from \"../Helper\";\nimport { enableLocal } from \"./icons2\";\n\nexport type EventType = {\n type: PositionType;\n id?: string;\n};\n\nexport type MoveCursorParams = {\n uid: string;\n x: number;\n y: number;\n};\n\nconst LocalCursorSideEffectId = \"local-cursor\";\n\nexport class CursorManager {\n static readonly kind = \"CursorManager\";\n public containerRect?: DOMRect;\n public wrapperRect?: DOMRect;\n public cursorInstances: Map<string, Cursor> = new Map();\n public roomMembers?: readonly RoomMember[];\n public userApplianceIcons: ApplianceIcons = {};\n\n private mainViewElement?: HTMLDivElement;\n private sideEffectManager = new SideEffectManager();\n private store = this.manager.store;\n private leaveFlag = true;\n private _style: CursorOptions[\"style\"] & string = \"default\";\n\n constructor(\n private manager: AppManager,\n private enableCursor: boolean,\n cursorOptions?: CursorOptions,\n applianceIcons?: ApplianceIcons\n ) {\n this.roomMembers = this.manager.room?.state.roomMembers;\n const wrapper = WindowManager.wrapper;\n if (wrapper) {\n this.setupWrapper(wrapper);\n }\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"cursorMove\", this.onCursorMove);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"playgroundSizeChange\", () => this.updateContainerRect());\n });\n const room = this.manager.room;\n if (room) {\n this.sideEffectManager.add(() => {\n const update = (state: RoomState) => {\n if (this.style === \"custom\" && state.memberState) this.enableCustomCursor();\n };\n room.callbacks.on(\"onRoomStateChanged\", update);\n return () => room.callbacks.off(\"onRoomStateChanged\", update);\n });\n }\n if (applianceIcons) {\n this.userApplianceIcons = applianceIcons;\n }\n this.style = cursorOptions?.style || \"default\";\n }\n\n public get applianceIcons(): ApplianceIcons {\n return { ...ApplianceMap, ...this.userApplianceIcons };\n }\n\n public get style() {\n return this._style;\n }\n\n public set style(value) {\n if (this._style !== value) {\n this._style = value;\n this.cursorInstances.forEach(cursor => {\n cursor.setStyle(value);\n });\n if (value === \"custom\") {\n this.enableCustomCursor();\n } else {\n this.sideEffectManager.flush(LocalCursorSideEffectId);\n }\n }\n }\n\n private onCursorMove = (payload: CursorMovePayload) => {\n const cursorInstance = this.initCursorInstance(payload.uid);\n if (payload.state === CursorState.Leave) {\n cursorInstance.leave();\n } else {\n const member = cursorInstance.updateMember();\n if (this.canMoveCursor(member)) {\n cursorInstance.move(payload.position);\n }\n }\n };\n\n private initCursorInstance = (uid: string) => {\n let cursorInstance = this.cursorInstances.get(uid);\n if (!cursorInstance) {\n cursorInstance = new Cursor(this.manager, uid, this, WindowManager.wrapper);\n this.cursorInstances.set(uid, cursorInstance);\n }\n return cursorInstance;\n };\n\n private enableCustomCursor() {\n this.sideEffectManager.add(\n () => enableLocal(this.manager.getMemberState()),\n LocalCursorSideEffectId\n );\n }\n\n private canMoveCursor(member: RoomMember | undefined) {\n const isLaserPointer =\n member?.memberState.currentApplianceName === ApplianceNames.laserPointer;\n // 激光笔教具在不开启光标的情况下也要显示\n return this.enableCursor || isLaserPointer;\n }\n\n public setupWrapper(wrapper: HTMLElement) {\n this.sideEffectManager.add(() => {\n wrapper.addEventListener(\"pointerenter\", this.mouseMoveListener);\n wrapper.addEventListener(\"pointermove\", this.mouseMoveListener);\n wrapper.addEventListener(\"pointerleave\", this.mouseLeaveListener);\n return () => {\n wrapper.removeEventListener(\"pointerenter\", this.mouseMoveListener);\n wrapper.removeEventListener(\"pointermove\", this.mouseMoveListener);\n wrapper.removeEventListener(\"pointerleave\", this.mouseLeaveListener);\n };\n });\n\n this.wrapperRect = wrapper.getBoundingClientRect();\n }\n\n public setMainViewDivElement(div: HTMLDivElement) {\n this.mainViewElement = div;\n }\n\n public get boxState() {\n return this.store.getBoxState();\n }\n\n public get focusView() {\n return this.manager.focusApp?.view;\n }\n\n private mouseMoveListener_ = (event: PointerEvent, isTouch: boolean) => {\n const type = this.getType(event);\n this.updateCursor(type, event.clientX, event.clientY);\n isTouch && this.showPencilEraserIfNeeded(type, event.clientX, event.clientY);\n };\n\n private mouseMoveTimer = 0;\n private mouseMoveListener = (event: PointerEvent) => {\n const isTouch = event.pointerType === \"touch\";\n if (isTouch && !event.isPrimary) return;\n const now = Date.now();\n if (now - this.mouseMoveTimer > 48) {\n this.mouseMoveTimer = now;\n if (\n WindowManager.supportAppliancePlugin &&\n isRoom(WindowManager.displayer) &&\n (WindowManager.displayer as Room).disableDeviceInputs\n ) {\n if (this.leaveFlag) {\n this.manager.dispatchInternalEvent(Events.CursorMove, {\n uid: this.manager.uid,\n state: CursorState.Leave,\n } as CursorMovePayload);\n this.leaveFlag = false;\n }\n return;\n }\n this.mouseMoveListener_(event, isTouch);\n this.leaveFlag = true;\n }\n };\n\n private mouseLeaveListener = () => {\n this.hideCursor(this.manager.uid);\n };\n\n private showPencilEraserIfNeeded(event: EventType, clientX: number, clientY: number) {\n const self = findMemberByUid(this.manager.room, this.manager.uid);\n const isPencilEraser =\n self?.memberState.currentApplianceName === ApplianceNames.pencilEraser;\n if (\n this.wrapperRect &&\n this.manager.canOperate &&\n this.canMoveCursor(self) &&\n isPencilEraser\n ) {\n const view = event.type === \"main\" ? this.manager.mainView : this.focusView;\n const point = this.getPoint(view, clientX, clientY);\n if (point) {\n this.onCursorMove({\n uid: this.manager.uid,\n position: {\n x: point.x,\n y: point.y,\n type: event.type,\n },\n });\n }\n }\n }\n\n private updateCursor(event: EventType, clientX: number, clientY: number) {\n const self = findMemberByUid(this.manager.room, this.manager.uid);\n if (this.wrapperRect && this.manager.canOperate && this.canMoveCursor(self)) {\n const view = event.type === \"main\" ? this.manager.mainView : this.focusView;\n const point = this.getPoint(view, clientX, clientY);\n if (point) {\n this.manager.dispatchInternalEvent(Events.CursorMove, {\n uid: this.manager.uid,\n position: {\n x: point.x,\n y: point.y,\n type: event.type,\n },\n } as CursorMovePayload);\n }\n }\n }\n\n private getPoint = (\n view: View | undefined,\n clientX: number,\n clientY: number\n ): Point | undefined => {\n const rect = view?.divElement?.getBoundingClientRect();\n if (rect) {\n const point = view?.convertToPointInWorld({\n x: clientX - rect.x,\n y: clientY - rect.y,\n });\n return point;\n }\n };\n\n /**\n * 因为窗口内框在不同分辨率下的大小不一样,所以这里通过来鼠标事件的 target 来判断是在主白板还是在 APP 中\n */\n private getType = (event: MouseEvent | Touch): EventType => {\n const target = event.target as HTMLElement;\n const focusApp = this.manager.focusApp;\n switch (target.parentElement) {\n case this.mainViewElement: {\n return { type: \"main\" };\n }\n case focusApp?.view?.divElement: {\n return { type: \"app\" };\n }\n default: {\n return { type: \"main\" };\n }\n }\n };\n\n public updateContainerRect() {\n this.containerRect = WindowManager.container?.getBoundingClientRect();\n this.wrapperRect = WindowManager.wrapper?.getBoundingClientRect();\n }\n\n public deleteCursor(uid: string) {\n this.store.cleanCursor(uid);\n const cursor = this.cursorInstances.get(uid);\n if (cursor) {\n cursor.destroy();\n }\n }\n\n public hideCursor(uid: string) {\n const cursor = this.cursorInstances.get(uid);\n if (cursor) {\n cursor.hide();\n }\n }\n\n public destroy() {\n this.sideEffectManager.flushAll();\n if (this.cursorInstances.size) {\n this.cursorInstances.forEach(cursor => {\n cursor.destroy();\n });\n this.cursorInstances.clear();\n }\n }\n}\n","import { AppContext, AppProxy } from \"../App\";\nimport { AppManager } from \"../AppManager\";\nimport { AttributesDelegate } from \"../AttributesDelegate\";\nimport { BoxManager } from \"../BoxManager\";\nimport { CursorManager } from \"../Cursor\";\nimport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport { AppManager } from \"../AppManager\";\nexport { AppContext, AppProxy } from \"../App\";\nexport { BoxManager } from \"../BoxManager\";\nexport { AttributesDelegate } from \"../AttributesDelegate\";\nexport { CursorManager } from \"../Cursor\";\nexport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport type ExtendClassAble =\n | typeof AppManager\n | typeof AppProxy\n | typeof AppContext\n | typeof BoxManager\n | typeof AttributesDelegate\n | typeof CursorManager\n | typeof TeleBoxManager\n | typeof TeleBoxCollector;\n\nexport type ExtendClass = {\n AppManager?: typeof AppManager;\n BoxManager?: typeof BoxManager;\n AttributesDelegate?: typeof AttributesDelegate;\n CursorManager?: typeof CursorManager;\n AppProxy?: typeof AppProxy;\n AppContext?: typeof AppContext;\n TeleBoxManager?: typeof TeleBoxManager;\n TeleBoxCollector?: typeof TeleBoxCollector;\n};\nexport function getExtendClass<T extends ExtendClassAble>(\n baseClass: T,\n extendClass?: ExtendClass\n): T {\n if (baseClass.kind && extendClass && Object.keys(extendClass).includes(baseClass.kind)) {\n switch (baseClass.kind) {\n case \"AppManager\":\n return (extendClass?.AppManager || AppManager) as T;\n case \"BoxManager\":\n return (extendClass?.BoxManager || BoxManager) as T;\n case \"AttributesDelegate\":\n return (extendClass?.AttributesDelegate || AttributesDelegate) as T;\n case \"CursorManager\":\n return (extendClass?.CursorManager || CursorManager) as T;\n case \"AppProxy\":\n return (extendClass?.AppProxy || AppProxy) as T;\n case \"AppContext\":\n return (extendClass?.AppContext || AppContext) as T;\n case \"TeleBoxManager\":\n return (extendClass?.TeleBoxManager || TeleBoxManager) as T;\n case \"TeleBoxCollector\":\n return (extendClass?.TeleBoxCollector || TeleBoxCollector) as T;\n default:\n return baseClass;\n }\n }\n return baseClass;\n}\n","import { AppAttributes } from \"./constants\";\nimport { get, isObject, pick } from \"lodash\";\nimport { setViewFocusScenePath } from \"./Utils/Common\";\nimport type { AddAppParams, AppSyncAttributes } from \"./index\";\nimport type { Camera, Size, View } from \"white-web-sdk\";\nimport type { Cursor } from \"./Cursor/Cursor\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { ExtendClass } from \"./Utils/extendClass\";\nimport type { NotMinimizedBoxState, TeleBoxState } from \"@netless/telebox-insider\";\n\nexport enum Fields {\n Apps = \"apps\",\n Focus = \"focus\",\n State = \"state\",\n /** 默认窗口状态, (用于窗口状态的统一管理) */\n BoxState = \"boxState\",\n MainViewCamera = \"mainViewCamera\",\n MainViewSize = \"mainViewSize\",\n Broadcaster = \"broadcaster\",\n Cursors = \"cursors\",\n Position = \"position\",\n CursorState = \"cursorState\",\n FullPath = \"fullPath\",\n Registered = \"registered\",\n IframeBridge = \"iframeBridge\",\n /** 所有窗口状态, (用于窗口状态的单独管理) */\n BoxesStatus = \"boxesStatus\",\n /** 上次非最小化窗口状态 */\n LastNotMinimizedBoxesStatus = \"lastNotMinimizedBoxesStatus\",\n}\n\nexport type Apps = {\n [key: string]: AppSyncAttributes;\n};\n\nexport type Position = {\n x: number;\n y: number;\n type: PositionType;\n id?: string;\n};\n\nexport type PositionType = \"main\" | \"app\";\n\nexport type StoreContext = {\n getAttributes: () => any;\n safeUpdateAttributes: (keys: string[], value: any) => void;\n safeSetAttributes: (attributes: any) => void;\n};\n\nexport type ICamera = Camera & { id: string };\n\nexport type ISize = Size & { id: string };\n\nexport class AttributesDelegate {\n static readonly kind = \"AttributesDelegate\";\n constructor(private context: StoreContext) {}\n\n public setContext(context: StoreContext) {\n this.context = context;\n }\n\n public get attributes() {\n return this.context.getAttributes();\n }\n\n public apps(): Apps {\n return get(this.attributes, [Fields.Apps]);\n }\n\n public get focus(): string | undefined {\n return get(this.attributes, [Fields.Focus]);\n }\n\n public getAppAttributes(id: string): AppSyncAttributes {\n return get(this.apps(), [id]);\n }\n\n public getAppState(id: string) {\n return get(this.apps(), [id, Fields.State]);\n }\n\n public getMaximized() {\n return get(this.attributes, [\"maximized\"]);\n }\n\n public getMinimized() {\n return get(this.attributes, [\"minimized\"]);\n }\n\n public getBoxesStatus(): Record<string, TeleBoxState> | undefined {\n return get(this.attributes, [Fields.BoxesStatus]);\n }\n\n public getBoxStatus(id: string): TeleBoxState | undefined {\n return get(this.attributes, [Fields.BoxesStatus, id]);\n }\n\n public setBoxStatus(id: string, status?: TeleBoxState) {\n const attributes = this.attributes;\n if (!attributes.boxesStatus) {\n this.context.safeSetAttributes({ boxesStatus: {} });\n }\n if (this.getBoxStatus(id) !== status) {\n this.context.safeUpdateAttributes([Fields.BoxesStatus, id], status);\n }\n }\n\n public getLastNotMinimizedBoxesStatus(): Record<string, NotMinimizedBoxState> | undefined {\n return get(this.attributes, [Fields.LastNotMinimizedBoxesStatus]);\n }\n\n public getLastNotMinimizedBoxStatus(id: string): NotMinimizedBoxState | undefined {\n return get(this.attributes, [Fields.LastNotMinimizedBoxesStatus, id]);\n }\n\n public setLastNotMinimizedBoxStatus(id: string, status?: NotMinimizedBoxState) {\n const attributes = this.attributes;\n if (!attributes.lastNotMinimizedBoxesStatus) {\n this.context.safeSetAttributes({ lastNotMinimizedBoxesStatus: {} });\n }\n if (this.getLastNotMinimizedBoxStatus(id) !== status) {\n this.context.safeUpdateAttributes([Fields.LastNotMinimizedBoxesStatus, id], status);\n }\n }\n\n public setupAppAttributes(params: AddAppParams, id: string, isDynamicPPT: boolean) {\n const attributes = this.attributes;\n if (!attributes.apps) {\n this.context.safeSetAttributes({ apps: {} });\n }\n const attrNames = [\"scenePath\", \"title\"];\n if (!isDynamicPPT) {\n attrNames.push(\"scenes\");\n }\n const options = pick(params.options, attrNames);\n const attrs: AppSyncAttributes = {\n kind: params.kind,\n options,\n isDynamicPPT,\n forceTop: params.forceTop,\n forceNormal: params.forceNormal,\n isDragContent: params.isDragContent,\n };\n if (typeof params.src === \"string\") {\n attrs.src = params.src;\n }\n attrs.createdAt = Date.now();\n this.context.safeUpdateAttributes([Fields.Apps, id], attrs);\n this.context.safeUpdateAttributes([Fields.Apps, id, Fields.State], {\n [AppAttributes.Size]: {},\n [AppAttributes.Position]: {},\n [AppAttributes.SceneIndex]: 0,\n });\n }\n\n public updateAppState(appId: string, stateName: AppAttributes, state: any) {\n if (get(this.attributes, [Fields.Apps, appId, Fields.State])) {\n this.context.safeUpdateAttributes([Fields.Apps, appId, Fields.State, stateName], state);\n }\n }\n\n public cleanAppAttributes(id: string) {\n this.context.safeUpdateAttributes([Fields.Apps, id], undefined);\n this.context.safeSetAttributes({ [id]: undefined });\n const focus = this.attributes[Fields.Focus];\n if (focus === id) {\n this.cleanFocus();\n }\n }\n\n public cleanFocus() {\n this.context.safeSetAttributes({ [Fields.Focus]: undefined });\n }\n\n public getAppSceneIndex(id: string) {\n return this.getAppState(id)?.[AppAttributes.SceneIndex];\n }\n\n public getAppScenePath(id: string) {\n return this.getAppAttributes(id)?.options?.scenePath;\n }\n\n public getMainViewScenePath(): string | undefined {\n return this.attributes[\"_mainScenePath\"];\n }\n\n public getMainViewSceneIndex() {\n return this.attributes[\"_mainSceneIndex\"];\n }\n\n public getBoxState() {\n return this.attributes[Fields.BoxState];\n }\n\n public setMainViewScenePath(scenePath: string) {\n this.context.safeSetAttributes({ _mainScenePath: scenePath });\n }\n\n public setMainViewSceneIndex(index: number) {\n this.context.safeSetAttributes({ _mainSceneIndex: index });\n }\n\n public getMainViewCamera(): MainViewCamera {\n return get(this.attributes, [Fields.MainViewCamera]);\n }\n\n public getMainViewSize(): MainViewSize {\n return get(this.attributes, [Fields.MainViewSize]);\n }\n\n public setMainViewCamera(camera: ICamera) {\n this.context.safeSetAttributes({ [Fields.MainViewCamera]: { ...camera } });\n }\n\n public setMainViewSize(size: ISize) {\n if (size.width === 0 || size.height === 0) return;\n this.context.safeSetAttributes({ [Fields.MainViewSize]: { ...size } });\n }\n\n public setMainViewCameraAndSize(camera: ICamera, size: ISize) {\n if (size.width === 0 || size.height === 0) return;\n this.context.safeSetAttributes({\n [Fields.MainViewCamera]: { ...camera },\n [Fields.MainViewSize]: { ...size },\n });\n }\n\n public setAppFocus = (appId: string, focus: boolean) => {\n if (focus) {\n this.context.safeSetAttributes({ [Fields.Focus]: appId });\n } else {\n this.context.safeSetAttributes({ [Fields.Focus]: undefined });\n }\n };\n\n public updateCursor(uid: string, position: Position) {\n if (!get(this.attributes, [Fields.Cursors])) {\n this.context.safeUpdateAttributes([Fields.Cursors], {});\n }\n if (!get(this.attributes, [Fields.Cursors, uid])) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], {});\n }\n this.context.safeUpdateAttributes([Fields.Cursors, uid, Fields.Position], position);\n }\n\n public updateCursorState(uid: string, cursorState: string | undefined) {\n if (!get(this.attributes, [Fields.Cursors, uid])) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], {});\n }\n this.context.safeUpdateAttributes([Fields.Cursors, uid, Fields.CursorState], cursorState);\n }\n\n public getCursorState(uid: string) {\n return get(this.attributes, [Fields.Cursors, uid, Fields.CursorState]);\n }\n\n public cleanCursor(uid: string) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], undefined);\n }\n\n // TODO 状态中保存一个 SceneName 优化性能\n public setMainViewFocusPath(mainView: View) {\n const scenePath = this.getMainViewScenePath();\n if (scenePath) {\n setViewFocusScenePath(mainView, scenePath);\n }\n }\n\n public getIframeBridge() {\n return get(this.attributes, [Fields.IframeBridge]);\n }\n\n public setIframeBridge(data: any) {\n if (isObject(data)) {\n const oldState = this.getIframeBridge();\n for (const key in data) {\n const value = (data as any)[key];\n if (oldState[key] !== value) {\n this.context.safeUpdateAttributes([Fields.IframeBridge, key], value);\n }\n }\n }\n }\n}\n\nexport type MainViewSize = {\n id: string;\n width: number;\n height: number;\n};\n\nexport type MainViewCamera = {\n id: string;\n centerX: number;\n centerY: number;\n scale: number;\n};\n\nexport type Cursors = {\n [key: string]: Cursor;\n};\n\n// export const store = new AttributesDelegate({\n// getAttributes: () => {\n// throw new Error(\"getAttributes not implemented\");\n// },\n// safeSetAttributes: () => {\n// throw new Error(\"safeSetAttributes not implemented\");\n// },\n// safeUpdateAttributes: () => {\n// throw new Error(\"safeUpdateAttributes not implemented\");\n// },\n// });\n\nexport const createAttributesDelegate = (\n extendClass?: ExtendClass,\n context: StoreContext = {\n getAttributes: () => {\n throw new Error(\"getAttributes not implemented\");\n },\n safeSetAttributes: () => {\n throw new Error(\"safeSetAttributes not implemented\");\n },\n safeUpdateAttributes: () => {\n throw new Error(\"safeUpdateAttributes not implemented\");\n },\n }\n) => {\n const AttributesDelegateClass = getExtendClass(AttributesDelegate, extendClass);\n return new AttributesDelegateClass(context);\n};\n","import type { PageState } from \"./PageController\";\n\nexport * from \"./PageController\";\n\nexport const calculateNextIndex = (index: number, pageState: PageState) => {\n let nextIndex = 0;\n const maxIndex = pageState.length - 1;\n if (index === pageState.index) {\n if (index === maxIndex) {\n nextIndex = index - 1;\n } else {\n nextIndex = pageState.index + 1;\n }\n } else {\n nextIndex = pageState.index;\n }\n return nextIndex;\n};\n","import type { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport Emittery from \"emittery\";\n\nexport type BoxMovePayload = { appId: string; x: number; y: number };\nexport type BoxFocusPayload = { appId: string };\nexport type BoxBlurredPayload = { appId: string };\nexport type BoxResizePayload = {\n appId: string;\n width: number;\n height: number;\n x?: number;\n y?: number;\n};\nexport type BoxClosePayload = { appId: string; error?: Error };\nexport type BoxStateChangePayload = { appId: string; state: TELE_BOX_STATE };\n\nexport type BoxEvent = {\n move: BoxMovePayload;\n focus: BoxFocusPayload;\n resize: BoxResizePayload;\n close: BoxClosePayload;\n boxStateChange: BoxStateChangePayload;\n blurred: BoxBlurredPayload;\n};\n\nexport type BoxEmitterType = Emittery<BoxEvent>;\nexport const boxEmitter: BoxEmitterType = new Emittery();\n","import Emittery from \"emittery\";\nimport { AppAttributes, AppEvents, Events, SETUP_APP_DELAY } from \"../constants\";\nimport { AppContext } from \"./AppContext\";\nimport { AppPageStateImpl } from \"./AppPageStateImpl\";\nimport { appRegister } from \"../Register\";\nimport { autorun } from \"white-web-sdk\";\nimport { BoxManagerNotFoundError } from \"../Utils/error\";\nimport { debounce, get } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { Fields } from \"../AttributesDelegate\";\nimport { log } from \"../Utils/log\";\nimport {\n entireScenes,\n getScenePath,\n removeScenes,\n setScenePath,\n setViewFocusScenePath,\n} from \"../Utils/Common\";\nimport type {\n AppEmitterEvent,\n AppInitState,\n BaseInsertParams,\n setAppOptions,\n AppListenerKeys,\n} from \"../index\";\nimport { WindowManager } from \"../index\";\nimport type { SceneState, View, SceneDefinition } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { NetlessApp } from \"../typings\";\nimport { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport type { ReadonlyTeleBox, TeleBoxState } from \"@netless/telebox-insider\";\nimport type { PageRemoveService, PageState } from \"../Page\";\nimport { calculateNextIndex } from \"../Page\";\nimport { boxEmitter } from \"../BoxEmitter\";\nimport { callbacks } from \"../callback\";\nimport { getExtendClass } from \"../Utils/extendClass\";\n\nexport type AppEmitter = Emittery<AppEmitterEvent>;\n\nexport class AppProxy implements PageRemoveService {\n static readonly kind = \"AppProxy\";\n public kind: string;\n public id: string;\n public scenePath?: string;\n public appEmitter: AppEmitter;\n public scenes?: SceneDefinition[];\n\n private appListener: any;\n private boxManager = this.manager.boxManager;\n private appProxies = this.manager.appProxies;\n private viewManager = this.manager.viewManager;\n private store = this.manager.store;\n\n public isAddApp: boolean;\n private status: \"normal\" | \"destroyed\" = \"normal\";\n private stateKey: string;\n private _pageState: AppPageStateImpl;\n private _prevFullPath: string | undefined;\n\n public appResult?: NetlessApp<any>;\n public appContext?: AppContext<any, any>;\n\n constructor(\n private params: BaseInsertParams,\n private manager: AppManager,\n appId: string,\n isAddApp: boolean\n ) {\n this.kind = params.kind;\n this.id = appId;\n this.stateKey = `${this.id}_state`;\n this.appProxies.set(this.id, this);\n this.appEmitter = new Emittery();\n this.appListener = this.makeAppEventListener(this.id);\n this.isAddApp = isAddApp;\n\n this.initScenes();\n\n if (this.params.options?.scenePath) {\n // 只有传入了 scenePath 的 App 才会创建 View\n this.createView();\n }\n this._pageState = new AppPageStateImpl({\n displayer: this.manager.displayer,\n scenePath: this.scenePath,\n view: this.view,\n notifyPageStateChange: this.notifyPageStateChange,\n });\n }\n\n private initScenes() {\n const options = this.params.options;\n if (options) {\n this.scenePath = options.scenePath;\n if (this.appAttributes?.isDynamicPPT && this.scenePath) {\n this.scenes = entireScenes(this.manager.displayer)[this.scenePath];\n } else {\n this.scenes = options.scenes;\n }\n }\n }\n\n public get view(): View | undefined {\n return this.manager.viewManager.getView(this.id);\n }\n\n public get viewIndex(): number | undefined {\n return this.view?.focusSceneIndex;\n }\n\n public get isWritable(): boolean {\n return this.manager.canOperate && !this.box?.readonly;\n }\n\n public get attributes() {\n return this.manager.attributes[this.id];\n }\n\n public get appAttributes() {\n return this.store.getAppAttributes(this.id);\n }\n\n public get Logger() {\n return this.manager.windowManger.Logger;\n }\n\n public getFullScenePath(): string | undefined {\n if (this.scenePath) {\n return get(this.appAttributes, [Fields.FullPath]) || this.getFullScenePathFromScenes();\n }\n }\n\n private getFullScenePathFromScenes() {\n const sceneIndex = get(this.appAttributes, [\"state\", \"SceneIndex\"], 0);\n const fullPath = getScenePath(this.manager.room, this.scenePath, sceneIndex);\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n return fullPath;\n }\n\n public setFullPath(path: string) {\n this.manager.safeUpdateAttributes([\"apps\", this.id, Fields.FullPath], path);\n }\n\n public async baseInsertApp(\n skipUpdate = false,\n boxStatus: TeleBoxState = TELE_BOX_STATE.Normal\n ): Promise<{ appId: string; app: NetlessApp }> {\n const params = this.params;\n if (!params.kind) {\n this.Logger && this.Logger.error(`[WindowManager]: kind require`);\n throw new Error(\"[WindowManager]: kind require\");\n }\n const appImpl = await appRegister.appClasses.get(params.kind)?.();\n const appParams = appRegister.registered.get(params.kind);\n const appOptions = this.manager.windowManger.resolveAppOptions(\n params.kind,\n appParams?.appOptions\n );\n if (appImpl) {\n await this.setupApp(\n this.id,\n skipUpdate,\n appImpl,\n params.options,\n appOptions,\n this.manager.useBoxesStatus ? boxStatus : undefined,\n params.forceTop,\n params.forceNormal,\n params.isDragContent\n );\n } else {\n this.Logger &&\n this.Logger.error(`[WindowManager]: app load failed ${params.kind} ${params.src}`);\n throw new Error(`[WindowManager]: app load failed ${params.kind} ${params.src}`);\n }\n internalEmitter.emit(\"updateManagerRect\");\n return {\n appId: this.id,\n app: appImpl,\n };\n }\n\n public get box(): ReadonlyTeleBox | undefined {\n return this.boxManager?.getBox(this.id);\n }\n\n private async setupApp(\n appId: string,\n skipUpdate: boolean,\n app: NetlessApp,\n options?: setAppOptions,\n appOptions?: any,\n boxStatus?: TeleBoxState,\n forceTop?: boolean,\n forceNormal?: boolean,\n isDragContent?: boolean\n ) {\n log(\"setupApp\", appId, app, options, boxStatus, forceTop, forceNormal, isDragContent);\n if (!this.boxManager) {\n throw new BoxManagerNotFoundError();\n }\n const AppContextClass = getExtendClass(AppContext, WindowManager.extendClass);\n const context = new AppContextClass(this.manager, this.boxManager, appId, this, appOptions);\n this.appContext = context;\n try {\n internalEmitter.once(`${appId}${Events.WindowCreated}` as any).then(async () => {\n let boxInitState: AppInitState | undefined;\n if (!skipUpdate) {\n boxInitState = this.getAppInitState(appId);\n this.boxManager?.updateBoxState(boxInitState);\n }\n this.appEmitter.onAny(this.appListener);\n this.appAttributesUpdateListener(appId);\n this.setViewFocusScenePath();\n // 如果当前是回放模式, 则需要记录当前主视图的场景路径, 以便在 app 创建后恢复\n let currentMainViewScenePath: string | undefined;\n if (this.manager.isReplay) {\n currentMainViewScenePath = (this.manager.mainView as any).scenePath as string;\n }\n setTimeout(async () => {\n // 延迟执行 setup, 防止初始化的属性没有更新成功\n this.Logger &&\n this.Logger.info(\n `[WindowManager]: setup app ${this.kind}, appId: ${appId}`\n );\n const result = await app.setup(context);\n this.appResult = result;\n appRegister.notifyApp(this.kind, \"created\", { appId, result });\n this.afterSetupApp(boxInitState);\n this.fixMobileSize();\n if (currentMainViewScenePath) {\n this.manager.mainViewProxy.setFocusScenePath(currentMainViewScenePath);\n }\n callbacks.emit(\"onAppSetup\", appId);\n }, SETUP_APP_DELAY);\n });\n this.boxManager?.createBox({\n appId: appId,\n app,\n options,\n canOperate: this.manager.canOperate,\n smartPosition: this.isAddApp,\n boxStatus,\n forceTop,\n forceNormal,\n isDragContent,\n });\n if (this.isAddApp && this.box) {\n if (boxStatus) {\n this.store.setBoxStatus(appId, boxStatus);\n }\n this.store.updateAppState(appId, AppAttributes.ZIndex, this.box.zIndex);\n this.store.updateAppState(appId, AppAttributes.Size, {\n width: this.box.intrinsicWidth,\n height: this.box.intrinsicHeight,\n });\n this.boxManager.focusBox({ appId }, false);\n }\n } catch (error: any) {\n this.Logger && this.Logger.error(`[WindowManager]: app setup error: ${error.message}`);\n throw new Error(`[WindowManager]: app setup error: ${error.message}`);\n }\n }\n\n // 兼容移动端创建时会出现 PPT 不适配的问题\n private fixMobileSize() {\n const box = this.boxManager?.getBox(this.id);\n if (box) {\n this.boxManager?.resizeBox({\n appId: this.id,\n width: box.intrinsicWidth + 0.001,\n height: box.intrinsicHeight + 0.001,\n skipUpdate: true,\n });\n }\n }\n\n private afterSetupApp(boxInitState: AppInitState | undefined): void {\n if (boxInitState) {\n if (!boxInitState?.x || !boxInitState.y) {\n this.boxManager?.setBoxInitState(this.id);\n }\n }\n }\n\n public async onSeek(time: number) {\n this.appEmitter.emit(\"seek\", time).catch(err => {\n console.log(`[WindowManager]: emit seek error: ${err.message}`);\n });\n const boxInitState = this.getAppInitState(this.id);\n this.boxManager?.updateBoxState(boxInitState);\n }\n\n public async onReconnected() {\n const isExist = Boolean(this.manager.attributes.apps[this.id]);\n if (!isExist) {\n await this.destroy(true, false, true);\n return;\n }\n this.appEmitter.emit(\"reconnected\", undefined);\n const currentAppState = this.getAppInitState(this.id);\n await this.destroy(true, false, true);\n const params = this.params;\n const AppProxyClass = getExtendClass(AppProxy, WindowManager.extendClass);\n const appProxy = new AppProxyClass(params, this.manager, this.id, this.isAddApp);\n await appProxy.baseInsertApp(true, currentAppState?.boxStatus);\n this.boxManager?.updateBoxState(currentAppState);\n }\n\n public async onRemoveScene(scenePath: string) {\n if (this.scenePath && scenePath.startsWith(this.scenePath + \"/\")) {\n let nextIndex = this.pageState.index;\n let fullPath = this._pageState.getFullPath(nextIndex);\n if (!fullPath) {\n nextIndex = 0;\n fullPath = this._pageState.getFullPath(nextIndex);\n }\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n this.setViewFocusScenePath();\n if (this.view) {\n this.view.focusSceneIndex = nextIndex;\n }\n }\n }\n\n public getAppInitState = (id: string) => {\n const attrs = this.store.getAppState(id);\n if (!attrs) return;\n const position = attrs?.[AppAttributes.Position];\n const focus = this.store.focus;\n const size = attrs?.[AppAttributes.Size];\n const sceneIndex = attrs?.[AppAttributes.SceneIndex];\n const maximized = this.attributes?.[\"maximized\"];\n const minimized = this.attributes?.[\"minimized\"];\n const boxStatus = this.store.getBoxStatus(id) ?? undefined;\n const lastNotMinimizedBoxStatus = this.store.getLastNotMinimizedBoxStatus(id) ?? undefined;\n const { forceTop, forceNormal, isDragContent } = this.store.getAppAttributes(id);\n const zIndex = attrs?.zIndex;\n let payload = { maximized, minimized, zIndex } as AppInitState;\n if (position) {\n payload = { ...payload, id: id, x: position.x, y: position.y };\n }\n if (focus === id) {\n payload = { ...payload, focus: true };\n }\n if (size) {\n payload = { ...payload, width: size.width, height: size.height };\n }\n if (sceneIndex) {\n payload = { ...payload, sceneIndex };\n }\n if (boxStatus) {\n payload = { ...payload, boxStatus };\n }\n if (lastNotMinimizedBoxStatus) {\n payload = { ...payload, lastNotMinimizedBoxStatus };\n }\n if (forceTop) {\n payload = { ...payload, forceTop };\n }\n if (forceNormal) {\n payload = { ...payload, forceNormal };\n }\n if (isDragContent) {\n payload = { ...payload, isDragContent };\n }\n return payload;\n };\n\n public emitAppSceneStateChange(sceneState: SceneState) {\n this.appEmitter.emit(\"sceneStateChange\", sceneState);\n }\n\n public emitAppIsWritableChange() {\n this.appEmitter.emit(\"writableChange\", this.isWritable);\n }\n\n private makeAppEventListener(appId: string) {\n return (eventName: AppListenerKeys, data: any) => {\n if (!this.manager.canOperate) return;\n switch (eventName) {\n case \"setBoxSize\": {\n this.boxManager?.resizeBox({\n appId,\n width: data.width,\n height: data.height,\n skipUpdate: false,\n });\n break;\n }\n case \"setBoxMinSize\": {\n this.boxManager?.setBoxMinSize({\n appId,\n minWidth: data.minwidth,\n minHeight: data.minheight,\n });\n break;\n }\n case \"setBoxTitle\": {\n this.boxManager?.setBoxTitle({ appId, title: data.title });\n break;\n }\n case AppEvents.destroy: {\n if (this.status === \"destroyed\") return;\n this.destroy(true, false, true, data?.error);\n if (data?.error) {\n console.error(data?.error);\n }\n break;\n }\n case \"focus\": {\n this.boxManager?.focusBox({ appId: this.id });\n boxEmitter.emit(\"focus\", { appId: this.id });\n break;\n }\n default: {\n break;\n }\n }\n };\n }\n\n private appAttributesUpdateListener = (appId: string) => {\n this.manager.refresher.add(appId, () => {\n return autorun(() => {\n const attrs = this.manager.attributes[appId];\n if (attrs) {\n this.appEmitter.emit(\"attributesUpdate\", attrs);\n }\n });\n });\n this.manager.refresher.add(this.stateKey, () => {\n return autorun(() => {\n const appState = this.appAttributes?.state;\n if (appState?.zIndex > 0 && appState.zIndex !== this.box?.zIndex) {\n this.boxManager?.setZIndex(appId, appState.zIndex);\n this.boxManager?.focusBox({ appId });\n }\n });\n });\n this.manager.refresher.add(`${appId}-fullPath`, () => {\n return autorun(() => {\n const fullPath = this.appAttributes?.fullPath;\n this.setFocusScenePathHandler(fullPath);\n if (this._prevFullPath !== fullPath) {\n this.notifyPageStateChange();\n this._prevFullPath = fullPath;\n }\n });\n });\n };\n\n private setFocusScenePathHandler = debounce((fullPath: string | undefined) => {\n if (this.view && fullPath && fullPath !== this.view?.focusScenePath) {\n setViewFocusScenePath(this.view, fullPath);\n callbacks.emit(\"onAppScenePathChange\", { appId: this.id, view: this.view });\n }\n }, 50);\n\n public setScenePath(): void {\n if (!this.manager.canOperate) return;\n const fullScenePath = this.getFullScenePath();\n if (this.manager.room && fullScenePath && this.view) {\n setScenePath(this.manager.room, fullScenePath);\n }\n }\n\n public setViewFocusScenePath() {\n const fullPath = this.getFullScenePath();\n if (fullPath && this.view) {\n setViewFocusScenePath(this.view, fullPath);\n }\n return fullPath;\n }\n\n private async createView(): Promise<View> {\n const view = await this.viewManager.createView(this.id);\n this.setViewFocusScenePath();\n return view;\n }\n\n public notifyPageStateChange = debounce(() => {\n this.appEmitter.emit(\"pageStateChange\", this.pageState);\n }, 50);\n\n public notifyBoxStatusChange = (status: TeleBoxState) => {\n this.appEmitter.emit(\"boxStatusChange\", { appId: this.id, status });\n };\n\n public get pageState(): PageState {\n return this._pageState.toObject();\n }\n\n // PageRemoveService\n public async removeSceneByIndex(index: number) {\n const scenePath = this._pageState.getFullPath(index);\n if (scenePath) {\n const nextIndex = calculateNextIndex(index, this.pageState);\n // 只修改 focus path 不修改 FullPath\n this.setSceneIndexWithoutSync(nextIndex);\n this.manager.dispatchInternalEvent(Events.SetAppFocusIndex, {\n type: \"app\",\n appID: this.id,\n index: nextIndex,\n });\n // 手动添加一个延迟, 让 app 切换场景后再删除以避免闪烁\n setTimeout(() => {\n removeScenes(this.manager.room, scenePath, index);\n }, 100);\n return true;\n } else {\n return false;\n }\n }\n\n public setSceneIndexWithoutSync(index: number) {\n if (this.view) {\n this.view.focusSceneIndex = index;\n }\n }\n // PageRemoveService end\n\n public setSceneIndex(index: number) {\n if (this.view) {\n this.view.focusSceneIndex = index;\n const fullPath = this._pageState.getFullPath(index);\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n }\n }\n\n public async destroy(\n needCloseBox: boolean,\n cleanAttrs: boolean,\n skipUpdate: boolean,\n error?: Error\n ) {\n if (this.status === \"destroyed\") return;\n this.status = \"destroyed\";\n try {\n await appRegister.notifyApp(this.kind, \"destroy\", { appId: this.id });\n await this.appEmitter.emit(\"destroy\", { error });\n } catch (error) {\n this.Logger && this.Logger.error(`[WindowManager]: notifyApp error: ${error.message}`);\n console.error(\"[WindowManager]: notifyApp error\", error.message, error.stack);\n }\n this.appEmitter.clearListeners();\n internalEmitter.emit(`destroy-${this.id}` as any, { error });\n if (needCloseBox) {\n this.boxManager?.closeBox(this.id, skipUpdate);\n }\n if (cleanAttrs) {\n this.store.cleanAppAttributes(this.id);\n if (this.scenePath) {\n removeScenes(this.manager.room, this.scenePath);\n }\n }\n this.appProxies.delete(this.id);\n this._pageState.destroy();\n\n this.viewManager.destroyView(this.id);\n this.manager.appStatus.delete(this.id);\n this.manager.refresher.remove(this.id);\n this.manager.refresher.remove(this.stateKey);\n this.manager.refresher.remove(`${this.id}-fullPath`);\n this._prevFullPath = undefined;\n this.Logger &&\n this.Logger.info(`[WindowManager]: destroy app ${this.kind} appId: ${this.id}`);\n }\n\n public close(): Promise<void> {\n return this.destroy(true, true, false);\n }\n}\n","import type { View, Displayer } from \"white-web-sdk\";\n\nexport class ViewManager {\n public views: Map<string, View> = new Map();\n\n constructor(private displayer: Displayer) {}\n\n public createView(id: string): View {\n const view = createView(this.displayer);\n this.views.set(id, view);\n return view;\n }\n\n public getView(id: string): View | undefined {\n return this.views.get(id);\n }\n\n public destroyView(id: string): void {\n const view = this.views.get(id);\n if (view) {\n try {\n view.release();\n } catch {\n // ignore\n }\n this.views.delete(id);\n }\n }\n\n public setViewScenePath(id: string, scenePath: string): void {\n const view = this.views.get(id);\n if (view) {\n view.focusScenePath = scenePath;\n }\n }\n\n public destroy() {\n this.views.forEach(view => {\n try {\n view.release();\n } catch {\n // ignore\n }\n });\n this.views.clear();\n }\n}\n\nexport const createView = (displayer: Displayer): View => {\n const view = displayer.views.createView();\n setDefaultCameraBound(view);\n return view;\n};\n\nexport const setDefaultCameraBound = (view: View) => {\n view.setCameraBound({\n maxContentMode: () => 10,\n minContentMode: () => 0.1,\n });\n};\n","import { AnimationMode, reaction, ViewMode } from \"white-web-sdk\";\nimport { callbacks } from \"../callback\";\nimport { createView } from \"./ViewManager\";\nimport { debounce, get, isEmpty, isEqual } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { Fields } from \"../AttributesDelegate\";\nimport { setViewFocusScenePath } from \"../Utils/Common\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport type { Camera, Room, Size, View } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { MainViewCamera } from \"../AttributesDelegate\";\nimport { Events } from \"../constants\";\nimport { LocalConsole } from \"../Utils/log\";\n\ntype MainViewScreenLike = {\n refreshSize?: (width: number, height: number) => void;\n resizeObserver?: {\n disconnect?: () => void;\n observe?: (target: Element) => void;\n };\n};\n\nexport class MainViewProxy {\n /** Refresh the view's camera in an interval of 1.5s. */\n public polling = false;\n\n private scale?: number;\n private started = false;\n private mainViewIsAddListener = false;\n private isForcingMainViewDivElement = false;\n private wrapperRectWorkaroundFrame = 0;\n private pendingWrapperRectChange?: { width: number; height: number; origin?: string };\n private mainView: View;\n private store = this.manager.store;\n private viewMode = this.manager.windowManger.viewMode;\n\n private sideEffectManager = new SideEffectManager();\n\n private playgroundSizeChangeListenerLocalConsole = new LocalConsole(\n \"playgroundSizeChangeListener\",\n 100\n );\n private sizeUpdatedLocalConsole = new LocalConsole(\"sizeUpdated\", 100);\n private cameraUpdatedLocalConsole = new LocalConsole(\"cameraUpdated\", 100);\n private cameraReactionLocalConsole = new LocalConsole(\"cameraReaction\", 100);\n\n constructor(private manager: AppManager) {\n this.mainView = this.createMainView();\n this.moveCameraSizeByAttributes();\n internalEmitter.once(\"mainViewMounted\").then(() => {\n this.addMainViewListener();\n this.start();\n this.ensureCameraAndSize();\n this.startListenWritableChange();\n });\n const playgroundSizeChangeListener = () => {\n this.playgroundSizeChangeListenerLocalConsole.log(\n JSON.stringify(this.mainView.camera),\n JSON.stringify(this.mainView.size),\n JSON.stringify(this.mainViewSize),\n JSON.stringify(this.mainViewCamera),\n window.outerHeight,\n window.outerWidth,\n window.visualViewport?.width ?? \"null\",\n window.visualViewport?.height ?? \"null\",\n window.visualViewport?.offsetLeft ?? \"null\",\n window.visualViewport?.offsetTop ?? \"null\"\n );\n this.sizeChangeHandler(this.mainViewSize);\n };\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"playgroundSizeChange\", playgroundSizeChangeListener);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"containerSizeRatioUpdate\", this.onUpdateContainerSizeRatio);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"wrapperRectChange\", this.onWrapperRectChange);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"startReconnect\", () => {\n if (!this.didRelease) {\n this.mainView.release();\n }\n });\n });\n this.sideEffectManager.setInterval(this.syncCamera, 1500);\n }\n\n // Guard function when the camera is not synced\n private syncCamera = () => {\n if (!this.polling || this.viewMode !== ViewMode.Broadcaster) return;\n const { mainViewCamera } = this;\n if (mainViewCamera && mainViewCamera.id !== this.manager.uid) {\n this.moveCameraSizeByAttributes();\n }\n };\n\n private startListenWritableChange = () => {\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"writableChange\", isWritable => {\n if (isWritable) {\n this.ensureCameraAndSize();\n }\n if (this.manager.room) this.syncMainView(this.manager.room);\n });\n });\n };\n\n public ensureCameraAndSize() {\n if (this.viewMode !== ViewMode.Broadcaster) return;\n if (!this.mainViewCamera || !this.mainViewSize) {\n this.manager.dispatchInternalEvent(Events.InitMainViewCamera);\n this.setCameraAndSize();\n }\n }\n\n private get mainViewCamera() {\n return this.store.getMainViewCamera();\n }\n\n private get mainViewSize() {\n return this.store.getMainViewSize();\n }\n\n private get didRelease(): boolean {\n return get(this.view, [\"didRelease\"]);\n }\n\n private moveCameraSizeByAttributes() {\n this.moveCameraToContian(this.mainViewSize);\n this.moveCamera(this.mainViewCamera);\n }\n\n private onWrapperRectChange = (payload: { width: number; height: number; origin?: string }) => {\n this.pendingWrapperRectChange = payload;\n if (this.wrapperRectWorkaroundFrame) {\n cancelAnimationFrame(this.wrapperRectWorkaroundFrame);\n }\n this.wrapperRectWorkaroundFrame = requestAnimationFrame(this.runWrapperRectWorkaround);\n };\n\n private runWrapperRectWorkaround = () => {\n this.wrapperRectWorkaroundFrame = 0;\n const payload = this.pendingWrapperRectChange;\n const element = this.mainView.divElement;\n this.pendingWrapperRectChange = undefined;\n if (!payload || !element) return;\n\n const rect = element.getBoundingClientRect();\n const observedSize = { width: rect.width, height: rect.height };\n const wrapperMatchesDom =\n Math.abs(payload.width - observedSize.width) <= 0.5 &&\n Math.abs(payload.height - observedSize.height) <= 0.5;\n const viewIsStale =\n Math.abs(this.mainView.size.width - observedSize.width) > 0.5 ||\n Math.abs(this.mainView.size.height - observedSize.height) > 0.5;\n\n if (wrapperMatchesDom && viewIsStale) {\n this.forceSyncMainViewDivElement(\n `wrapperRectChange:${payload.origin || \"unknown\"}`,\n observedSize,\n element\n );\n }\n };\n\n private forceSyncMainViewDivElement(\n reason: string,\n observedSize: Pick<Size, \"width\" | \"height\">,\n element: HTMLDivElement\n ) {\n const { width: viewWidth, height: viewHeight } = this.mainView.size;\n const targetElement = element;\n if (\n Math.abs(viewWidth - observedSize.width) <= 0.5 &&\n Math.abs(viewHeight - observedSize.height) <= 0.5\n ) {\n return;\n }\n if (this.isForcingMainViewDivElement) {\n console.log(\n \"[window-manager] skipForceSyncMainViewDivElement \" +\n JSON.stringify({\n reason,\n observedSize,\n viewSize: this.mainView.size,\n })\n );\n return;\n }\n this.isForcingMainViewDivElement = true;\n try {\n const mainView = this.mainView as View & { screen?: MainViewScreenLike };\n const screen = mainView.screen;\n const resizeObserver = screen?.resizeObserver;\n if (typeof screen?.refreshSize === \"function\") {\n console.log(\n \"[window-manager] forceSyncMainViewDivElement observerReset \" +\n JSON.stringify({\n reason,\n viewSize: this.mainView.size,\n observedSize,\n })\n );\n // Reset the observer queue so we sync against the current DOM box,\n // not a stale ResizeObserver entry from a rapid resize burst.\n resizeObserver?.disconnect?.();\n screen.refreshSize(observedSize.width, observedSize.height);\n resizeObserver?.observe?.(element);\n }\n } finally {\n queueMicrotask(() => {\n const rect = targetElement.getBoundingClientRect();\n console.log(\n \"[window-manager] forceSyncMainViewDivElementResult \" +\n JSON.stringify({\n reason,\n viewSize: this.mainView.size,\n rect: { width: rect.width, height: rect.height },\n })\n );\n this.isForcingMainViewDivElement = false;\n });\n }\n }\n\n public start() {\n console.log(\"[window-manager] start attributes size:\" + JSON.stringify(this.mainViewSize));\n this.sizeChangeHandler(this.mainViewSize);\n if (this.started) return;\n this.addCameraListener();\n this.addCameraReaction();\n if (this.manager.room) this.syncMainView(this.manager.room);\n this.started = true;\n if (this.mainView.focusScenePath) {\n this.manager.windowManger.onMainViewScenePathChangeHandler(\n this.mainView.focusScenePath\n );\n }\n console.log(\n \"[window-manager] start end mainView size:\" + JSON.stringify(this.mainView.size)\n );\n }\n\n public addCameraReaction = () => {\n this.manager.refresher.add(Fields.MainViewCamera, this.cameraReaction);\n };\n\n public setCameraAndSize(): void {\n const camera = { ...this.mainView.camera, id: this.manager.uid };\n const size = { ...this.mainView.size, id: this.manager.uid };\n this.store.setMainViewCameraAndSize(camera, size);\n }\n\n private cameraReaction = () => {\n return reaction(\n () => this.mainViewCamera,\n (camera: MainViewCamera | undefined) => {\n if (camera && camera.id !== this.manager.uid) {\n this.moveCameraToContian(this.mainViewSize);\n this.moveCamera(camera);\n this.cameraReactionLocalConsole.log(\n `camera: ${JSON.stringify(camera)}, current size: ${JSON.stringify(\n this.mainViewSize\n )}`\n );\n }\n },\n { fireImmediately: true }\n );\n };\n\n public sizeChangeHandler = debounce((size: Size) => {\n if (size) {\n this.moveCameraToContian(size);\n this.moveCamera(this.mainViewCamera);\n console.log(\n \"[window-manager] sizeChangeHandler current size and camera\" +\n JSON.stringify(size) +\n JSON.stringify(this.mainViewCamera) +\n JSON.stringify(this.mainView.camera) +\n JSON.stringify(this.mainView.size)\n );\n }\n this.ensureMainViewSize();\n }, 30);\n\n public onUpdateContainerSizeRatio = () => {\n const size = this.store.getMainViewSize();\n console.log(\"[window-manager] onUpdateContainerSizeRatio \" + JSON.stringify(size));\n this.sizeChangeHandler(size);\n };\n\n public get view(): View {\n return this.mainView;\n }\n\n public get cameraState() {\n return { ...this.view.camera, ...this.view.size };\n }\n\n public createMainView(): View {\n const mainView = createView(this.manager.displayer);\n const mainViewScenePath = this.store.getMainViewScenePath();\n if (mainViewScenePath) {\n setViewFocusScenePath(mainView, mainViewScenePath);\n }\n return mainView;\n }\n\n public onReconnect(): void {\n if (this.didRelease) {\n this.rebind();\n } else {\n const mainViewScenePath = this.store.getMainViewScenePath();\n this.setFocusScenePath(mainViewScenePath);\n }\n }\n\n public setFocusScenePath(path: string | undefined) {\n if (path) {\n return setViewFocusScenePath(this.view, path);\n }\n }\n\n public rebind(): void {\n const divElement = this.mainView.divElement;\n const disableCameraTransform = this.mainView.disableCameraTransform;\n this.stop();\n if (!this.didRelease) {\n this.mainView.release();\n }\n this.removeMainViewListener();\n this.mainView = this.createMainView();\n this.mainView.disableCameraTransform = disableCameraTransform;\n this.mainView.divElement = divElement;\n this.addMainViewListener();\n this.start();\n callbacks.emit(\"onMainViewRebind\", this.mainView);\n }\n\n private onCameraUpdatedByDevice = (camera: Camera) => {\n if (this.viewMode === ViewMode.Follower) return;\n this.store.setMainViewCamera({ ...camera, id: this.manager.uid });\n if (!isEqual(this.mainViewSize, { ...this.mainView.size, id: this.manager.uid })) {\n this.setMainViewSize(this.view.size);\n }\n };\n\n public addMainViewListener(): void {\n if (this.mainViewIsAddListener) return;\n if (this.view.divElement) {\n this.view.divElement.addEventListener(\"click\", this.mainViewClickListener);\n this.view.divElement.addEventListener(\"touchend\", this.mainViewClickListener);\n this.mainViewIsAddListener = true;\n }\n }\n\n public removeMainViewListener(): void {\n if (this.view.divElement) {\n this.view.divElement.removeEventListener(\"click\", this.mainViewClickListener);\n this.view.divElement.removeEventListener(\"touchend\", this.mainViewClickListener);\n }\n this.mainViewIsAddListener = false;\n }\n\n private mainViewClickListener = () => {\n this.mainViewClickHandler();\n };\n\n public async mainViewClickHandler(): Promise<void> {\n if (!this.manager.canOperate) return;\n this.store.cleanFocus();\n this.manager.boxManager?.blurAllBox();\n }\n\n public setMainViewSize = debounce((size: Size) => {\n this.store.setMainViewSize({ ...size, id: this.manager.uid });\n }, 50);\n\n private addCameraListener() {\n this.view.callbacks.on(\"onCameraUpdatedByDevice\", this.onCameraUpdatedByDevice);\n this.view.callbacks.on(\"onCameraUpdated\", this.onCameraUpdated);\n this.view.callbacks.on(\"onSizeUpdated\", this.onSizeUpdated);\n }\n\n private removeCameraListener() {\n this.view.callbacks.off(\"onCameraUpdatedByDevice\", this.onCameraUpdatedByDevice);\n this.view.callbacks.off(\"onCameraUpdated\", this.onCameraUpdated);\n this.view.callbacks.off(\"onSizeUpdated\", this.onSizeUpdated);\n }\n\n private _syncMainViewTimer = 0;\n private handleCameraOrSizeUpdated = () => {\n callbacks.emit(\"cameraStateChange\", this.cameraState);\n // sdk >= 2.16.43 的 syncMainView() 可以写入当前 main view 的 camera, 以修复复制粘贴元素的位置\n // 注意到这个操作会发送信令,应当避免频繁调用\n if (this.manager.room && (this.manager.room as any).syncMainView) {\n clearTimeout(this._syncMainViewTimer);\n this._syncMainViewTimer = setTimeout(this.syncMainView, 100, this.manager.room);\n }\n this.ensureMainViewSize();\n };\n\n private onCameraUpdated = (camera: Camera) => {\n this.cameraUpdatedLocalConsole.log(JSON.stringify(camera));\n this.handleCameraOrSizeUpdated();\n };\n\n private onSizeUpdated = (size: Size) => {\n this.sizeUpdatedLocalConsole.log(JSON.stringify(size));\n this.handleCameraOrSizeUpdated();\n };\n\n private ensureMainViewSize() {\n if (\n (!this.mainViewSize ||\n this.mainViewSize.width === 0 ||\n this.mainViewSize.height === 0) &&\n this.mainView.size.width > 0 &&\n this.mainView.size.height > 0\n ) {\n this.setMainViewSize(this.mainView.size);\n }\n }\n\n private syncMainView = (room: Room) => {\n if (room.isWritable) {\n room.syncMainView(this.mainView);\n }\n };\n\n public moveCameraToContian(size: Size): void {\n if (!isEmpty(size)) {\n this.view.moveCameraToContain({\n width: size.width,\n height: size.height,\n originX: -size.width / 2,\n originY: -size.height / 2,\n animationMode: AnimationMode.Immediately,\n });\n this.scale = this.view.camera.scale;\n }\n }\n\n public moveCamera(camera: Camera): void {\n if (!isEmpty(camera)) {\n if (isEqual(camera, this.view.camera)) return;\n const { centerX, centerY, scale } = camera;\n const needScale = scale * (this.scale || 1);\n this.view.moveCamera({\n centerX: centerX,\n centerY: centerY,\n scale: needScale,\n animationMode: AnimationMode.Immediately,\n });\n }\n }\n\n public stop() {\n this.removeCameraListener();\n this.manager.refresher.remove(Fields.MainViewCamera);\n this.manager.refresher.remove(Fields.MainViewSize);\n this.started = false;\n }\n\n public setViewMode = (mode: ViewMode) => {\n this.viewMode = mode;\n };\n\n public destroy() {\n console.log(\"[window-manager] destroy \");\n if (this.wrapperRectWorkaroundFrame) {\n cancelAnimationFrame(this.wrapperRectWorkaroundFrame);\n this.wrapperRectWorkaroundFrame = 0;\n }\n this.playgroundSizeChangeListenerLocalConsole.destroy();\n this.sizeUpdatedLocalConsole.destroy();\n this.cameraUpdatedLocalConsole.destroy();\n this.cameraReactionLocalConsole.destroy();\n this.removeMainViewListener();\n this.stop();\n this.sideEffectManager.flushAll();\n }\n}\n","import { callbacks } from \"./callback\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport type { View } from \"white-web-sdk\";\nimport type { AppProxy } from \"./App\";\n\nexport type RedoUndoContext = {\n mainView: () => View;\n focus: () => string | undefined;\n getAppProxy: (id: string) => AppProxy | undefined;\n};\n\nexport class RedoUndo {\n constructor(private context: RedoUndoContext) {\n internalEmitter.on(\"focusedChange\", changed => {\n this.disposePrevFocusViewRedoUndoListeners(changed.prev);\n setTimeout(() => {\n this.addRedoUndoListeners(changed.focused);\n }, 0);\n });\n internalEmitter.on(\"rootDirRemoved\", () => {\n this.disposePrevFocusViewRedoUndoListeners(context.focus());\n this.addRedoUndoListeners(context.focus());\n });\n this.addRedoUndoListeners(context.focus());\n }\n\n private addRedoUndoListeners = (focused: string | undefined) => {\n if (focused === undefined) {\n this.addViewCallbacks(\n this.context.mainView(),\n this.onCanRedoStepsUpdate,\n this.onCanUndoStepsUpdate\n );\n } else {\n const focusApp = this.context.getAppProxy(focused);\n if (focusApp && focusApp.view) {\n this.addViewCallbacks(\n focusApp.view,\n this.onCanRedoStepsUpdate,\n this.onCanUndoStepsUpdate\n );\n }\n }\n };\n\n private addViewCallbacks = (\n view: View,\n redoListener: (steps: number) => void,\n undoListener: (steps: number) => void\n ) => {\n redoListener(view.canRedoSteps);\n undoListener(view.canUndoSteps);\n view.callbacks.on(\"onCanRedoStepsUpdate\", redoListener);\n view.callbacks.on(\"onCanUndoStepsUpdate\", undoListener);\n };\n\n private disposeViewCallbacks = (view: View) => {\n view.callbacks.off(\"onCanRedoStepsUpdate\", this.onCanRedoStepsUpdate);\n view.callbacks.off(\"onCanUndoStepsUpdate\", this.onCanUndoStepsUpdate);\n };\n\n private onCanRedoStepsUpdate = (steps: number) => {\n callbacks.emit(\"canRedoStepsChange\", steps);\n };\n\n private onCanUndoStepsUpdate = (steps: number) => {\n callbacks.emit(\"canUndoStepsChange\", steps);\n };\n\n private disposePrevFocusViewRedoUndoListeners = (prevFocused: string | undefined) => {\n let view: View | undefined = undefined;\n if (prevFocused === undefined) {\n view = this.context.mainView();\n } else {\n const appProxy = this.context.getAppProxy(prevFocused);\n if (appProxy && appProxy.view) {\n view = appProxy.view;\n }\n }\n if (view) {\n this.disposeViewCallbacks(view);\n }\n };\n\n public destroy() {\n this.disposePrevFocusViewRedoUndoListeners(this.context.focus());\n }\n}\n","import { AppAttributes, AppStatus, Events, INIT_DIR, MagixEventName, ROOT_DIR } from \"./constants\";\nimport { AppCreateQueue } from \"./Utils/AppCreateQueue\";\nimport { AppListeners } from \"./AppListener\";\nimport { AppProxy } from \"./App\";\nimport { appRegister } from \"./Register\";\nimport { autorun, isPlayer, isRoom, ScenePathType, UpdateEventKind } from \"white-web-sdk\";\nimport { boxEmitter } from \"./BoxEmitter\";\nimport { calculateNextIndex } from \"./Page\";\nimport { callbacks } from \"./callback\";\nimport { debounce, get, isInteger, orderBy } from \"lodash\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { createAttributesDelegate, Fields } from \"./AttributesDelegate\";\nimport type { AttributesDelegate } from \"./AttributesDelegate\";\nimport { log } from \"./Utils/log\";\nimport { MainViewProxy } from \"./View/MainView\";\nimport { safeListenPropsUpdated } from \"./Utils/Reactive\";\nimport { reconnectRefresher, WindowManager } from \"./index\";\nimport { RedoUndo } from \"./RedoUndo\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { ViewManager } from \"./View/ViewManager\";\nimport type { SyncRegisterAppPayload } from \"./Register\";\nimport type { RemoveSceneParams } from \"./InternalEmitter\";\nimport {\n entireScenes,\n genAppId,\n isRootDirPage,\n makeValidScenePath,\n parseSceneDir,\n removeScenes,\n setScenePath,\n setViewFocusScenePath,\n} from \"./Utils/Common\";\nimport type { ReconnectRefresher } from \"./ReconnectRefresher\";\nimport type { BoxManager } from \"./BoxManager\";\nimport type {\n Displayer,\n Room,\n ScenesCallbacksNode,\n SceneState,\n RoomState,\n MemberState,\n} from \"white-web-sdk\";\nimport type { AddAppParams, BaseInsertParams, TeleBoxRect } from \"./index\";\nimport type {\n BoxBlurredPayload,\n BoxClosePayload,\n BoxFocusPayload,\n BoxMovePayload,\n BoxResizePayload,\n BoxStateChangePayload,\n} from \"./BoxEmitter\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { TeleBoxState } from \"@netless/telebox-insider\";\n\nexport class AppManager {\n static readonly kind = \"AppManager\";\n public displayer: Displayer;\n public viewManager: ViewManager;\n public appProxies: Map<string, AppProxy> = new Map();\n public appStatus: Map<string, AppStatus> = new Map();\n public store!: AttributesDelegate;\n public mainViewProxy: MainViewProxy;\n public refresher: ReconnectRefresher;\n public isReplay = this.windowManger.isReplay;\n public mainViewScenesLength = 0;\n\n private appListeners: AppListeners;\n public boxManager?: BoxManager;\n\n private _prevSceneIndex: number | undefined;\n private _prevFocused: string | undefined;\n private callbacksNode: ScenesCallbacksNode | null = null;\n private appCreateQueue = new AppCreateQueue();\n\n private _focusAppCreatedResolve?: (appProxy?: AppProxy) => void;\n private _focusAppId: string | undefined;\n private _resolveTimer: number | undefined;\n\n private sideEffectManager = new SideEffectManager();\n\n public sceneState: SceneState | null = null;\n\n public rootDirRemoving = false;\n\n private _useBoxesStatus = false;\n\n public get useBoxesStatus() {\n return this._useBoxesStatus;\n }\n\n public set useBoxesStatus(value: boolean) {\n this._useBoxesStatus = value;\n }\n\n constructor(public windowManger: WindowManager) {\n this.displayer = windowManger.displayer;\n this.store = createAttributesDelegate(WindowManager.extendClass, {\n getAttributes: () => this.attributes,\n safeSetAttributes: attributes => this.safeSetAttributes(attributes),\n safeUpdateAttributes: (keys, val) => this.safeUpdateAttributes(keys, val),\n });\n\n this.mainViewProxy = new MainViewProxy(this);\n this.viewManager = new ViewManager(this.displayer);\n this.appListeners = new AppListeners(this);\n this.displayer.callbacks.on(this.eventName, this.displayerStateListener);\n this.appListeners.addListeners();\n\n this.refresher = reconnectRefresher;\n this.refresher.setRoom(this.room);\n this.refresher.setContext({ emitter: internalEmitter });\n\n this.sideEffectManager.addDisposer(() => {\n this.appCreateQueue.destroy();\n this.mainViewProxy.destroy();\n this.refresher.destroy();\n this.viewManager.destroy();\n this.boxManager?.destroy();\n this.callbacksNode?.dispose();\n });\n\n internalEmitter.once(\"onCreated\").then(() => this.onCreated());\n internalEmitter.on(\"onReconnected\", () => this.onReconnected());\n\n if (isPlayer(this.displayer)) {\n internalEmitter.on(\"seekStart\", this.onPlayerSeekStart);\n internalEmitter.on(\"seek\", this.onPlayerSeekDone);\n }\n\n internalEmitter.on(\"removeScenes\", this.onRemoveScenes);\n internalEmitter.on(\"setReadonly\", this.onReadonlyChanged);\n\n this.createRootDirScenesCallback();\n\n appRegister.setSyncRegisterApp(payload => {\n this.safeUpdateAttributes([Fields.Registered, payload.kind], payload);\n });\n }\n\n public getMemberState(): MemberState {\n return this.room?.state.memberState || ({ strokeColor: [0, 0, 0] } as MemberState);\n }\n\n private onRemoveScenes = async (params: RemoveSceneParams) => {\n const { scenePath } = params;\n // 如果移除根目录就把 scenePath 设置为初始值\n if (scenePath === ROOT_DIR) {\n console.log(\"[window-manager] onRemoveScenes ROOT_DIR\");\n await this.onRootDirRemoved();\n this.dispatchInternalEvent(Events.RootDirRemoved);\n return;\n }\n if (isRootDirPage(scenePath)) {\n let nextIndex = this.mainView.focusSceneIndex || 0;\n let sceneName = this.callbacksNode?.scenes[nextIndex];\n if (!sceneName) {\n nextIndex = 0;\n sceneName = this.callbacksNode?.scenes[nextIndex];\n }\n if (sceneName) {\n console.log(\n `[window-manager] onRemoveScenes setMainViewScenePath ${ROOT_DIR}${sceneName}`\n );\n this.setMainViewScenePath(`${ROOT_DIR}${sceneName}`);\n }\n await this.setMainViewSceneIndex(nextIndex);\n } else {\n this.appProxies.forEach(app => {\n app.onRemoveScene(scenePath);\n });\n }\n };\n\n /**\n * 根目录被删除时所有的 scene 都会被删除.\n * 所以需要关掉所有开启了 view 的 app\n */\n public async onRootDirRemoved(needClose = true) {\n this.setMainViewScenePath(INIT_DIR);\n this.createRootDirScenesCallback();\n\n for (const [id, appProxy] of this.appProxies.entries()) {\n if (appProxy.view) {\n await this.closeApp(id, needClose);\n }\n }\n // 删除了根目录的 scenes 之后 mainview 需要重新绑定, 否则主白板会不能渲染\n this.mainViewProxy.rebind();\n internalEmitter.emit(\"rootDirRemoved\");\n this.updateRootDirRemoving(false);\n }\n\n private onReadonlyChanged = () => {\n this.appProxies.forEach(appProxy => {\n appProxy.emitAppIsWritableChange();\n });\n };\n\n private onPlayerSeekStart = async () => {\n await this.closeAll();\n };\n\n private onPlayerSeekDone = async (time: number) => {\n await this._attributesUpdateCallback(this.attributes.apps);\n this.appProxies.forEach(appProxy => {\n appProxy.onSeek(time);\n });\n };\n\n public createRootDirScenesCallback = () => {\n let isRecreate = false;\n if (this.callbacksNode) {\n this.callbacksNode.dispose();\n isRecreate = true;\n }\n this.callbacksNode = this.displayer.createScenesCallback(ROOT_DIR, {\n onAddScene: this.onSceneChange,\n onRemoveScene: async (node, name) => {\n await this.onSceneChange(node);\n internalEmitter.emit(\"rootDirSceneRemoved\", name);\n },\n });\n if (this.callbacksNode) {\n this.updateSceneState(this.callbacksNode);\n this.mainViewScenesLength = this.callbacksNode.scenes.length;\n if (isRecreate) {\n this.emitMainViewScenesChange(this.callbacksNode.scenes.length);\n }\n }\n };\n\n public removeSceneByIndex = async (index: number) => {\n const nextIndex = calculateNextIndex(index, this.windowManger.pageState);\n this.setSceneIndexWithoutSync(nextIndex);\n this.dispatchInternalEvent(Events.SetAppFocusIndex, { type: \"main\", index: nextIndex });\n const scene = this.callbacksNode?.scenes[index];\n setTimeout(() => {\n if (scene) {\n removeScenes(this.room, `${ROOT_DIR}${scene}`, index);\n }\n }, 100);\n return new Promise<boolean>((resolve, reject) => {\n internalEmitter\n .once(\"rootDirSceneRemoved\")\n .then(name => {\n if (name === scene) {\n resolve(true);\n }\n })\n .catch(e => {\n console.log(`[WindowManager]: removePage error: ${e}`);\n reject(false);\n });\n });\n };\n\n public setSceneIndexWithoutSync = (index: number) => {\n const sceneName = this.callbacksNode?.scenes[index];\n if (sceneName) {\n this.mainViewProxy.setFocusScenePath(`${ROOT_DIR}${sceneName}`);\n }\n };\n\n private onSceneChange = (node: ScenesCallbacksNode) => {\n this.mainViewScenesLength = node.scenes.length;\n this.updateSceneState(node);\n return this.emitMainViewScenesChange(this.mainViewScenesLength);\n };\n\n private emitMainViewScenesChange = (length: number) => {\n return Promise.all([\n callbacks.emit(\"mainViewScenesLengthChange\", length),\n internalEmitter.emit(\"changePageState\"),\n ]);\n };\n\n private updateSceneState = (node: ScenesCallbacksNode) => {\n const currentIndex = this.store.getMainViewSceneIndex() || 0;\n let sceneName = node.scenes[currentIndex];\n if (!sceneName) {\n sceneName = node.scenes[this.mainView.focusSceneIndex || 0];\n }\n this.sceneState = {\n scenePath: `${ROOT_DIR}${sceneName}`,\n contextPath: node.path,\n index: currentIndex,\n scenes: node.scenes.map(scene => {\n return {\n name: scene,\n };\n }),\n sceneName: sceneName,\n };\n callbacks.emit(\"sceneStateChange\", this.sceneState);\n };\n\n private get eventName() {\n return isRoom(this.displayer) ? \"onRoomStateChanged\" : \"onPlayerStateChanged\";\n }\n\n public get attributes() {\n return this.windowManger.attributes;\n }\n\n public get canOperate() {\n return this.windowManger.canOperate;\n }\n\n public get room() {\n return isRoom(this.displayer) ? (this.displayer as Room) : undefined;\n }\n\n public get mainView() {\n return this.mainViewProxy.view;\n }\n\n public get polling() {\n return this.mainViewProxy.polling;\n }\n\n public set polling(b: boolean) {\n this.mainViewProxy.polling = b;\n }\n\n public get focusApp() {\n if (this.store.focus) {\n return this.appProxies.get(this.store.focus);\n }\n }\n\n public get uid() {\n return this.room?.uid || \"\";\n }\n\n public get Logger() {\n return this.windowManger.Logger;\n }\n\n public getMainViewSceneDir() {\n const scenePath = this.store.getMainViewScenePath();\n if (scenePath) {\n return parseSceneDir(scenePath);\n } else {\n throw new Error(\"[WindowManager]: mainViewSceneDir not found\");\n }\n }\n\n private async onCreated() {\n if (Object.keys(this.attributes.apps).length && this.store.focus) {\n this._focusAppId = this.store.focus;\n await new Promise<AppProxy | undefined>(resolve => {\n this._focusAppCreatedResolve = resolve;\n this._resolveTimer = setTimeout(() => {\n resolve(this.appProxies.get(this._focusAppId || \"\"));\n }, 500);\n }).then(() => {\n this._resolveTimer = undefined;\n this._focusAppCreatedResolve = undefined;\n this.focusByAttributes(this.attributes.apps);\n });\n }\n await this._attributesUpdateCallback(this.attributes.apps);\n internalEmitter.emit(\"updateManagerRect\");\n boxEmitter.on(\"move\", this.onBoxMove);\n boxEmitter.on(\"resize\", this.onBoxResize);\n boxEmitter.on(\"focus\", this.onBoxFocus);\n boxEmitter.on(\"close\", this.onBoxClose);\n boxEmitter.on(\"boxStateChange\", this.onBoxStateChange);\n boxEmitter.on(\"blurred\", this.onBoxBlurred);\n\n this.addAppsChangeListener();\n this.addAppCloseListener();\n this.addBoxesStatusChangeListener();\n this.refresher.add(\"maximized\", () => {\n return autorun(() => {\n const maximized = this.attributes.maximized;\n this.boxManager?.setMaximized(Boolean(maximized));\n });\n });\n this.refresher.add(\"minimized\", () => {\n return autorun(() => {\n const minimized = this.attributes.minimized;\n this.onMinimized(minimized);\n });\n });\n this.refresher.add(\"mainViewIndex\", () => {\n return autorun(() => {\n const mainSceneIndex = get(this.attributes, \"_mainSceneIndex\");\n this.onMainViewIndexChange(mainSceneIndex);\n });\n });\n this.refresher.add(\"focusedChange\", () => {\n return autorun(() => {\n const focused = get(this.attributes, \"focus\");\n this.onFocusChange(focused);\n });\n });\n this.refresher.add(\"registeredChange\", () => {\n return autorun(() => {\n const registered = get(this.attributes, Fields.Registered);\n this.onRegisteredChange(registered);\n });\n });\n if (!this.attributes.apps || Object.keys(this.attributes.apps).length === 0) {\n const mainScenePath = this.store.getMainViewScenePath();\n if (!mainScenePath) return;\n this.resetScenePath(mainScenePath);\n }\n this.displayerWritableListener(!this.room?.isWritable);\n this.displayer.callbacks.on(\"onEnableWriteNowChanged\", this.displayerWritableListener);\n this.focusByAttributes(this.attributes.apps);\n this._prevFocused = this.attributes.focus;\n\n if (!WindowManager.supportAppliancePlugin) {\n this.sideEffectManager.add(() => {\n const redoUndo = new RedoUndo({\n mainView: () => this.mainViewProxy.view,\n focus: () => this.attributes.focus,\n getAppProxy: id => this.appProxies.get(id),\n });\n return () => redoUndo.destroy();\n });\n }\n }\n\n private onBoxMove = (payload: BoxMovePayload) => {\n this.dispatchInternalEvent(Events.AppMove, payload);\n this.store.updateAppState(payload.appId, AppAttributes.Position, {\n x: payload.x,\n y: payload.y,\n });\n callbacks.emit(\"onBoxMove\", payload);\n };\n\n private onBoxResize = (payload: BoxResizePayload) => {\n if (payload.width && payload.height) {\n this.dispatchInternalEvent(Events.AppResize, payload);\n this.store.updateAppState(payload.appId, AppAttributes.Size, {\n width: payload.width,\n height: payload.height,\n });\n callbacks.emit(\"onBoxResize\", payload);\n }\n };\n\n private onBoxFocus = (payload: BoxFocusPayload) => {\n this.windowManger.safeSetAttributes({ focus: payload.appId });\n callbacks.emit(\"onBoxFocus\", payload);\n };\n\n private onBoxBlurred = (payload: BoxBlurredPayload) => {\n const focus = this.attributes.focus;\n if (focus === payload.appId) {\n this.windowManger.safeSetAttributes({ focus: undefined });\n callbacks.emit(\"onBoxBlurred\", payload);\n }\n };\n\n private onBoxClose = (payload: BoxClosePayload) => {\n const appProxy = this.appProxies.get(payload.appId);\n if (appProxy) {\n appProxy.destroy(false, true, true, payload.error);\n }\n callbacks.emit(\"onBoxClose\", payload);\n };\n\n private onBoxStateChange = (payload: BoxStateChangePayload) => {\n this.dispatchInternalEvent(Events.AppBoxStateChange, payload);\n callbacks.emit(\"onBoxStateChange\", payload);\n };\n\n private notifyBoxesStatusChange = debounce(() => {\n this.boxManager?.setBoxesStatus(this.attributes.boxesStatus);\n const entries = Object.entries(this.attributes.boxesStatus);\n if (entries.length > 0) {\n entries.forEach(([appId, status]) => {\n const appProxy = this.appProxies.get(appId);\n if (appProxy) {\n appProxy.notifyBoxStatusChange(status as TeleBoxState);\n }\n });\n }\n }, 100);\n\n public addBoxesStatusChangeListener = () => {\n this.refresher.add(\"boxesStatus\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.boxesStatus,\n () => {\n this.notifyBoxesStatusChange();\n }\n );\n });\n this.refresher.add(\"lastNotMinimizedBoxesStatus\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.lastNotMinimizedBoxesStatus,\n () => {\n this.boxManager?.setLastNotMinimizedBoxesStatus(\n this.attributes.lastNotMinimizedBoxesStatus\n );\n }\n );\n });\n };\n public addAppsChangeListener = () => {\n this.refresher.add(\"apps\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.apps,\n () => {\n this.attributesUpdateCallback(this.attributes.apps);\n }\n );\n });\n };\n\n public addAppCloseListener = () => {\n // this.refresher.add(\"appsClose\", () => {\n // return onObjectRemoved(this.attributes.apps, () => {\n // this.onAppDelete(this.attributes.apps);\n // });\n // });\n this.refresher.add(\"appsClose\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.apps,\n events => {\n if (events.some(e => e.kind === UpdateEventKind.Removed)) {\n this.onAppDelete(this.attributes.apps);\n }\n }\n );\n });\n };\n\n private onMainViewIndexChange = (index: number) => {\n if (index !== undefined && this._prevSceneIndex !== index) {\n callbacks.emit(\"mainViewSceneIndexChange\", index);\n internalEmitter.emit(\"changePageState\");\n if (this.callbacksNode) {\n this.updateSceneState(this.callbacksNode);\n }\n this._prevSceneIndex = index;\n }\n };\n\n private onFocusChange = (focused: string | undefined) => {\n if (this._prevFocused !== focused) {\n callbacks.emit(\"focusedChange\", focused);\n internalEmitter.emit(\"focusedChange\", { focused, prev: this._prevFocused });\n this._prevFocused = focused;\n if (focused !== undefined) {\n this.boxManager?.focusBox({ appId: focused });\n // 确保 focus 修改的时候, appProxy 已经创建\n setTimeout(() => {\n const appProxy = this.appProxies.get(focused);\n if (appProxy) {\n appRegister.notifyApp(appProxy.kind, \"focus\", { appId: focused });\n }\n }, 0);\n }\n }\n };\n\n public attributesUpdateCallback = debounce(\n (apps: any) => this._attributesUpdateCallback(apps),\n 100\n );\n\n private _appIds: string[] = [];\n public notifyAppsChange(appIds: string[]): void {\n if (\n this._appIds.length !== appIds.length ||\n !this._appIds.every(id => appIds.includes(id))\n ) {\n this._appIds = appIds;\n callbacks.emit(\"appsChange\", appIds);\n }\n }\n\n /**\n * 插件更新 attributes 时的回调\n *\n * @param {*} attributes\n * @memberof WindowManager\n */\n public async _attributesUpdateCallback(apps: any) {\n if (apps && WindowManager.container) {\n const appIds = Object.keys(apps);\n if (appIds.length === 0) {\n this.appCreateQueue.emitReady();\n }\n const appsWithCreatedAt = orderBy(\n appIds.map(appId => {\n return {\n id: appId,\n createdAt: apps[appId].createdAt,\n };\n }),\n \"createdAt\",\n \"asc\"\n );\n const orderedAppIds = appsWithCreatedAt.map(({ id }) => id);\n this.notifyAppsChange(orderedAppIds);\n for (const id of orderedAppIds) {\n if (!this.appProxies.has(id) && !this.appStatus.has(id)) {\n const app = apps[id];\n try {\n const appAttributes = this.attributes[id];\n if (!appAttributes) {\n this.Logger &&\n this.Logger.error(\n `[WindowManager]: appAttributes is undefined, appId: ${id}`\n );\n throw new Error(\"appAttributes is undefined\");\n }\n\n this.appCreateQueue.push<AppProxy>(async () => {\n this.appStatus.set(id, AppStatus.StartCreate);\n const appProxy = await this.baseInsertApp(\n {\n kind: app.kind,\n options: app.options,\n isDynamicPPT: app.isDynamicPPT,\n forceNormal: app.forceNormal,\n forceTop: app.forceTop,\n isDragContent: app.isDragContent,\n },\n id,\n false\n );\n if (\n appProxy &&\n this._focusAppId === id &&\n this._focusAppCreatedResolve\n ) {\n if (this._resolveTimer) {\n clearTimeout(this._resolveTimer);\n }\n this._focusAppCreatedResolve(appProxy);\n }\n return appProxy;\n });\n this.focusByAttributes(apps);\n } catch (error) {\n console.warn(`[WindowManager]: Insert App Error`, error);\n }\n }\n }\n }\n }\n\n private onRegisteredChange = (registered: Record<string, SyncRegisterAppPayload>) => {\n if (!registered) return;\n Object.entries(registered).forEach(([kind, payload]) => {\n if (!appRegister.appClasses.has(kind)) {\n appRegister.register({\n kind,\n src: payload.src,\n name: payload.name,\n });\n }\n });\n };\n\n private onMinimized = (minimized: boolean | undefined) => {\n if (this.boxManager?.minimized !== minimized) {\n if (minimized === true) {\n this.boxManager?.blurAllBox();\n }\n setTimeout(() => {\n this.boxManager?.setMinimized(Boolean(minimized));\n }, 0);\n }\n };\n\n public refresh() {\n this.attributesUpdateCallback(this.attributes.apps);\n }\n\n public setBoxManager(boxManager: BoxManager) {\n this.boxManager = boxManager;\n }\n\n public resetMaximized() {\n this.boxManager?.setMaximized(Boolean(this.store.getMaximized()));\n }\n\n public resetMinimized() {\n this.boxManager?.setMinimized(Boolean(this.store.getMinimized()));\n }\n\n private onAppDelete = async (apps: any) => {\n const ids = Object.keys(apps);\n for (const [id, appProxy] of this.appProxies.entries()) {\n if (!ids.includes(id)) {\n await appProxy.destroy(true, false, true);\n }\n }\n };\n\n private closeAll = async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const [_, appProxy] of this.appProxies.entries()) {\n await appProxy.destroy(true, false, true);\n }\n };\n\n public bindMainView(divElement: HTMLDivElement, disableCameraTransform: boolean) {\n const mainView = this.mainViewProxy.view;\n mainView.disableCameraTransform = disableCameraTransform;\n mainView.divElement = divElement;\n if (!mainView.focusScenePath) {\n this.setMainViewFocusPath();\n }\n internalEmitter.emit(\"mainViewMounted\");\n callbacks.emit(\"onMainViewMounted\", mainView);\n const hasRoot = this.hasRoot(mainView.divElement);\n const rect = this.getRectByDivElement(mainView.divElement);\n let log = `[window-manager] bindMainView hasRoot:${hasRoot}, rect:${JSON.stringify(\n rect\n )}, outerHeight:${window.outerHeight}, outerWidth:${window.outerWidth}`;\n const visualViewport = window.visualViewport;\n if (visualViewport) {\n log += `, visualViewportWidth:${visualViewport.width}, visualViewportHeight:${visualViewport.height}, visualViewportOffsetLeft:${visualViewport.offsetLeft}, visualViewportOffsetTop:${visualViewport.offsetTop}`;\n }\n console.log(log);\n }\n\n private hasRoot(divElement: HTMLDivElement) {\n let current = divElement;\n while (current) {\n if (current.parentElement === document.body) {\n return true;\n }\n current = current.parentElement as HTMLDivElement;\n }\n return false;\n }\n\n private getRectByDivElement(divElement: HTMLDivElement) {\n // 获取当前divElement的矩形区域\n const rect = divElement.getBoundingClientRect();\n return rect;\n }\n\n public setMainViewFocusPath(scenePath?: string) {\n const focusScenePath = scenePath || this.store.getMainViewScenePath();\n if (focusScenePath) {\n setViewFocusScenePath(this.mainView, focusScenePath);\n return this.mainView?.focusScenePath === focusScenePath;\n }\n }\n\n private resetScenePath(scenePath: string) {\n const sceneState = this.displayer.state.sceneState;\n if (sceneState.scenePath !== scenePath) {\n setScenePath(this.room, scenePath);\n }\n }\n\n public async addApp(params: AddAppParams, isDynamicPPT: boolean): Promise<string | undefined> {\n log(\"addApp\", params);\n this.windowManger.Logger?.info(\n `[WindowManager]: addApp ${params.kind}, isDynamicPPT: ${isDynamicPPT}`\n );\n const { appId, needFocus } = await this.beforeAddApp(params, isDynamicPPT);\n const appProxy = await this.baseInsertApp(params, appId, true, needFocus);\n this.afterAddApp(appProxy);\n return appProxy?.id;\n }\n\n private async beforeAddApp(params: AddAppParams, isDynamicPPT: boolean) {\n const appId = await genAppId(params.kind);\n this.appStatus.set(appId, AppStatus.StartCreate);\n const attrs = params.attributes ?? {};\n this.safeUpdateAttributes([appId], attrs);\n this.store.setupAppAttributes(params, appId, isDynamicPPT);\n const needFocus = !this.boxManager?.minimized;\n if (needFocus) {\n this.store.setAppFocus(appId, true);\n }\n return { appId, needFocus };\n }\n\n private afterAddApp(appProxy: AppProxy | undefined) {\n if (appProxy && appProxy.box) {\n const box = appProxy.box;\n boxEmitter.emit(\"move\", {\n appId: appProxy.id,\n x: box?.intrinsicX,\n y: box?.intrinsicY,\n });\n this.store.updateAppState(appProxy.id, AppAttributes.ZIndex, box.zIndex);\n }\n if (this.boxManager?.minimized) {\n this.boxManager?.setMinimized(false, false);\n }\n }\n\n public async closeApp(appId: string, needClose = true) {\n const appProxy = this.appProxies.get(appId);\n if (appProxy) {\n await appProxy.destroy(true, needClose, false);\n }\n }\n\n private async baseInsertApp(\n params: BaseInsertParams,\n appId: string,\n isAddApp: boolean,\n focus?: boolean\n ) {\n if (this.appProxies.has(appId)) {\n this.windowManger.Logger?.warn(\n `[WindowManager]: app duplicate exists and cannot be created again, appId: ${appId}`\n );\n return;\n }\n const AppProxyClass = getExtendClass(AppProxy, WindowManager.extendClass);\n const appProxy = new AppProxyClass(params, this, appId, isAddApp);\n if (appProxy) {\n await appProxy.baseInsertApp(focus);\n this.appStatus.delete(appId);\n return appProxy;\n } else {\n this.appStatus.delete(appId);\n this.Logger &&\n this.Logger.error(`[WindowManager]: initialize AppProxy failed, appId: ${appId}`);\n throw new Error(\"[WindowManger]: initialize AppProxy failed\");\n }\n }\n\n private displayerStateListener = (state: Partial<RoomState>) => {\n this.appProxies.forEach(appProxy => {\n appProxy.appEmitter.emit(\"roomStateChange\", state);\n });\n internalEmitter.emit(\"observerIdChange\", this.displayer.observerId);\n };\n\n public displayerWritableListener = (isReadonly: boolean) => {\n const isWritable = !isReadonly;\n const isManualWritable =\n this.windowManger.readonly === undefined || this.windowManger.readonly === false;\n if (this.windowManger.readonly === undefined) {\n this.boxManager?.setReadonly(isReadonly);\n } else {\n this.boxManager?.setReadonly(!(isWritable && isManualWritable));\n }\n this.appProxies.forEach(appProxy => {\n appProxy.emitAppIsWritableChange();\n });\n internalEmitter.emit(\"writableChange\", isWritable);\n };\n\n public safeSetAttributes(attributes: any) {\n this.windowManger.safeSetAttributes(attributes);\n }\n\n public safeUpdateAttributes(keys: string[], value: any) {\n this.windowManger.safeUpdateAttributes(keys, value);\n }\n\n public async setMainViewScenePath(scenePath: string) {\n if (this.room) {\n const scenePathType = this.displayer.scenePathType(scenePath);\n const sceneDir = parseSceneDir(scenePath);\n if (sceneDir !== ROOT_DIR) {\n this.Logger &&\n this.Logger.error(`[WindowManager]: main view scenePath must in root dir \"/\"`);\n throw new Error(`[WindowManager]: main view scenePath must in root dir \"/\"`);\n }\n if (scenePathType === ScenePathType.None) {\n this.Logger && this.Logger.error(`[WindowManager]: ${scenePath} not valid scene`);\n throw new Error(`[WindowManager]: ${scenePath} not valid scene`);\n } else if (scenePathType === ScenePathType.Page) {\n await this._setMainViewScenePath(scenePath);\n } else if (scenePathType === ScenePathType.Dir) {\n const validScenePath = makeValidScenePath(this.displayer, scenePath);\n if (validScenePath) {\n await this._setMainViewScenePath(validScenePath);\n }\n }\n }\n }\n\n private async _setMainViewScenePath(scenePath: string) {\n const success = this.setMainViewFocusPath(scenePath);\n if (success) {\n this.safeSetAttributes({ _mainScenePath: scenePath });\n this.store.setMainViewFocusPath(this.mainView);\n this.updateSceneIndex();\n this.dispatchSetMainViewScenePath(scenePath);\n }\n }\n\n private updateSceneIndex = () => {\n const scenePath = this.store.getMainViewScenePath() as string;\n const sceneDir = parseSceneDir(scenePath);\n const scenes = entireScenes(this.displayer)[sceneDir];\n if (scenes.length) {\n // \"/ppt3/1\" -> \"1\"\n const pageName = scenePath.replace(sceneDir, \"\").replace(\"/\", \"\");\n const index = scenes.findIndex(scene => scene.name === pageName);\n if (isInteger(index) && index >= 0) {\n this.safeSetAttributes({ _mainSceneIndex: index });\n }\n }\n };\n\n public async setMainViewSceneIndex(index: number) {\n if (this.room) {\n if (this.store.getMainViewSceneIndex() === index) return;\n const sceneName = this.callbacksNode?.scenes[index];\n const scenePath = `${ROOT_DIR}${sceneName}`;\n if (sceneName) {\n const success = this.setMainViewFocusPath(scenePath);\n if (success) {\n this.store.setMainViewScenePath(scenePath);\n this.store.setMainViewSceneIndex(index);\n this.dispatchSetMainViewScenePath(scenePath);\n }\n } else {\n this.Logger && this.Logger.error(`[WindowManager]: ${index} not valid index`);\n throw new Error(`[WindowManager]: ${index} not valid index`);\n }\n }\n }\n\n private dispatchSetMainViewScenePath(scenePath: string): void {\n this.dispatchInternalEvent(Events.SetMainViewScenePath, { nextScenePath: scenePath });\n callbacks.emit(\"mainViewScenePathChange\", scenePath);\n // 兼容 15 的 SDK, 需要 room 的当前 ScenePath\n setScenePath(this.room, scenePath);\n }\n\n public getAppInitPath(appId: string): string | undefined {\n const attrs = this.store.getAppAttributes(appId);\n if (attrs) {\n return attrs?.options?.scenePath;\n }\n }\n\n public safeDispatchMagixEvent(event: string, payload: any) {\n if (this.canOperate) {\n (this.displayer as Room).dispatchMagixEvent(event, payload);\n }\n }\n\n public focusByAttributes(apps: any) {\n if (apps && Object.keys(apps).length === this.boxManager?.boxSize) {\n const focusAppId = this.store.focus;\n if (focusAppId) {\n this.boxManager.focusBox({ appId: focusAppId });\n }\n }\n }\n\n public async onReconnected() {\n await this._attributesUpdateCallback(this.attributes.apps);\n const appProxies = Array.from(this.appProxies.values());\n const reconnected = appProxies.map(appProxy => {\n return appProxy.onReconnected();\n });\n this.mainViewProxy.onReconnect();\n await Promise.all(reconnected);\n if (this.callbacksNode) {\n this.onSceneChange(this.callbacksNode);\n }\n }\n\n public notifyContainerRectUpdate(rect: TeleBoxRect) {\n this.appProxies.forEach(appProxy => {\n appProxy.appEmitter.emit(\"containerRectUpdate\", rect);\n });\n }\n\n public updateRootDirRemoving = (removing: boolean) => {\n this.rootDirRemoving = removing;\n };\n\n public dispatchInternalEvent(event: Events, payload?: any) {\n this.safeDispatchMagixEvent(MagixEventName, {\n eventName: event,\n payload: payload,\n });\n }\n\n public destroy() {\n this.displayer.callbacks.off(this.eventName, this.displayerStateListener);\n this.displayer.callbacks.off(\"onEnableWriteNowChanged\", this.displayerWritableListener);\n this.appListeners.removeListeners();\n boxEmitter.clearListeners();\n internalEmitter.clearListeners();\n if (this.appProxies.size) {\n this.appProxies.forEach(appProxy => {\n appProxy.destroy(true, false, true);\n });\n }\n callbacks.clearListeners();\n this.sideEffectManager.flushAll();\n this._prevFocused = undefined;\n this._prevSceneIndex = undefined;\n if (this._resolveTimer) {\n clearTimeout(this._resolveTimer);\n }\n this._focusAppCreatedResolve = undefined;\n this._resolveTimer = undefined;\n }\n}\n","import { ResizeObserver as ResizeObserverPolyfill } from \"@juggle/resize-observer\";\nimport { WindowManager } from \"./index\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport type { UnsubscribeFn } from \"emittery\";\nimport { LocalConsole } from \"./Utils/log\";\n\nconst ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n\nexport class ContainerResizeObserver {\n private containerResizeObserver?: ResizeObserver;\n private disposer?: UnsubscribeFn;\n\n private updateSizerLocalConsole = new LocalConsole(\"updateSizer\", 100);\n\n constructor(private emitter: EmitterType) {}\n\n public static create(\n container: HTMLElement,\n sizer: HTMLElement,\n wrapper: HTMLDivElement,\n emitter: EmitterType\n ) {\n const containerResizeObserver = new ContainerResizeObserver(emitter);\n containerResizeObserver.observePlaygroundSize(container, sizer, wrapper);\n return containerResizeObserver;\n }\n\n public observePlaygroundSize(\n container: HTMLElement,\n sizer: HTMLElement,\n wrapper: HTMLDivElement\n ) {\n this.updateSizer(\n container.getBoundingClientRect(),\n sizer,\n wrapper,\n \"observePlaygroundSize\"\n );\n\n this.containerResizeObserver = new ResizeObserver(entries => {\n const containerRect = entries[0]?.contentRect;\n if (containerRect) {\n this.updateSizer(containerRect, sizer, wrapper, \"containerResizeObserver\");\n this.emitter.emit(\"playgroundSizeChange\", containerRect);\n }\n });\n\n this.disposer = this.emitter.on(\"containerSizeRatioUpdate\", () => {\n const containerRect = container.getBoundingClientRect();\n this.updateSizer(containerRect, sizer, wrapper, \"containerSizeRatioUpdate\");\n this.emitter.emit(\"playgroundSizeChange\", containerRect);\n });\n\n this.containerResizeObserver.observe(container);\n }\n\n public updateSizer(\n { width, height }: DOMRectReadOnly,\n sizer: HTMLElement,\n wrapper: HTMLDivElement,\n origin?: string\n ) {\n if (width && height) {\n if (height / width > WindowManager.containerSizeRatio) {\n height = width * WindowManager.containerSizeRatio;\n sizer.classList.toggle(\"netless-window-manager-sizer-horizontal\", true);\n } else {\n width = height / WindowManager.containerSizeRatio;\n sizer.classList.toggle(\"netless-window-manager-sizer-horizontal\", false);\n }\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n const wrapperRect = wrapper.getBoundingClientRect();\n this.updateSizerLocalConsole.log(\n `from ${origin}, traget size: ${JSON.stringify({ width, height })}, wrapperRect: ${\n wrapperRect.width\n } ${wrapperRect.height}`\n );\n this.emitter.emit(\"wrapperRectChange\", {\n width: wrapperRect.width,\n height: wrapperRect.height,\n origin,\n });\n }\n }\n\n public disconnect() {\n this.updateSizerLocalConsole.destroy();\n this.containerResizeObserver?.disconnect();\n this.disposer?.();\n this.disposer = undefined;\n }\n}\n","import type { AppManager } from \"./AppManager\";\nimport type { PageState } from \"./Page\";\n\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { callbacks } from \"./callback\";\n\nexport class PageStateImpl {\n constructor(private manager: AppManager) {\n internalEmitter.on(\"changePageState\", () => {\n callbacks.emit(\"pageStateChange\", this.toObject());\n });\n }\n\n public get index(): number {\n return this.manager.store.getMainViewSceneIndex() || 0;\n }\n\n public get length(): number {\n return this.manager.mainViewScenesLength || 0;\n }\n\n public toObject(): PageState {\n const index = this.index >= this.length ? this.length - 1 : this.index;\n return {\n index,\n length: this.length,\n };\n }\n}\n","import { debounce, isFunction } from \"lodash\";\nimport { log } from \"./Utils/log\";\nimport { RoomPhase } from \"white-web-sdk\";\nimport type { Room } from \"white-web-sdk\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { EnsureReconnectEvent } from \"./constants\";\nimport { wait } from \"./Utils/Common\";\n\nexport type ReconnectRefresherContext = {\n emitter: EmitterType;\n};\n\n// 白板重连之后会刷新所有的对象,导致 listener 失效, 所以这里在重连之后重新对所有对象进行监听\nexport class ReconnectRefresher {\n private phase?: RoomPhase;\n private room: Room | undefined;\n private reactors: Map<string, any> = new Map();\n private disposers: Map<string, any> = new Map();\n\n constructor(private ctx: ReconnectRefresherContext) {}\n\n public setRoom(room: Room | undefined) {\n this.room = room;\n this.phase = room?.phase;\n if (room) {\n room.callbacks.off(\"onPhaseChanged\", this.onPhaseChanged);\n room.callbacks.on(\"onPhaseChanged\", this.onPhaseChanged);\n // 重连成功之后向服务发送一次消息, 确认当前的状态是最新的\n room.addMagixEventListener(\n EnsureReconnectEvent,\n payload => {\n if (payload.authorId === room.observerId) {\n this.onReconnected();\n }\n },\n { fireSelfEventAfterCommit: true }\n );\n }\n }\n\n public setContext(ctx: ReconnectRefresherContext) {\n this.ctx = ctx;\n }\n\n private onPhaseChanged = async (phase: RoomPhase) => {\n if (phase === RoomPhase.Reconnecting) {\n this.ctx.emitter.emit(\"startReconnect\");\n }\n if (phase === RoomPhase.Connected && this.phase === RoomPhase.Reconnecting) {\n if (this.room?.isWritable) {\n this.room?.dispatchMagixEvent(EnsureReconnectEvent, {});\n } else {\n await wait(500);\n this.onReconnected();\n }\n }\n this.phase = phase;\n };\n\n private onReconnected = debounce(() => {\n this._onReconnected();\n }, 1000);\n\n private _onReconnected = () => {\n log(\"onReconnected refresh reactors\");\n this.releaseDisposers();\n this.reactors.forEach((func, id) => {\n if (isFunction(func)) {\n this.disposers.set(id, func());\n }\n });\n this.ctx.emitter.emit(\"onReconnected\");\n };\n\n private releaseDisposers() {\n this.disposers.forEach(disposer => {\n if (isFunction(disposer)) {\n disposer();\n }\n });\n this.disposers.clear();\n }\n\n public refresh() {\n this._onReconnected();\n }\n\n public add(id: string, func: any) {\n const disposer = this.disposers.get(id);\n if (disposer && isFunction(disposer)) {\n disposer();\n }\n if (isFunction(func)) {\n this.reactors.set(id, func);\n this.disposers.set(id, func());\n }\n }\n\n public remove(id: string) {\n if (this.reactors.has(id)) {\n this.reactors.delete(id);\n }\n const disposer = this.disposers.get(id);\n if (disposer) {\n if (isFunction(disposer)) {\n disposer();\n }\n this.disposers.delete(id);\n }\n }\n\n public hasReactor(id: string) {\n return this.reactors.has(id);\n }\n\n public destroy() {\n this.room?.callbacks.off(\"onPhaseChanged\", this.onPhaseChanged);\n this.room?.removeMagixEventListener(EnsureReconnectEvent, this.onReconnected);\n this.releaseDisposers();\n }\n}\n","import { internalEmitter } from \"../InternalEmitter\";\nimport { isPlayer } from \"white-web-sdk\";\nimport type { WindowManager } from \"../index\";\nimport type { Camera, Room, Player, PlayerSeekingResult } from \"white-web-sdk\";\nimport { ROOT_DIR } from \"../constants\";\n\n// 修改多窗口状态下一些失效的方法实现到 manager 的 mainview 上, 降低迁移成本\nexport const replaceRoomFunction = (room: Room | Player, manager: WindowManager) => {\n if (isPlayer(room)) {\n const player = room as unknown as Player;\n delegateSeekToProgressTime(player);\n } else {\n room = room as unknown as Room;\n const descriptor = Object.getOwnPropertyDescriptor(room, \"disableCameraTransform\");\n if (descriptor) return;\n Object.defineProperty(room, \"disableCameraTransform\", {\n get() {\n return manager.mainView.disableCameraTransform;\n },\n set(disable: boolean) {\n manager.mainView.disableCameraTransform = disable;\n },\n });\n\n Object.defineProperty(room, \"canUndoSteps\", {\n get() {\n return manager.canUndoSteps;\n },\n });\n\n Object.defineProperty(room, \"canRedoSteps\", {\n get() {\n return manager.canRedoSteps;\n },\n });\n const _scalePptToFit = room.scalePptToFit;\n room.scalePptToFit = (...args) => {\n _scalePptToFit.call(room, ...args);\n if (manager.appManager?.mainViewProxy) {\n manager.appManager.mainViewProxy.setCameraAndSize();\n }\n };\n const _putScenes = room.putScenes;\n room.putScenes = (...args) => {\n const [path, scenes] = args;\n const currentScenePath = manager.mainView.focusScenePath;\n if (currentScenePath && path && scenes) {\n console.log(\"[window-manager] putScenes \" + JSON.stringify(args));\n for (const scene of scenes) {\n if (`${path}${scene.name}` === currentScenePath) {\n console.error(\n `[window-manager] putScenes: scene name can not be the same as the current scene path: ${currentScenePath}`\n );\n return;\n }\n }\n }\n return _putScenes.call(room, ...args);\n };\n room.moveCamera = (camera: Camera) => manager.moveCamera(camera);\n room.moveCameraToContain = (...args) => manager.moveCameraToContain(...args);\n room.convertToPointInWorld = (...args) => manager.mainView.convertToPointInWorld(...args);\n room.setCameraBound = (...args) => manager.mainView.setCameraBound(...args);\n room.scenePreview = (...args) => manager.mainView.scenePreview(...args);\n room.fillSceneSnapshot = (...args) => manager.mainView.fillSceneSnapshot(...args);\n room.generateScreenshot = (...args) => manager.mainView.generateScreenshot(...args);\n room.setMemberState = (...args) => manager.mainView.setMemberState(...args);\n room.redo = () => manager.redo();\n room.undo = () => manager.undo();\n room.cleanCurrentScene = () => manager.cleanCurrentScene();\n room.delete = () => manager.delete();\n room.copy = () => manager.copy();\n room.paste = () => manager.paste();\n room.duplicate = () => manager.duplicate();\n room.insertImage = (...args) => manager.insertImage(...args);\n room.completeImageUpload = (...args) => manager.completeImageUpload(...args);\n room.insertText = (...args) => manager.insertText(...args);\n room.lockImage = (...args) => manager.lockImage(...args);\n room.lockImages = (...args) => manager.lockImages(...args);\n\n delegateRemoveScenes(room, manager);\n }\n};\n\nconst delegateRemoveScenes = (room: Room, manager: WindowManager) => {\n const originRemoveScenes = room.removeScenes;\n room.removeScenes = (scenePath: string, index?: number) => {\n if (scenePath === ROOT_DIR) {\n manager.appManager?.updateRootDirRemoving(true);\n }\n const result = originRemoveScenes.call(room, scenePath);\n internalEmitter.emit(\"removeScenes\", { scenePath, index });\n return result;\n };\n};\n\nconst delegateSeekToProgressTime = (player: Player) => {\n const originSeek = player.seekToProgressTime;\n // eslint-disable-next-line no-inner-declarations\n async function newSeek(time: number): Promise<PlayerSeekingResult> {\n // seek 时需要先关闭所有的 app 防止内部使用的 mobx 出现错误\n await internalEmitter.emit(\"seekStart\");\n const seekResult = await originSeek.call(player, time);\n internalEmitter.emit(\"seek\", time);\n return seekResult;\n }\n player.seekToProgressTime = newSeek;\n};\n","import { WindowManager } from \"./index\";\nimport type { PresentationAppOptions } from \"@netless/app-presentation\";\n\nexport interface BuiltinAppOptions {\n Presentation?: PresentationAppOptions;\n}\n\nconst loadAppMediaPlayer = async () => {\n const mod = await import(\"@netless/app-media-player\");\n if (WindowManager.debug) {\n mod.setOptions({ verbose: true });\n }\n return (mod.default || mod) as any;\n};\n\nconst loadAppDocsViewer = async () => {\n const mod = await import(\"@netless/app-docs-viewer\");\n return (mod.default || mod) as any;\n};\n\nconst loadAppPresentation = async () => {\n const mod = await import(\"@netless/app-presentation\");\n const app = mod.default || mod;\n return ((app as any).default || (app as any).NetlessAppPresentation || app) as any;\n};\n\nexport const setupBuiltin = () => {\n WindowManager.register({\n kind: BuiltinApps.DocsViewer,\n src: loadAppDocsViewer,\n });\n WindowManager.register({\n kind: BuiltinApps.MediaPlayer,\n src: loadAppMediaPlayer,\n });\n WindowManager.register({\n kind: BuiltinApps.Presentation,\n src: loadAppPresentation,\n appOptions: {\n debounceSync: true,\n useScrollbar: true,\n },\n });\n};\n\nexport const BuiltinApps = {\n DocsViewer: \"DocsViewer\",\n MediaPlayer: \"MediaPlayer\",\n Presentation: \"Presentation\",\n};\n","import type { Displayer, DisplayerState, Room, RoomState } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { WindowManager } from \"../index\";\n\nimport Emittery from \"emittery\";\nimport { PlayerPhase, AnimationMode, autorun } from \"white-web-sdk\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { debounce, noop } from \"lodash\";\nimport { log } from \"../Utils/log\";\n\n// Note: typo below should not be fixed.\nexport enum IframeEvents {\n Init = \"Init\",\n AttributesUpdate = \"AttributesUpdate\",\n SetAttributes = \"SetAttributes\",\n RegisterMagixEvent = \"RegisterMagixEvent\",\n RemoveMagixEvent = \"RemoveMagixEvent\",\n RemoveAllMagixEvent = \"RemoveAllMagixEvent\",\n RoomStateChanged = \"RoomStateChanged\",\n DispatchMagixEvent = \"DispatchMagixEvent\",\n ReciveMagixEvent = \"ReciveMagixEvent\",\n NextPage = \"NextPage\",\n PrevPage = \"PrevPage\",\n SDKCreate = \"SDKCreate\",\n OnCreate = \"OnCreate\",\n SetPage = \"SetPage\",\n GetAttributes = \"GetAttributes\",\n Ready = \"Ready\",\n Destory = \"Destory\",\n StartCreate = \"StartCreate\",\n WrapperDidUpdate = \"WrapperDidUpdate\",\n DispayIframe = \"DispayIframe\",\n HideIframe = \"HideIframe\",\n GetRootRect = \"GetRootRect\",\n ReplayRootRect = \"ReplayRootRect\",\n PageTo = \"PageTo\",\n}\n\nexport enum DomEvents {\n WrapperDidMount = \"WrapperDidMount\",\n IframeLoad = \"IframeLoad\",\n}\n\nexport type IframeBridgeAttributes = {\n readonly url: string;\n readonly width: number;\n readonly height: number;\n readonly displaySceneDir: string;\n readonly lastEvent?: { name: string; payload: any };\n readonly useClicker?: boolean;\n readonly useSelector?: boolean;\n};\n\nexport type IframeBridgeEvents = {\n created: undefined;\n [IframeEvents.Ready]: undefined;\n [IframeEvents.StartCreate]: undefined;\n [IframeEvents.OnCreate]: IframeBridge;\n [IframeEvents.Destory]: undefined;\n [IframeEvents.GetRootRect]: undefined;\n [IframeEvents.ReplayRootRect]: DOMRect;\n [DomEvents.WrapperDidMount]: undefined;\n [IframeEvents.WrapperDidUpdate]: undefined;\n [DomEvents.IframeLoad]: Event;\n [IframeEvents.HideIframe]: undefined;\n [IframeEvents.DispayIframe]: undefined;\n};\n\nexport type IframeSize = {\n readonly width: number;\n readonly height: number;\n};\n\ntype BaseOption = {\n readonly url: string;\n readonly width: number;\n readonly height: number;\n readonly displaySceneDir: string;\n};\n\nexport type InsertOptions = {\n readonly useClicker?: boolean;\n readonly useSelector?: boolean;\n} & BaseOption;\n\nexport type OnCreateInsertOption = {\n readonly displayer: Displayer;\n} & BaseOption;\n\nconst RefreshIDs = {\n Ready: IframeEvents.Ready,\n RootRect: IframeEvents.ReplayRootRect,\n Message: \"message\",\n ComputeStyle: \"computeStyle\",\n Load: \"load\",\n DisplayerState: \"displayerState\",\n Show: \"show\",\n Hide: \"hide\",\n};\n\nconst times = <T>(number: number, iteratee: (value: number) => T) => {\n return new Array(number).fill(0).map((_, index) => iteratee(index));\n};\n\n/**\n * {@link https://github.com/netless-io/netless-iframe-bridge @netless/iframe-bridge}\n */\nexport class IframeBridge {\n public static readonly kind = \"IframeBridge\";\n public static readonly hiddenClass = \"netless-iframe-brdige-hidden\";\n public static emitter: Emittery<IframeBridgeEvents> = new Emittery();\n private static displayer: Displayer | null = null;\n private static alreadyCreate = false;\n\n public displayer: Displayer;\n public iframe: HTMLIFrameElement;\n\n private readonly magixEventMap = new Map<string, any>();\n private cssList: string[] = [];\n private allowAppliances: string[] = [\"clicker\"];\n private bridgeDisposer: () => void = noop;\n private rootRect: DOMRect | null = null;\n\n private sideEffectManager = new SideEffectManager();\n\n constructor(readonly manager: WindowManager, readonly appManager: AppManager) {\n this.displayer = IframeBridge.displayer = appManager.displayer;\n\n this.iframe = this._createIframe();\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.ReplayRootRect, rect => {\n this.rootRect = rect;\n }),\n RefreshIDs.RootRect\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.HideIframe, () => {\n this.iframe.className = IframeBridge.hiddenClass;\n }),\n RefreshIDs.Hide\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.DispayIframe, () => {\n this.iframe.className = \"\";\n }),\n RefreshIDs.Show\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(\"created\", () => {\n this.bridgeDisposer();\n this.bridgeDisposer = autorun(() => {\n const attributes = this.attributes;\n if (attributes.url) {\n const iframeSrc = this.iframe?.src;\n if (iframeSrc && iframeSrc !== attributes.url) {\n this.execListenIframe(attributes);\n }\n }\n if (attributes.displaySceneDir) {\n this.computedIframeDisplay(this.displayer.state, attributes);\n }\n if ((attributes.width || attributes.height) && this.iframe) {\n this.iframe.width = `${attributes.width}px`;\n this.iframe.height = `${attributes.height}px`;\n }\n this.postMessage({ kind: IframeEvents.AttributesUpdate, payload: attributes });\n });\n })\n );\n\n this.sideEffectManager.addDisposer(\n manager.emitter.on(\"cameraStateChange\", () => {\n this.computedStyle(this.displayer.state);\n })\n );\n\n IframeBridge.onCreate(this);\n }\n\n public static onCreate(plugin: IframeBridge): void {\n IframeBridge.emitter.emit(IframeEvents.StartCreate);\n IframeBridge.emitter.emit(IframeEvents.OnCreate, plugin);\n IframeBridge.emitter.emit(\"created\");\n }\n\n public insert(options: InsertOptions): this {\n const initAttributes: IframeBridgeAttributes = {\n url: options.url,\n width: options.width,\n height: options.height,\n displaySceneDir: options.displaySceneDir,\n useClicker: options.useClicker || false,\n useSelector: options.useSelector,\n };\n this.setAttributes(initAttributes);\n\n const wrapperDidMountListener = () => {\n this.getIframe();\n this.listenIframe(this.attributes);\n this.listenDisplayerState();\n IframeBridge.emitter.emit(IframeEvents.GetRootRect);\n };\n\n if (this.getIframe()) {\n wrapperDidMountListener();\n }\n // Code below will never be executed, just copying the old code...\n else {\n const didMount = this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(DomEvents.WrapperDidMount, () => {\n wrapperDidMountListener();\n this.sideEffectManager.flush(didMount);\n })\n );\n const didUpdate = this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.WrapperDidUpdate, () => {\n wrapperDidMountListener();\n this.sideEffectManager.flush(didUpdate);\n })\n );\n }\n if (this.attributes.useSelector) {\n this.allowAppliances.push(\"selector\");\n }\n\n this.computedStyle(this.displayer.state);\n this.listenDisplayerCallbacks();\n this.getComputedIframeStyle();\n this.sideEffectManager.addEventListener(\n window,\n \"message\",\n this.messageListener.bind(this),\n void 0,\n RefreshIDs.Message\n );\n\n IframeBridge.alreadyCreate = true;\n return this;\n }\n\n // 在某些安卓机型中会遇到 iframe 嵌套计算 bug,需要手动延迟触发一下重绘\n private getComputedIframeStyle(): void {\n this.sideEffectManager.setTimeout(\n () => {\n if (this.iframe) {\n getComputedStyle(this.iframe);\n }\n },\n 200,\n RefreshIDs.ComputeStyle\n );\n }\n\n public destroy() {\n this.sideEffectManager.flushAll();\n IframeBridge.emitter.emit(IframeEvents.Destory);\n IframeBridge.alreadyCreate = false;\n IframeBridge.emitter.clearListeners();\n }\n\n private getIframe(): HTMLIFrameElement {\n this.iframe || (this.iframe = this._createIframe());\n return this.iframe;\n }\n\n public setIframeSize(params: IframeSize): void {\n if (this.iframe) {\n this.iframe.width = `${params.width}px`;\n this.iframe.height = `${params.height}px`;\n this.setAttributes({ width: params.width, height: params.height });\n }\n }\n\n public get attributes(): Partial<IframeBridgeAttributes> {\n return this.appManager.store.getIframeBridge();\n }\n\n public setAttributes(data: Partial<IframeBridgeAttributes>): void {\n this.appManager.store.setIframeBridge(data);\n }\n\n private _createIframe() {\n const iframe = document.createElement(\"iframe\");\n iframe.id = \"IframeBridge\";\n iframe.className = IframeBridge.hiddenClass;\n if (this.appManager.mainView.divElement) {\n this.appManager.mainView.divElement.appendChild(iframe);\n }\n return iframe;\n }\n\n public scaleIframeToFit(animationMode: AnimationMode = AnimationMode.Immediately) {\n if (!this.inDisplaySceneDir) {\n return;\n }\n const { width = 1280, height = 720 } = this.attributes;\n const x = width ? -width / 2 : 0;\n const y = height ? -height / 2 : 0;\n\n this.manager.moveCameraToContain({\n originX: x,\n originY: y,\n width,\n height,\n animationMode,\n });\n }\n\n public get isReplay(): boolean {\n return this.manager.isReplay;\n }\n\n private handleSetPage(data: any): void {\n if (this.isReplay || !this.attributes.displaySceneDir) {\n return;\n }\n const page = data.payload;\n const room = this.displayer as Room;\n const scenes = room.entireScenes()[this.attributes.displaySceneDir];\n if (!scenes || scenes.length !== page) {\n const genScenes = times<{ name: string }>(page, (index: number) => ({\n name: String(index + 1),\n }));\n room.putScenes(this.attributes.displaySceneDir, genScenes);\n this.manager.setMainViewScenePath(this.attributes.displaySceneDir);\n }\n }\n\n private execListenIframe = debounce((options: Partial<IframeBridgeAttributes>) => {\n this.listenIframe(options);\n }, 50);\n\n private src_url_equal_anchor?: HTMLAnchorElement;\n private listenIframe(options: Partial<IframeBridgeAttributes>): void {\n const loadListener = (ev: Event) => {\n this.postMessage({\n kind: IframeEvents.Init,\n payload: {\n attributes: this.attributes,\n roomState: IframeBridge.displayer?.state,\n currentPage: this.currentPage,\n observerId: this.displayer.observerId,\n },\n });\n IframeBridge.emitter.emit(DomEvents.IframeLoad, ev);\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.Ready, () => {\n this.postMessage(this.attributes.lastEvent?.payload);\n }),\n RefreshIDs.Ready\n );\n this.computedStyleAndIframeDisplay();\n // if ((this.displayer as Room).isWritable) {\n // this.manager.moveCamera({\n // scale: this.manager.camera.scale + 1e-6,\n // animationMode: AnimationMode.Immediately,\n // })\n // }\n };\n if (options.url && this.iframe.src !== options.url) {\n if (!this.src_url_equal_anchor) this.src_url_equal_anchor = document.createElement(\"a\");\n this.src_url_equal_anchor.href = options.url;\n if (this.src_url_equal_anchor.href !== this.iframe.src) {\n this.iframe.src = options.url;\n }\n }\n this.iframe.width = `${options.width}px`;\n this.iframe.height = `${options.height}px`;\n this.sideEffectManager.addEventListener(\n this.iframe,\n \"load\",\n loadListener,\n void 0,\n RefreshIDs.Load\n );\n }\n\n private onPhaseChangedListener = (phase: PlayerPhase) => {\n if (phase === PlayerPhase.Playing) {\n this.computedStyleAndIframeDisplay();\n }\n };\n\n private listenDisplayerState(): void {\n if (this.isReplay) {\n if ((this.displayer as any)._phase === PlayerPhase.Playing) {\n this.computedStyleAndIframeDisplay();\n }\n this.sideEffectManager.add(() => {\n this.displayer.callbacks.on(\"onPhaseChanged\", this.onPhaseChangedListener);\n return () =>\n this.displayer.callbacks.off(\"onPhaseChanged\", this.onPhaseChangedListener);\n }, RefreshIDs.DisplayerState);\n }\n this.computedStyleAndIframeDisplay();\n }\n\n private computedStyleAndIframeDisplay(): void {\n this.computedStyle(this.displayer.state);\n this.computedIframeDisplay(this.displayer.state, this.attributes);\n }\n\n private listenDisplayerCallbacks(): void {\n this.displayer.callbacks.on(this.callbackName as any, this.stateChangeListener);\n }\n\n private get callbackName(): string {\n return this.isReplay ? \"onPlayerStateChanged\" : \"onRoomStateChanged\";\n }\n\n private stateChangeListener = (state: RoomState) => {\n state = { ...state };\n state.cameraState = this.manager.cameraState;\n this.postMessage({ kind: IframeEvents.RoomStateChanged, payload: state });\n if (state.cameraState) {\n IframeBridge.emitter.emit(IframeEvents.GetRootRect);\n this.computedStyle(state);\n }\n if (state.memberState) {\n this.computedZindex();\n this.updateStyle();\n }\n if (state.sceneState) {\n this.computedIframeDisplay(state, this.attributes);\n }\n };\n\n private computedStyle(_state: DisplayerState): void {\n const cameraState = this.manager.cameraState;\n const setWidth = this.attributes.width || 1280;\n const setHeight = this.attributes.height || 720;\n if (this.iframe) {\n const { width, height, scale, centerX, centerY } = cameraState;\n const rootRect = this.rootRect || { x: 0, y: 0 };\n const transformOriginX = `${width / 2 + rootRect.x}px`;\n const transformOriginY = `${height / 2 + rootRect.y}px`;\n const transformOrigin = `transform-origin: ${transformOriginX} ${transformOriginY};`;\n const iframeXDiff = ((width - setWidth) / 2) * scale;\n const iframeYDiff = ((height - setHeight) / 2) * scale;\n const x = -(centerX * scale) + iframeXDiff;\n const y = -(centerY * scale) + iframeYDiff;\n const transform = `transform: translate(${x}px,${y}px) scale(${scale}, ${scale});`;\n const position = \"position: absolute;\";\n // 在某些安卓机型, border-width 不为 0 时,才能正确计算 iframe 里嵌套 iframe 的大小\n const borderWidth = \"border: 0.1px solid rgba(0,0,0,0);\";\n const left = `left: 0px;`;\n const top = `top: 0px;`;\n const cssList = [position, borderWidth, top, left, transformOrigin, transform];\n this.cssList = cssList;\n this.computedZindex();\n this.updateStyle();\n }\n }\n\n private computedIframeDisplay(\n _state: DisplayerState,\n _attributes: Partial<IframeBridgeAttributes>\n ): void {\n if (this.inDisplaySceneDir) {\n IframeBridge.emitter.emit(IframeEvents.DispayIframe);\n } else {\n IframeBridge.emitter.emit(IframeEvents.HideIframe);\n }\n }\n\n public computedZindex(): void {\n const zIndexString = \"z-index: -1;\";\n const index = this.cssList.findIndex(css => css === zIndexString);\n if (index !== -1) {\n this.cssList.splice(index, 1);\n }\n if (!this.isClicker() || this.isDisableInput) {\n this.cssList.push(zIndexString);\n }\n }\n\n private updateStyle(): void {\n this.iframe.style.cssText = this.cssList.join(\" \");\n }\n\n private get iframeOrigin(): string | undefined {\n if (this.iframe) {\n try {\n return new URL(this.iframe.src).origin;\n } catch (err) {\n console.warn(err);\n }\n }\n }\n\n private messageListener(event: MessageEvent): void {\n log(\"<<<\", JSON.stringify(event.data));\n if (event.origin !== this.iframeOrigin) {\n return;\n }\n const data = event.data;\n switch (data.kind) {\n case IframeEvents.SetAttributes: {\n this.handleSetAttributes(data);\n break;\n }\n case IframeEvents.RegisterMagixEvent: {\n this.handleRegisterMagixEvent(data);\n break;\n }\n case IframeEvents.RemoveMagixEvent: {\n this.handleRemoveMagixEvent(data);\n break;\n }\n case IframeEvents.DispatchMagixEvent: {\n this.handleDispatchMagixEvent(data);\n break;\n }\n case IframeEvents.RemoveAllMagixEvent: {\n this.handleRemoveAllMagixEvent();\n break;\n }\n case IframeEvents.NextPage: {\n this.handleNextPage();\n break;\n }\n case IframeEvents.PrevPage: {\n this.handlePrevPage();\n break;\n }\n case IframeEvents.SDKCreate: {\n this.handleSDKCreate();\n break;\n }\n case IframeEvents.SetPage: {\n this.handleSetPage(data);\n break;\n }\n case IframeEvents.GetAttributes: {\n this.handleGetAttributes();\n break;\n }\n case IframeEvents.PageTo: {\n this.handlePageTo(data);\n break;\n }\n default: {\n log(`${data.kind} not allow event.`);\n break;\n }\n }\n }\n\n private handleSDKCreate(): void {\n this.postMessage({\n kind: IframeEvents.Init,\n payload: {\n attributes: this.attributes,\n roomState: this.displayer.state,\n currentPage: this.currentPage,\n observerId: this.displayer.observerId,\n },\n });\n }\n\n private handleDispatchMagixEvent(data: any): void {\n const eventPayload: { event: string; payload: any } = data.payload;\n this.appManager.safeDispatchMagixEvent(eventPayload.event, eventPayload.payload);\n }\n\n private handleSetAttributes(data: any): void {\n this.setAttributes(data.payload);\n }\n\n private handleRegisterMagixEvent(data: any): void {\n const eventName = data.payload as string;\n const listener = (event: any) => {\n if (event.authorId === this.displayer.observerId) {\n return;\n }\n this.postMessage({ kind: IframeEvents.ReciveMagixEvent, payload: event });\n };\n this.magixEventMap.set(eventName, listener);\n this.displayer.addMagixEventListener(eventName, listener);\n }\n\n private handleRemoveMagixEvent(data: any): void {\n const eventName = data.payload as string;\n const listener = this.magixEventMap.get(eventName);\n this.displayer.removeMagixEventListener(eventName, listener);\n }\n\n private handleNextPage(): void {\n if (this.manager.canOperate) {\n this.manager.nextPage();\n this.dispatchMagixEvent(IframeEvents.NextPage, {});\n }\n }\n\n private handlePrevPage(): void {\n if (this.manager.canOperate) {\n this.manager.prevPage();\n this.dispatchMagixEvent(IframeEvents.PrevPage, {});\n }\n }\n\n private handlePageTo(data: any): void {\n if (this.manager.canOperate) {\n const page = data.payload as number;\n if (!Number.isSafeInteger(page) || page <= 0) {\n return;\n }\n this.manager.setMainViewSceneIndex(page - 1);\n this.dispatchMagixEvent(IframeEvents.PageTo, page - 1);\n }\n }\n\n private handleRemoveAllMagixEvent(): void {\n this.magixEventMap.forEach((listener, event) => {\n this.displayer.removeMagixEventListener(event, listener);\n });\n this.magixEventMap.clear();\n }\n\n private handleGetAttributes(): void {\n this.postMessage({\n kind: IframeEvents.GetAttributes,\n payload: this.attributes,\n });\n }\n\n public postMessage(message: any): void {\n if (this.iframe) {\n this.iframe.contentWindow?.postMessage(JSON.parse(JSON.stringify(message)), \"*\");\n }\n }\n\n public dispatchMagixEvent(event: string, payload: any): void {\n if (this.manager.canOperate) {\n this.setAttributes({ lastEvent: { name: event, payload } });\n (this.displayer as Room).dispatchMagixEvent(event, payload);\n }\n }\n\n private get currentIndex(): number {\n return this.manager.mainViewSceneIndex;\n }\n\n private get currentPage(): number {\n return this.currentIndex + 1;\n }\n\n private get totalPage(): number {\n return this.manager.mainViewScenesLength;\n }\n\n private get readonly(): boolean {\n return !(this.displayer as any).isWritable;\n }\n\n public get inDisplaySceneDir(): boolean {\n return this.manager.mainViewSceneDir === this.attributes.displaySceneDir;\n }\n\n private isClicker(): boolean {\n if (this.readonly) {\n return false;\n }\n const currentApplianceName = (this.displayer as Room).state.memberState\n .currentApplianceName;\n return this.allowAppliances.includes(currentApplianceName);\n }\n\n private get isDisableInput(): boolean {\n if (\"disableDeviceInputs\" in this.displayer) {\n return (this.displayer as Room).disableDeviceInputs;\n } else {\n return true;\n }\n }\n}\n","import type { WindowManager } from \".\";\nimport Emittery from \"emittery\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { appRegister } from \"./Register\";\n\nexport interface ExtendContext {\n readonly manager: ExtendPluginManager;\n readonly windowManager: WindowManager;\n readonly internalEmitter: EmitterType;\n windowManagerContainer?: HTMLElement;\n}\n\nexport abstract class ExtendPlugin extends Emittery {\n context!: ExtendContext;\n abstract readonly kind: string;\n protected _inject(context: ExtendContext) {\n this.context = context;\n }\n abstract onCreate(): void;\n abstract onDestroy(): void;\n}\n\nexport type ExtendPluginInstance<T extends ExtendPlugin> = T;\n\nexport interface ExtendManagerOptions {\n readonly windowManager: WindowManager;\n readonly internalEmitter: EmitterType;\n readonly container?: HTMLElement;\n}\n\nexport class ExtendPluginManager {\n private extends: Map<string, ExtendPluginInstance<any>> = new Map();\n private context: ExtendContext;\n constructor(props: ExtendManagerOptions) {\n this.context = {\n manager: this,\n windowManager: props.windowManager,\n internalEmitter: props.internalEmitter,\n };\n if (props.container) {\n this.refreshContainer(props.container);\n }\n }\n\n refreshContainer(container: HTMLElement) {\n this.context.windowManagerContainer = container;\n this.extends.forEach(extend => {\n extend._inject(this.context);\n });\n }\n\n hasRegister(kind: string) {\n return appRegister.appClasses.has(kind);\n }\n\n use(extend: ExtendPluginInstance<any>) {\n this.extends.set(extend.kind, extend);\n extend._inject(this.context);\n extend.onCreate();\n }\n destroy() {\n this.extends.forEach(extend => {\n this.extends.delete(extend.kind);\n extend.onDestroy();\n });\n }\n}\n","export function resolveAppOptions(\n registeredOptions: any | (() => any),\n override: any\n): any | (() => any) {\n if (override === undefined) {\n return registeredOptions;\n }\n return () => ({\n ...(typeof registeredOptions === \"function\" ? registeredOptions() : registeredOptions),\n ...override,\n });\n}\n","import { AppContext, AppProxy } from \"../App\";\nimport { AppManager } from \"../AppManager\";\nimport { AttributesDelegate } from \"../AttributesDelegate\";\nimport { BoxManager } from \"../BoxManager\";\nimport { CursorManager } from \"../Cursor\";\nimport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport { AppManager } from \"../AppManager\";\nexport { AppContext, AppProxy } from \"../App\";\nexport { BoxManager } from \"../BoxManager\";\nexport { AttributesDelegate } from \"../AttributesDelegate\";\nexport { CursorManager } from \"../Cursor\";\nexport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport type ExtendClassAble =\n | typeof AppManager\n | typeof AppProxy\n | typeof AppContext\n | typeof BoxManager\n | typeof AttributesDelegate\n | typeof CursorManager\n | typeof TeleBoxManager\n | typeof TeleBoxCollector;\n\nexport type ExtendClass = {\n AppManager?: typeof AppManager;\n BoxManager?: typeof BoxManager;\n AttributesDelegate?: typeof AttributesDelegate;\n CursorManager?: typeof CursorManager;\n AppProxy?: typeof AppProxy;\n AppContext?: typeof AppContext;\n TeleBoxManager?: typeof TeleBoxManager;\n TeleBoxCollector?: typeof TeleBoxCollector;\n};\nexport function getExtendClass<T extends ExtendClassAble>(\n baseClass: T,\n extendClass?: ExtendClass\n): T {\n if (baseClass.kind && extendClass && Object.keys(extendClass).includes(baseClass.kind)) {\n switch (baseClass.kind) {\n case \"AppManager\":\n return (extendClass?.AppManager || AppManager) as T;\n case \"BoxManager\":\n return (extendClass?.BoxManager || BoxManager) as T;\n case \"AttributesDelegate\":\n return (extendClass?.AttributesDelegate || AttributesDelegate) as T;\n case \"CursorManager\":\n return (extendClass?.CursorManager || CursorManager) as T;\n case \"AppProxy\":\n return (extendClass?.AppProxy || AppProxy) as T;\n case \"AppContext\":\n return (extendClass?.AppContext || AppContext) as T;\n case \"TeleBoxManager\":\n return (extendClass?.TeleBoxManager || TeleBoxManager) as T;\n case \"TeleBoxCollector\":\n return (extendClass?.TeleBoxCollector || TeleBoxCollector) as T;\n default:\n return baseClass;\n }\n }\n return baseClass;\n}\n","import pRetry from \"p-retry\";\nimport { AppManager } from \"./AppManager\";\nimport { appRegister } from \"./Register\";\nimport { callbacks } from \"./callback\";\nimport { checkVersion, createInvisiblePlugin, setupWrapper } from \"./Helper\";\nimport { ContainerResizeObserver } from \"./ContainerResizeObserver\";\nimport { createBoxManager } from \"./BoxManager\";\nimport { CursorManager } from \"./Cursor\";\nimport { DEFAULT_CONTAINER_RATIO, Events, INIT_DIR, ROOT_DIR } from \"./constants\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { Fields } from \"./AttributesDelegate\";\nimport { initDb } from \"./Register/storage\";\nimport { InvisiblePlugin, isPlayer, isRoom, RoomPhase, ViewMode } from \"white-web-sdk\";\nimport { isEqual, isNull, isObject, omit, isNumber } from \"lodash\";\nimport { ArgusLog, log } from \"./Utils/log\";\nimport { PageStateImpl } from \"./PageState\";\nimport { ReconnectRefresher } from \"./ReconnectRefresher\";\nimport { replaceRoomFunction } from \"./Utils/RoomHacker\";\nimport { BuiltinApps, setupBuiltin } from \"./BuiltinApps\";\nimport type { BuiltinAppOptions } from \"./BuiltinApps\";\nimport \"video.js/dist/video-js.css\";\nimport \"./style.css\";\nimport \"@netless/telebox-insider/dist/style.css\";\nimport {\n addEmitterOnceListener,\n ensureValidScenePath,\n entireScenes,\n isValidScenePath,\n putScenes,\n wait,\n} from \"./Utils/Common\";\nimport type { BoxManager } from \"./BoxManager\";\nimport type { TELE_BOX_STATE } from \"./BoxManager\";\nimport * as Errors from \"./Utils/error\";\nimport type { Apps, Position } from \"./AttributesDelegate\";\nimport type {\n Displayer,\n SceneDefinition,\n View,\n Room,\n InvisiblePluginContext,\n Camera,\n AnimationMode,\n CameraBound,\n Point,\n Rectangle,\n CameraState,\n Player,\n ImageInformation,\n SceneState,\n Logger,\n} from \"white-web-sdk\";\nimport type { AppListeners } from \"./AppListener\";\nimport type { ApplianceIcons, NetlessApp, RegisterParams } from \"./typings\";\nimport type {\n NotMinimizedBoxState,\n TeleBoxColorScheme,\n TeleBoxState,\n} from \"@netless/telebox-insider\";\nimport type { AppProxy } from \"./App\";\nimport type { PublicEvent } from \"./callback\";\nimport type Emittery from \"emittery\";\nimport type { PageController, AddPageParams, PageState } from \"./Page\";\nimport { boxEmitter } from \"./BoxEmitter\";\nimport { IframeBridge } from \"./View/IframeBridge\";\nimport type { ExtendPluginInstance } from \"./ExtendPluginManager\";\nimport { ExtendPluginManager } from \"./ExtendPluginManager\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { ExtendClass } from \"./Utils/extendClass\";\nimport { resolveAppOptions as mergeAppOptions } from \"./Utils/resolveAppOptions\";\n\nexport * from \"./utils/extendClass\";\n\nexport type WindowMangerAttributes = {\n modelValue?: string;\n boxState: TELE_BOX_STATE;\n maximized?: boolean;\n minimized?: boolean;\n [key: string]: any;\n};\n\nexport type apps = {\n [key: string]: NetlessApp;\n};\n\nexport type AddAppOptions = {\n scenePath?: string;\n title?: string;\n scenes?: SceneDefinition[];\n};\n\nexport type setAppOptions = AddAppOptions & { appOptions?: any };\n\nexport type DocsEvent =\n | \"prevPage\"\n | \"nextPage\"\n | \"prevStep\"\n | \"nextStep\"\n | \"jumpToPage\"\n | \"scalePage\";\n\nexport type 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 /** Used by `scalePage` event. Range from 1 to 4, decimals allowed. `1` means default fitted size. */\n scale?: number;\n};\n\ntype SlideDocsAppResult = {\n prevPage: () => boolean;\n nextPage: () => boolean;\n prevStep: () => boolean;\n nextStep: () => boolean;\n jumpToPage: (page: number) => boolean;\n scaleView: (scale: number) => void;\n};\n\ntype PresentationDocsAppResult = {\n prevPage: () => boolean;\n nextPage: () => boolean;\n jumpPage: (index: number) => boolean;\n moveCamera: (camera: { centerX: number; centerY: number; scale: number }) => void;\n getOriginScale: () => number;\n};\n\nconst SlideAppKind = \"Slide\";\nconst PresentationAppKind = BuiltinApps.Presentation;\nconst MinDocsPageScale = 1;\nconst MaxDocsPageScale = 4;\n\nfunction isValidDocsPageScale(scale: unknown): scale is number {\n return (\n typeof scale === \"number\" &&\n Number.isFinite(scale) &&\n scale >= MinDocsPageScale &&\n scale <= MaxDocsPageScale\n );\n}\n\nexport type AddAppParams<TAttributes = any> = {\n kind: string;\n // app 地址(本地 app 不需要传)\n src?: string;\n // 窗口配置\n options?: AddAppOptions;\n // 初始化 attributes\n attributes?: TAttributes;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type BaseInsertParams = {\n kind: string;\n // app 地址(本地 app 不需要传)\n src?: string;\n // 窗口配置\n options?: AddAppOptions;\n // 初始化 attributes\n attributes?: any;\n isDynamicPPT?: boolean;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type AppSyncAttributes = {\n kind: string;\n src?: string;\n options: any;\n state?: any;\n isDynamicPPT?: boolean;\n fullPath?: string;\n createdAt?: number;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type AppInitState = {\n id: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n focus?: boolean;\n maximized?: boolean;\n minimized?: boolean;\n sceneIndex?: number;\n /** 所有box的基本状态 */\n boxState?: TeleBoxState; // 兼容旧版 telebox\n zIndex?: number;\n /** 扩展版本,单个box的状态 */\n boxStatus?: TeleBoxState;\n /** 上次非最小化窗口状态 */\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type CursorMovePayload = { uid: string; state?: \"leave\"; position: Position };\n\nexport type CursorOptions = {\n /**\n * If `\"custom\"`, it will render the pencil / eraser cursor as a circle and shapes cursor as a cross.\n *\n * @default \"default\"\n */\n style?: \"default\" | \"custom\";\n};\n\nexport type MountParams = {\n room: Room | Player;\n container?: HTMLElement;\n /** 白板高宽比例, 默认为 9 / 16 */\n containerSizeRatio?: number;\n /** @deprecated 显示 PS 透明背景,默认 true */\n chessboard?: boolean;\n collectorContainer?: HTMLElement;\n collectorStyles?: Partial<CSSStyleDeclaration>;\n overwriteStyles?: string;\n cursor?: boolean;\n cursorOptions?: CursorOptions;\n debug?: boolean;\n disableCameraTransform?: boolean;\n prefersColorScheme?: TeleBoxColorScheme;\n applianceIcons?: ApplianceIcons;\n fullscreen?: boolean;\n polling?: boolean;\n /** 是否支持 appliance plugin */\n supportAppliancePlugin?: boolean;\n /** 是否使用 boxesStatus 状态管理窗口 */\n useBoxesStatus?: boolean;\n /** Local Presentation options applied before restoring apps. Not synchronized. */\n builtinAppOptions?: BuiltinAppOptions;\n};\n\nexport const reconnectRefresher = new ReconnectRefresher({ emitter: internalEmitter });\nexport class WindowManager\n extends InvisiblePlugin<WindowMangerAttributes, any>\n implements PageController\n{\n public static readonly kind = \"WindowManager\";\n public static displayer: Displayer;\n public static wrapper?: HTMLElement;\n public static sizer?: HTMLElement;\n public static playground?: HTMLElement;\n public static container?: HTMLElement;\n public static debug = false;\n public static containerSizeRatio = DEFAULT_CONTAINER_RATIO;\n public static supportAppliancePlugin?: boolean;\n private static isCreated = false;\n private static _resolve = (_manager: WindowManager) => void 0;\n\n public version = __APP_VERSION__;\n public dependencies = __APP_DEPENDENCIES__;\n\n public appListeners?: AppListeners;\n\n public readonly?: boolean;\n public emitter: Emittery<PublicEvent> = callbacks;\n public appManager?: AppManager;\n public cursorManager?: CursorManager;\n public viewMode = ViewMode.Broadcaster;\n public isReplay = isPlayer(this.displayer);\n private _pageState?: PageStateImpl;\n private _fullscreen?: boolean;\n private _cursorUIDs: string[] = [];\n private _cursorUIDsStyleDOM?: HTMLStyleElement;\n\n public _appliancePlugin?: any;\n\n public builtinAppOptions?: BuiltinAppOptions;\n\n private boxManager?: BoxManager;\n private static params?: MountParams;\n static extendClass?: ExtendClass;\n\n private containerResizeObserver?: ContainerResizeObserver;\n public containerSizeRatio = WindowManager.containerSizeRatio;\n\n private extendPluginManager?: ExtendPluginManager;\n\n private _roomLogger?: Logger;\n\n public attributesDeboundceLog?: ArgusLog;\n\n get Logger(): Logger | undefined {\n return this._roomLogger;\n }\n\n constructor(context: InvisiblePluginContext) {\n super(context);\n WindowManager.displayer = context.displayer;\n (window as any).NETLESS_DEPS = __APP_DEPENDENCIES__;\n this.emitter.on(\"mainViewScenePathChange\", this.onMainViewScenePathChangeHandler);\n }\n\n public static onCreate(manager: WindowManager) {\n WindowManager._resolve(manager);\n }\n\n public static async mount(\n params: MountParams,\n extendClass?: ExtendClass\n ): Promise<WindowManager> {\n const room = params.room;\n WindowManager.container = params.container;\n WindowManager.supportAppliancePlugin = params.supportAppliancePlugin;\n const containerSizeRatio = params.containerSizeRatio;\n const debug = params.debug;\n\n const cursor = params.cursor;\n WindowManager.params = params;\n WindowManager.extendClass = extendClass;\n WindowManager.displayer = params.room;\n checkVersion();\n let manager: WindowManager | undefined = undefined;\n if (isRoom(room)) {\n if (room.phase !== RoomPhase.Connected) {\n throw new Error(\"[WindowManager]: Room only Connected can be mount\");\n }\n if (room.phase === RoomPhase.Connected && room.isWritable) {\n // redo undo 需要设置这个属性\n room.disableSerialization = false;\n }\n manager = await this.initManager(room);\n if (manager) {\n manager._roomLogger = (room as unknown as { logger: Logger }).logger;\n manager.attributesDeboundceLog = new ArgusLog(\n manager._roomLogger,\n \"attributes\",\n 300\n );\n if (WindowManager.registered.size > 0) {\n manager._roomLogger.info(\n `[WindowManager] registered apps: ${JSON.stringify(\n Array.from(WindowManager.registered.keys())\n )}`\n );\n }\n }\n }\n if (WindowManager.isCreated) {\n throw new Error(\"[WindowManager]: Already created cannot be created again\");\n }\n\n this.debug = Boolean(debug);\n if (manager?._roomLogger) {\n manager._roomLogger.info(\n `[WindowManager] Already insert room version: ${manager.version}`\n );\n } else {\n log(\"Already insert room\", manager);\n }\n\n if (isRoom(this.displayer)) {\n if (!manager) {\n throw new Error(\"[WindowManager]: init InvisiblePlugin failed\");\n }\n } else {\n await pRetry(\n async count => {\n manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (!manager) {\n log(`manager is empty. retrying ${count}`);\n throw new Error();\n }\n },\n // 1s, 2s, 4s, 5s, 5s, 5s, 5s, 5s, 5s\n { retries: 10, maxTimeout: 5000 } as any\n );\n }\n\n if (!manager) {\n throw new Error(\"[WindowManager]: create manager failed\");\n }\n\n manager.builtinAppOptions = params.builtinAppOptions;\n\n if (containerSizeRatio) {\n WindowManager.containerSizeRatio = containerSizeRatio;\n }\n await manager.ensureAttributes();\n\n const AppManagerClass = getExtendClass(AppManager, WindowManager.extendClass);\n const CursorManagerClass = getExtendClass(CursorManager, WindowManager.extendClass);\n\n manager._fullscreen = params.fullscreen;\n manager.appManager = new AppManagerClass(manager);\n manager.appManager.polling = params.polling || false;\n manager._pageState = new PageStateImpl(manager.appManager);\n manager.cursorManager = new CursorManagerClass(\n manager.appManager,\n Boolean(cursor),\n params.cursorOptions,\n params.applianceIcons\n );\n\n manager.extendPluginManager = new ExtendPluginManager({\n internalEmitter: internalEmitter,\n windowManager: manager,\n });\n\n if (containerSizeRatio) {\n manager.containerSizeRatio = containerSizeRatio;\n }\n\n if (params.container) {\n manager.bindContainer(params.container);\n }\n\n replaceRoomFunction(room, manager);\n internalEmitter.emit(\"onCreated\");\n WindowManager.isCreated = true;\n if (\n manager._roomLogger &&\n manager.attributes.registered &&\n Object.keys(manager.attributes.registered).length > 0\n ) {\n manager._roomLogger.info(\n `[WindowManager] attributes registered apps: ${JSON.stringify(\n Array.from(Object.keys(manager.attributes.registered))\n )}`\n );\n }\n try {\n await initDb();\n } catch (error) {\n manager._roomLogger?.warn(`[WindowManager] indexedDB open failed: ${error.message}`);\n console.warn(\"[WindowManager]: indexedDB open failed\");\n console.log(error);\n }\n manager.emitter.on(\"mainViewScenePathChange\", manager.onMainViewScenePathChangeHandler);\n return manager;\n }\n\n public onMainViewScenePathChangeHandler = (scenePath: string) => {\n const mainViewElement = this.mainView.divElement;\n if (mainViewElement) {\n const backgroundImage = mainViewElement.querySelector(\".background img\");\n if (backgroundImage) {\n const backgroundImageRect = backgroundImage?.getBoundingClientRect();\n const backgroundImageCSS = window.getComputedStyle(backgroundImage);\n const backgroundImageVisible =\n backgroundImageRect?.width > 0 &&\n backgroundImageRect?.height > 0 &&\n backgroundImageCSS.display !== \"none\";\n const camera = this.mainView.camera;\n console.log(\n \"[window-manager] backgroundImageVisible:\" +\n backgroundImageVisible +\n \" camera:\" +\n JSON.stringify(camera)\n );\n return;\n }\n console.log(\n \"[window-manager] onMainViewScenePathChange scenePath:\" +\n scenePath +\n \" backgroundImageVisible is not found\"\n );\n return;\n }\n console.log(\n \"[window-manager] onMainViewScenePathChange scenePath:\" +\n scenePath +\n \" mainViewElement is not found\"\n );\n };\n\n private static initManager(room: Room): Promise<WindowManager | undefined> {\n return createInvisiblePlugin(room);\n }\n\n private static initContainer(\n manager: WindowManager,\n container: HTMLElement,\n params: {\n chessboard?: boolean;\n overwriteStyles?: string;\n fullscreen?: boolean;\n }\n ) {\n const { chessboard, overwriteStyles, fullscreen } = params;\n if (!WindowManager.container) {\n WindowManager.container = container;\n }\n const { playground, wrapper, sizer, mainViewElement } = setupWrapper(container);\n WindowManager.playground = playground;\n if (chessboard) {\n sizer.classList.add(\"netless-window-manager-chess-sizer\");\n }\n if (fullscreen) {\n sizer.classList.add(\"netless-window-manager-fullscreen\");\n }\n if (overwriteStyles) {\n const style = document.createElement(\"style\");\n style.textContent = overwriteStyles;\n playground.appendChild(style);\n }\n manager.containerResizeObserver = ContainerResizeObserver.create(\n playground,\n sizer,\n wrapper,\n internalEmitter\n );\n WindowManager.wrapper = wrapper;\n WindowManager.sizer = sizer;\n return mainViewElement;\n }\n\n public static get registered() {\n return appRegister.registered;\n }\n\n public bindContainer(container: HTMLElement) {\n if (isRoom(this.displayer) && this.room.phase !== RoomPhase.Connected) {\n throw new Errors.BindContainerRoomPhaseInvalidError();\n }\n if (WindowManager.isCreated && WindowManager.container) {\n if (WindowManager.container.firstChild) {\n container.appendChild(WindowManager.container.firstChild);\n }\n } else {\n if (WindowManager.params) {\n const params = WindowManager.params;\n const mainViewElement = WindowManager.initContainer(this, container, params);\n if (this.boxManager) {\n this.boxManager.destroy();\n }\n const boxManager = createBoxManager(this, callbacks, internalEmitter, boxEmitter, {\n collectorContainer: params.collectorContainer,\n collectorStyles: params.collectorStyles,\n prefersColorScheme: params.prefersColorScheme,\n useBoxesStatus: params.useBoxesStatus,\n });\n this.boxManager = boxManager;\n if (this.appManager) {\n this.appManager.useBoxesStatus = params.useBoxesStatus || false;\n this.appManager.setBoxManager(boxManager);\n }\n this.bindMainView(mainViewElement, params.disableCameraTransform);\n if (WindowManager.wrapper) {\n this.cursorManager?.setupWrapper(WindowManager.wrapper);\n }\n }\n }\n internalEmitter.emit(\"updateManagerRect\");\n this.appManager?.refresh();\n this.appManager?.resetMaximized();\n this.appManager?.resetMinimized();\n this.appManager?.displayerWritableListener(!this.room.isWritable);\n WindowManager.container = container;\n this.extendPluginManager?.refreshContainer(container);\n }\n\n public bindCollectorContainer(container: HTMLElement) {\n if (WindowManager.isCreated && this.boxManager) {\n this.boxManager.setCollectorContainer(container);\n } else {\n if (WindowManager.params) {\n WindowManager.params.collectorContainer = container;\n }\n }\n }\n\n /**\n * 注册插件\n */\n public static register(params: RegisterParams<any, any, any>): Promise<void> {\n return appRegister.register(params);\n }\n\n /**\n * 注销插件\n */\n public static unregister(kind: string) {\n return appRegister.unregister(kind);\n }\n\n public resolveAppOptions(\n kind: string,\n registeredOptions?: any | (() => any)\n ): any | (() => any) {\n const override =\n kind === BuiltinApps.Presentation ? this.builtinAppOptions?.Presentation : undefined;\n return mergeAppOptions(registeredOptions, override);\n }\n\n /**\n * 创建一个 app 至白板\n */\n public async addApp<T = any>(params: AddAppParams<T>): Promise<string | undefined> {\n if (this.appManager) {\n // 移除根目录时需要做一些异步的释放操作 addApp 需要等待释放完成才可以继续添加\n if (this.appManager.rootDirRemoving) {\n return new Promise((resolve, reject) => {\n internalEmitter.once(\"rootDirRemoved\").then(async () => {\n try {\n const appId = await this._addApp(params);\n resolve(appId);\n } catch (error) {\n reject(error.message);\n }\n });\n });\n } else {\n return this._addApp(params);\n }\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n private async _addApp<T = any>(params: AddAppParams<T>): Promise<string | undefined> {\n if (this.appManager) {\n if (!params.kind || typeof params.kind !== \"string\") {\n throw new Errors.ParamsInvalidError();\n }\n if (params.src && typeof params.src === \"string\") {\n appRegister.register({ kind: params.kind, src: params.src });\n }\n const appImpl = await appRegister.appClasses.get(params.kind)?.();\n if (appImpl && appImpl.config?.singleton) {\n if (this.appManager.appProxies.has(params.kind)) {\n throw new Errors.AppCreateError();\n }\n }\n const isDynamicPPT = this.setupScenePath(params, this.appManager);\n if (isDynamicPPT === undefined) {\n return;\n }\n if (params?.options?.scenePath) {\n params.options.scenePath = ensureValidScenePath(params.options.scenePath);\n }\n const appId = await this.appManager.addApp(params, Boolean(isDynamicPPT));\n return appId;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n private setupScenePath(params: AddAppParams, appManager: AppManager): boolean | undefined {\n let isDynamicPPT = false;\n if (params.options) {\n const { scenePath, scenes } = params.options;\n if (scenePath) {\n if (!isValidScenePath(scenePath)) {\n throw new Errors.InvalidScenePath();\n }\n const apps = Object.keys(this.apps || {});\n for (const appId of apps) {\n const appScenePath = appManager.store.getAppScenePath(appId);\n if (appScenePath && appScenePath === scenePath) {\n console.warn(`[WindowManager]: ScenePath \"${scenePath}\" already opened`);\n if (this.boxManager) {\n const topBox = this.boxManager.getTopBox();\n if (topBox) {\n this.boxManager.setZIndex(appId, topBox.zIndex + 1, false);\n this.boxManager.focusBox({ appId }, false);\n }\n }\n return;\n }\n }\n }\n if (scenePath && scenes && scenes.length > 0) {\n if (this.isDynamicPPT(scenes)) {\n isDynamicPPT = true;\n if (!entireScenes(this.displayer)[scenePath]) {\n putScenes(this.room, scenePath, scenes);\n }\n } else {\n if (!entireScenes(this.displayer)[scenePath]) {\n putScenes(this.room, scenePath, [{ name: scenes[0].name }]);\n }\n }\n }\n if (scenePath && scenes === undefined) {\n putScenes(this.room, scenePath, [{}]);\n }\n }\n return isDynamicPPT;\n }\n\n /**\n * 设置 mainView 的 ScenePath, 并且切换白板为可写状态\n */\n public async setMainViewScenePath(scenePath: string): Promise<void> {\n if (this.appManager) {\n await this.appManager.setMainViewScenePath(scenePath);\n }\n }\n\n /**\n * 设置 mainView 的 SceneIndex, 并且切换白板为可写状态\n */\n public async setMainViewSceneIndex(index: number): Promise<void> {\n if (this.appManager) {\n await this.appManager.setMainViewSceneIndex(index);\n }\n }\n\n public async nextPage(): Promise<boolean> {\n if (this.appManager) {\n const nextIndex = this.mainViewSceneIndex + 1;\n if (nextIndex >= this.mainViewScenesLength) {\n console.warn(`[WindowManager]: current page is the last page`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(nextIndex);\n return true;\n } else {\n return false;\n }\n }\n\n public async prevPage(): Promise<boolean> {\n if (this.appManager) {\n const prevIndex = this.mainViewSceneIndex - 1;\n if (prevIndex < 0) {\n console.warn(`[WindowManager]: current page is the first page`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(prevIndex);\n return true;\n } else {\n return false;\n }\n }\n\n public async jumpPage(index: number): Promise<boolean> {\n if (this.appManager) {\n if (index < 0 || index >= this.pageState.length) {\n console.warn(`[WindowManager]: index ${index} out of range`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(index);\n return true;\n } else {\n return false;\n }\n }\n\n public async addPage(params?: AddPageParams): Promise<void> {\n if (this.appManager) {\n const after = params?.after;\n const scene = params?.scene;\n if (after) {\n const nextIndex = this.mainViewSceneIndex + 1;\n this.room.putScenes(ROOT_DIR, [scene || {}], nextIndex);\n } else {\n this.room.putScenes(ROOT_DIR, [scene || {}]);\n }\n }\n }\n\n /**\n * 删除一页\n * 默认删除当前页, 可以删除指定 index 页\n * 最低保留一页\n */\n public async removePage(index?: number): Promise<boolean> {\n if (this.appManager) {\n const needRemoveIndex = index === undefined ? this.pageState.index : index;\n if (this.pageState.length === 1) {\n console.warn(`[WindowManager]: can not remove the last page`);\n return false;\n }\n if (needRemoveIndex < 0 || needRemoveIndex >= this.pageState.length) {\n console.warn(`[WindowManager]: index ${index} out of range`);\n return false;\n }\n return this.appManager.removeSceneByIndex(needRemoveIndex);\n } else {\n return false;\n }\n }\n\n /**\n * 返回 mainView 的 ScenePath\n */\n public getMainViewScenePath(): string | undefined {\n return this.appManager?.store.getMainViewScenePath();\n }\n\n /**\n * 返回 mainView 的 SceneIndex\n */\n public getMainViewSceneIndex(): number {\n return this.appManager?.store.getMainViewSceneIndex();\n }\n\n /**\n * 设置所有 app 的 readonly 模式\n */\n public setReadonly(readonly: boolean): void {\n this.readonly = readonly;\n this.boxManager?.setReadonly(readonly);\n internalEmitter.emit(\"setReadonly\", readonly);\n }\n\n /**\n * 切换 mainView 为可写\n */\n public switchMainViewToWriter(): Promise<void> | undefined {\n return this.appManager?.mainViewProxy.mainViewClickHandler();\n }\n\n /**\n * app destroy 回调\n */\n public onAppDestroy(kind: string, listener: (error: Error) => void): void {\n addEmitterOnceListener(`destroy-${kind}`, listener);\n }\n\n /**\n * app 本地自定义事件回调\n *\n * 返回一个用于撤销此监听的函数\n */\n public onAppEvent(\n kind: string,\n listener: (args: { kind: string; appId: string; type: string; value: any }) => void\n ): () => void {\n return internalEmitter.on(`custom-${kind}` as any, listener);\n }\n\n /**\n * 设置 ViewMode\n */\n public setViewMode(mode: ViewMode): void {\n if (mode === ViewMode.Broadcaster || mode === ViewMode.Follower) {\n if (this.canOperate && mode === ViewMode.Broadcaster) {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }\n this.appManager?.mainViewProxy.start();\n }\n if (mode === ViewMode.Freedom) {\n this.appManager?.mainViewProxy.stop();\n }\n this.viewMode = mode;\n this.appManager?.mainViewProxy.setViewMode(mode);\n }\n\n public setBoxState(boxState: TeleBoxState): void {\n if (!this.canOperate) return;\n switch (boxState) {\n case \"normal\":\n this.setMaximized(false);\n this.setMinimized(false);\n break;\n case \"maximized\":\n this.setMaximized(true);\n this.setMinimized(false);\n break;\n case \"minimized\":\n this.setMinimized(true);\n break;\n default:\n break;\n }\n }\n\n public setMaximized(maximized: boolean): void {\n if (!this.canOperate) return;\n this.boxManager?.setMaximized(maximized, false);\n }\n\n public setMinimized(minimized: boolean): void {\n if (!this.canOperate) return;\n this.boxManager?.setMinimized(minimized, false);\n }\n\n /** 设置指定 box 的状态, 如果为 undefined, 则移除状态*/\n public setBoxStatus(boxId: string, boxStatus?: TELE_BOX_STATE): void {\n if (!this.canOperate) return;\n this.appManager?.store.setBoxStatus(boxId, boxStatus);\n }\n\n /** 设置指定 box 的非最小化状态, 如果为 undefined, 则移除状态 */\n public setLastNotMinimizedBoxStatus(\n boxId: string,\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState\n ): void {\n if (!this.canOperate) return;\n this.appManager?.store.setLastNotMinimizedBoxStatus(boxId, lastNotMinimizedBoxStatus);\n }\n\n public setFullscreen(fullscreen: boolean): void {\n if (this._fullscreen !== fullscreen) {\n this._fullscreen = fullscreen;\n WindowManager.sizer?.classList.toggle(\"netless-window-manager-fullscreen\", fullscreen);\n callbacks.emit(\"fullscreenChange\", fullscreen);\n }\n }\n\n public get cursorUIDs(): string[] {\n return this._cursorUIDs;\n }\n\n public setCursorUIDs(cursorUIDs?: string[] | null): void {\n this._cursorUIDs = cursorUIDs || [];\n if (this._cursorUIDs.length === 0) {\n this._cursorUIDsStyleDOM?.remove();\n } else {\n if (!this._cursorUIDsStyleDOM) {\n this._cursorUIDsStyleDOM = document.createElement(\"style\");\n }\n WindowManager.playground?.appendChild(this._cursorUIDsStyleDOM);\n let style = \"[data-cursor-uid] { display: none }\";\n for (const uid of this._cursorUIDs) {\n style += `\\n[data-cursor-uid=\"${uid}\"] { display: flex }`;\n }\n this._cursorUIDsStyleDOM.textContent = style;\n }\n }\n\n public get mainView(): View {\n if (this.appManager) {\n return this.appManager.mainViewProxy.view;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get camera(): Camera {\n if (this.appManager) {\n return this.appManager.mainViewProxy.view.camera;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get cameraState(): CameraState {\n if (this.appManager) {\n return this.appManager.mainViewProxy.cameraState;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get apps(): Apps | undefined {\n return this.appManager?.store.apps();\n }\n\n public get boxState(): TeleBoxState | undefined {\n if (this.appManager) {\n return this.appManager.boxManager?.boxState;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get boxStatus(): Record<string, TeleBoxState> | undefined {\n if (this.appManager) {\n return this.appManager.store.getBoxesStatus();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get lastNotMinimizedBoxStatus(): Record<string, NotMinimizedBoxState> | undefined {\n if (this.appManager) {\n return this.appManager.store.getLastNotMinimizedBoxesStatus();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get darkMode(): boolean {\n return Boolean(this.appManager?.boxManager?.darkMode);\n }\n\n public get prefersColorScheme(): TeleBoxColorScheme | undefined {\n if (this.appManager) {\n return this.appManager.boxManager?.prefersColorScheme;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get focused(): string | undefined {\n return this.attributes.focus;\n }\n\n public get focusedView(): View | undefined {\n return this.appManager?.focusApp?.view || this.mainView;\n }\n\n public get polling(): boolean {\n return this.appManager?.polling || false;\n }\n\n public set polling(b: boolean) {\n if (this.appManager) {\n this.appManager.polling = b;\n }\n }\n\n public get cursorStyle(): \"default\" | \"custom\" {\n return this.cursorManager?.style || \"default\";\n }\n\n public set cursorStyle(value: \"default\" | \"custom\") {\n if (!this.cursorManager) {\n throw new Error(\"[WindowManager]: cursor is not enabled, please set { cursor: true }.\");\n }\n this.cursorManager.style = value;\n }\n\n public get mainViewSceneIndex(): number {\n return this._pageState?.index || 0;\n }\n\n public get mainViewSceneDir(): string {\n if (this.appManager) {\n return this.appManager?.getMainViewSceneDir();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get topApp(): string | undefined {\n return this.boxManager?.getTopBox()?.id;\n }\n\n public get mainViewScenesLength(): number {\n return this._pageState?.length || 0;\n }\n\n public get canRedoSteps(): number {\n return this.focusedView?.canRedoSteps || 0;\n }\n\n public get canUndoSteps(): number {\n return this.focusedView?.canUndoSteps || 0;\n }\n\n public get sceneState(): SceneState {\n if (this.appManager) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.appManager.sceneState!;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get pageState(): PageState {\n if (this._pageState) {\n return this._pageState.toObject();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get fullscreen(): boolean {\n return Boolean(this._fullscreen);\n }\n\n /**\n * 查询所有的 App\n */\n public queryAll(): AppProxy[] {\n return Array.from(this.appManager?.appProxies.values() || []);\n }\n\n /**\n * 查询单个 App\n */\n public queryOne(appId: string): AppProxy | undefined {\n return this.appManager?.appProxies.get(appId);\n }\n\n /**\n * Send specific command to DocsViewer / Presentation / Slide app.\n *\n * Static docs and Presentation do not have animation steps, so `prevStep` / `nextStep`\n * are treated as `prevPage` / `nextPage`.\n */\n public dispatchDocsEvent(event: DocsEvent, options: DocsEventOptions = {}): boolean {\n const appId = options.appId || this.focused;\n if (!appId) {\n console.warn(\"not found \" + (options.appId || \"focused app\"));\n return false;\n }\n\n const app = this.queryOne(appId);\n if (!app) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n const isDocsViewerApp =\n appId.startsWith(`${BuiltinApps.DocsViewer}-`) || app.kind === BuiltinApps.DocsViewer;\n const isPresentationApp =\n appId.startsWith(`${PresentationAppKind}-`) || app.kind === PresentationAppKind;\n const isSlideApp = appId.startsWith(`${SlideAppKind}-`) || app.kind === SlideAppKind;\n let appKind = app.kind;\n if (isDocsViewerApp) {\n appKind = BuiltinApps.DocsViewer;\n } else if (isPresentationApp) {\n appKind = PresentationAppKind;\n } else if (isSlideApp) {\n appKind = SlideAppKind;\n }\n\n if (!WindowManager.registered.has(appKind)) {\n console.warn(\"not registered app kind \" + appKind);\n return false;\n }\n\n let page: number | undefined, input: HTMLInputElement | null, scale: number | undefined;\n\n if (isDocsViewerApp) {\n const dom = app.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 case \"scalePage\":\n console.warn(\"not supported event \" + event + \" for app kind \" + appKind);\n return false;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n\n return true;\n }\n\n if (isPresentationApp) {\n const controller = app.appResult as PresentationDocsAppResult | undefined;\n if (!controller) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n case \"prevStep\":\n return controller.prevPage();\n case \"nextPage\":\n case \"nextStep\":\n return controller.nextPage();\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 controller.jumpPage(page - 1);\n case \"scalePage\":\n scale = options.scale;\n if (!isValidDocsPageScale(scale)) {\n console.warn(\"failed to scale, scale should be a number from 1 to 4\");\n return false;\n }\n try {\n controller.moveCamera({\n centerX: 0,\n centerY: 0,\n scale: controller.getOriginScale() * scale,\n });\n return true;\n } catch (error) {\n console.warn(error);\n return false;\n }\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n if (isSlideApp) {\n const controller = app.appResult as SlideDocsAppResult | undefined;\n if (!controller) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n return controller.prevPage();\n case \"nextPage\":\n return controller.nextPage();\n case \"prevStep\":\n return controller.prevStep();\n case \"nextStep\":\n return controller.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 controller.jumpToPage(page);\n case \"scalePage\":\n scale = options.scale;\n if (!isValidDocsPageScale(scale)) {\n console.warn(\"failed to scale, scale should be a number from 1 to 4\");\n return false;\n }\n controller.scaleView(scale);\n return true;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n console.warn(\"not supported app kind \" + app.kind);\n return false;\n }\n\n /**\n * 关闭 APP\n */\n public async closeApp(appId: string): Promise<void> {\n return this.appManager?.closeApp(appId);\n }\n\n /**\n * 切换 focus 到指定的 app, 并且把这个 app 放到最前面\n */\n public focusApp(appId: string) {\n const box = this.boxManager?.getBox(appId);\n if (box) {\n this.boxManager?.focusBox({ appId }, false);\n // 1.0 版本这里会有正式的 api\n (this.boxManager?.teleBoxManager as any).makeBoxTop(box, false);\n }\n }\n\n public moveCamera(\n camera: Partial<Camera> & { animationMode?: AnimationMode | undefined }\n ): void {\n const pureCamera = omit(camera, [\"animationMode\"]);\n const mainViewCamera = { ...this.mainView.camera };\n if (isEqual({ ...mainViewCamera, ...pureCamera }, mainViewCamera)) return;\n this.mainView.moveCamera(camera);\n setTimeout(() => {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }, 500);\n }\n\n public moveCameraToContain(\n rectangle: Rectangle &\n Readonly<{\n animationMode?: AnimationMode;\n }>\n ): void {\n this.mainView.moveCameraToContain(rectangle);\n setTimeout(() => {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }, 500);\n }\n\n public convertToPointInWorld(point: Point): Point {\n return this.mainView.convertToPointInWorld(point);\n }\n\n public setCameraBound(cameraBound: CameraBound): void {\n this.mainView.setCameraBound(cameraBound);\n }\n\n public override onDestroy(): void {\n this._destroy();\n }\n\n public override destroy(): void {\n this._destroy();\n }\n\n private _destroy() {\n this.attributesDeboundceLog?.destroy();\n this.attributesDeboundceLog = undefined;\n this.containerResizeObserver?.disconnect();\n this.appManager?.destroy();\n this.cursorManager?.destroy();\n this.extendPluginManager?.destroy();\n WindowManager.container = undefined;\n WindowManager.wrapper = undefined;\n WindowManager.sizer = undefined;\n WindowManager.isCreated = false;\n if (WindowManager.playground) {\n WindowManager.playground.parentNode?.removeChild(WindowManager.playground);\n }\n WindowManager.params = undefined;\n this.emitter.off(\"mainViewScenePathChange\", this.onMainViewScenePathChangeHandler);\n this._iframeBridge?.destroy();\n this._iframeBridge = undefined;\n log(\"Destroyed\");\n }\n\n private bindMainView(divElement: HTMLDivElement, disableCameraTransform: boolean | undefined) {\n if (this.appManager) {\n this.appManager.bindMainView(divElement, Boolean(disableCameraTransform));\n this.cursorManager?.setMainViewDivElement(divElement);\n }\n }\n\n public get canOperate(): boolean {\n if (isRoom(this.displayer)) {\n return (\n (this.displayer as Room).isWritable &&\n (this.displayer as Room).phase === RoomPhase.Connected\n );\n } else {\n return false;\n }\n }\n\n public get room(): Room {\n return this.displayer as Room;\n }\n\n public safeSetAttributes(attributes: any): void {\n if (this.canOperate) {\n this.setAttributes(attributes);\n if (this.attributesDeboundceLog) {\n this.attributesDeboundceLog.logDebouncedShallowMerge(\n \"safeSetAttributes\",\n attributes\n );\n }\n }\n }\n\n public safeUpdateAttributes(keys: string[], value: any): void {\n if (this.canOperate) {\n this.updateAttributes(keys, value);\n if (this.attributesDeboundceLog) {\n this.attributesDeboundceLog.logDebouncedUpdateAttributes(keys, value);\n }\n }\n }\n\n public setPrefersColorScheme(scheme: TeleBoxColorScheme): void {\n this.appManager?.boxManager?.setPrefersColorScheme(scheme);\n }\n\n public cleanCurrentScene(): void {\n log(\"clean current scene\");\n this.focusedView?.cleanCurrentScene();\n this.Logger &&\n this.Logger.info(\n `[WindowManager]: cleanCurrentScene ${this.focusedView?.focusScenePath}`\n );\n }\n\n public redo(): number {\n return this.focusedView?.redo() || 0;\n }\n\n public undo(): number {\n return this.focusedView?.undo() || 0;\n }\n\n public delete(): void {\n this.focusedView?.delete();\n this.Logger &&\n this.Logger.info(`[WindowManager]: delete ${this.focusedView?.focusScenePath}`);\n }\n\n public copy(): void {\n this.focusedView?.copy();\n }\n\n public paste(): void {\n this.focusedView?.paste();\n }\n\n public duplicate(): void {\n this.focusedView?.duplicate();\n }\n\n public insertText(x: number, y: number, text: string | undefined): string {\n return this.focusedView?.insertText(x, y, text) || \"\";\n }\n\n public insertImage(info: ImageInformation): void {\n return this.focusedView?.insertImage(info);\n }\n\n public completeImageUpload(uuid: string, url: string): void {\n return this.focusedView?.completeImageUpload(uuid, url);\n }\n\n public lockImage(uuid: string, locked: boolean): void {\n return this.focusedView?.lockImage(uuid, locked);\n }\n\n public lockImages(locked: boolean): void {\n return this.focusedView?.lockImages(locked);\n }\n\n public refresh() {\n this._refresh();\n this.appManager?.dispatchInternalEvent(Events.Refresh);\n }\n\n /** @internal */\n public _refresh() {\n this.appManager?.mainViewProxy.rebind();\n if (WindowManager.container) {\n this.bindContainer(WindowManager.container);\n }\n this.appManager?.refresher.refresh();\n }\n\n public setContainerSizeRatio(ratio: number) {\n if (!isNumber(ratio) || !(ratio > 0)) {\n throw new Error(\n `[WindowManager]: updateContainerSizeRatio error, ratio must be a positive number. but got ${ratio}`\n );\n }\n WindowManager.containerSizeRatio = ratio;\n this.containerSizeRatio = ratio;\n internalEmitter.emit(\"containerSizeRatioUpdate\", ratio);\n }\n\n private isDynamicPPT(scenes: SceneDefinition[]) {\n const sceneSrc = scenes[0]?.ppt?.src;\n return sceneSrc?.startsWith(\"pptx://\");\n }\n\n private async ensureAttributes() {\n if (isNull(this.attributes)) {\n await wait(50);\n }\n if (isObject(this.attributes)) {\n if (!this.attributes[Fields.Apps]) {\n this.safeSetAttributes({ [Fields.Apps]: {} });\n }\n if (!this.attributes[Fields.Cursors]) {\n this.safeSetAttributes({ [Fields.Cursors]: {} });\n }\n if (!this.attributes[\"_mainScenePath\"]) {\n this.safeSetAttributes({ _mainScenePath: INIT_DIR });\n }\n if (!this.attributes[\"_mainSceneIndex\"]) {\n this.safeSetAttributes({ _mainSceneIndex: 0 });\n }\n if (!this.attributes[Fields.Registered]) {\n this.safeSetAttributes({ [Fields.Registered]: {} });\n }\n if (!this.attributes[Fields.IframeBridge]) {\n this.safeSetAttributes({ [Fields.IframeBridge]: {} });\n }\n }\n }\n\n private _iframeBridge?: IframeBridge;\n public getIframeBridge() {\n if (!this.appManager) {\n throw new Error(\"[WindowManager]: should call getIframeBridge() after await mount()\");\n }\n this._iframeBridge || (this._iframeBridge = new IframeBridge(this, this.appManager));\n return this._iframeBridge;\n }\n\n public useExtendPlugin(extend: ExtendPluginInstance<any>) {\n this.extendPluginManager?.use(extend);\n }\n}\n\nsetupBuiltin();\n\nexport * from \"./typings\";\n\nexport { BuiltinApps } from \"./BuiltinApps\";\nexport type { BuiltinAppOptions } from \"./BuiltinApps\";\nexport type { PublicEvent } from \"./callback\";\n\nexport * from \"./ExtendPluginManager\";\n"],"names":["Events","MagixEventName","EnsureReconnectEvent","AppAttributes","AppEvents","AppStatus","CursorState","REQUIRE_VERSION","MIN_WIDTH","MIN_HEIGHT","DEFAULT_CONTAINER_RATIO","ROOT_DIR","INIT_DIR","SETUP_APP_DELAY","callbacks","Emittery","AppCreateQueue","item","error","internalEmitter","DatabaseName","db","store","initDb","createDb","setItem","key","val","addRecord","getItem","query","resolve","reject","request","e","event","payload","Prefix","TIMEOUT","getScript","url","text","fetchWithTimeout","executeScript","appName","result","loadApp","name","getResult","define","resource","options","timeout","controller","id","response","AppRegister","fn","params","paramSrc","downloadApp","appClass","app","emitter","kind","kindEmitter","appRegister","genAppId","impl","_a","_b","v4","setViewFocusScenePath","view","focusScenePath","setScenePath","room","scenePath","nextScenePath","getScenePath","dir","index","scene","entireScenes","removeScenes","ScenePathType","addEmitterOnceListener","listener","debounce","mode","makeValidScenePath","displayer","scenes","firstSceneName","putScenes","path","i","isValidScenePath","parseSceneDir","sceneList","sceneDir","ensureValidScenePath","getVersionNumber","version","versionString","s","wait","time","isRootDirPage","prev","cur","AppListeners","manager","data","state","AppCreateError","AppNotRegisterError","AppManagerNotInitError","WhiteWebSDKInvalidError","ParamsInvalidError","BoxNotCreatedError","InvalidScenePath","BoxManagerNotFoundError","BindContainerRoomPhaseInvalidError","t","r","o","onObjectByEvent","object","func","listenUpdated","events","unlistenUpdated","reaction","safeListenPropsUpdated","getProps","callback","onDestroyed","disposeListenUpdated","disposeReaction","props","isObject","UpdateEventKind","StorageEvent","message","plainObjectKeys","isRef","has","makeRef","v","genUID","STORAGE_NS","Storage","context","defaultState","SideEffectManager","rawState","get","rawValue","handler","keys","value","refValue","size","mapValues","noop","defaultValue","actions","diffs","action","oldValue","newValue","k","curValue","AppContext","boxManager","appId","appProxy","appOptions","autorun","toJS","listenDisposed","unlistenDisposed","appAttr","dom","box","attributes","storeId","storage","args","appScopeEvent","nextIndex","after","needRemoveIndex","type","AppPageStateImpl","node","eventemitter3","module","prefix","EE","once","addListener","evt","clearEvent","EventEmitter2","names","handlers","i2","l","ee","listeners","a1","a2","a3","a4","a5","len","length","j","EventEmitter","__assign","t2","s2","n","p","__rest","e2","prevTime","onNextFrame","timestamp","timeToCall","createStep","setRunNextFrame","processToRun","processToRunNextFrame","numThisFrame","isProcessing2","cancelled","toKeepAlive","renderStep","process","indexOfCallback","frame2","process_1","keepAlive","immediate","addToCurrentBuffer","buffer","maxElapsed","defaultElapsed","useDefaultElapsed","willRunNextFrame","isProcessing","frame","stepsOrder","setWillRunNextFrame","willRun","steps","acc","sync","step","startLoop","processStep","stepId","processFrame","clamp$1","min","max","sanitize","singleColorRegex","number","alpha","scale","createUnitType","unit","degrees","percent","px","progressPercentage","getValueFromFunctionString","clampRgbUnit","isRgba","isHsla","getValuesAsArray","splitColorValues","terms","values","valuesArray","rgbaTemplate","red","green","blue","alpha2","hslaTemplate","hue","saturation","lightness","rgbUnit","isColorString","color2","colorType","rgba","alpha$1","hsla","hex","r2","g","b","color","createStyler","onRead2","onRender2","uncachedValues","_c","useCache","_a2","changedValues","hasChanged","setValue","currentValue","styler","forceRead","useCached","forceRender","CAMEL_CASE_PATTERN","REPLACE_TEMPLATE","camelToDash","str","camelCache","dashCache","prefixes","numPrefixes","isBrowser","testElement","setDashPrefix","prefixed","testPrefix","noPrefix","prefixedPropertyName","setServerProperty","prefixer","asDashCase","cache2","axes","order","transformProps","axesAcc","axesKey","transformPropDictionary","dict","isTransformProp","sortTransformProps","a","transformOriginProps","isTransformOriginProp","int","valueTypes","getValueType","getValueAsType","SCROLL_LEFT","SCROLL_TOP","scrollKeys","blacklist","translateAlias","isCustomTemplate","buildTransform","transform","transformKeys","transformIsDefault","enableHardwareAcceleration","allowTransformNone","transformString","transformHasZ","numTransformKeys","buildStyleProperty","styles","transformOrigin","isDashCase","hasTransform","hasTransformOrigin","valueType","valueAsType","createStyleBuilder","_d","_e","onRead","element","preparseOutput","defaultValueType","domValue","onRender","buildStyles","hasCSSVariable","numChangedValues","cssStyler","createCssStyler","camelCaseAttributes","defaultOrigin","svgAttrsTemplate","progressToPixels","progress","unmeasured","calcOrigin","origin","offset","calculateSVGTransformOrigin","dimensions","originX","originY","svgStyleConfig","buildSVGAttrs","totalPathLength","cssBuilder","attrs","attrX","attrY","pathLength","pathSpacing","pathOffset","style2","attrKey","createAttrBuilder","getDimensions","getSVGElementDimensions","isPath","svgStyler","buildAttrs","svg","viewport","scrollTop","scrollLeft","cache","isHTMLElement","isSVGElement","createDOMStyler","getStyler","nodeOrSelector","shallowequal","objA","objB","compare","compareContext","ret","keysA","keysB","bHasOwnProperty","idx","valueA","valueB","e$1","s$1","t$1","r$1","o2","t3","s3","r3","e3","u2","e4","t4","i3","c2","u","c","TELE_BOX_COLOR_SCHEME","TELE_BOX_COLOR_SCHEME2","TELE_BOX_STATE","TELE_BOX_STATE2","TELE_BOX_EVENT","TELE_BOX_EVENT2","TELE_BOX_DELEGATE_EVENT","TELE_BOX_DELEGATE_EVENT2","TELE_BOX_RESIZE_HANDLE","TELE_BOX_RESIZE_HANDLE2","TeleBoxDragHandleType","clamp","preventEvent","ev","flattenEvent","genUniqueKey","defaultBoxCount","getBoxDefaultName","isTruthy","isFalsy","DefaultTitleBar","readonly","title","buttons","onEvent","onDragStart","namespace","boxStatus","forceTop","forceNormal","now","clientX","clientY","state2","btn","$titleArea","$buttonsContainer","iconClassName","isActive","teleTitleBarBtnIndex","$btn","target","$dragArea","className","TeleBox","prefersColorScheme","darkMode","visible","width","height","minWidth","minHeight","x","y","minimized","maximized","resizable","draggable","fence","fixRatio","focus","zIndex","titleBar","content","footer","containerRect","collectorRect","lastNotMinimizedBoxStatus","isDragContent","combine","createVal","boxStatus$","lastNotMinimizedBoxStatus$","prefersColorScheme$","prefersColorScheme2","_","skipUpdate","darkMode$","prefersDark","darkMode2","containerRect$","collectorRect$","forceTop$","forceTop2","forceNormal$","forceNormal2","isDragContent$","title$","title2","visible$","visible2","readonly$","readonly2","resizable$","draggable$","fence$","fixRatio$","zIndex$","zIndex2","focus$","focus2","minimized$","minimized2","maximized$","maximized2","state$","boxStatus2","minSize$","intrinsicSize$","minSize","size$","intrinsicSize","visualSize$","containerRect2","collectorRect2","intrinsicCoord$","coord","coord$","intrinsicCoord","lastNotMinimizedBoxStatus2","$userContent$","$userFooter$","$userStyles$","newHeight","container","$styles","root","bindClassName","el","predicate","wrappedClassName","minimizedClassName","maximizedClassName","MAXIMIZED_TIMER_ID","boxStyler","translateX","translateY","absoluteWidth","absoluteHeight","$boxMain","$titleBar","$contentWrap","$content","last$userStyles","$userStyles","last$userContent","$userContent","$footer","last$userFooter","$userFooter","$resizeHandles","handleType","$handle","TRACKING_DISPOSER_ID","transformingClassName","$trackMask","trackStartX","trackStartY","trackStartWidth","trackStartHeight","trackStartPageX","trackStartPageY","trackingHandle","handleTracking","pageX","pageY","offsetX","offsetY","xOverflowOffset","yOverflowOffset","handleTrackEnd","handleTrackStart","cursor","collectorSVG","TeleBoxCollector","onClick","getBoxesStatus","boxesStatus","status","hasMinimizedBox","$collector","TELE_BOX_MANAGER_EVENT","TELE_BOX_MANAGER_EVENT2","MaxTitleBar","config","children","$tab","rect","boxes","$titlesArea","AppMenu","minimizedBoxesStatus","arr","appItem","titleDiv","items","TeleBoxManager","collector","useBoxesStatus","currentTopBox","topBox2","prefersDark$","prefersDark2","fence2","collector$","collector2","rootRect","closeBtnClassName","checkFocusBox","maxNormalBoxZIndex","maxMaximizedBoxZIndex","targetBox","isFocusChanged","maxTopBox","boxId","oldBoxStatus","newTopBox","curTopBox","_skipUpdate","minimizedBoxes","notMinimizedBoxes","maximizedBoxes","normalBoxes","lastNotMinimizedBoxesStatus","maxZIndex","smartPosition","box2","__","topBox","boxID","boxOrID","effectFunc","index2","deletedBoxes","focusChanged","vx","forceTopBox","maxX","vy","maxY","maximizedBox","currentBox","createBoxManager","boxEmitter","BoxManagerClass","getExtendClass","BoxManager","WindowManager","createTeleBoxManagerConfig","colorScheme","minwidth","minheight","createBoxConfig","map","initManagerState","TeleBoxManagerClass","TeleBoxCollectorClass","formatAttributesLogObjectKey","stringifyForAttributesLog","seen","obj","nextSeen","isShallowMergeAttributesRecord","ARGUS_LOG_INFO_MAX_LENGTH","truncateArgusLogInfoMessage","ellipsis","keysPathEqual","log","LocalConsole","debounceTime","ms","ArgusLog","logger","body","label","debounced","emit","segments","parts","keysCopy","last","setupWrapper","playground","sizer","wrapper","mainViewElement","checkVersion","WhiteVersion","findMemberByUid","uid","roomMembers","maxMemberId","member","createInvisiblePlugin","promise","wasReadonly","canOperate","isRoomTokenWritable","pRetry","count","abort","interval","run","blank_object","run_all","fns","is_function","thing","safe_not_equal","src_url_equal_anchor","src_url_equal","element_src","is_empty","append","insert","anchor","detach","space","attr","attribute","set_data","set_style","important","current_component","set_current_component","component","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","add_render_callback","seen_callbacks","flushidx","saved_component","update","$$","dirty","flush_render_callbacks","filtered","targets","outroing","transition_in","block","local","mount_component","customElement","fragment","after_update","new_on_destroy","destroy_component","detaching","make_dirty","init","instance","create_fragment","not_equal","append_styles","parent_component","ready","rest","nodes","SvelteComponent","$$props","cursorName","tagName","backgroundColor","appliance","src","avatar","theme","cursorTagBackgroundColor","opacity","pencilEraserSize","custom","computedAvatarStyle","hasName","isEmpty","$$invalidate","hasTagName","hasAvatar","display","isLaserPointer","ApplianceNames","isLaserPointerPencilEraser","pencilEraserSize3ImageOffset","staticCircle","circleUrl","crossUrl","cssCursor","makeStyleContent","$style","enableLocal","memberState","shapeAppliances","remoteIcon","applianceName","Cursor","memberId","cursorManager","position","focusView","viewRect","viewCamera","style","point","wrapperRect","App","memberApplianceName","memberColorHex","userApplianceIcons","applianceIcons","iconsKey","userApplianceSrc","customApplianceSrc","omit","pencil","selector","eraser","shape","laser","pencilEraser1","pencilEraser2","pencilEraser3","ApplianceMap","LocalCursorSideEffectId","CursorManager","enableCursor","cursorOptions","cursorInstance","isTouch","isRoom","focusApp","div","self","isPencilEraser","baseClass","extendClass","AppManager","AttributesDelegate","AppProxy","Fields","isDynamicPPT","attrNames","pick","stateName","camera","cursorState","mainView","oldState","createAttributesDelegate","AttributesDelegateClass","calculateNextIndex","pageState","maxIndex","_AppProxy","isAddApp","sceneIndex","appState","fullPath","appImpl","appParams","AppContextClass","boxInitState","currentMainViewScenePath","err","currentAppState","AppProxyClass","sceneState","eventName","fullScenePath","needCloseBox","cleanAttrs","ViewManager","createView","setDefaultCameraBound","MainViewProxy","ViewMode","mainViewCamera","isWritable","observedSize","wrapperMatchesDom","viewIsStale","isEqual","playgroundSizeChangeListener","_f","_h","_g","reason","viewWidth","viewHeight","targetElement","screen","resizeObserver","mainViewScenePath","divElement","disableCameraTransform","AnimationMode","centerX","centerY","needScale","RedoUndo","focused","redoListener","undoListener","prevFocused","changed","windowManger","sceneName","isRecreate","currentIndex","entries","apps","registered","ids","isReadonly","isManualWritable","pageName","isInteger","removing","reconnectRefresher","isPlayer","needClose","mainSceneIndex","mainScenePath","redoUndo","appIds","orderedAppIds","orderBy","hasRoot","visualViewport","current","needFocus","scenePathType","validScenePath","focusAppId","reconnected","ResizeObserver","ResizeObserverPolyfill","ContainerResizeObserver","containerResizeObserver","PageStateImpl","ReconnectRefresher","ctx","phase","RoomPhase","isFunction","disposer","replaceRoomFunction","delegateSeekToProgressTime","disable","_scalePptToFit","_putScenes","currentScenePath","delegateRemoveScenes","originRemoveScenes","player","originSeek","newSeek","seekResult","loadAppMediaPlayer","mod","loadAppDocsViewer","loadAppPresentation","setupBuiltin","BuiltinApps","RefreshIDs","times","iteratee","_IframeBridge","appManager","PlayerPhase","iframeSrc","plugin","initAttributes","wrapperDidMountListener","didMount","didUpdate","iframe","animationMode","page","genScenes","loadListener","_state","cameraState","setWidth","setHeight","transformOriginX","transformOriginY","iframeXDiff","iframeYDiff","cssList","_attributes","zIndexString","css","eventPayload","currentApplianceName","IframeBridge","ExtendPlugin","ExtendPluginManager","extend","resolveAppOptions","registeredOptions","override","SlideAppKind","PresentationAppKind","MinDocsPageScale","MaxDocsPageScale","isValidDocsPageScale","_WindowManager","InvisiblePlugin","backgroundImage","backgroundImageRect","backgroundImageCSS","backgroundImageVisible","containerSizeRatio","debug","AppManagerClass","CursorManagerClass","chessboard","overwriteStyles","fullscreen","Errors.BindContainerRoomPhaseInvalidError","mergeAppOptions","Errors.AppManagerNotInitError","Errors.ParamsInvalidError","Errors.AppCreateError","Errors.InvalidScenePath","appScenePath","prevIndex","boxState","cursorUIDs","isDocsViewerApp","isPresentationApp","isSlideApp","appKind","input","click","pureCamera","rectangle","cameraBound","scheme","info","uuid","locked","ratio","isNumber","sceneSrc","isNull","_manager"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/callback.ts","../src/Utils/AppCreateQueue.ts","../src/InternalEmitter.ts","../src/Register/storage.ts","../src/Register/loader.ts","../src/Register/index.ts","../src/Utils/Common.ts","../src/AppListener.ts","../src/Utils/error.ts","../node_modules/.pnpm/side-effect-manager@0.1.5/node_modules/side-effect-manager/dist/side-effect-manager.es.js","../src/Utils/Reactive.ts","../src/App/Storage/StorageEvent.ts","../src/App/Storage/utils.ts","../src/App/Storage/index.ts","../src/App/AppContext.ts","../src/App/AppPageStateImpl.ts","../node_modules/.pnpm/@netless+telebox-insider@0.3.0/node_modules/@netless/telebox-insider/dist/telebox-insider.es.js","../src/BoxManager.ts","../src/Utils/attributesLogStringify.ts","../src/Utils/log.ts","../src/Helper.ts","../node_modules/.pnpm/svelte@3.59.2/node_modules/svelte/internal/index.mjs","../src/Cursor/Cursor.svelte","../src/Cursor/icons2.ts","../src/Cursor/Cursor.ts","../src/image/pencil-cursor.png","../src/image/selector-cursor.png","../src/image/eraser-cursor.png","../src/image/shape-cursor.svg","../src/image/text-cursor.svg","../src/image/laser-pointer-cursor.svg","../src/image/pencil-eraser-1.svg","../src/image/pencil-eraser-2.svg","../src/image/pencil-eraser-3.svg","../src/Cursor/icons.ts","../src/Cursor/index.ts","../src/Utils/extendClass.ts","../src/AttributesDelegate.ts","../src/Page/index.ts","../src/BoxEmitter.ts","../src/App/AppProxy.ts","../src/View/ViewManager.ts","../src/View/MainView.ts","../src/RedoUndo.ts","../src/AppManager.ts","../src/ContainerResizeObserver.ts","../src/PageState.ts","../src/ReconnectRefresher.ts","../src/Utils/RoomHacker.ts","../src/BuiltinApps.ts","../src/View/IframeBridge.ts","../src/ExtendPluginManager.ts","../src/Utils/resolveAppOptions.ts","../src/utils/extendClass.ts","../src/index.ts"],"sourcesContent":["export enum Events {\n AppMove = \"AppMove\",\n AppFocus = \"AppFocus\",\n AppResize = \"AppResize\",\n AppBoxStateChange = \"AppBoxStateChange\",\n GetAttributes = \"GetAttributes\",\n UpdateWindowManagerWrapper = \"UpdateWindowManagerWrapper\",\n InitReplay = \"InitReplay\",\n WindowCreated = \"WindowCreated\",\n SetMainViewScenePath = \"SetMainViewScenePath\",\n SetMainViewSceneIndex = \"SetMainViewSceneIndex\",\n SetAppFocusIndex = \"SetAppFocusIndex\",\n SwitchViewsToFreedom = \"SwitchViewsToFreedom\",\n MoveCamera = \"MoveCamera\",\n MoveCameraToContain = \"MoveCameraToContain\",\n CursorMove = \"CursorMove\",\n RootDirRemoved = \"RootDirRemoved\",\n Refresh = \"Refresh\",\n InitMainViewCamera = \"InitMainViewCamera\",\n}\n\nexport const MagixEventName = \"__WindowManger\";\nexport const EnsureReconnectEvent = \"__WindowMangerEnsureReconnected__\";\n\nexport enum AppAttributes {\n Size = \"size\",\n Position = \"position\",\n SceneIndex = \"SceneIndex\",\n ZIndex = \"zIndex\",\n}\n\nexport enum AppEvents {\n setBoxSize = \"setBoxSize\",\n setBoxMinSize = \"setBoxMinSize\",\n destroy = \"destroy\",\n}\n\nexport enum AppStatus {\n StartCreate = \"StartCreate\",\n}\n\nexport enum CursorState {\n Leave = \"leave\",\n Normal = \"normal\",\n}\n\nexport const REQUIRE_VERSION = \"2.16.1\";\n\nexport const MIN_WIDTH = 340 / 720;\nexport const MIN_HEIGHT = 340 / 720;\n\nexport const SET_SCENEPATH_DELAY = 100; // 设置 scenePath 的延迟事件\n\nexport const DEFAULT_CONTAINER_RATIO = 9 / 16;\n\nexport const ROOT_DIR = \"/\";\nexport const INIT_DIR = \"/init\";\n\nexport const SETUP_APP_DELAY = 50;\n","import Emittery from \"emittery\";\nimport type {\n TeleBoxColorScheme,\n TELE_BOX_STATE,\n TeleBoxState,\n NotMinimizedBoxState,\n} from \"@netless/telebox-insider\";\nimport type { CameraState, SceneState, View, ViewVisionMode } from \"white-web-sdk\";\nimport type { LoadAppEvent } from \"./Register\";\nimport type { PageState } from \"./Page\";\nimport type {\n BoxBlurredPayload,\n BoxClosePayload,\n BoxFocusPayload,\n BoxMovePayload,\n BoxResizePayload,\n BoxStateChangePayload,\n} from \"./BoxEmitter\";\nimport type { AppPayload } from \"./typings\";\n\nexport type PublicEvent = {\n mainViewModeChange: ViewVisionMode;\n boxStateChange: `${TELE_BOX_STATE}`;\n darkModeChange: boolean;\n prefersColorSchemeChange: TeleBoxColorScheme;\n cameraStateChange: CameraState;\n mainViewScenePathChange: string;\n mainViewSceneIndexChange: number;\n focusedChange: string | undefined;\n mainViewScenesLengthChange: number;\n canRedoStepsChange: number;\n canUndoStepsChange: number;\n loadApp: LoadAppEvent;\n ready: undefined; // 所有 APP 创建完毕时触发\n sceneStateChange: SceneState;\n pageStateChange: PageState;\n fullscreenChange: boolean;\n appsChange: string[]; // APP 列表变化时触发\n onBoxMove: BoxMovePayload;\n onBoxResize: BoxResizePayload;\n onBoxFocus: BoxFocusPayload;\n onBoxBlurred: BoxBlurredPayload;\n onBoxClose: BoxClosePayload;\n onBoxStateChange: BoxStateChangePayload;\n onMainViewMounted: View;\n onMainViewRebind: View;\n onAppViewMounted: AppPayload;\n onAppSetup: string;\n onAppScenePathChange: AppPayload;\n onBoxesStatusChange: Map<string, TeleBoxState>;\n onLastNotMinimizedBoxesStatusChange: Map<string, NotMinimizedBoxState>;\n};\n\nexport type CallbacksType = Emittery<PublicEvent>;\nexport const callbacks: CallbacksType = new Emittery();\n","import { callbacks } from \"../callback\";\nimport { SETUP_APP_DELAY } from \"../constants\";\n\nexport type Invoker<T = any> = () => Promise<T | undefined>;\n\nexport class AppCreateQueue {\n private list: Invoker[] = [];\n private currentInvoker: Invoker | undefined;\n private timer: number | undefined;\n public isEmit = false;\n\n private initInterval() {\n return setInterval(() => {\n this.invoke();\n }, 50);\n }\n\n public push<T>(item: Invoker<T>) {\n this.list.push(item);\n this.invoke();\n if (this.timer === undefined && this.list.length > 0) {\n this.timer = this.initInterval();\n }\n }\n\n public invoke() {\n if (this.list.length === 0) {\n return;\n }\n if (this.currentInvoker !== undefined) {\n return;\n }\n\n const item = this.list.shift();\n if (item) {\n this.currentInvoker = item;\n item()\n .then(() => {\n this.invoked();\n })\n .catch(error => {\n console.error(`[WindowManager]: create app error: ${error.message}`);\n this.invoked();\n });\n }\n }\n\n private invoked = () => {\n this.currentInvoker = undefined;\n if (this.list.length === 0) {\n this.clear();\n this.emitReady();\n }\n };\n\n private clear = () => {\n clearInterval(this.timer);\n this.timer = undefined;\n };\n\n public emitReady() {\n if (!this.isEmit) {\n setTimeout(() => {\n callbacks.emit(\"ready\");\n }, SETUP_APP_DELAY);\n }\n this.isEmit = true;\n }\n\n public empty() {\n this.list = [];\n this.clear();\n }\n\n public destroy() {\n if (this.timer) {\n this.clear();\n }\n }\n}\n","import Emittery from \"emittery\";\nimport type { AppInitState, CursorMovePayload } from \"./index\";\nimport type { NotMinimizedBoxState, TeleBoxState } from \"@netless/telebox-insider\";\n\nexport type RemoveSceneParams = {\n scenePath: string;\n index?: number;\n};\n\nexport type EmitterEvent = {\n onCreated: undefined;\n InitReplay: AppInitState;\n error: Error;\n seekStart: undefined;\n seek: number;\n mainViewMounted: undefined;\n observerIdChange: number;\n boxStateChange: string;\n playgroundSizeChange: DOMRect;\n startReconnect: undefined;\n onReconnected: undefined;\n removeScenes: RemoveSceneParams;\n cursorMove: CursorMovePayload;\n updateManagerRect: undefined;\n focusedChange: { focused: string | undefined; prev: string | undefined };\n rootDirRemoved: undefined; // 根目录整个被删除\n rootDirSceneRemoved: string; // 根目录下的场景被删除\n setReadonly: boolean;\n changePageState: undefined;\n writableChange: boolean;\n containerSizeRatioUpdate: number;\n wrapperRectChange: { width: number; height: number; origin?: string };\n boxesStatusChange: Map<string, TeleBoxState>;\n lastNotMinimizedBoxesStatusChange: Map<string, NotMinimizedBoxState>;\n};\n\nexport type EmitterType = Emittery<EmitterEvent>;\nexport const internalEmitter: EmitterType = new Emittery();\n","const DatabaseName = \"__WindowManagerAppCache\";\n\nlet db: IDBDatabase;\nlet store: IDBObjectStore;\n\nexport type Item = {\n kind: string;\n sourceCode: string;\n};\n\nexport const initDb = async () => {\n db = await createDb();\n};\n\nexport const setItem = (key: string, val: any) => {\n if (!db) return;\n return addRecord(db, { kind: key, sourceCode: val });\n};\n\nexport const getItem = async (key: string): Promise<Item | null> => {\n if (!db) return null;\n return await query(db, key);\n};\n\nexport const removeItem = (key: string) => {\n if (!db) return;\n return deleteRecord(db, key);\n};\n\nfunction createDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DatabaseName, 2);\n request.onerror = e => {\n reject(e);\n };\n\n request.onupgradeneeded = (event: any) => {\n const db = event.target.result as IDBDatabase;\n if (!db.objectStoreNames.contains(\"apps\")) {\n store = db.createObjectStore(\"apps\", { keyPath: \"kind\" });\n store.createIndex(\"kind\", \"kind\", { unique: true });\n }\n };\n\n request.onsuccess = () => {\n const db = request.result;\n resolve(db);\n };\n });\n}\n\nfunction query<T>(db: IDBDatabase, val: string): Promise<T | null> {\n return new Promise((resolve, reject) => {\n const index = db.transaction([\"apps\"]).objectStore(\"apps\").index(\"kind\");\n const request = index.get(val);\n request.onerror = e => reject(e);\n request.onsuccess = () => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n}\n\nfunction addRecord(db: IDBDatabase, payload: any): Promise<void> {\n return new Promise((resolve, reject) => {\n const request = db.transaction([\"apps\"], \"readwrite\").objectStore(\"apps\").add(payload);\n request.onsuccess = () => resolve();\n request.onerror = () => reject();\n });\n}\n\nfunction deleteRecord(db: IDBDatabase, key: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const request = db.transaction([\"apps\"], \"readwrite\").objectStore(\"apps\").delete(key);\n request.onsuccess = () => resolve();\n request.onerror = () => reject();\n });\n}\n","import { callbacks } from \"../callback\";\nimport { getItem, setItem } from \"./storage\";\nimport type { NetlessApp } from \"../typings\";\n\nconst Prefix = \"NetlessApp\";\n\nconst TIMEOUT = 10000; // 下载 script 10 秒超时\n\nexport const getScript = async (url: string): Promise<string> => {\n const item = await getItem(url);\n if (item) {\n return item.sourceCode;\n } else {\n const result = await fetchWithTimeout(url, { timeout: TIMEOUT });\n const text = await result.text();\n await setItem(url, text);\n return text;\n }\n};\n\nexport const executeScript = (text: string, appName: string): NetlessApp => {\n let result = Function(text + `\\n;return ${appName}`)();\n if (typeof result === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n result = window[appName];\n }\n return result;\n};\n\nexport const loadApp = async (url: string, key: string, name?: string): Promise<NetlessApp> => {\n const appName = name || Prefix + key;\n callbacks.emit(\"loadApp\", { kind: key, status: \"start\" });\n\n let text: string;\n try {\n text = await getScript(url);\n if (!text || text.length === 0) {\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: \"script is empty.\" });\n throw new Error(\"[WindowManager]: script is empty.\");\n }\n } catch (error) {\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: error.message });\n throw error;\n }\n return getResult(text, appName, key);\n};\n\nconst getResult = (text: string, appName: string, key: string): NetlessApp => {\n try {\n const result = executeScript(text, appName);\n callbacks.emit(\"loadApp\", { kind: key, status: \"success\" });\n return result;\n } catch (error: any) {\n if (error.message.includes(\"Can only have one anonymous define call per script file\")) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const define = window.define;\n if (\"function\" == typeof define && define.amd) {\n delete define.amd;\n }\n const result = executeScript(text, appName);\n callbacks.emit(\"loadApp\", { kind: key, status: \"success\" });\n return result;\n }\n callbacks.emit(\"loadApp\", { kind: key, status: \"failed\", reason: error.message });\n throw error;\n }\n};\n\nasync function fetchWithTimeout(resource: string, options: RequestInit & { timeout: number }) {\n const { timeout = 10000 } = options;\n\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: controller.signal,\n headers: {\n \"content-type\": \"text/plain\",\n },\n });\n clearTimeout(id);\n\n return response;\n}\n","import Emittery from \"emittery\";\nimport { loadApp } from \"./loader\";\nimport type { NetlessApp, RegisterEvents, RegisterParams } from \"../typings\";\n\nexport type LoadAppEvent = {\n kind: string;\n status: \"start\" | \"success\" | \"failed\";\n reason?: string;\n};\n\nexport type SyncRegisterAppPayload = { kind: string; src: string; name: string | undefined };\nexport type SyncRegisterApp = (payload: SyncRegisterAppPayload) => void;\n\nclass AppRegister {\n public kindEmitters: Map<string, Emittery<RegisterEvents>> = new Map();\n public registered: Map<string, RegisterParams> = new Map();\n public appClassesCache: Map<string, Promise<NetlessApp>> = new Map();\n public appClasses: Map<string, () => Promise<NetlessApp>> = new Map();\n\n private syncRegisterApp: SyncRegisterApp | null = null;\n\n public setSyncRegisterApp(fn: SyncRegisterApp) {\n this.syncRegisterApp = fn;\n }\n\n public onSyncRegisterAppChange = (payload: SyncRegisterAppPayload) => {\n this.register({ kind: payload.kind, src: payload.src });\n };\n\n public async register(params: RegisterParams): Promise<void> {\n this.appClassesCache.delete(params.kind);\n this.registered.set(params.kind, params);\n\n const paramSrc = params.src;\n let downloadApp: () => Promise<NetlessApp>;\n\n if (typeof paramSrc === \"string\") {\n downloadApp = async () => {\n const result = (await loadApp(paramSrc, params.kind, params.name)) as any;\n if (result.__esModule) {\n return result.default;\n }\n return result;\n };\n if (this.syncRegisterApp) {\n this.syncRegisterApp({ kind: params.kind, src: paramSrc, name: params.name });\n }\n }\n if (typeof paramSrc === \"function\") {\n downloadApp = async () => {\n let appClass = (await paramSrc()) as any;\n if (appClass) {\n if (appClass.__esModule || appClass.default) {\n appClass = appClass.default;\n }\n return appClass;\n } else {\n throw new Error(`[WindowManager]: load remote script failed, ${paramSrc}`);\n }\n };\n }\n if (typeof paramSrc === \"object\") {\n downloadApp = async () => paramSrc;\n }\n this.appClasses.set(params.kind, async () => {\n let app = this.appClassesCache.get(params.kind);\n if (!app) {\n app = downloadApp();\n this.appClassesCache.set(params.kind, app);\n }\n return app;\n });\n\n if (params.addHooks) {\n const emitter = this.createKindEmitter(params.kind);\n if (emitter) {\n params.addHooks(emitter);\n }\n }\n }\n\n public unregister(kind: string) {\n this.appClasses.delete(kind);\n this.appClassesCache.delete(kind);\n this.registered.delete(kind);\n const kindEmitter = this.kindEmitters.get(kind);\n if (kindEmitter) {\n kindEmitter.clearListeners();\n this.kindEmitters.delete(kind);\n }\n }\n\n public async notifyApp<T extends keyof RegisterEvents>(\n kind: string,\n event: T,\n payload: RegisterEvents[T]\n ) {\n const emitter = this.kindEmitters.get(kind);\n await emitter?.emit(event, payload);\n }\n\n private createKindEmitter(kind: string) {\n if (!this.kindEmitters.has(kind)) {\n const emitter = new Emittery<RegisterEvents>();\n this.kindEmitters.set(kind, emitter);\n }\n return this.kindEmitters.get(kind);\n }\n}\n\nexport const appRegister = new AppRegister();\n","import { appRegister } from \"../Register\";\nimport { debounce } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { ROOT_DIR } from \"../constants\";\nimport { ScenePathType } from \"white-web-sdk\";\nimport { v4 } from \"uuid\";\nimport type { PublicEvent } from \"../callback\";\nimport type { Displayer, ViewVisionMode, Room, View, SceneDefinition } from \"white-web-sdk\";\nimport type Emittery from \"emittery\";\n\nexport const genAppId = async (kind: string) => {\n const impl = await appRegister.appClasses.get(kind)?.();\n if (impl && impl.config?.singleton) {\n return kind;\n }\n return `${kind}-${v4().replace(\"-\", \"\").slice(0, 8)}`;\n};\n\nexport const setViewFocusScenePath = (view: View, focusScenePath: string) => {\n if (view.focusScenePath !== focusScenePath) {\n view.focusScenePath = focusScenePath;\n return view;\n }\n};\n\nexport const setViewSceneIndex = (view: View, index: number) => {\n if (view.focusSceneIndex !== index) {\n view.focusSceneIndex = index;\n return view;\n }\n};\n\nexport const setScenePath = (room: Room | undefined, scenePath: string) => {\n if (room && room.isWritable) {\n if (room.state.sceneState.scenePath !== scenePath) {\n const nextScenePath = scenePath === \"/\" ? \"\" : scenePath;\n room.setScenePath(nextScenePath);\n }\n }\n};\n\nexport const getScenePath = (\n room: Room | undefined,\n dir: string | undefined,\n index: number\n): string | undefined => {\n if (room && dir) {\n const scenes = entireScenes(room);\n const scene = scenes[dir]?.[index];\n if (scene) {\n return `${dir}/${scene.name}`;\n }\n }\n};\n\nexport const removeScenes = (room: Room | undefined, scenePath: string, index?: number) => {\n if (room) {\n const type = room.scenePathType(scenePath);\n if (type !== ScenePathType.None) {\n (room.removeScenes as any)(scenePath, index);\n }\n }\n};\n\nexport const setViewMode = (view: View, mode: ViewVisionMode) => {\n if (!(view as any).didRelease && view.mode !== mode) {\n view.mode = mode;\n }\n};\n\nexport const emitError = (error: Error) => {\n if (internalEmitter.listenerCount(\"error\") > 0) {\n internalEmitter.emit(\"error\", error);\n } else {\n console.log(\"[WindowManager]:\", error);\n }\n};\n\nexport const addEmitterOnceListener = (event: any, listener: any) => {\n internalEmitter.once(event).then(listener);\n};\n\nexport const notifyMainViewModeChange = debounce(\n (callbacks: Emittery<PublicEvent>, mode: ViewVisionMode) => {\n callbacks.emit(\"mainViewModeChange\", mode);\n },\n 200\n);\n\nexport const makeValidScenePath = (displayer: Displayer, scenePath: string, index = 0) => {\n const scenes = entireScenes(displayer)[scenePath];\n if (!scenes) return;\n const scene = scenes[index];\n if (!scene) return;\n const firstSceneName = scene.name;\n if (scenePath === ROOT_DIR) {\n return `/${firstSceneName}`;\n } else {\n return `${scenePath}/${firstSceneName}`;\n }\n};\n\nexport const entireScenes = (displayer: Displayer) => {\n return displayer.entireScenes();\n};\n\nexport const putScenes = (\n room: Room | undefined,\n path: string,\n scenes: SceneDefinition[],\n index?: number\n) => {\n for (let i = 0; i < scenes.length; ++i) {\n if (scenes[i].name?.includes(\"/\")) {\n throw new Error(\"scenes name can not have '/'\");\n }\n }\n return room?.putScenes(path, scenes, index);\n};\n\nexport const isValidScenePath = (scenePath: string) => {\n return scenePath.startsWith(\"/\");\n};\n\nexport const parseSceneDir = (scenePath: string) => {\n const sceneList = scenePath.split(\"/\");\n sceneList.pop();\n let sceneDir = sceneList.join(\"/\");\n // \"/page1\" 的 dir 为 \"/\"\n if (sceneDir === \"\") {\n sceneDir = \"/\";\n }\n return sceneDir;\n};\n\nexport const ensureValidScenePath = (scenePath: string) => {\n if (scenePath.endsWith(\"/\")) {\n return scenePath.slice(0, -1);\n } else {\n return scenePath;\n }\n};\n\nexport const getVersionNumber = (version: string) => {\n const versionString = version\n .split(\".\")\n .map(s => s.padStart(2, \"0\"))\n .join(\"\");\n return parseInt(versionString);\n};\n\nexport const wait = (time: number) => new Promise(resolve => setTimeout(resolve, time));\n\n// rootDirPage: /page1 || / page2\n// notRootDirPage: /dir1/page1 || /dir1/page2\nexport const isRootDirPage = (scenePath: string) => {\n const delimiterCount = scenePath.split(\"\").reduce((prev, cur) => {\n if (cur === ROOT_DIR) {\n prev += 1;\n }\n return prev;\n }, 0);\n return delimiterCount === 1;\n};\n","import { callbacks } from \"./callback\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { Events, MagixEventName } from \"./constants\";\n// import { isEqual, omit } from \"lodash\";\nimport { setViewFocusScenePath } from \"./Utils/Common\";\nimport type { Event } from \"white-web-sdk\";\nimport type { AppManager } from \"./AppManager\";\nimport type { TeleBoxState } from \"@netless/telebox-insider\";\n\ntype SetAppFocusIndex = {\n type: \"main\" | \"app\";\n appID?: string;\n index: number;\n};\n\nexport class AppListeners {\n private displayer = this.manager.displayer;\n\n constructor(private manager: AppManager) {}\n\n private get boxManager() {\n return this.manager.boxManager;\n }\n\n public addListeners() {\n this.displayer.addMagixEventListener(MagixEventName, this.mainMagixEventListener);\n }\n\n public removeListeners() {\n this.displayer.removeMagixEventListener(MagixEventName, this.mainMagixEventListener);\n }\n\n private mainMagixEventListener = (event: Event) => {\n if (event.authorId !== this.displayer.observerId) {\n const data = event.payload;\n switch (data.eventName) {\n case Events.AppMove: {\n this.appMoveHandler(data.payload);\n break;\n }\n case Events.AppResize: {\n this.appResizeHandler(data.payload);\n break;\n }\n case Events.AppBoxStateChange: {\n this.boxStateChangeHandler(data.payload);\n break;\n }\n case Events.SetMainViewScenePath: {\n this.setMainViewScenePathHandler(data.payload);\n break;\n }\n case Events.CursorMove: {\n this.cursorMoveHandler(data.payload);\n break;\n }\n case Events.RootDirRemoved: {\n this.rootDirRemovedHandler();\n break;\n }\n case Events.Refresh: {\n this.refreshHandler();\n break;\n }\n case Events.InitMainViewCamera: {\n this.initMainViewCameraHandler();\n break;\n }\n case Events.SetAppFocusIndex: {\n this.setAppFocusViewIndexHandler(data.payload);\n break;\n }\n default:\n break;\n }\n }\n };\n\n private appMoveHandler = (payload: any) => {\n this.boxManager?.moveBox(payload);\n };\n\n private appResizeHandler = (payload: any) => {\n this.boxManager?.resizeBox(Object.assign(payload, { skipUpdate: true }));\n this.manager.room?.refreshViewSize();\n };\n\n private boxStateChangeHandler = (state: TeleBoxState) => {\n callbacks.emit(\"boxStateChange\", state);\n };\n\n private setMainViewScenePathHandler = ({ nextScenePath }: { nextScenePath: string }) => {\n setViewFocusScenePath(this.manager.mainView, nextScenePath);\n callbacks.emit(\"mainViewScenePathChange\", nextScenePath);\n };\n\n private cursorMoveHandler = (payload: any) => {\n internalEmitter.emit(\"cursorMove\", payload);\n };\n\n private rootDirRemovedHandler = () => {\n this.manager.createRootDirScenesCallback();\n this.manager.mainViewProxy.rebind();\n internalEmitter.emit(\"rootDirRemoved\");\n };\n\n private refreshHandler = () => {\n this.manager.windowManger._refresh();\n };\n\n private initMainViewCameraHandler = () => {\n this.manager.mainViewProxy.addCameraReaction();\n };\n\n private setAppFocusViewIndexHandler = (payload: SetAppFocusIndex) => {\n if (payload.type === \"main\") {\n this.manager.setSceneIndexWithoutSync(payload.index);\n } else if (payload.type === \"app\" && payload.appID) {\n const app = this.manager.appProxies.get(payload.appID);\n if (app) {\n app.setSceneIndexWithoutSync(payload.index);\n }\n }\n };\n}\n","export class AppCreateError extends Error {\n override message = \"[WindowManager]: app duplicate exists and cannot be created again\";\n}\n\nexport class AppNotRegisterError extends Error {\n constructor(kind: string) {\n super(`[WindowManager]: app ${kind} need register or provide src`);\n }\n}\n\nexport class AppManagerNotInitError extends Error {\n override message = \"[WindowManager]: AppManager must be initialized\";\n}\n\nexport class WhiteWebSDKInvalidError extends Error {\n constructor(version: string) {\n super(`[WindowManager]: white-web-sdk version must large than ${version}`);\n }\n}\n\nexport class ParamsInvalidError extends Error {\n override message = \"[WindowManager]: kind must be a valid string\";\n}\n\nexport class BoxNotCreatedError extends Error {\n override message = \"[WindowManager]: box need created\";\n}\n\nexport class InvalidScenePath extends Error {\n override message = `[WindowManager]: ScenePath should start with \"/\"`;\n}\n\nexport class BoxManagerNotFoundError extends Error {\n override message = \"[WindowManager]: boxManager not found\";\n}\n\nexport class BindContainerRoomPhaseInvalidError extends Error {\n override message = \"[WindowManager]: room phase only Connected can be bindContainer\";\n}\n","const e=\"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",s=e.length,t=Array(20),r=()=>{for(let r=0;r<20;r++)t[r]=e.charAt(Math.random()*s);return t.join(\"\")};class o{constructor(){this.disposers=new Map}add(e,s=r()){return this.flush(s),this.disposers.set(s,e()),s}addDisposer(e,s=r()){return this.flush(s),this.disposers.set(s,e),s}addEventListener(e,s,t,o,i=r()){return this.add((()=>(e.addEventListener(s,t,o),()=>e.removeEventListener(s,t,o))),i),i}setTimeout(e,s,t=r()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(t),e()}),s);return()=>window.clearTimeout(r)}),t)}setInterval(e,s,t=r()){return this.add((()=>{const t=window.setInterval(e,s);return()=>window.clearInterval(t)}),t)}remove(e){const s=this.disposers.get(e);return this.disposers.delete(e),s}flush(e){const s=this.remove(e);if(s)try{s()}catch(t){console.error(t)}}flushAll(){this.disposers.forEach((e=>{try{e()}catch(s){console.error(s)}})),this.disposers.clear()}}export{o as SideEffectManager,r as genUID};\n//# sourceMappingURL=side-effect-manager.es.js.map\n","import { listenUpdated, unlistenUpdated, reaction, UpdateEventKind } from \"white-web-sdk\";\nimport type { AkkoObjectUpdatedProperty, AkkoObjectUpdatedListener } from \"white-web-sdk\";\nimport { isObject } from \"lodash\";\n\n// 兼容 13 和 14 版本 SDK\nexport const onObjectByEvent = (event: UpdateEventKind) => {\n return (object: any, func: () => void) => {\n if (object === undefined) return;\n if (listenUpdated) {\n const listener = (events: readonly AkkoObjectUpdatedProperty<any>[]) => {\n const kinds = events.map(e => e.kind);\n if (kinds.includes(event)) {\n func();\n }\n };\n listenUpdated(object, listener);\n func();\n return () => unlistenUpdated(object, listener);\n } else {\n return reaction(\n () => object,\n () => {\n func();\n },\n {\n fireImmediately: true,\n }\n );\n }\n };\n};\n\nexport const safeListenPropsUpdated = <T extends Record<string, unknown>>(\n getProps: () => T | null | undefined,\n callback: AkkoObjectUpdatedListener<T>,\n onDestroyed?: (props: unknown) => void\n) => {\n let disposeListenUpdated: (() => void) | null = null;\n const disposeReaction = reaction(\n getProps,\n () => {\n if (disposeListenUpdated) {\n disposeListenUpdated();\n disposeListenUpdated = null;\n }\n const props = getProps();\n if (isObject(props)) {\n disposeListenUpdated = () => unlistenUpdated(props, callback);\n listenUpdated(props, callback);\n } else {\n onDestroyed?.(props);\n }\n },\n { fireImmediately: true }\n );\n\n return () => {\n disposeListenUpdated?.();\n disposeReaction();\n };\n};\n\nexport const onObjectRemoved = onObjectByEvent(UpdateEventKind.Removed);\nexport const onObjectInserted = onObjectByEvent(UpdateEventKind.Inserted);\n","export type StorageEventListener<T> = (event: T) => void;\n\nexport class StorageEvent<TMessage> {\n listeners = new Set<StorageEventListener<TMessage>>();\n\n get length(): number {\n return this.listeners.size;\n }\n\n dispatch(message: TMessage): void {\n this.listeners.forEach(callback => callback(message));\n }\n\n addListener(listener: StorageEventListener<TMessage>): void {\n this.listeners.add(listener);\n }\n\n removeListener(listener: StorageEventListener<TMessage>): void {\n this.listeners.delete(listener);\n }\n}\n","import { has } from \"lodash\";\nimport { genUID } from \"side-effect-manager\";\nimport type { AutoRefValue, ExtractRawValue, RefValue } from \"./typings\";\n\nexport const plainObjectKeys = Object.keys as <T>(o: T) => Array<Extract<keyof T, string>>;\n\nexport function isRef<TValue = unknown>(e: unknown): e is RefValue<TValue> {\n return Boolean(has(e, \"__isRef\"));\n}\n\nexport function makeRef<TValue>(v: TValue): RefValue<TValue> {\n return { k: genUID(), v, __isRef: true };\n}\n\nexport function makeAutoRef<TValue>(v: TValue): AutoRefValue<TValue> {\n return isRef<ExtractRawValue<TValue>>(v) ? v : makeRef(v as ExtractRawValue<TValue>);\n}\n","import type { AkkoObjectUpdatedProperty } from \"white-web-sdk\";\nimport type { AppContext } from \"../AppContext\";\nimport type {\n Diff,\n MaybeRefValue,\n RefValue,\n StorageStateChangedEvent,\n StorageStateChangedListener,\n StorageStateChangedListenerDisposer,\n} from \"./typings\";\n\nimport { get, has, isObject, mapValues, noop, size } from \"lodash\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { safeListenPropsUpdated } from \"../../Utils/Reactive\";\nimport { StorageEvent } from \"./StorageEvent\";\nimport { isRef, makeRef, plainObjectKeys } from \"./utils\";\n\nexport * from \"./typings\";\n\nexport const STORAGE_NS = \"_WM-STORAGE_\";\n\nexport class Storage<TState extends Record<string, any> = any> implements Storage<TState> {\n readonly id: string | null;\n readonly maxIllusionQueueSize = 500;\n\n private readonly _context: AppContext;\n private readonly _sideEffect = new SideEffectManager();\n private _state: TState;\n private _destroyed = false;\n\n private _refMap = new WeakMap<any, RefValue>();\n\n /**\n * `setState` alters local state immediately before sending to server. This will cache the old value for onStateChanged diffing.\n */\n private _lastValue = new Map<string | number | symbol, TState[Extract<keyof TState, string>]>();\n\n constructor(context: AppContext, id?: string, defaultState?: TState) {\n if (defaultState && !isObject(defaultState)) {\n throw new Error(`Default state for Storage ${id} is not an object.`);\n }\n\n this._context = context;\n this.id = id || null;\n\n this._state = {} as TState;\n const rawState = this._getRawState(this._state);\n\n if (this._context.getIsWritable()) {\n if (this.id === null) {\n if (context.isAddApp && defaultState) {\n this.setState(defaultState);\n }\n } else {\n if (rawState === this._state || !isObject(rawState)) {\n if (!get(this._context.getAttributes(), [STORAGE_NS])) {\n this._context.updateAttributes([STORAGE_NS], {});\n }\n this._context.updateAttributes([STORAGE_NS, this.id], this._state);\n if (defaultState) {\n this.setState(defaultState);\n }\n }\n }\n }\n\n // strip mobx\n plainObjectKeys(rawState).forEach(key => {\n if (this.id === null && key === STORAGE_NS) {\n return;\n }\n try {\n const rawValue = isObject(rawState[key])\n ? JSON.parse(JSON.stringify(rawState[key]))\n : rawState[key];\n if (isRef<TState[Extract<keyof TState, string>]>(rawValue)) {\n this._state[key] = rawValue.v;\n if (isObject(rawValue.v)) {\n this._refMap.set(rawValue.v, rawValue);\n }\n } else {\n this._state[key] = rawValue;\n }\n } catch (e) {\n console.error(e);\n }\n });\n\n this._sideEffect.addDisposer(\n safeListenPropsUpdated(\n () =>\n this.id === null\n ? context.getAttributes()\n : get(context.getAttributes(), [STORAGE_NS, this.id]),\n this._updateProperties.bind(this),\n this.destroy.bind(this)\n )\n );\n }\n\n get state(): Readonly<TState> {\n if (this._destroyed) {\n console.warn(`Accessing state on destroyed Storage \"${this.id}\"`);\n }\n return this._state;\n }\n\n readonly onStateChanged = new StorageEvent<StorageStateChangedEvent<TState>>();\n\n addStateChangedListener(\n handler: StorageStateChangedListener<TState>\n ): StorageStateChangedListenerDisposer {\n this.onStateChanged.addListener(handler);\n return () => this.onStateChanged.removeListener(handler);\n }\n\n ensureState(state: Partial<TState>): void {\n return this.setState(\n plainObjectKeys(state).reduce((payload, key) => {\n if (!has(this._state, key)) {\n payload[key] = state[key];\n }\n return payload;\n }, {} as Partial<TState>)\n );\n }\n\n setState(state: Partial<TState>): void {\n if (this._destroyed) {\n console.error(new Error(`Cannot call setState on destroyed Storage \"${this.id}\".`));\n return;\n }\n\n if (!this._context.getIsWritable()) {\n console.error(\n new Error(`Cannot setState on Storage \"${this.id}\" without writable access`),\n state\n );\n return;\n }\n\n const keys = plainObjectKeys(state);\n if (keys.length > 0) {\n keys.forEach(key => {\n const value = state[key];\n if (value === this._state[key]) {\n return;\n }\n\n if (value === void 0) {\n this._lastValue.set(key, this._state[key]);\n delete this._state[key];\n this._setRawState(key, value);\n } else {\n this._lastValue.set(key, this._state[key]);\n this._state[key] = value as TState[Extract<keyof TState, string>];\n\n let payload: MaybeRefValue<typeof value> = value;\n if (isObject(value)) {\n let refValue = this._refMap.get(value);\n if (!refValue) {\n refValue = makeRef(value);\n this._refMap.set(value, refValue);\n }\n payload = refValue;\n }\n\n this._setRawState(key, payload);\n }\n });\n }\n }\n\n /**\n * Empty storage data.\n */\n emptyStorage(): void {\n if (size(this._state) <= 0) {\n return;\n }\n\n if (this._destroyed) {\n console.error(new Error(`Cannot empty destroyed Storage \"${this.id}\".`));\n return;\n }\n\n if (!this._context.getIsWritable()) {\n console.error(new Error(`Cannot empty Storage \"${this.id}\" without writable access.`));\n return;\n }\n\n this.setState(mapValues(this._state, noop as () => undefined));\n }\n\n /**\n * Delete storage index with all of its data and destroy the Storage instance.\n */\n deleteStorage(): void {\n if (this.id === null) {\n throw new Error(`Cannot delete main Storage`);\n }\n\n if (!this._context.getIsWritable()) {\n console.error(new Error(`Cannot delete Storage \"${this.id}\" without writable access.`));\n return;\n }\n\n this.destroy();\n\n this._context.updateAttributes([STORAGE_NS, this.id], void 0);\n }\n\n get destroyed(): boolean {\n return this._destroyed;\n }\n\n /**\n * Destroy the Storage instance. The data will be kept.\n */\n destroy() {\n this._destroyed = true;\n this._sideEffect.flushAll();\n }\n\n private _getRawState(): TState | undefined;\n private _getRawState(defaultValue: TState): TState;\n private _getRawState(defaultValue?: TState): TState | undefined {\n if (this.id === null) {\n return this._context.getAttributes() ?? defaultValue;\n } else {\n return get(this._context.getAttributes(), [STORAGE_NS, this.id], defaultValue);\n }\n }\n\n private _setRawState(key: string, value: any): void {\n if (this.id === null) {\n if (key === STORAGE_NS) {\n throw new Error(`Cannot set attribute internal filed \"${STORAGE_NS}\"`);\n }\n return this._context.updateAttributes([key], value);\n } else {\n return this._context.updateAttributes([STORAGE_NS, this.id, key], value);\n }\n }\n\n private _updateProperties(\n actions: ReadonlyArray<AkkoObjectUpdatedProperty<TState, string>>\n ): void {\n if (this._destroyed) {\n console.error(\n new Error(`Cannot call _updateProperties on destroyed Storage \"${this.id}\".`)\n );\n return;\n }\n\n if (actions.length > 0) {\n const diffs: Diff<TState> = {};\n\n for (let i = 0; i < actions.length; i++) {\n try {\n const action = actions[i];\n const key = action.key as Extract<keyof TState, string>;\n\n if (this.id === null && key === STORAGE_NS) {\n continue;\n }\n\n const value = isObject(action.value)\n ? JSON.parse(JSON.stringify(action.value))\n : action.value;\n let oldValue: TState[Extract<keyof TState, string>] | undefined;\n if (this._lastValue.has(key)) {\n oldValue = this._lastValue.get(key);\n this._lastValue.delete(key);\n }\n\n switch (action.kind) {\n case 2: {\n // Removed\n if (has(this._state, key)) {\n oldValue = this._state[key];\n delete this._state[key];\n }\n diffs[key] = { oldValue };\n break;\n }\n default: {\n let newValue = value;\n\n if (isRef<TState[Extract<keyof TState, string>]>(value)) {\n const { k, v } = value;\n const curValue = this._state[key];\n if (isObject(curValue) && this._refMap.get(curValue)?.k === k) {\n newValue = curValue;\n } else {\n newValue = v;\n if (isObject(v)) {\n this._refMap.set(v, value);\n }\n }\n }\n\n if (newValue !== this._state[key]) {\n oldValue = this._state[key];\n this._state[key] = newValue;\n }\n\n diffs[key] = { newValue, oldValue };\n break;\n }\n }\n } catch (e) {\n console.error(e);\n }\n }\n\n this.onStateChanged.dispatch(diffs);\n }\n }\n}\n","import { BoxNotCreatedError } from \"../Utils/error\";\nimport { putScenes } from \"../Utils/Common\";\nimport { Storage } from \"./Storage\";\nimport {\n autorun,\n listenDisposed,\n listenUpdated,\n reaction,\n unlistenDisposed,\n unlistenUpdated,\n toJS,\n} from \"white-web-sdk\";\nimport type {\n Room,\n SceneDefinition,\n View,\n EventListener as WhiteEventListener,\n} from \"white-web-sdk\";\nimport type { NotMinimizedBoxState, ReadonlyTeleBox, TeleBoxState } from \"@netless/telebox-insider\";\nimport type Emittery from \"emittery\";\nimport type { BoxManager } from \"../BoxManager\";\nimport type { AppEmitterEvent, WindowManager } from \"../index\";\nimport type { AppManager } from \"../AppManager\";\nimport type { AppProxy } from \"./AppProxy\";\nimport type {\n MagixEventAddListener,\n MagixEventDispatcher,\n MagixEventRemoveListener,\n} from \"./MagixEvent\";\nimport type { AddPageParams, PageController, PageState } from \"../Page\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { callbacks } from \"../callback\";\n\nexport class AppContext<TAttributes extends {} = any, TMagixEventPayloads = any, TAppOptions = any>\n implements PageController\n{\n static readonly kind = \"AppContext\";\n public readonly emitter: Emittery<AppEmitterEvent<TAttributes>>;\n public readonly mobxUtils = {\n autorun,\n reaction,\n toJS,\n };\n public readonly objectUtils = {\n listenUpdated,\n unlistenUpdated,\n listenDisposed,\n unlistenDisposed,\n };\n\n private store = this.manager.store;\n public readonly isAddApp: boolean;\n public readonly isReplay = this.manager.isReplay;\n\n constructor(\n private manager: AppManager,\n private boxManager: BoxManager,\n public appId: string,\n private appProxy: AppProxy,\n private appOptions?: TAppOptions | (() => TAppOptions)\n ) {\n this.emitter = appProxy.appEmitter;\n this.isAddApp = appProxy.isAddApp;\n }\n\n public getManager = (): AppManager => {\n return this.manager;\n };\n\n public getBoxManager = (): BoxManager => {\n return this.boxManager;\n };\n\n public getWindowManager = (): WindowManager => {\n return this.manager.windowManger;\n };\n\n public getBoxStatus = (): TeleBoxState | undefined => {\n return this.manager.store.getBoxStatus(this.appId);\n };\n\n public getLastNotMinimizedBoxStatus = (): NotMinimizedBoxState | undefined => {\n return this.manager.store.getLastNotMinimizedBoxStatus(this.appId);\n };\n\n public getDisplayer = () => {\n return this.manager.displayer;\n };\n\n public getAppProxy = (): AppProxy => {\n return this.appProxy;\n };\n\n /** @deprecated Use context.storage.state instead. */\n public getAttributes = (): TAttributes | undefined => {\n return this.appProxy.attributes;\n };\n\n public getScenes = (): SceneDefinition[] | undefined => {\n const appAttr = this.store.getAppAttributes(this.appId);\n if (appAttr?.isDynamicPPT) {\n return this.appProxy.scenes;\n } else {\n return appAttr?.options[\"scenes\"];\n }\n };\n\n public getView = (): View | undefined => {\n return this.appProxy.view;\n };\n\n public mountView = (dom: HTMLElement): void => {\n const view = this.getView();\n if (view) {\n view.divElement = dom as HTMLDivElement;\n setTimeout(() => {\n // 渲染需要时间,延迟 refresh\n this.getRoom()?.refreshViewSize();\n callbacks.emit(\"onAppViewMounted\", { appId: this.appId, view });\n }, 1000);\n }\n };\n\n public getInitScenePath = () => {\n return this.manager.getAppInitPath(this.appId);\n };\n\n /** Get App writable status. */\n public getIsWritable = (): boolean => {\n return this.manager.canOperate;\n };\n\n /** Get the App Window UI box. */\n public getBox = (): ReadonlyTeleBox => {\n const box = this.boxManager.getBox(this.appId);\n if (box) {\n return box;\n } else {\n throw new BoxNotCreatedError();\n }\n };\n\n public getRoom = (): Room | undefined => {\n return this.manager.room;\n };\n\n /** @deprecated Use context.storage.setState instead. */\n public setAttributes = (attributes: TAttributes) => {\n this.manager.safeSetAttributes({ [this.appId]: attributes });\n };\n\n /** @deprecated Use context.storage.setState instead. */\n public updateAttributes = (keys: string[], value: any) => {\n if (this.manager.attributes[this.appId]) {\n this.manager.safeUpdateAttributes([this.appId, ...keys], value);\n }\n };\n\n public setScenePath = async (scenePath: string): Promise<void> => {\n if (!this.appProxy.box) return;\n this.appProxy.setFullPath(scenePath);\n // 兼容 15 版本 SDK 的切页\n this.getRoom()?.setScenePath(scenePath);\n };\n\n /** Get the local App options. */\n public getAppOptions = (): TAppOptions | undefined => {\n return typeof this.appOptions === \"function\"\n ? (this.appOptions as () => TAppOptions)()\n : this.appOptions;\n };\n\n private _storage?: Storage<TAttributes>;\n\n /** Main Storage for attributes. */\n public get storage(): Storage<TAttributes> {\n if (!this._storage) {\n this._storage = new Storage(this);\n }\n return this._storage;\n }\n\n /**\n * Create separated storages for flexible state management.\n * @param storeId Namespace for the storage. Storages of the same namespace share the same data.\n * @param defaultState Default state for initial storage creation.\n * @returns\n */\n public createStorage = <TState extends {}>(\n storeId: string,\n defaultState?: TState\n ): Storage<TState> => {\n const storage = new Storage(this, storeId, defaultState);\n this.emitter.on(\"destroy\", () => {\n storage.destroy();\n });\n return storage;\n };\n\n /** Dispatch events to other clients (and self). */\n public dispatchMagixEvent: MagixEventDispatcher<TMagixEventPayloads> = (...args) => {\n // can't dispatch events on replay mode\n const appScopeEvent = `${this.appId}:${args[0]}`;\n return this.manager.room?.dispatchMagixEvent(appScopeEvent, args[1]);\n };\n\n /** Listen to events from others clients (and self messages). */\n public addMagixEventListener: MagixEventAddListener<TMagixEventPayloads> = (\n event,\n handler,\n options\n ) => {\n const appScopeEvent = `${this.appId}:${event}`;\n this.manager.displayer.addMagixEventListener(\n appScopeEvent,\n handler as WhiteEventListener,\n options\n );\n return () =>\n this.manager.displayer.removeMagixEventListener(\n appScopeEvent,\n handler as WhiteEventListener\n );\n };\n\n /** Remove a Magix event listener. */\n public removeMagixEventListener = this.manager.displayer.removeMagixEventListener.bind(\n this.manager.displayer\n ) as MagixEventRemoveListener<TMagixEventPayloads>;\n\n /** PageController */\n public nextPage = async (): Promise<boolean> => {\n const nextIndex = this.pageState.index + 1;\n if (nextIndex > this.pageState.length - 1) {\n console.warn(\"[WindowManager] nextPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(nextIndex);\n return true;\n };\n\n public jumpPage = async (index: number): Promise<boolean> => {\n if (!(0 <= index && index < this.pageState.length)) {\n console.warn(\"[WindowManager] nextPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(index);\n return true;\n };\n\n public prevPage = async (): Promise<boolean> => {\n const nextIndex = this.pageState.index - 1;\n if (nextIndex < 0) {\n console.warn(\"[WindowManager] prevPage: index out of range\");\n return false;\n }\n this.appProxy.setSceneIndex(nextIndex);\n return true;\n };\n\n public addPage = async (params?: AddPageParams) => {\n const after = params?.after;\n const scene = params?.scene;\n const scenePath = this.appProxy.scenePath;\n if (!scenePath) return;\n if (after) {\n const nextIndex = this.pageState.index + 1;\n putScenes(this.manager.room, scenePath, [scene || {}], nextIndex);\n } else {\n putScenes(this.manager.room, scenePath, [scene || {}]);\n }\n };\n\n public removePage = async (index?: number): Promise<boolean> => {\n const needRemoveIndex = index === undefined ? this.pageState.index : index;\n if (this.pageState.length === 1) {\n console.warn(`[WindowManager]: can not remove the last page`);\n return false;\n }\n if (needRemoveIndex < 0 || needRemoveIndex >= this.pageState.length) {\n console.warn(`[WindowManager]: page index ${index} out of range`);\n return false;\n }\n return this.appProxy.removeSceneByIndex(needRemoveIndex);\n };\n\n public get pageState(): PageState {\n return this.appProxy.pageState;\n }\n\n public get kind(): string {\n return this.appProxy.kind;\n }\n\n /** Dispatch a local event to `manager.onAppEvent()`. */\n public dispatchAppEvent(type: string, value?: any): void {\n internalEmitter.emit(`custom-${this.kind}` as any, {\n kind: this.kind,\n appId: this.appId,\n type,\n value,\n });\n }\n}\n","import type { Displayer, ScenesCallbacksNode, View } from \"white-web-sdk\";\nimport type { PageState } from \"../Page\";\n\nexport type AppPageStateParams = {\n displayer: Displayer;\n scenePath: string | undefined;\n view: View | undefined;\n notifyPageStateChange: () => void;\n};\n\nexport class AppPageStateImpl {\n private sceneNode: ScenesCallbacksNode | null = null;\n\n constructor(private params: AppPageStateParams) {\n const { displayer, scenePath } = this.params;\n if (scenePath) {\n this.sceneNode = displayer.createScenesCallback(scenePath, {\n onAddScene: this.onSceneChange,\n onRemoveScene: this.onSceneChange,\n });\n }\n }\n\n private onSceneChange = (node: ScenesCallbacksNode) => {\n this.sceneNode = node;\n this.params.notifyPageStateChange();\n };\n\n public getFullPath(index: number) {\n const scenes = this.sceneNode?.scenes;\n if (this.params.scenePath && scenes) {\n const name = scenes[index];\n if (name) {\n return `${this.params.scenePath}/${name}`;\n }\n }\n }\n\n public toObject(): PageState {\n return {\n index: this.params.view?.focusSceneIndex || 0,\n length: this.sceneNode?.scenes.length || 0,\n };\n }\n\n public destroy() {\n this.sceneNode?.dispose();\n }\n}\n","var fancyScrollbar = \"\";\nvar style$4 = \"\";\nvar eventemitter3 = { exports: {} };\n(function(module) {\n var has = Object.prototype.hasOwnProperty, prefix = \"~\";\n function Events() {\n }\n if (Object.create) {\n Events.prototype = /* @__PURE__ */ Object.create(null);\n if (!new Events().__proto__)\n prefix = false;\n }\n function EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n }\n function addListener(emitter, event, fn, context, once) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"The listener must be a function\");\n }\n var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;\n if (!emitter._events[evt])\n emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn)\n emitter._events[evt].push(listener);\n else\n emitter._events[evt] = [emitter._events[evt], listener];\n return emitter;\n }\n function clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0)\n emitter._events = new Events();\n else\n delete emitter._events[evt];\n }\n function EventEmitter2() {\n this._events = new Events();\n this._eventsCount = 0;\n }\n EventEmitter2.prototype.eventNames = function eventNames() {\n var names = [], events, name;\n if (this._eventsCount === 0)\n return names;\n for (name in events = this._events) {\n if (has.call(events, name))\n names.push(prefix ? name.slice(1) : name);\n }\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n return names;\n };\n EventEmitter2.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event, handlers = this._events[evt];\n if (!handlers)\n return [];\n if (handlers.fn)\n return [handlers.fn];\n for (var i2 = 0, l = handlers.length, ee = new Array(l); i2 < l; i2++) {\n ee[i2] = handlers[i2].fn;\n }\n return ee;\n };\n EventEmitter2.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event, listeners = this._events[evt];\n if (!listeners)\n return 0;\n if (listeners.fn)\n return 1;\n return listeners.length;\n };\n EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt])\n return false;\n var listeners = this._events[evt], len = arguments.length, args, i2;\n if (listeners.fn) {\n if (listeners.once)\n this.removeListener(event, listeners.fn, void 0, true);\n switch (len) {\n case 1:\n return listeners.fn.call(listeners.context), true;\n case 2:\n return listeners.fn.call(listeners.context, a1), true;\n case 3:\n return listeners.fn.call(listeners.context, a1, a2), true;\n case 4:\n return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6:\n return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n for (i2 = 1, args = new Array(len - 1); i2 < len; i2++) {\n args[i2 - 1] = arguments[i2];\n }\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length, j;\n for (i2 = 0; i2 < length; i2++) {\n if (listeners[i2].once)\n this.removeListener(event, listeners[i2].fn, void 0, true);\n switch (len) {\n case 1:\n listeners[i2].fn.call(listeners[i2].context);\n break;\n case 2:\n listeners[i2].fn.call(listeners[i2].context, a1);\n break;\n case 3:\n listeners[i2].fn.call(listeners[i2].context, a1, a2);\n break;\n case 4:\n listeners[i2].fn.call(listeners[i2].context, a1, a2, a3);\n break;\n default:\n if (!args)\n for (j = 1, args = new Array(len - 1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n listeners[i2].fn.apply(listeners[i2].context, args);\n }\n }\n }\n return true;\n };\n EventEmitter2.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n };\n EventEmitter2.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n };\n EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n if (!this._events[evt])\n return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n var listeners = this._events[evt];\n if (listeners.fn) {\n if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n clearEvent(this, evt);\n }\n } else {\n for (var i2 = 0, events = [], length = listeners.length; i2 < length; i2++) {\n if (listeners[i2].fn !== fn || once && !listeners[i2].once || context && listeners[i2].context !== context) {\n events.push(listeners[i2]);\n }\n }\n if (events.length)\n this._events[evt] = events.length === 1 ? events[0] : events;\n else\n clearEvent(this, evt);\n }\n return this;\n };\n EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt])\n clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n return this;\n };\n EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;\n EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;\n EventEmitter2.prefixed = prefix;\n EventEmitter2.EventEmitter = EventEmitter2;\n {\n module.exports = EventEmitter2;\n }\n})(eventemitter3);\nvar EventEmitter = eventemitter3.exports;\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar __assign = function() {\n __assign = Object.assign || function __assign2(t2) {\n for (var s2, i2 = 1, n = arguments.length; i2 < n; i2++) {\n s2 = arguments[i2];\n for (var p in s2)\n if (Object.prototype.hasOwnProperty.call(s2, p))\n t2[p] = s2[p];\n }\n return t2;\n };\n return __assign.apply(this, arguments);\n};\nfunction __rest(s2, e2) {\n var t2 = {};\n for (var p in s2)\n if (Object.prototype.hasOwnProperty.call(s2, p) && e2.indexOf(p) < 0)\n t2[p] = s2[p];\n if (s2 != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i2 = 0, p = Object.getOwnPropertySymbols(s2); i2 < p.length; i2++) {\n if (e2.indexOf(p[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p[i2]))\n t2[p[i2]] = s2[p[i2]];\n }\n return t2;\n}\nvar prevTime = 0;\nvar onNextFrame = typeof window !== \"undefined\" && window.requestAnimationFrame !== void 0 ? function(callback) {\n return window.requestAnimationFrame(callback);\n} : function(callback) {\n var timestamp = Date.now();\n var timeToCall = Math.max(0, 16.7 - (timestamp - prevTime));\n prevTime = timestamp + timeToCall;\n setTimeout(function() {\n return callback(prevTime);\n }, timeToCall);\n};\nvar createStep = function(setRunNextFrame) {\n var processToRun = [];\n var processToRunNextFrame = [];\n var numThisFrame = 0;\n var isProcessing2 = false;\n var i2 = 0;\n var cancelled = /* @__PURE__ */ new WeakSet();\n var toKeepAlive = /* @__PURE__ */ new WeakSet();\n var renderStep = {\n cancel: function(process) {\n var indexOfCallback = processToRunNextFrame.indexOf(process);\n cancelled.add(process);\n if (indexOfCallback !== -1) {\n processToRunNextFrame.splice(indexOfCallback, 1);\n }\n },\n process: function(frame2) {\n var _a;\n isProcessing2 = true;\n _a = [processToRunNextFrame, processToRun], processToRun = _a[0], processToRunNextFrame = _a[1];\n processToRunNextFrame.length = 0;\n numThisFrame = processToRun.length;\n if (numThisFrame) {\n var process_1;\n for (i2 = 0; i2 < numThisFrame; i2++) {\n process_1 = processToRun[i2];\n process_1(frame2);\n if (toKeepAlive.has(process_1) === true && !cancelled.has(process_1)) {\n renderStep.schedule(process_1);\n setRunNextFrame(true);\n }\n }\n }\n isProcessing2 = false;\n },\n schedule: function(process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n var addToCurrentBuffer = immediate && isProcessing2;\n var buffer = addToCurrentBuffer ? processToRun : processToRunNextFrame;\n cancelled.delete(process);\n if (keepAlive)\n toKeepAlive.add(process);\n if (buffer.indexOf(process) === -1) {\n buffer.push(process);\n if (addToCurrentBuffer)\n numThisFrame = processToRun.length;\n }\n }\n };\n return renderStep;\n};\nvar maxElapsed = 40;\nvar defaultElapsed = 1 / 60 * 1e3;\nvar useDefaultElapsed = true;\nvar willRunNextFrame = false;\nvar isProcessing = false;\nvar frame = {\n delta: 0,\n timestamp: 0\n};\nvar stepsOrder = [\"read\", \"update\", \"preRender\", \"render\", \"postRender\"];\nvar setWillRunNextFrame = function(willRun) {\n return willRunNextFrame = willRun;\n};\nvar steps = /* @__PURE__ */ stepsOrder.reduce(function(acc, key) {\n acc[key] = createStep(setWillRunNextFrame);\n return acc;\n}, {});\nvar sync = /* @__PURE__ */ stepsOrder.reduce(function(acc, key) {\n var step = steps[key];\n acc[key] = function(process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n if (!willRunNextFrame)\n startLoop();\n step.schedule(process, keepAlive, immediate);\n return process;\n };\n return acc;\n}, {});\nvar processStep = function(stepId) {\n return steps[stepId].process(frame);\n};\nvar processFrame = function(timestamp) {\n willRunNextFrame = false;\n frame.delta = useDefaultElapsed ? defaultElapsed : Math.max(Math.min(timestamp - frame.timestamp, maxElapsed), 1);\n if (!useDefaultElapsed)\n defaultElapsed = frame.delta;\n frame.timestamp = timestamp;\n isProcessing = true;\n stepsOrder.forEach(processStep);\n isProcessing = false;\n if (willRunNextFrame) {\n useDefaultElapsed = false;\n onNextFrame(processFrame);\n }\n};\nvar startLoop = function() {\n willRunNextFrame = true;\n useDefaultElapsed = true;\n if (!isProcessing)\n onNextFrame(processFrame);\n};\nvar clamp$1 = function(min, max) {\n return function(v) {\n return Math.max(Math.min(v, max), min);\n };\n};\nvar sanitize = function(v) {\n return v % 1 ? Number(v.toFixed(5)) : v;\n};\nvar singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))$/i;\nvar number = {\n test: function(v) {\n return typeof v === \"number\";\n },\n parse: parseFloat,\n transform: function(v) {\n return v;\n }\n};\nvar alpha = __assign(__assign({}, number), { transform: clamp$1(0, 1) });\nvar scale = __assign(__assign({}, number), { default: 1 });\nvar createUnitType = function(unit) {\n return {\n test: function(v) {\n return typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1;\n },\n parse: parseFloat,\n transform: function(v) {\n return \"\" + v + unit;\n }\n };\n};\nvar degrees = createUnitType(\"deg\");\nvar percent = createUnitType(\"%\");\nvar px = createUnitType(\"px\");\nvar progressPercentage = __assign(__assign({}, percent), { parse: function(v) {\n return percent.parse(v) / 100;\n}, transform: function(v) {\n return percent.transform(v * 100);\n} });\nvar getValueFromFunctionString = function(value) {\n return value.substring(value.indexOf(\"(\") + 1, value.lastIndexOf(\")\"));\n};\nvar clampRgbUnit = clamp$1(0, 255);\nvar isRgba = function(v) {\n return v.red !== void 0;\n};\nvar isHsla = function(v) {\n return v.hue !== void 0;\n};\nfunction getValuesAsArray(value) {\n return getValueFromFunctionString(value).replace(/(,|\\/)/g, \" \").split(/ \\s*/);\n}\nvar splitColorValues = function(terms) {\n return function(v) {\n if (typeof v !== \"string\")\n return v;\n var values = {};\n var valuesArray = getValuesAsArray(v);\n for (var i2 = 0; i2 < 4; i2++) {\n values[terms[i2]] = valuesArray[i2] !== void 0 ? parseFloat(valuesArray[i2]) : 1;\n }\n return values;\n };\n};\nvar rgbaTemplate = function(_a) {\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha2 = _b === void 0 ? 1 : _b;\n return \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha2 + \")\";\n};\nvar hslaTemplate = function(_a) {\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha2 = _b === void 0 ? 1 : _b;\n return \"hsla(\" + hue + \", \" + saturation + \", \" + lightness + \", \" + alpha2 + \")\";\n};\nvar rgbUnit = __assign(__assign({}, number), { transform: function(v) {\n return Math.round(clampRgbUnit(v));\n} });\nfunction isColorString(color2, colorType) {\n return color2.startsWith(colorType) && singleColorRegex.test(color2);\n}\nvar rgba = {\n test: function(v) {\n return typeof v === \"string\" ? isColorString(v, \"rgb\") : isRgba(v);\n },\n parse: splitColorValues([\"red\", \"green\", \"blue\", \"alpha\"]),\n transform: function(_a) {\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\n return rgbaTemplate({\n red: rgbUnit.transform(red),\n green: rgbUnit.transform(green),\n blue: rgbUnit.transform(blue),\n alpha: sanitize(alpha.transform(alpha$1))\n });\n }\n};\nvar hsla = {\n test: function(v) {\n return typeof v === \"string\" ? isColorString(v, \"hsl\") : isHsla(v);\n },\n parse: splitColorValues([\"hue\", \"saturation\", \"lightness\", \"alpha\"]),\n transform: function(_a) {\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\n return hslaTemplate({\n hue: Math.round(hue),\n saturation: percent.transform(sanitize(saturation)),\n lightness: percent.transform(sanitize(lightness)),\n alpha: sanitize(alpha.transform(alpha$1))\n });\n }\n};\nvar hex = __assign(__assign({}, rgba), { test: function(v) {\n return typeof v === \"string\" && isColorString(v, \"#\");\n}, parse: function(v) {\n var r2 = \"\";\n var g = \"\";\n var b = \"\";\n if (v.length > 4) {\n r2 = v.substr(1, 2);\n g = v.substr(3, 2);\n b = v.substr(5, 2);\n } else {\n r2 = v.substr(1, 1);\n g = v.substr(2, 1);\n b = v.substr(3, 1);\n r2 += r2;\n g += g;\n b += b;\n }\n return {\n red: parseInt(r2, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: 1\n };\n} });\nvar color = {\n test: function(v) {\n return typeof v === \"string\" && singleColorRegex.test(v) || isRgba(v) || isHsla(v);\n },\n parse: function(v) {\n if (rgba.test(v)) {\n return rgba.parse(v);\n } else if (hsla.test(v)) {\n return hsla.parse(v);\n } else if (hex.test(v)) {\n return hex.parse(v);\n }\n return v;\n },\n transform: function(v) {\n if (isRgba(v)) {\n return rgba.transform(v);\n } else if (isHsla(v)) {\n return hsla.transform(v);\n }\n return v;\n }\n};\nvar createStyler = function(_a) {\n var onRead2 = _a.onRead, onRender2 = _a.onRender, _b = _a.uncachedValues, uncachedValues = _b === void 0 ? /* @__PURE__ */ new Set() : _b, _c = _a.useCache, useCache = _c === void 0 ? true : _c;\n return function(_a2) {\n if (_a2 === void 0) {\n _a2 = {};\n }\n var props = __rest(_a2, []);\n var state = {};\n var changedValues = [];\n var hasChanged = false;\n function setValue(key, value) {\n if (key.startsWith(\"--\")) {\n props.hasCSSVariable = true;\n }\n var currentValue = state[key];\n state[key] = value;\n if (state[key] === currentValue)\n return;\n if (changedValues.indexOf(key) === -1) {\n changedValues.push(key);\n }\n if (!hasChanged) {\n hasChanged = true;\n sync.render(styler.render);\n }\n }\n var styler = {\n get: function(key, forceRead) {\n if (forceRead === void 0) {\n forceRead = false;\n }\n var useCached = !forceRead && useCache && !uncachedValues.has(key) && state[key] !== void 0;\n return useCached ? state[key] : onRead2(key, props);\n },\n set: function(values, value) {\n if (typeof values === \"string\") {\n setValue(values, value);\n } else {\n for (var key in values) {\n setValue(key, values[key]);\n }\n }\n return this;\n },\n render: function(forceRender) {\n if (forceRender === void 0) {\n forceRender = false;\n }\n if (hasChanged || forceRender === true) {\n onRender2(state, props, changedValues);\n hasChanged = false;\n changedValues.length = 0;\n }\n return this;\n }\n };\n return styler;\n };\n};\nvar CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;\nvar REPLACE_TEMPLATE = \"$1-$2\";\nvar camelToDash = function(str) {\n return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();\n};\nvar camelCache = /* @__PURE__ */ new Map();\nvar dashCache = /* @__PURE__ */ new Map();\nvar prefixes = [\"Webkit\", \"Moz\", \"O\", \"ms\", \"\"];\nvar numPrefixes = prefixes.length;\nvar isBrowser = typeof document !== \"undefined\";\nvar testElement;\nvar setDashPrefix = function(key, prefixed) {\n return dashCache.set(key, camelToDash(prefixed));\n};\nvar testPrefix = function(key) {\n testElement = testElement || document.createElement(\"div\");\n for (var i2 = 0; i2 < numPrefixes; i2++) {\n var prefix = prefixes[i2];\n var noPrefix = prefix === \"\";\n var prefixedPropertyName = noPrefix ? key : prefix + key.charAt(0).toUpperCase() + key.slice(1);\n if (prefixedPropertyName in testElement.style || noPrefix) {\n if (noPrefix && key === \"clipPath\" && dashCache.has(key)) {\n return;\n }\n camelCache.set(key, prefixedPropertyName);\n setDashPrefix(key, (noPrefix ? \"\" : \"-\") + camelToDash(prefixedPropertyName));\n }\n }\n};\nvar setServerProperty = function(key) {\n return setDashPrefix(key, key);\n};\nvar prefixer = function(key, asDashCase) {\n if (asDashCase === void 0) {\n asDashCase = false;\n }\n var cache2 = asDashCase ? dashCache : camelCache;\n if (!cache2.has(key)) {\n isBrowser ? testPrefix(key) : setServerProperty(key);\n }\n return cache2.get(key) || key;\n};\nvar axes = [\"\", \"X\", \"Y\", \"Z\"];\nvar order = [\"translate\", \"scale\", \"rotate\", \"skew\", \"transformPerspective\"];\nvar transformProps = /* @__PURE__ */ order.reduce(function(acc, key) {\n return axes.reduce(function(axesAcc, axesKey) {\n axesAcc.push(key + axesKey);\n return axesAcc;\n }, acc);\n}, [\"x\", \"y\", \"z\"]);\nvar transformPropDictionary = /* @__PURE__ */ transformProps.reduce(function(dict, key) {\n dict[key] = true;\n return dict;\n}, {});\nfunction isTransformProp(key) {\n return transformPropDictionary[key] === true;\n}\nfunction sortTransformProps(a, b) {\n return transformProps.indexOf(a) - transformProps.indexOf(b);\n}\nvar transformOriginProps = /* @__PURE__ */ new Set([\"originX\", \"originY\", \"originZ\"]);\nfunction isTransformOriginProp(key) {\n return transformOriginProps.has(key);\n}\nvar int = /* @__PURE__ */ __assign(/* @__PURE__ */ __assign({}, number), { transform: Math.round });\nvar valueTypes = {\n color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n radius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n zIndex: int,\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int\n};\nvar getValueType = function(key) {\n return valueTypes[key];\n};\nvar getValueAsType = function(value, type) {\n return type && typeof value === \"number\" ? type.transform(value) : value;\n};\nvar SCROLL_LEFT = \"scrollLeft\";\nvar SCROLL_TOP = \"scrollTop\";\nvar scrollKeys = /* @__PURE__ */ new Set([SCROLL_LEFT, SCROLL_TOP]);\nvar blacklist = /* @__PURE__ */ new Set([SCROLL_LEFT, SCROLL_TOP, \"transform\"]);\nvar translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\"\n};\nfunction isCustomTemplate(v) {\n return typeof v === \"function\";\n}\nfunction buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone) {\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n }\n var transformString = \"\";\n var transformHasZ = false;\n transformKeys.sort(sortTransformProps);\n var numTransformKeys = transformKeys.length;\n for (var i2 = 0; i2 < numTransformKeys; i2++) {\n var key = transformKeys[i2];\n transformString += (translateAlias[key] || key) + \"(\" + transform[key] + \") \";\n transformHasZ = key === \"z\" ? true : transformHasZ;\n }\n if (!transformHasZ && enableHardwareAcceleration) {\n transformString += \"translateZ(0)\";\n } else {\n transformString = transformString.trim();\n }\n if (isCustomTemplate(state.transform)) {\n transformString = state.transform(transform, transformIsDefault ? \"\" : transformString);\n } else if (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\nfunction buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone) {\n if (enableHardwareAcceleration === void 0) {\n enableHardwareAcceleration = true;\n }\n if (styles === void 0) {\n styles = {};\n }\n if (transform === void 0) {\n transform = {};\n }\n if (transformOrigin === void 0) {\n transformOrigin = {};\n }\n if (transformKeys === void 0) {\n transformKeys = [];\n }\n if (isDashCase === void 0) {\n isDashCase = false;\n }\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n }\n var transformIsDefault = true;\n var hasTransform = false;\n var hasTransformOrigin = false;\n for (var key in state) {\n var value = state[key];\n var valueType = getValueType(key);\n var valueAsType = getValueAsType(value, valueType);\n if (isTransformProp(key)) {\n hasTransform = true;\n transform[key] = valueAsType;\n transformKeys.push(key);\n if (transformIsDefault) {\n if (valueType.default && value !== valueType.default || !valueType.default && value !== 0) {\n transformIsDefault = false;\n }\n }\n } else if (isTransformOriginProp(key)) {\n transformOrigin[key] = valueAsType;\n hasTransformOrigin = true;\n } else if (!blacklist.has(key) || !isCustomTemplate(valueAsType)) {\n styles[prefixer(key, isDashCase)] = valueAsType;\n }\n }\n if (hasTransform || typeof state.transform === \"function\") {\n styles.transform = buildTransform(state, transform, transformKeys, transformIsDefault, enableHardwareAcceleration, allowTransformNone);\n }\n if (hasTransformOrigin) {\n styles.transformOrigin = (transformOrigin.originX || \"50%\") + \" \" + (transformOrigin.originY || \"50%\") + \" \" + (transformOrigin.originZ || 0);\n }\n return styles;\n}\nfunction createStyleBuilder(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.enableHardwareAcceleration, enableHardwareAcceleration = _c === void 0 ? true : _c, _d = _b.isDashCase, isDashCase = _d === void 0 ? true : _d, _e = _b.allowTransformNone, allowTransformNone = _e === void 0 ? true : _e;\n var styles = {};\n var transform = {};\n var transformOrigin = {};\n var transformKeys = [];\n return function(state) {\n transformKeys.length = 0;\n buildStyleProperty(state, enableHardwareAcceleration, styles, transform, transformOrigin, transformKeys, isDashCase, allowTransformNone);\n return styles;\n };\n}\nfunction onRead(key, options) {\n var element = options.element, preparseOutput = options.preparseOutput;\n var defaultValueType = getValueType(key);\n if (isTransformProp(key)) {\n return defaultValueType ? defaultValueType.default || 0 : 0;\n } else if (scrollKeys.has(key)) {\n return element[key];\n } else {\n var domValue = window.getComputedStyle(element, null).getPropertyValue(prefixer(key, true)) || 0;\n return preparseOutput && defaultValueType && defaultValueType.test(domValue) && defaultValueType.parse ? defaultValueType.parse(domValue) : domValue;\n }\n}\nfunction onRender(state, _a, changedValues) {\n var element = _a.element, buildStyles = _a.buildStyles, hasCSSVariable = _a.hasCSSVariable;\n Object.assign(element.style, buildStyles(state));\n if (hasCSSVariable) {\n var numChangedValues = changedValues.length;\n for (var i2 = 0; i2 < numChangedValues; i2++) {\n var key = changedValues[i2];\n if (key.startsWith(\"--\")) {\n element.style.setProperty(key, state[key]);\n }\n }\n }\n if (changedValues.indexOf(SCROLL_LEFT) !== -1) {\n element[SCROLL_LEFT] = state[SCROLL_LEFT];\n }\n if (changedValues.indexOf(SCROLL_TOP) !== -1) {\n element[SCROLL_TOP] = state[SCROLL_TOP];\n }\n}\nvar cssStyler = /* @__PURE__ */ createStyler({\n onRead,\n onRender,\n uncachedValues: scrollKeys\n});\nfunction createCssStyler(element, _a) {\n if (_a === void 0) {\n _a = {};\n }\n var enableHardwareAcceleration = _a.enableHardwareAcceleration, allowTransformNone = _a.allowTransformNone, props = __rest(_a, [\"enableHardwareAcceleration\", \"allowTransformNone\"]);\n return cssStyler(__assign({ element, buildStyles: createStyleBuilder({\n enableHardwareAcceleration,\n allowTransformNone\n }), preparseOutput: true }, props));\n}\nvar camelCaseAttributes = /* @__PURE__ */ new Set([\"baseFrequency\", \"diffuseConstant\", \"kernelMatrix\", \"kernelUnitLength\", \"keySplines\", \"keyTimes\", \"limitingConeAngle\", \"markerHeight\", \"markerWidth\", \"numOctaves\", \"targetX\", \"targetY\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"stdDeviation\", \"tableValues\"]);\nvar defaultOrigin = 0.5;\nvar svgAttrsTemplate = function() {\n return {\n style: {}\n };\n};\nvar progressToPixels = function(progress, length) {\n return px.transform(progress * length);\n};\nvar unmeasured = { x: 0, y: 0, width: 0, height: 0 };\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\" ? origin : px.transform(offset + size * origin);\n}\nfunction calculateSVGTransformOrigin(dimensions, originX, originY) {\n return calcOrigin(originX, dimensions.x, dimensions.width) + \" \" + calcOrigin(originY, dimensions.y, dimensions.height);\n}\nvar svgStyleConfig = {\n enableHardwareAcceleration: false,\n isDashCase: false\n};\nfunction buildSVGAttrs(_a, dimensions, totalPathLength, cssBuilder, attrs, isDashCase) {\n if (dimensions === void 0) {\n dimensions = unmeasured;\n }\n if (cssBuilder === void 0) {\n cssBuilder = createStyleBuilder(svgStyleConfig);\n }\n if (attrs === void 0) {\n attrs = svgAttrsTemplate();\n }\n if (isDashCase === void 0) {\n isDashCase = true;\n }\n var attrX = _a.attrX, attrY = _a.attrY, originX = _a.originX, originY = _a.originY, pathLength = _a.pathLength, _b = _a.pathSpacing, pathSpacing = _b === void 0 ? 1 : _b, _c = _a.pathOffset, pathOffset = _c === void 0 ? 0 : _c, state = __rest(_a, [\"attrX\", \"attrY\", \"originX\", \"originY\", \"pathLength\", \"pathSpacing\", \"pathOffset\"]);\n var style2 = cssBuilder(state);\n for (var key in style2) {\n if (key === \"transform\") {\n attrs.style.transform = style2[key];\n } else {\n var attrKey = isDashCase && !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n attrs[attrKey] = style2[key];\n }\n }\n if (originX !== void 0 || originY !== void 0 || style2.transform) {\n attrs.style.transformOrigin = calculateSVGTransformOrigin(dimensions, originX !== void 0 ? originX : defaultOrigin, originY !== void 0 ? originY : defaultOrigin);\n }\n if (attrX !== void 0)\n attrs.x = attrX;\n if (attrY !== void 0)\n attrs.y = attrY;\n if (totalPathLength !== void 0 && pathLength !== void 0) {\n attrs[isDashCase ? \"stroke-dashoffset\" : \"strokeDashoffset\"] = progressToPixels(-pathOffset, totalPathLength);\n attrs[isDashCase ? \"stroke-dasharray\" : \"strokeDasharray\"] = progressToPixels(pathLength, totalPathLength) + \" \" + progressToPixels(pathSpacing, totalPathLength);\n }\n return attrs;\n}\nfunction createAttrBuilder(dimensions, totalPathLength, isDashCase) {\n if (isDashCase === void 0) {\n isDashCase = true;\n }\n var attrs = svgAttrsTemplate();\n var cssBuilder = createStyleBuilder(svgStyleConfig);\n return function(state) {\n return buildSVGAttrs(state, dimensions, totalPathLength, cssBuilder, attrs, isDashCase);\n };\n}\nvar getDimensions = function(element) {\n return typeof element.getBBox === \"function\" ? element.getBBox() : element.getBoundingClientRect();\n};\nvar getSVGElementDimensions = function(element) {\n try {\n return getDimensions(element);\n } catch (e2) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n};\nvar isPath = function(element) {\n return element.tagName === \"path\";\n};\nvar svgStyler = /* @__PURE__ */ createStyler({\n onRead: function(key, _a) {\n var element = _a.element;\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n if (!isTransformProp(key)) {\n return element.getAttribute(key);\n } else {\n var valueType = getValueType(key);\n return valueType ? valueType.default || 0 : 0;\n }\n },\n onRender: function(state, _a) {\n var element = _a.element, buildAttrs = _a.buildAttrs;\n var attrs = buildAttrs(state);\n for (var key in attrs) {\n if (key === \"style\") {\n Object.assign(element.style, attrs.style);\n } else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n});\nvar svg = function(element) {\n var dimensions = getSVGElementDimensions(element);\n var pathLength = isPath(element) && element.getTotalLength ? element.getTotalLength() : void 0;\n return svgStyler({\n element,\n buildAttrs: createAttrBuilder(dimensions, pathLength)\n });\n};\nvar viewport = /* @__PURE__ */ createStyler({\n useCache: false,\n onRead: function(key) {\n return key === \"scrollTop\" ? window.pageYOffset : window.pageXOffset;\n },\n onRender: function(_a) {\n var _b = _a.scrollTop, scrollTop = _b === void 0 ? 0 : _b, _c = _a.scrollLeft, scrollLeft = _c === void 0 ? 0 : _c;\n return window.scrollTo(scrollLeft, scrollTop);\n }\n});\nvar cache = /* @__PURE__ */ new WeakMap();\nvar isHTMLElement = function(node) {\n return node instanceof HTMLElement || typeof node.click === \"function\";\n};\nvar isSVGElement = function(node) {\n return node instanceof SVGElement || \"ownerSVGElement\" in node;\n};\nvar createDOMStyler = function(node, props) {\n var styler;\n if (node === window) {\n styler = viewport(node);\n } else if (isHTMLElement(node)) {\n styler = createCssStyler(node, props);\n } else if (isSVGElement(node)) {\n styler = svg(node);\n }\n cache.set(node, styler);\n return styler;\n};\nvar getStyler = function(node, props) {\n return cache.has(node) ? cache.get(node) : createDOMStyler(node, props);\n};\nfunction index(nodeOrSelector, props) {\n var node = typeof nodeOrSelector === \"string\" ? document.querySelector(nodeOrSelector) : nodeOrSelector;\n return getStyler(node, props);\n}\nvar shallowequal = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n if (ret !== void 0) {\n return !!ret;\n }\n if (objA === objB) {\n return true;\n }\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n if (!bHasOwnProperty(key)) {\n return false;\n }\n var valueA = objA[key];\n var valueB = objB[key];\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n if (ret === false || ret === void 0 && valueA !== valueB) {\n return false;\n }\n }\n return true;\n};\nconst e$1 = \"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", s$1 = e$1.length, t$1 = Array(20), r$1 = () => {\n for (let r2 = 0; r2 < 20; r2++)\n t$1[r2] = e$1.charAt(Math.random() * s$1);\n return t$1.join(\"\");\n};\nclass o {\n constructor() {\n this.disposers = /* @__PURE__ */ new Map();\n }\n add(e2, s2 = r$1()) {\n return this.flush(s2), this.disposers.set(s2, e2()), s2;\n }\n addDisposer(e2, s2 = r$1()) {\n return this.flush(s2), this.disposers.set(s2, e2), s2;\n }\n addEventListener(e2, s2, t2, o2, i2 = r$1()) {\n return this.add(() => (e2.addEventListener(s2, t2, o2), () => e2.removeEventListener(s2, t2, o2)), i2), i2;\n }\n setTimeout(e2, s2, t2 = r$1()) {\n return this.add(() => {\n const r2 = window.setTimeout(() => {\n this.remove(t2), e2();\n }, s2);\n return () => window.clearTimeout(r2);\n }, t2);\n }\n setInterval(e2, s2, t2 = r$1()) {\n return this.add(() => {\n const t3 = window.setInterval(e2, s2);\n return () => window.clearInterval(t3);\n }, t2);\n }\n remove(e2) {\n const s2 = this.disposers.get(e2);\n return this.disposers.delete(e2), s2;\n }\n flush(e2) {\n const s2 = this.remove(e2);\n if (s2)\n try {\n s2();\n } catch (t2) {\n console.error(t2);\n }\n }\n flushAll() {\n this.disposers.forEach((e2) => {\n try {\n e2();\n } catch (s2) {\n console.error(s2);\n }\n }), this.disposers.clear();\n }\n}\nvar e = Object.defineProperty, s = (\"undefined\" != typeof require && require, (s2, r2, t2) => (((s3, r3, t3) => {\n r3 in s3 ? e(s3, r3, { enumerable: true, configurable: true, writable: true, value: t3 }) : s3[r3] = t3;\n})(s2, \"symbol\" != typeof r2 ? r2 + \"\" : r2, t2), t2));\nclass r {\n constructor(e2, r2) {\n s(this, \"_value\"), s(this, \"_beforeDestroys\"), s(this, \"_subscribers\"), this._value = e2, r2 && (this.compare = r2);\n }\n get value() {\n return this._value;\n }\n setValue(e2, s2) {\n if (!this.compare(e2, this._value)) {\n const r2 = this._value;\n this._value = e2, this._subscribers && this._subscribers.forEach((t2) => t2(e2, r2, s2));\n }\n }\n reaction(e2) {\n return this._subscribers || (this._subscribers = /* @__PURE__ */ new Set()), this._subscribers.add(e2), () => {\n this._subscribers && this._subscribers.delete(e2);\n };\n }\n subscribe(e2, s2) {\n const r2 = this.reaction(e2);\n return e2(this._value, void 0, s2), r2;\n }\n derive(e2, s2, t2) {\n const i2 = new r(e2(this.value, void 0, t2), s2), o2 = this.reaction((s3, r2, t3) => {\n i2.setValue(e2(s3, r2, t3));\n });\n return i2.addBeforeDestroy(o2), i2;\n }\n destroy() {\n this._beforeDestroys && (this._beforeDestroys.forEach((e2) => e2()), this._beforeDestroys.clear()), this._subscribers && this._subscribers.clear();\n }\n addBeforeDestroy(e2) {\n return this._beforeDestroys || (this._beforeDestroys = /* @__PURE__ */ new Set()), this._beforeDestroys.add(e2), () => {\n this._beforeDestroys && this._beforeDestroys.delete(e2);\n };\n }\n compare(e2, s2) {\n return e2 === s2;\n }\n}\nfunction t(e2, s2, t2, i2) {\n let o2 = e2.map((e3) => e3.value);\n const u2 = new r(s2(o2, void 0, i2), t2);\n return e2.forEach((e3, r2) => {\n const t3 = e3.reaction((e4, t4, i3) => {\n const c2 = o2.slice();\n c2[r2] = e4;\n const n = o2;\n o2 = c2, u2.setValue(s2(c2, n, i3), i3);\n });\n u2.addBeforeDestroy(t3);\n }), u2;\n}\nfunction i(e2, s2) {\n Object.keys(s2).forEach((r2) => {\n u(e2, r2, s2[r2]);\n });\n}\nfunction u(e2, s2, r2) {\n var t2;\n return Object.defineProperties(e2, { [s2]: { get: () => r2.value }, [`_${s2}$`]: { value: r2 }, [`set${t2 = s2, t2[0].toUpperCase() + t2.slice(1)}`]: { value: (e3, s3) => r2.setValue(e3, s3) } }), e2;\n}\nfunction c(e2) {\n const s2 = (s3) => {\n const r2 = e2.addDisposer(() => {\n s3.destroy();\n });\n return s3.addBeforeDestroy(() => {\n e2.remove(r2);\n }), s3;\n };\n return { bindSideEffect: s2, combine: (e3, r2, i2, o2) => s2(t(e3, r2, i2, o2)), createVal: (e3, t2) => s2(new r(e3, t2)) };\n}\nvar style$3 = \"\";\nvar TELE_BOX_COLOR_SCHEME = /* @__PURE__ */ ((TELE_BOX_COLOR_SCHEME2) => {\n TELE_BOX_COLOR_SCHEME2[\"Light\"] = \"light\";\n TELE_BOX_COLOR_SCHEME2[\"Dark\"] = \"dark\";\n TELE_BOX_COLOR_SCHEME2[\"Auto\"] = \"auto\";\n return TELE_BOX_COLOR_SCHEME2;\n})(TELE_BOX_COLOR_SCHEME || {});\nvar TELE_BOX_STATE = /* @__PURE__ */ ((TELE_BOX_STATE2) => {\n TELE_BOX_STATE2[\"Normal\"] = \"normal\";\n TELE_BOX_STATE2[\"Minimized\"] = \"minimized\";\n TELE_BOX_STATE2[\"Maximized\"] = \"maximized\";\n return TELE_BOX_STATE2;\n})(TELE_BOX_STATE || {});\nvar TELE_BOX_EVENT = /* @__PURE__ */ ((TELE_BOX_EVENT2) => {\n TELE_BOX_EVENT2[\"DarkMode\"] = \"dark_mode\";\n TELE_BOX_EVENT2[\"PrefersColorScheme\"] = \"prefers_color_scheme\";\n TELE_BOX_EVENT2[\"Close\"] = \"close\";\n TELE_BOX_EVENT2[\"Focus\"] = \"focus\";\n TELE_BOX_EVENT2[\"Blur\"] = \"blur\";\n TELE_BOX_EVENT2[\"Move\"] = \"move\";\n TELE_BOX_EVENT2[\"Resize\"] = \"resize\";\n TELE_BOX_EVENT2[\"IntrinsicMove\"] = \"intrinsic_move\";\n TELE_BOX_EVENT2[\"IntrinsicResize\"] = \"intrinsic_resize\";\n TELE_BOX_EVENT2[\"VisualResize\"] = \"visual_resize\";\n TELE_BOX_EVENT2[\"ZIndex\"] = \"z_index\";\n TELE_BOX_EVENT2[\"State\"] = \"state\";\n TELE_BOX_EVENT2[\"Minimized\"] = \"minimized\";\n TELE_BOX_EVENT2[\"Maximized\"] = \"maximized\";\n TELE_BOX_EVENT2[\"Readonly\"] = \"readonly\";\n TELE_BOX_EVENT2[\"Destroyed\"] = \"destroyed\";\n TELE_BOX_EVENT2[\"BoxStatus\"] = \"box_status\";\n TELE_BOX_EVENT2[\"LastNotMinimizedBoxStatus\"] = \"last_not_minimized_box_status\";\n TELE_BOX_EVENT2[\"ForceTop\"] = \"force_top\";\n TELE_BOX_EVENT2[\"ForceNormal\"] = \"force_normal\";\n return TELE_BOX_EVENT2;\n})(TELE_BOX_EVENT || {});\nvar TELE_BOX_DELEGATE_EVENT = /* @__PURE__ */ ((TELE_BOX_DELEGATE_EVENT2) => {\n TELE_BOX_DELEGATE_EVENT2[\"Close\"] = \"close\";\n TELE_BOX_DELEGATE_EVENT2[\"Maximize\"] = \"maximize\";\n TELE_BOX_DELEGATE_EVENT2[\"Minimize\"] = \"minimize\";\n return TELE_BOX_DELEGATE_EVENT2;\n})(TELE_BOX_DELEGATE_EVENT || {});\nvar TELE_BOX_RESIZE_HANDLE = /* @__PURE__ */ ((TELE_BOX_RESIZE_HANDLE2) => {\n TELE_BOX_RESIZE_HANDLE2[\"North\"] = \"n\";\n TELE_BOX_RESIZE_HANDLE2[\"South\"] = \"s\";\n TELE_BOX_RESIZE_HANDLE2[\"West\"] = \"w\";\n TELE_BOX_RESIZE_HANDLE2[\"East\"] = \"e\";\n TELE_BOX_RESIZE_HANDLE2[\"NorthWest\"] = \"nw\";\n TELE_BOX_RESIZE_HANDLE2[\"NorthEast\"] = \"ne\";\n TELE_BOX_RESIZE_HANDLE2[\"SouthEast\"] = \"se\";\n TELE_BOX_RESIZE_HANDLE2[\"SouthWest\"] = \"sw\";\n return TELE_BOX_RESIZE_HANDLE2;\n})(TELE_BOX_RESIZE_HANDLE || {});\nconst TeleBoxDragHandleType = \"dh\";\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction preventEvent(ev) {\n ev.stopPropagation();\n if (ev.cancelable) {\n ev.preventDefault();\n }\n}\nfunction flattenEvent(ev) {\n return ev.touches ? ev.touches[0] : ev;\n}\nfunction genUniqueKey() {\n return Date.now().toString().slice(6) + Math.random().toString().slice(2, 8);\n}\nlet defaultBoxCount = 1;\nfunction getBoxDefaultName() {\n return `New Box ${defaultBoxCount++}`;\n}\nfunction isTruthy(value) {\n return Boolean(value);\n}\nfunction isFalsy(value) {\n return !value;\n}\nclass DefaultTitleBar {\n constructor({\n readonly = false,\n title,\n buttons,\n onEvent,\n onDragStart,\n namespace = \"telebox\",\n state = TELE_BOX_STATE.Normal,\n boxStatus,\n forceTop = false,\n forceNormal = false\n } = {}) {\n this.$btns = [];\n this.sideEffect = new o();\n this.lastTitleBarClick = {\n timestamp: 0,\n clientX: -100,\n clientY: -100\n };\n this.handleTitleBarClick = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if (ev.button !== 0) {\n return;\n }\n if ((_a = ev.target.dataset) == null ? void 0 : _a.teleTitleBarNoDblClick) {\n return;\n }\n preventEvent(ev);\n const now = Date.now();\n if (now - this.lastTitleBarClick.timestamp <= 500) {\n if (Math.abs(ev.clientX - this.lastTitleBarClick.clientX) <= 5 && Math.abs(ev.clientY - this.lastTitleBarClick.clientY) <= 5) {\n if (this.onEvent) {\n this.onEvent({ type: TELE_BOX_DELEGATE_EVENT.Maximize });\n }\n }\n } else if (this.onDragStart) {\n this.onDragStart(ev);\n }\n this.lastTitleBarClick.timestamp = now;\n this.lastTitleBarClick.clientX = ev.clientX;\n this.lastTitleBarClick.clientY = ev.clientY;\n };\n this.lastTitleBarTouch = {\n timestamp: 0,\n clientX: -100,\n clientY: -100\n };\n this.handleTitleBarTouch = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if ((_a = ev.target.dataset) == null ? void 0 : _a.teleTitleBarNoDblClick) {\n return;\n }\n preventEvent(ev);\n const now = Date.now();\n const {\n clientX = this.lastTitleBarTouch.clientX + 100,\n clientY = this.lastTitleBarTouch.clientY + 100\n } = ev.touches[0] || {};\n if (now - this.lastTitleBarTouch.timestamp <= 500) {\n if (Math.abs(clientX - this.lastTitleBarTouch.clientX) <= 10 && Math.abs(clientY - this.lastTitleBarTouch.clientY) <= 10) {\n if (this.onEvent) {\n this.onEvent({ type: TELE_BOX_DELEGATE_EVENT.Maximize });\n }\n }\n } else if (this.onDragStart) {\n this.onDragStart(ev);\n }\n this.lastTitleBarTouch.timestamp = now;\n this.lastTitleBarTouch.clientX = clientX;\n this.lastTitleBarTouch.clientY = clientY;\n };\n this.readonly = readonly;\n this.onEvent = onEvent;\n this.onDragStart = onDragStart;\n this.namespace = namespace;\n this.title = title;\n this.state = state;\n this.boxStatus = boxStatus;\n this.forceTop = forceTop;\n this.forceNormal = forceNormal;\n this.buttons = buttons || (forceNormal ? [\n {\n type: TELE_BOX_DELEGATE_EVENT.Close,\n iconClassName: this.wrapClassName(\"titlebar-icon-close\")\n }\n ] : [\n {\n type: TELE_BOX_DELEGATE_EVENT.Minimize,\n iconClassName: this.wrapClassName(\"titlebar-icon-minimize\")\n },\n {\n type: TELE_BOX_DELEGATE_EVENT.Maximize,\n iconClassName: this.wrapClassName(\"titlebar-icon-maximize\"),\n isActive: (state2) => state2 === TELE_BOX_STATE.Maximized\n },\n {\n type: TELE_BOX_DELEGATE_EVENT.Close,\n iconClassName: this.wrapClassName(\"titlebar-icon-close\")\n }\n ]);\n this.$dragArea = this.renderDragArea();\n }\n setTitle(title) {\n this.title = title;\n if (this.$title) {\n this.$title.textContent = title;\n this.$title.title = title;\n }\n }\n setState(state) {\n if (this.state !== state) {\n this.state = state;\n this.buttons.forEach((btn, i2) => {\n if (btn.isActive) {\n this.$btns[i2].classList.toggle(\n \"is-active\",\n btn.isActive(state)\n );\n }\n });\n }\n }\n setBoxStatus(boxStatus) {\n if (this.boxStatus !== boxStatus) {\n this.boxStatus = boxStatus;\n if (boxStatus) {\n this.buttons.forEach((btn, i2) => {\n if (btn.isActive) {\n this.$btns[i2].classList.toggle(\n \"is-active\",\n btn.isActive(boxStatus)\n );\n }\n });\n }\n }\n }\n setReadonly(readonly) {\n if (this.readonly !== readonly) {\n this.readonly = readonly;\n }\n }\n render() {\n if (!this.$titleBar) {\n this.$titleBar = document.createElement(\"div\");\n this.$titleBar.className = this.wrapClassName(\"titlebar\");\n const $titleArea = document.createElement(\"div\");\n $titleArea.className = this.wrapClassName(\"title-area\");\n $titleArea.dataset.teleBoxHandle = TeleBoxDragHandleType;\n this.$title = document.createElement(\"h1\");\n this.$title.className = this.wrapClassName(\"title\");\n this.$title.dataset.teleBoxHandle = TeleBoxDragHandleType;\n if (this.title) {\n this.$title.textContent = this.title;\n this.$title.title = this.title;\n }\n $titleArea.appendChild(this.$title);\n $titleArea.appendChild(this.$dragArea);\n const $buttonsContainer = document.createElement(\"div\");\n $buttonsContainer.className = this.wrapClassName(\"titlebar-btns\");\n this.buttons.forEach(({ iconClassName, isActive }, i2) => {\n const teleTitleBarBtnIndex = String(i2);\n const $btn = document.createElement(\"button\");\n $btn.className = `${this.wrapClassName(\n \"titlebar-btn\"\n )} ${iconClassName}`;\n $btn.dataset.teleTitleBarBtnIndex = teleTitleBarBtnIndex;\n $btn.dataset.teleTitleBarNoDblClick = \"true\";\n if (isActive) {\n $btn.classList.toggle(\"is-active\", isActive(this.boxStatus || this.state));\n }\n this.$btns.push($btn);\n $buttonsContainer.appendChild($btn);\n });\n this.sideEffect.addEventListener(\n $buttonsContainer,\n \"click\",\n (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n const target = ev.target;\n const teleTitleBarBtnIndex = Number(\n (_a = target.dataset) == null ? void 0 : _a.teleTitleBarBtnIndex\n );\n if (!Number.isNaN(teleTitleBarBtnIndex) && teleTitleBarBtnIndex < this.buttons.length) {\n preventEvent(ev);\n const btn = this.buttons[teleTitleBarBtnIndex];\n if (this.onEvent) {\n this.onEvent({\n type: btn.type,\n value: btn.value\n });\n }\n }\n }\n );\n this.$titleBar.appendChild($titleArea);\n this.$titleBar.appendChild($buttonsContainer);\n }\n return this.$titleBar;\n }\n renderDragArea() {\n const $dragArea = document.createElement(\"div\");\n $dragArea.className = this.wrapClassName(\"drag-area\");\n $dragArea.dataset.teleBoxHandle = TeleBoxDragHandleType;\n this.sideEffect.addEventListener(\n $dragArea,\n \"mousedown\",\n this.handleTitleBarClick\n );\n this.sideEffect.addEventListener(\n $dragArea,\n \"touchstart\",\n this.handleTitleBarTouch,\n { passive: true }\n );\n return $dragArea;\n }\n dragHandle() {\n return this.$titleBar;\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n destroy() {\n this.sideEffect.flushAll();\n if (this.$titleBar) {\n this.$titleBar = void 0;\n this.$title = void 0;\n this.$btns.length = 0;\n this.onDragStart = void 0;\n this.onEvent = void 0;\n }\n }\n}\nclass TeleBox {\n constructor({\n id = genUniqueKey(),\n title = getBoxDefaultName(),\n prefersColorScheme = TELE_BOX_COLOR_SCHEME.Light,\n darkMode,\n visible = true,\n width = 0.5,\n height = 0.5,\n minWidth = 0,\n minHeight = 0,\n x = 0.1,\n y = 0.1,\n minimized = false,\n maximized = false,\n readonly = false,\n resizable = true,\n draggable = true,\n fence = true,\n fixRatio = false,\n focus = false,\n zIndex = 100,\n namespace = \"telebox\",\n titleBar,\n content,\n footer,\n styles,\n containerRect = {\n x: 0,\n y: 0,\n width: window.innerWidth,\n height: window.innerHeight\n },\n collectorRect,\n boxStatus,\n lastNotMinimizedBoxStatus,\n forceTop = false,\n forceNormal = false,\n isDragContent = false\n } = {}) {\n this._renderSideEffect = new o();\n this.handleTrackStart = (ev) => {\n var _a;\n return (_a = this._handleTrackStart) == null ? void 0 : _a.call(this, ev);\n };\n this._sideEffect = new o();\n this._valSideEffectBinder = c(this._sideEffect);\n const { combine, createVal } = this._valSideEffectBinder;\n this.id = id;\n this.namespace = namespace;\n this.events = new EventEmitter();\n this._delegateEvents = new EventEmitter();\n const boxStatus$ = createVal(boxStatus);\n const lastNotMinimizedBoxStatus$ = createVal(lastNotMinimizedBoxStatus);\n const prefersColorScheme$ = createVal(\n prefersColorScheme\n );\n prefersColorScheme$.reaction((prefersColorScheme2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(\n TELE_BOX_EVENT.PrefersColorScheme,\n prefersColorScheme2\n );\n }\n });\n const darkMode$ = createVal(Boolean(darkMode));\n if (darkMode == null) {\n prefersColorScheme$.subscribe(\n (prefersColorScheme2, _, skipUpdate) => {\n this._sideEffect.add(() => {\n if (prefersColorScheme2 === \"auto\") {\n const prefersDark = window.matchMedia(\n \"(prefers-color-scheme: dark)\"\n );\n if (prefersDark) {\n darkMode$.setValue(\n prefersDark.matches,\n skipUpdate\n );\n const handler = (evt) => {\n darkMode$.setValue(evt.matches, skipUpdate);\n };\n prefersDark.addListener(handler);\n return () => prefersDark.removeListener(handler);\n } else {\n return noop;\n }\n } else {\n darkMode$.setValue(\n prefersColorScheme2 === \"dark\",\n skipUpdate\n );\n return noop;\n }\n }, \"prefers-color-scheme\");\n }\n );\n }\n darkMode$.reaction((darkMode2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.DarkMode, darkMode2);\n }\n });\n const containerRect$ = createVal(containerRect, shallowequal);\n const collectorRect$ = createVal(collectorRect, shallowequal);\n const forceTop$ = createVal(forceTop);\n forceTop$.reaction((forceTop2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ForceTop, forceTop2 || false);\n }\n });\n const forceNormal$ = createVal(forceNormal);\n forceNormal$.reaction((forceNormal2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ForceNormal, forceNormal2 || false);\n }\n });\n const isDragContent$ = createVal(isDragContent);\n const title$ = createVal(title);\n title$.reaction((title2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.titleBar.setTitle(title2);\n }\n });\n const visible$ = createVal(visible);\n visible$.reaction((visible2, _, skipUpdate) => {\n if (!skipUpdate && !visible2) {\n this.events.emit(TELE_BOX_EVENT.Close);\n }\n });\n const readonly$ = createVal(readonly);\n readonly$.reaction((readonly2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Readonly, readonly2);\n }\n });\n const resizable$ = createVal(resizable);\n const draggable$ = createVal(draggable);\n const fence$ = createVal(fence);\n const fixRatio$ = createVal(fixRatio);\n const zIndex$ = createVal(zIndex);\n zIndex$.reaction((zIndex2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.ZIndex, zIndex2);\n }\n });\n const focus$ = createVal(focus);\n focus$.reaction((focus2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(\n focus2 ? TELE_BOX_EVENT.Focus : TELE_BOX_EVENT.Blur\n );\n }\n });\n const minimized$ = createVal(minimized);\n minimized$.reaction((minimized2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Minimized, minimized2);\n }\n });\n const maximized$ = createVal(maximized);\n maximized$.reaction((maximized2, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Maximized, maximized2);\n }\n });\n const state$ = combine(\n [minimized$, maximized$, boxStatus$],\n ([minimized2, maximized2, boxStatus2]) => minimized2 ? TELE_BOX_STATE.Minimized : maximized2 ? TELE_BOX_STATE.Maximized : !boxStatus2 ? TELE_BOX_STATE.Normal : boxStatus2\n );\n state$.reaction((state, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.State, state);\n }\n });\n const minSize$ = createVal(\n {\n width: clamp(minWidth, 0, 1),\n height: clamp(minHeight, 0, 1)\n },\n shallowequal\n );\n const intrinsicSize$ = createVal(\n {\n width: clamp(width, minSize$.value.width, 1),\n height: clamp(height, minSize$.value.height, 1)\n },\n shallowequal\n );\n minSize$.reaction((minSize, _, skipUpdate) => {\n intrinsicSize$.setValue(\n {\n width: clamp(width, minSize.width, 1),\n height: clamp(height, minSize.height, 1)\n },\n skipUpdate\n );\n });\n intrinsicSize$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.IntrinsicResize, size);\n }\n });\n const size$ = combine(\n [intrinsicSize$, maximized$, boxStatus$],\n ([intrinsicSize, maximized2, boxStatus2]) => {\n if (maximized2 || boxStatus2 === TELE_BOX_STATE.Maximized) {\n return { width: 1, height: 1 };\n }\n return intrinsicSize;\n },\n shallowequal\n );\n size$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Resize, size);\n }\n });\n const visualSize$ = combine(\n [size$, minimized$, containerRect$, collectorRect$, boxStatus$],\n ([size, minimized2, containerRect2, collectorRect2, boxStatus2]) => {\n if ((minimized2 || boxStatus2 === TELE_BOX_STATE.Minimized) && collectorRect2) {\n return {\n width: collectorRect2.width / size.width / containerRect2.width,\n height: collectorRect2.height / size.height / containerRect2.height\n };\n }\n return size;\n },\n shallowequal\n );\n visualSize$.reaction((size, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.VisualResize, size);\n }\n });\n const intrinsicCoord$ = createVal(\n { x: clamp(x, 0, 1), y: clamp(y, 0, 1) },\n shallowequal\n );\n intrinsicCoord$.reaction((coord, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.IntrinsicMove, coord);\n }\n });\n const coord$ = combine(\n [\n intrinsicCoord$,\n intrinsicSize$,\n containerRect$,\n collectorRect$,\n minimized$,\n maximized$,\n boxStatus$,\n lastNotMinimizedBoxStatus$\n ],\n ([\n intrinsicCoord,\n intrinsicSize,\n containerRect2,\n collectorRect2,\n minimized2,\n maximized2,\n boxStatus2,\n lastNotMinimizedBoxStatus2\n ]) => {\n if ((minimized2 || boxStatus2 === TELE_BOX_STATE.Minimized) && collectorRect2) {\n if (maximized2 || lastNotMinimizedBoxStatus2 === TELE_BOX_STATE.Maximized) {\n return {\n x: (collectorRect2.x + collectorRect2.width / 2) / containerRect2.width - 1 / 2,\n y: (collectorRect2.y + collectorRect2.height / 2) / containerRect2.height - 1 / 2\n };\n }\n return {\n x: (collectorRect2.x + collectorRect2.width / 2) / containerRect2.width - intrinsicSize.width / 2,\n y: (collectorRect2.y + collectorRect2.height / 2) / containerRect2.height - intrinsicSize.height / 2\n };\n }\n if (maximized2 || boxStatus2 === TELE_BOX_STATE.Maximized) {\n return { x: 0, y: 0 };\n }\n return intrinsicCoord;\n },\n shallowequal\n );\n coord$.reaction((coord, _, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.Move, coord);\n }\n });\n this.titleBar = titleBar || new DefaultTitleBar({\n readonly: readonly$.value,\n title: title$.value,\n namespace: this.namespace,\n boxStatus: boxStatus$.value,\n forceTop: forceTop$.value,\n forceNormal: forceNormal$.value,\n onDragStart: (event) => {\n var _a;\n return (_a = this._handleTrackStart) == null ? void 0 : _a.call(this, event);\n },\n onEvent: (event) => {\n if (this._delegateEvents.listeners.length > 0) {\n this._delegateEvents.emit(event.type);\n } else {\n switch (event.type) {\n case TELE_BOX_DELEGATE_EVENT.Maximize: {\n if (!boxStatus$.value) {\n maximized$.setValue(!maximized$.value);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Minimize: {\n if (!boxStatus$.value) {\n minimized$.setValue(true);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Close: {\n visible$.setValue(false);\n break;\n }\n default: {\n console.error(\n \"Unsupported titleBar event:\",\n event\n );\n break;\n }\n }\n }\n }\n });\n readonly$.reaction((readonly2) => {\n this.titleBar.setReadonly(readonly2);\n });\n boxStatus$.reaction((boxStatus2) => {\n this.titleBar.setBoxStatus(boxStatus2);\n });\n const $userContent$ = createVal(content);\n const $userFooter$ = createVal(footer);\n const $userStyles$ = createVal(styles);\n const valConfig = {\n prefersColorScheme: prefersColorScheme$,\n darkMode: darkMode$,\n containerRect: containerRect$,\n collectorRect: collectorRect$,\n title: title$,\n visible: visible$,\n readonly: readonly$,\n resizable: resizable$,\n draggable: draggable$,\n fence: fence$,\n fixRatio: fixRatio$,\n focus: focus$,\n zIndex: zIndex$,\n minimized: minimized$,\n maximized: maximized$,\n $userContent: $userContent$,\n $userFooter: $userFooter$,\n $userStyles: $userStyles$,\n forceTop: forceTop$,\n forceNormal: forceNormal$,\n isDragContent: isDragContent$\n };\n i(this, valConfig);\n this._state$ = state$;\n this._minSize$ = minSize$;\n this._size$ = size$;\n this._intrinsicSize$ = intrinsicSize$;\n this._visualSize$ = visualSize$;\n this._coord$ = coord$;\n this._intrinsicCoord$ = intrinsicCoord$;\n this._boxStatus$ = boxStatus$;\n this._lastNotMinimizedBoxStatus$ = lastNotMinimizedBoxStatus$;\n if (this.fixRatio) {\n this.transform(\n coord$.value.x,\n coord$.value.y,\n size$.value.width,\n size$.value.height,\n true\n );\n }\n this.$box = this.render();\n }\n get boxStatus() {\n return this._boxStatus$.value;\n }\n set boxStatus(boxStatus) {\n this._boxStatus$.setValue(boxStatus);\n }\n get lastNotMinimizedBoxStatus() {\n return this._lastNotMinimizedBoxStatus$.value;\n }\n get darkMode() {\n return this._darkMode$.value;\n }\n get state() {\n return this._state$.value;\n }\n setState(state, skipUpdate = false) {\n switch (state) {\n case TELE_BOX_STATE.Maximized: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(true, skipUpdate);\n break;\n }\n case TELE_BOX_STATE.Minimized: {\n this.setMinimized(true, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n default: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n }\n return this;\n }\n setBoxStatus(boxStatus, skipUpdate = false) {\n if (boxStatus === TELE_BOX_STATE.Minimized) {\n if (this._boxStatus$.value && this._boxStatus$.value !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(this._boxStatus$.value, skipUpdate);\n }\n } else {\n this.setLastNotMinimizedBoxStatus(void 0, skipUpdate);\n }\n this._boxStatus$.setValue(boxStatus, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.BoxStatus, { id: this.id, boxStatus });\n }\n return this;\n }\n setLastNotMinimizedBoxStatus(lastNotMinimizedBoxStatus, skipUpdate = false) {\n this._lastNotMinimizedBoxStatus$.setValue(lastNotMinimizedBoxStatus, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_EVENT.LastNotMinimizedBoxStatus, { id: this.id, lastNotMinimizedBoxStatus });\n }\n return this;\n }\n get minWidth() {\n return this._minSize$.value.width;\n }\n get minHeight() {\n return this._minSize$.value.height;\n }\n setMinWidth(minWidth, skipUpdate = false) {\n this._minSize$.setValue(\n { width: minWidth, height: this.minHeight },\n skipUpdate\n );\n return this;\n }\n setMinHeight(minHeight, skipUpdate = false) {\n this._minSize$.setValue(\n { width: this.minWidth, height: minHeight },\n skipUpdate\n );\n return this;\n }\n get intrinsicWidth() {\n return this._intrinsicSize$.value.width;\n }\n get intrinsicHeight() {\n return this._intrinsicSize$.value.height;\n }\n resize(width, height, skipUpdate = false) {\n this._intrinsicSize$.setValue({ width, height }, skipUpdate);\n return this;\n }\n get width() {\n return this._size$.value.width;\n }\n get height() {\n return this._size$.value.height;\n }\n get absoluteWidth() {\n return this.width * this.containerRect.width;\n }\n get absoluteHeight() {\n return this.height * this.containerRect.height;\n }\n get visualWidth() {\n return this._visualSize$.value.width;\n }\n get visualHeight() {\n return this._visualSize$.value.height;\n }\n get intrinsicX() {\n return this._intrinsicCoord$.value.x;\n }\n get intrinsicY() {\n return this._intrinsicCoord$.value.y;\n }\n move(x, y, skipUpdate = false) {\n this._intrinsicCoord$.setValue({ x, y }, skipUpdate);\n return this;\n }\n get x() {\n return this._coord$.value.x;\n }\n get y() {\n return this._coord$.value.y;\n }\n transform(x, y, width, height, skipUpdate = false) {\n if (this.fixRatio) {\n const newHeight = this.intrinsicHeight / this.intrinsicWidth * width;\n if (y !== this.intrinsicY) {\n y -= newHeight - height;\n }\n height = newHeight;\n }\n if (y < 0) {\n y = 0;\n if (height > this.intrinsicHeight) {\n height = this.intrinsicHeight;\n }\n }\n this._intrinsicCoord$.setValue(\n {\n x: width >= this.minWidth ? x : this.intrinsicX,\n y: height >= this.minHeight ? y : this.intrinsicY\n },\n skipUpdate\n );\n this._intrinsicSize$.setValue(\n {\n width: clamp(width, this.minWidth, 1),\n height: clamp(height, this.minHeight, 1)\n },\n skipUpdate\n );\n return this;\n }\n mount(container) {\n container.appendChild(this.render());\n return this;\n }\n unmount() {\n if (this.$box) {\n this.$box.remove();\n }\n return this;\n }\n mountContent(content) {\n this.set$userContent(content);\n return this;\n }\n unmountContent() {\n this.set$userContent(void 0);\n return this;\n }\n mountFooter(footer) {\n this.set$userFooter(footer);\n return this;\n }\n unmountFooter() {\n this.set$userFooter(void 0);\n return this;\n }\n getUserStyles() {\n return this.$userStyles;\n }\n mountStyles(styles) {\n let $styles;\n if (typeof styles === \"string\") {\n $styles = document.createElement(\"style\");\n $styles.textContent = styles;\n } else {\n $styles = styles;\n }\n this.set$userStyles($styles);\n return this;\n }\n unmountStyles() {\n this.set$userStyles(void 0);\n return this;\n }\n render(root) {\n if (root) {\n if (root === this.$box) {\n return this.$box;\n } else {\n this.$box = root;\n }\n } else {\n if (this.$box) {\n return this.$box;\n } else {\n this.$box = document.createElement(\"div\");\n }\n }\n this._renderSideEffect.flushAll();\n this.$box.classList.add(this.wrapClassName(\"box\"));\n const bindClassName = (el, val, className, predicate = isTruthy) => {\n return this._renderSideEffect.add(() => {\n const wrappedClassName = this.wrapClassName(className);\n return val.subscribe((value) => {\n el.classList.toggle(wrappedClassName, predicate(value));\n });\n });\n };\n bindClassName(this.$box, this._readonly$, \"readonly\");\n bindClassName(this.$box, this._draggable$, \"no-drag\", isFalsy);\n bindClassName(this.$box, this._resizable$, \"no-resize\", isFalsy);\n bindClassName(this.$box, this._focus$, \"blur\", isFalsy);\n bindClassName(this.$box, this._darkMode$, \"color-scheme-dark\");\n bindClassName(\n this.$box,\n this._darkMode$,\n \"color-scheme-light\",\n isFalsy\n );\n this._renderSideEffect.add(() => {\n const minimizedClassName = this.wrapClassName(\"minimized\");\n const maximizedClassName = this.wrapClassName(\"maximized\");\n const MAXIMIZED_TIMER_ID = \"box-maximized-timer\";\n return this._state$.subscribe((state) => {\n this.$box.classList.toggle(\n minimizedClassName,\n state === TELE_BOX_STATE.Minimized\n );\n if (state === TELE_BOX_STATE.Maximized) {\n this._renderSideEffect.flush(MAXIMIZED_TIMER_ID);\n this.$box.classList.toggle(maximizedClassName, true);\n } else {\n this._renderSideEffect.setTimeout(\n () => {\n this.$box.classList.toggle(\n maximizedClassName,\n false\n );\n },\n 0,\n MAXIMIZED_TIMER_ID\n );\n }\n });\n });\n this._renderSideEffect.add(\n () => this._visible$.subscribe((visible) => {\n if (visible) {\n this.$box.style.removeProperty(\"display\");\n } else {\n this.$box.style.display = \"none\";\n }\n })\n );\n this._renderSideEffect.add(\n () => this._zIndex$.subscribe((zIndex) => {\n this.$box.style.zIndex = String(zIndex);\n })\n );\n const boxStyler = index(this.$box);\n this.$box.dataset.teleBoxID = this.id;\n this.$box.style.width = this.absoluteWidth + \"px\";\n this.$box.style.height = this.absoluteHeight + \"px\";\n const translateX = this.x * this.containerRect.width + this.containerRect.x;\n const translateY = this.y * this.containerRect.height + this.containerRect.y;\n this.$box.style.transform = `translate(${translateX - 10}px,${translateY - 10}px)`;\n this._valSideEffectBinder.combine(\n [\n this._coord$,\n this._size$,\n this._minimized$,\n this._containerRect$,\n this._collectorRect$,\n this._boxStatus$\n ],\n ([coord, size, minimized, containerRect, collectorRect, boxStatus]) => {\n const absoluteWidth = size.width * containerRect.width;\n const absoluteHeight = size.height * containerRect.height;\n return {\n width: absoluteWidth + ((minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? 1 : 0),\n height: absoluteHeight + ((minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? 1 : 0),\n x: coord.x * containerRect.width,\n y: coord.y * containerRect.height,\n scaleX: (minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? collectorRect.width / absoluteWidth : 1,\n scaleY: (minimized || boxStatus === TELE_BOX_STATE.Minimized) && collectorRect ? collectorRect.height / absoluteHeight : 1\n };\n },\n shallowequal\n ).subscribe((styles) => {\n boxStyler.set(styles);\n });\n boxStyler.set({ x: translateX, y: translateY });\n const $boxMain = document.createElement(\"div\");\n $boxMain.className = this.wrapClassName(\"box-main\");\n this.$box.appendChild($boxMain);\n const $titleBar = document.createElement(\"div\");\n $titleBar.className = this.wrapClassName(\"titlebar-wrap\");\n $titleBar.appendChild(this.titleBar.render());\n this.$titleBar = $titleBar;\n const $contentWrap = document.createElement(\"div\");\n $contentWrap.className = this.wrapClassName(\"content-wrap\");\n const $content = document.createElement(\"div\");\n $content.className = this.wrapClassName(\"content\") + \" tele-fancy-scrollbar\";\n this.$content = $content;\n if (this.isDragContent) {\n this.$content.appendChild(this.titleBar.$dragArea);\n }\n this._renderSideEffect.add(() => {\n let last$userStyles;\n return this._$userStyles$.subscribe(($userStyles) => {\n if (last$userStyles) {\n last$userStyles.remove();\n }\n last$userStyles = $userStyles;\n if ($userStyles) {\n $contentWrap.appendChild($userStyles);\n }\n });\n });\n this._renderSideEffect.add(() => {\n let last$userContent;\n return this._$userContent$.subscribe(($userContent) => {\n if (last$userContent) {\n last$userContent.remove();\n }\n last$userContent = $userContent;\n if ($userContent) {\n $content.appendChild($userContent);\n }\n });\n });\n $contentWrap.appendChild($content);\n const $footer = document.createElement(\"div\");\n $footer.className = this.wrapClassName(\"footer-wrap\");\n this.$footer = $footer;\n this._renderSideEffect.add(() => {\n let last$userFooter;\n return this._$userFooter$.subscribe(($userFooter) => {\n if (last$userFooter) {\n last$userFooter.remove();\n }\n last$userFooter = $userFooter;\n if ($userFooter) {\n $footer.appendChild($userFooter);\n }\n });\n });\n $boxMain.appendChild($titleBar);\n $boxMain.appendChild($contentWrap);\n $boxMain.appendChild($footer);\n this._renderResizeHandlers();\n return this.$box;\n }\n _renderResizeHandlers() {\n const $resizeHandles = document.createElement(\"div\");\n $resizeHandles.className = this.wrapClassName(\"resize-handles\");\n Object.values(TELE_BOX_RESIZE_HANDLE).forEach((handleType) => {\n const $handle = document.createElement(\"div\");\n $handle.className = this.wrapClassName(handleType) + \" \" + this.wrapClassName(\"resize-handle\");\n $handle.dataset.teleBoxHandle = handleType;\n $resizeHandles.appendChild($handle);\n });\n this.$box.appendChild($resizeHandles);\n const TRACKING_DISPOSER_ID = \"handle-tracking-listener\";\n const transformingClassName = this.wrapClassName(\"transforming\");\n let $trackMask;\n let trackStartX = 0;\n let trackStartY = 0;\n let trackStartWidth = 0;\n let trackStartHeight = 0;\n let trackStartPageX = 0;\n let trackStartPageY = 0;\n let trackingHandle;\n const handleTracking = (ev) => {\n if (this.state !== TELE_BOX_STATE.Normal) {\n return;\n }\n preventEvent(ev);\n let { pageX, pageY } = flattenEvent(ev);\n if (pageY < 0) {\n pageY = 0;\n }\n const offsetX = (pageX - trackStartPageX) / this.containerRect.width;\n const offsetY = (pageY - trackStartPageY) / this.containerRect.height;\n switch (trackingHandle) {\n case TELE_BOX_RESIZE_HANDLE.North: {\n this.transform(\n this.x,\n trackStartY + offsetY,\n this.width,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.South: {\n this.transform(\n this.x,\n this.y,\n this.width,\n trackStartHeight + offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.West: {\n this.transform(\n trackStartX + offsetX,\n this.y,\n trackStartWidth - offsetX,\n this.height\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.East: {\n this.transform(\n this.x,\n this.y,\n trackStartWidth + offsetX,\n this.height\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.NorthWest: {\n this.transform(\n trackStartX + offsetX,\n trackStartY + offsetY,\n trackStartWidth - offsetX,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.NorthEast: {\n this.transform(\n this.x,\n trackStartY + offsetY,\n trackStartWidth + offsetX,\n trackStartHeight - offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.SouthEast: {\n this.transform(\n this.x,\n this.y,\n trackStartWidth + offsetX,\n trackStartHeight + offsetY\n );\n break;\n }\n case TELE_BOX_RESIZE_HANDLE.SouthWest: {\n this.transform(\n trackStartX + offsetX,\n this.y,\n trackStartWidth - offsetX,\n trackStartHeight + offsetY\n );\n break;\n }\n default: {\n if (this.fence) {\n this.move(\n clamp(trackStartX + offsetX, 0, 1 - this.width),\n clamp(trackStartY + offsetY, 0, 1 - this.height)\n );\n } else {\n const xOverflowOffset = 20 / this.containerRect.width;\n const yOverflowOffset = 20 / this.containerRect.height;\n this.move(\n clamp(\n trackStartX + offsetX,\n xOverflowOffset - this.width,\n 1 - xOverflowOffset\n ),\n clamp(trackStartY + offsetY, 0, 1 - yOverflowOffset)\n );\n }\n break;\n }\n }\n };\n const handleTrackEnd = (ev) => {\n trackingHandle = void 0;\n if (!$trackMask) {\n return;\n }\n preventEvent(ev);\n this.$box.classList.toggle(transformingClassName, false);\n this._sideEffect.flush(TRACKING_DISPOSER_ID);\n $trackMask.remove();\n };\n const handleTrackStart = (ev) => {\n var _a;\n if (this.readonly) {\n return;\n }\n if (ev.button != null && ev.button !== 0) {\n return;\n }\n if (!this.draggable || trackingHandle || this.state !== TELE_BOX_STATE.Normal) {\n return;\n }\n const target = ev.target;\n if ((_a = target.dataset) == null ? void 0 : _a.teleBoxHandle) {\n preventEvent(ev);\n trackStartX = this.x;\n trackStartY = this.y;\n trackStartWidth = this.width;\n trackStartHeight = this.height;\n ({ pageX: trackStartPageX, pageY: trackStartPageY } = flattenEvent(ev));\n trackingHandle = target.dataset.teleBoxHandle;\n if (!$trackMask) {\n $trackMask = document.createElement(\"div\");\n }\n const cursor = trackingHandle ? this.wrapClassName(`cursor-${trackingHandle}`) : \"\";\n $trackMask.className = this.wrapClassName(\n `track-mask${cursor ? ` ${cursor}` : \"\"}`\n );\n this.$box.appendChild($trackMask);\n this.$box.classList.add(transformingClassName);\n this._sideEffect.add(() => {\n window.addEventListener(\"mousemove\", handleTracking);\n window.addEventListener(\"touchmove\", handleTracking, {\n passive: false\n });\n window.addEventListener(\"mouseup\", handleTrackEnd);\n window.addEventListener(\"touchend\", handleTrackEnd, {\n passive: false\n });\n window.addEventListener(\"touchcancel\", handleTrackEnd, {\n passive: false\n });\n return () => {\n window.removeEventListener(\"mousemove\", handleTracking);\n window.removeEventListener(\"touchmove\", handleTracking);\n window.removeEventListener(\"mouseup\", handleTrackEnd);\n window.removeEventListener(\"touchend\", handleTrackEnd);\n window.removeEventListener(\n \"touchcancel\",\n handleTrackEnd\n );\n };\n }, TRACKING_DISPOSER_ID);\n }\n };\n this._handleTrackStart = handleTrackStart;\n this._sideEffect.addEventListener(\n $resizeHandles,\n \"mousedown\",\n handleTrackStart,\n {},\n \"box-resizeHandles-mousedown\"\n );\n this._sideEffect.addEventListener(\n $resizeHandles,\n \"touchstart\",\n handleTrackStart,\n { passive: false },\n \"box-resizeHandles-touchstart\"\n );\n }\n destroy() {\n this.$box.remove();\n this.events.emit(TELE_BOX_EVENT.Destroyed);\n this._sideEffect.flushAll();\n this._renderSideEffect.flushAll();\n this.events.removeAllListeners();\n this._delegateEvents.removeAllListeners();\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n}\nfunction noop() {\n return;\n}\nvar style$2 = \"\";\nvar collectorSVG = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxNiI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxwYXRoIHN0cm9rZT0iIzdCODhBMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIGQ9Ik0uNyAxLjJoMTYuNnYxMy42SC43eiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSIjN0I4OEEwIiBkPSJNNCA1LjVoNnYxLjRINHpNNCA5LjVoMTB2MS40SDR6IiAvPgogICAgPC9nPgo8L3N2Zz4K\";\nclass TeleBoxCollector {\n constructor({\n visible = true,\n readonly = false,\n darkMode = false,\n namespace = \"telebox\",\n styles = {},\n onClick,\n getBoxesStatus\n }) {\n this.$appMenuContainer = document.createElement(\"div\");\n this.handleCollectorClick = () => {\n if (!this._readonly && this.onClick) {\n this.onClick();\n }\n };\n this._visible = visible;\n this._readonly = readonly;\n this._darkMode = darkMode;\n this.namespace = namespace;\n this.styles = styles;\n this.onClick = onClick;\n this.getBoxesStatus = getBoxesStatus;\n }\n get boxesStatus() {\n var _a;\n return (_a = this.getBoxesStatus) == null ? void 0 : _a.call(this);\n }\n get visible() {\n return this._visible;\n }\n get readonly() {\n return this._readonly;\n }\n get darkMode() {\n return this._darkMode;\n }\n mount(root) {\n root.appendChild(this.render());\n return this;\n }\n unmount() {\n if (this.$collector) {\n this.$collector.remove();\n }\n return this;\n }\n hasMinimizedBox() {\n const boxesStatus = this.boxesStatus;\n if (boxesStatus) {\n for (const status of boxesStatus.values()) {\n if (status === TELE_BOX_STATE.Minimized) {\n return true;\n }\n }\n }\n return false;\n }\n updateBoxesStatus() {\n const hasMinimizedBox = this.hasMinimizedBox();\n this.setVisible(hasMinimizedBox);\n }\n setVisible(visible) {\n if (this._visible !== visible) {\n this._visible = visible;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"collector-visible\"),\n visible\n );\n }\n }\n return this;\n }\n setReadonly(readonly) {\n if (this._readonly !== readonly) {\n this._readonly = readonly;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"collector-readonly\"),\n readonly\n );\n }\n }\n return this;\n }\n setDarkMode(darkMode) {\n if (this._darkMode !== darkMode) {\n this._darkMode = darkMode;\n if (this.$collector) {\n this.$collector.classList.toggle(\n this.wrapClassName(\"color-scheme-dark\"),\n darkMode\n );\n this.$collector.classList.toggle(\n this.wrapClassName(\"color-scheme-light\"),\n !darkMode\n );\n }\n }\n return this;\n }\n setStyles(styles) {\n Object.assign(this.styles, styles);\n if (this.$collector) {\n const $collector = this.$collector;\n Object.keys(styles).forEach((key) => {\n const value = styles[key];\n if (value != null) {\n $collector.style[key] = value;\n }\n });\n }\n return this;\n }\n render() {\n if (!this.$collector) {\n this.$collector = document.createElement(\"button\");\n this.$collector.className = this.wrapClassName(\"collector\");\n this.$collector.style.backgroundImage = `url('${collectorSVG}')`;\n this.$collector.addEventListener(\n \"click\",\n this.handleCollectorClick\n );\n if (this._visible) {\n this.$collector.classList.add(\n this.wrapClassName(\"collector-visible\")\n );\n }\n if (this._readonly) {\n this.$collector.classList.add(\n this.wrapClassName(\"collector-readonly\")\n );\n }\n this.$collector.classList.add(\n this.wrapClassName(\n this._darkMode ? \"color-scheme-dark\" : \"color-scheme-light\"\n )\n );\n this.$appMenuContainer.classList.add(this.wrapClassName(\"collector-shadow\"));\n this.$collector.append(this.$appMenuContainer);\n this.setStyles(this.styles);\n }\n return this.$collector;\n }\n destroy() {\n if (this.$collector) {\n this.$collector.removeEventListener(\n \"click\",\n this.handleCollectorClick\n );\n this.$collector.remove();\n this.$collector = void 0;\n }\n this.onClick = void 0;\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n}\nTeleBoxCollector.kind = \"TeleBoxCollector\";\nvar TELE_BOX_MANAGER_EVENT = /* @__PURE__ */ ((TELE_BOX_MANAGER_EVENT2) => {\n TELE_BOX_MANAGER_EVENT2[\"Focused\"] = \"focused\";\n TELE_BOX_MANAGER_EVENT2[\"Blurred\"] = \"blurred\";\n TELE_BOX_MANAGER_EVENT2[\"Created\"] = \"created\";\n TELE_BOX_MANAGER_EVENT2[\"Removed\"] = \"removed\";\n TELE_BOX_MANAGER_EVENT2[\"State\"] = \"state\";\n TELE_BOX_MANAGER_EVENT2[\"Maximized\"] = \"maximized\";\n TELE_BOX_MANAGER_EVENT2[\"Minimized\"] = \"minimized\";\n TELE_BOX_MANAGER_EVENT2[\"Move\"] = \"move\";\n TELE_BOX_MANAGER_EVENT2[\"Resize\"] = \"resize\";\n TELE_BOX_MANAGER_EVENT2[\"IntrinsicMove\"] = \"intrinsic_move\";\n TELE_BOX_MANAGER_EVENT2[\"IntrinsicResize\"] = \"intrinsic_resize\";\n TELE_BOX_MANAGER_EVENT2[\"VisualResize\"] = \"visual_resize\";\n TELE_BOX_MANAGER_EVENT2[\"ZIndex\"] = \"z_index\";\n TELE_BOX_MANAGER_EVENT2[\"PrefersColorScheme\"] = \"prefers_color_scheme\";\n TELE_BOX_MANAGER_EVENT2[\"DarkMode\"] = \"dark_mode\";\n TELE_BOX_MANAGER_EVENT2[\"BoxStatus\"] = \"box_status\";\n TELE_BOX_MANAGER_EVENT2[\"LastNotMinimizedBoxStatus\"] = \"last_not_minimized_box_status\";\n return TELE_BOX_MANAGER_EVENT2;\n})(TELE_BOX_MANAGER_EVENT || {});\nvar style$1 = \"\";\nclass MaxTitleBar extends DefaultTitleBar {\n constructor(config) {\n super(config);\n this.boxes = config.boxes;\n this.focusedBox = config.focusedBox;\n this.containerRect = config.containerRect;\n this.darkMode = config.darkMode;\n this.getBoxesStatus = config.getBoxesStatus;\n }\n get boxesStatus() {\n var _a;\n return (_a = this.getBoxesStatus) == null ? void 0 : _a.call(this);\n }\n hasMaximizedBoxInStatus() {\n if (this.getBoxesStatus) {\n const boxesStatus = this.getBoxesStatus();\n if (boxesStatus.size) {\n const hasMaximizedBox = [...boxesStatus.values()].find((state) => state === TELE_BOX_STATE.Maximized);\n return !!hasMaximizedBox;\n }\n }\n return false;\n }\n get MaximizedBoxes() {\n if (this.getBoxesStatus) {\n const boxesStatus = this.getBoxesStatus();\n if (boxesStatus) {\n return this.boxes.filter((box) => boxesStatus && boxesStatus.get(box.id) === TELE_BOX_STATE.Maximized && !box.forceTop);\n }\n }\n return [];\n }\n focusBox(box) {\n var _a, _b;\n if (this.focusedBox && this.focusedBox === box) {\n return;\n }\n if (this.$titles) {\n const { children } = this.$titles.firstElementChild;\n if (this.state === TELE_BOX_STATE.Maximized && !this.hasMaximizedBoxInStatus()) {\n for (let i2 = children.length - 1; i2 >= 0; i2 -= 1) {\n const $tab = children[i2];\n const id = (_a = $tab.dataset) == null ? void 0 : _a.teleBoxID;\n if (id) {\n if (box && id === box.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n true\n );\n } else if (this.focusedBox && id === this.focusedBox.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n false\n );\n }\n }\n }\n } else if (this.hasMaximizedBoxInStatus()) {\n for (let i2 = children.length - 1; i2 >= 0; i2 -= 1) {\n const $tab = children[i2];\n const id = (_b = $tab.dataset) == null ? void 0 : _b.teleBoxID;\n if (id) {\n if (box && id === box.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n true\n );\n } else if (this.focusedBox && id === this.focusedBox.id) {\n $tab.classList.toggle(\n this.wrapClassName(\"titles-tab-focus\"),\n false\n );\n }\n }\n }\n }\n }\n this.focusedBox = box;\n }\n setContainerRect(rect) {\n this.containerRect = rect;\n if (this.$titleBar) {\n const { x, y, width } = rect;\n this.$titleBar.style.transform = `translate(${x}px, ${y}px)`;\n this.$titleBar.style.width = width + \"px\";\n }\n }\n updateBoxesStatus() {\n if (this.hasMaximizedBoxInStatus()) {\n this.setBoxStatus(TELE_BOX_STATE.Maximized);\n }\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && this.boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setBoxes(boxes) {\n this.boxes = boxes;\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setState(state) {\n super.setState(state);\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n state === TELE_BOX_STATE.Maximized && this.boxes.length > 0 || this.hasMaximizedBoxInStatus()\n );\n }\n this.updateTitles();\n }\n setReadonly(readonly) {\n super.setReadonly(readonly);\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"readonly\"),\n this.readonly\n );\n }\n }\n setDarkMode(darkMode) {\n if (darkMode !== this.darkMode) {\n this.darkMode = darkMode;\n if (this.$titleBar) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"color-scheme-dark\"),\n darkMode\n );\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"color-scheme-light\"),\n !darkMode\n );\n }\n }\n }\n render() {\n const $titleBar = super.render();\n const { x, y, width } = this.containerRect;\n $titleBar.style.transform = `translate(${x}px, ${y}px)`;\n $titleBar.style.width = width + \"px\";\n $titleBar.classList.add(this.wrapClassName(\"max-titlebar\"));\n $titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-maximized\"),\n this.state === TELE_BOX_STATE.Maximized && this.boxes.length > 0\n );\n $titleBar.classList.toggle(\n this.wrapClassName(\"readonly\"),\n this.readonly\n );\n $titleBar.classList.add(\n this.wrapClassName(\n this.darkMode ? \"color-scheme-dark\" : \"color-scheme-light\"\n )\n );\n const $titlesArea = document.createElement(\"div\");\n $titlesArea.classList.add(this.wrapClassName(\"titles-area\"));\n $titleBar.insertBefore($titlesArea, $titleBar.firstElementChild);\n this.updateTitles();\n return $titleBar;\n }\n destroy() {\n super.destroy();\n this.$titles = void 0;\n this.boxes.length = 0;\n this.focusedBox = void 0;\n }\n updateTitles() {\n if (this.$titleBar && (this.state === TELE_BOX_STATE.Maximized || this.hasMaximizedBoxInStatus())) {\n this.$titleBar.classList.toggle(\n this.wrapClassName(\"max-titlebar-single-title\"),\n this.boxes.length === 1 || this.hasMaximizedBoxInStatus() && this.MaximizedBoxes.length === 1\n );\n if (this.boxes.length === 1 || this.hasMaximizedBoxInStatus() && this.MaximizedBoxes.length === 1) {\n this.setTitle(this.boxes[0].title);\n } else {\n this.$titleBar.replaceChild(\n this.renderTitles(),\n this.$titleBar.firstElementChild\n );\n }\n }\n }\n renderTitles() {\n this.$titles = document.createElement(\"div\");\n this.$titles.className = this.wrapClassName(\"titles\");\n this.$titles.addEventListener(\n \"wheel\",\n (ev) => {\n ev.currentTarget.scrollBy({\n left: ev.deltaY > 0 ? 250 : -250,\n behavior: \"smooth\"\n });\n },\n { passive: false }\n );\n const $content = document.createElement(\"div\");\n $content.className = this.wrapClassName(\"titles-content\");\n this.$titles.appendChild($content);\n (this.hasMaximizedBoxInStatus() ? this.MaximizedBoxes : this.boxes).forEach((box) => {\n const $tab = document.createElement(\"button\");\n $tab.className = this.wrapClassName(\"titles-tab\");\n $tab.textContent = box.title;\n $tab.dataset.teleBoxID = box.id;\n $tab.dataset.teleTitleBarNoDblClick = \"true\";\n if (this.focusedBox && box.id === this.focusedBox.id) {\n $tab.classList.add(this.wrapClassName(\"titles-tab-focus\"));\n }\n $content.appendChild($tab);\n });\n return this.$titles;\n }\n}\nvar style = \"\";\nclass AppMenu {\n constructor(props) {\n this.namespace = \"telebox-app-menu\";\n this.badge = document.createElement(\"div\");\n this.menuView = document.createElement(\"div\");\n this.containerClickHandler = () => {\n if (this.manager.readonly) {\n return;\n }\n const isShowMenuView = getComputedStyle(this.menuView).display === \"flex\";\n if (isShowMenuView) {\n this.menuView.style.display = \"none\";\n } else {\n this.menuView.style.display = \"flex\";\n }\n };\n this.menuViewClickHandler = (e2) => {\n e2.stopPropagation();\n e2.stopImmediatePropagation();\n const target = e2.target;\n const id = target.getAttribute(`data-${this.c(\"app-id\")}`);\n if (id) {\n const lastNotMinimizedBoxStatus = this.manager.getLastNotMinimizedBoxStatus(id) || TELE_BOX_STATE.Normal;\n const zIndex = (lastNotMinimizedBoxStatus === TELE_BOX_STATE.Maximized ? this.manager.getMaxMaximizedBoxZIndex() : this.manager.getMaxNormalBoxZIndex()) + 1;\n this.manager.setBox(id, {\n status: lastNotMinimizedBoxStatus,\n zIndex\n }, false, () => {\n this.manager.focusBox(id);\n });\n return;\n }\n };\n this.updatePrefersColorSchemeHandler = () => {\n this.container.classList.remove(this.theme);\n this.theme = this.manager.prefersColorScheme;\n this.container.classList.add(this.theme);\n };\n this.appMenuChange = () => {\n const minimizedBoxesStatus = this.manager.getMinimizedBoxesStatus();\n this.render(minimizedBoxesStatus);\n };\n this.container = props.container;\n this.manager = props.manager;\n this.theme = props.theme;\n this.getBoxesStatus = props.getBoxesStatus;\n this.init();\n }\n get boxesStatus() {\n var _a;\n return ((_a = this.getBoxesStatus) == null ? void 0 : _a.call(this)) || /* @__PURE__ */ new Map();\n }\n get minimizedBoxesStatus() {\n const arr = [];\n this.boxesStatus.forEach((status) => {\n if (status === TELE_BOX_STATE.Minimized) {\n arr.push(status);\n }\n });\n return arr;\n }\n c(className) {\n return `${this.namespace}-${className}`;\n }\n setContainer(container) {\n if (this.container) {\n this.container.remove();\n }\n this.container = container;\n this.init();\n }\n createDefaultAppMenu() {\n this.badge.classList.add(this.c(\"app-menu-badge\"));\n this.menuView.classList.add(this.c(\"app-menu-tooltip\"));\n this.container.classList.add(this.c(\"app-menu-container\"), this.theme);\n this.menuView.addEventListener(\"click\", this.menuViewClickHandler);\n this.container.append(this.badge, this.menuView);\n }\n async init() {\n this.createDefaultAppMenu();\n this.appMenuChange();\n }\n createMinimizedItem(appId) {\n const appItem = document.createElement(\"div\");\n appItem.classList.add(this.c(\"app-menu-item\"));\n appItem.setAttribute(`data-${this.c(\"app-id\")}`, appId);\n const titleDiv = document.createElement(\"div\");\n titleDiv.classList.add(this.c(\"app-menu-item-title\"));\n const app = this.manager.getBox(appId);\n titleDiv.innerText = (app == null ? void 0 : app.title) || appId;\n appItem.appendChild(titleDiv);\n return appItem;\n }\n renderMenuView(minimizedBoxesStatus) {\n const items = [];\n minimizedBoxesStatus.forEach((_, appId) => {\n items.push(this.createMinimizedItem(appId));\n });\n this.menuView.append(...items);\n }\n render(minimizedBoxesStatus) {\n this.menuView.style.display = \"none\";\n this.badge.innerText = \"\";\n this.menuView.innerHTML = \"\";\n if (minimizedBoxesStatus.size === 0) {\n this.container.style.display = \"none\";\n } else {\n this.badge.innerText = minimizedBoxesStatus.size.toString();\n this.renderMenuView(minimizedBoxesStatus);\n this.container.style.display = \"block\";\n }\n }\n destroy() {\n this.badge.remove();\n this.menuView.removeEventListener(\"click\", this.menuViewClickHandler);\n this.menuView.remove();\n this.container.remove();\n }\n}\nclass TeleBoxManager {\n constructor({\n root = document.body,\n prefersColorScheme = TELE_BOX_COLOR_SCHEME.Light,\n minimized = false,\n maximized = false,\n fence = true,\n containerRect = {\n x: 0,\n y: 0,\n width: window.innerWidth,\n height: window.innerHeight\n },\n collector,\n namespace = \"telebox\",\n readonly = false,\n useBoxesStatus = false\n } = {}) {\n this.events = new EventEmitter();\n this._sideEffect = new o();\n this.useBoxesStatus = useBoxesStatus;\n const { combine, createVal } = c(this._sideEffect);\n this.root = root;\n this.namespace = namespace;\n this.boxes$ = createVal([]);\n this.topBox$ = this.boxes$.derive((boxes) => {\n if (boxes.length > 0) {\n let currentTopBox = void 0;\n const topBox = boxes.reduce((topBox2, box) => {\n if (box.forceTop) {\n return topBox2;\n }\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized) {\n return topBox2;\n }\n if (!topBox2) {\n topBox2 = box;\n return topBox2;\n }\n return topBox2.zIndex > box.zIndex ? topBox2 : box;\n }, currentTopBox);\n return topBox;\n }\n return;\n });\n this.boxesStatus$ = /* @__PURE__ */ new Map();\n this.lastNotMinimizedBoxesStatus$ = /* @__PURE__ */ new Map();\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const prefersDark$ = createVal(false);\n if (prefersDark) {\n prefersDark$.setValue(prefersDark.matches);\n this._sideEffect.add(() => {\n const handler = (evt) => {\n prefersDark$.setValue(evt.matches);\n };\n prefersDark.addListener(handler);\n return () => prefersDark.removeListener(handler);\n });\n }\n const prefersColorScheme$ = createVal(prefersColorScheme);\n prefersColorScheme$.reaction((prefersColorScheme2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setPrefersColorScheme(prefersColorScheme2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(\n TELE_BOX_MANAGER_EVENT.PrefersColorScheme,\n prefersColorScheme2\n );\n }\n });\n this._darkMode$ = combine(\n [prefersDark$, prefersColorScheme$],\n ([prefersDark2, prefersColorScheme2]) => prefersColorScheme2 === \"auto\" ? prefersDark2 : prefersColorScheme2 === \"dark\"\n );\n this._darkMode$.reaction((darkMode, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setDarkMode(darkMode, skipUpdate));\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.DarkMode, darkMode);\n }\n });\n const readonly$ = createVal(readonly);\n readonly$.reaction((readonly2, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setReadonly(readonly2, skipUpdate));\n });\n const minimized$ = createVal(minimized);\n const maximized$ = createVal(maximized);\n maximized$.reaction((maximized2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setMaximized(maximized2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Maximized, maximized2);\n }\n });\n const state$ = combine(\n [minimized$, maximized$],\n ([minimized2, maximized2]) => minimized2 ? TELE_BOX_STATE.Minimized : maximized2 ? TELE_BOX_STATE.Maximized : TELE_BOX_STATE.Normal\n );\n state$.reaction((state, _, skipUpdate) => {\n this.maxTitleBar.setState(state);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.State, state);\n }\n });\n const fence$ = createVal(fence);\n fence$.subscribe((fence2, _, skipUpdate) => {\n this.boxes.forEach((box) => box.setFence(fence2, skipUpdate));\n });\n const containerRect$ = createVal(containerRect, shallowequal);\n containerRect$.reaction((containerRect2, _, skipUpdate) => {\n this.boxes.forEach(\n (box) => box.setContainerRect(containerRect2, skipUpdate)\n );\n this.maxTitleBar.setContainerRect(containerRect2);\n });\n const collector$ = createVal(\n collector === null ? null : collector || new TeleBoxCollector({\n visible: minimized,\n readonly,\n namespace\n }).mount(root)\n );\n collector$.subscribe((collector2) => {\n if (collector2) {\n collector2.setVisible(minimized$.value);\n collector2.setReadonly(readonly$.value);\n collector2.setDarkMode(this._darkMode$.value);\n if (this.useBoxesStatus && this.appMenu) {\n this.appMenu.setContainer(collector2.$appMenuContainer);\n }\n this._sideEffect.add(() => {\n collector2.getBoxesStatus = () => {\n return this.boxesStatus$;\n };\n collector2.onClick = () => {\n if (!readonly$.value) {\n if (!this.useBoxesStatus) {\n minimized$.setValue(false);\n } else if (this.useBoxesStatus && this.appMenu) {\n this.appMenu.containerClickHandler();\n }\n }\n };\n return () => collector2.destroy();\n }, \"collect-onClick\");\n }\n });\n readonly$.subscribe(\n (readonly2) => {\n var _a;\n return (_a = collector$.value) == null ? void 0 : _a.setReadonly(readonly2);\n }\n );\n this._darkMode$.subscribe((darkMode) => {\n var _a;\n (_a = collector$.value) == null ? void 0 : _a.setDarkMode(darkMode);\n });\n this._calcCollectorRect = () => {\n var _a;\n if ((_a = collector$.value) == null ? void 0 : _a.$collector) {\n const { x, y, width, height } = collector$.value.$collector.getBoundingClientRect();\n const rootRect = this.root.getBoundingClientRect();\n return {\n x: x - rootRect.x,\n y: y - rootRect.y,\n width,\n height\n };\n }\n return;\n };\n this._setCollectorRect = (collectorRect) => {\n var _a;\n if ((_a = collector$.value) == null ? void 0 : _a.$collector) {\n collectorRect$.setValue(collectorRect);\n }\n };\n const collectorRect$ = createVal(\n minimized$.value ? this._calcCollectorRect() : void 0\n );\n collectorRect$.subscribe((collectorRect, _, skipUpdate) => {\n this.boxes.forEach((box) => {\n box.setCollectorRect(collectorRect, skipUpdate);\n });\n });\n minimized$.subscribe((minimized2, _, skipUpdate) => {\n var _a;\n (_a = collector$.value) == null ? void 0 : _a.setVisible(minimized2);\n if (minimized2) {\n this._setCollectorRect(this._calcCollectorRect());\n }\n this.boxes.forEach(\n (box) => box.setMinimized(minimized2, skipUpdate)\n );\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Minimized, minimized2);\n }\n });\n const closeBtnClassName = this.wrapClassName(\"titlebar-icon-close\");\n const checkFocusBox = (ev) => {\n var _a;\n if (readonly$.value) {\n return;\n }\n const target = ev.target;\n if (!target.tagName) {\n return;\n }\n for (let el = target; el; el = el.parentElement) {\n if (el.classList && el.classList.contains(closeBtnClassName)) {\n return;\n }\n const id = (_a = el.dataset) == null ? void 0 : _a.teleBoxID;\n if (id) {\n const box = this.getBox(id);\n if (box) {\n if (!this.useBoxesStatus) {\n this.makeBoxTop(box);\n } else {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Normal) {\n const maxNormalBoxZIndex = this.getMaxNormalBoxZIndex();\n if (maxNormalBoxZIndex > box.zIndex) {\n this.setBox(box, {\n zIndex: maxNormalBoxZIndex + 1\n }, false);\n }\n } else if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Maximized) {\n const maxMaximizedBoxZIndex = this.getMaxMaximizedBoxZIndex();\n if (maxMaximizedBoxZIndex > box.zIndex) {\n this.setBox(box, {\n zIndex: maxMaximizedBoxZIndex + 1\n }, false);\n }\n this.makeMaximizedTopBoxFocus();\n }\n }\n this.focusBox(box);\n return;\n }\n }\n }\n };\n this._sideEffect.addEventListener(\n window,\n \"mousedown\",\n checkFocusBox,\n true\n );\n this._sideEffect.addEventListener(\n window,\n \"touchstart\",\n checkFocusBox,\n true\n );\n this.maxTitleBar = new MaxTitleBar({\n darkMode: this.darkMode,\n readonly: readonly$.value,\n namespace: this.namespace,\n state: state$.value,\n boxes: this.boxes$.value,\n containerRect: containerRect$.value,\n getBoxesStatus: () => {\n return this.boxesStatus$;\n },\n onEvent: (event) => {\n switch (event.type) {\n case TELE_BOX_DELEGATE_EVENT.Maximize: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n this.setBox(box, {\n status: TELE_BOX_STATE.Normal,\n zIndex: this.getMaxNormalBoxZIndex() + 1\n }, false, () => {\n this.makeMaximizedTopBoxFocus();\n });\n }\n }\n } else {\n maximized$.setValue(!maximized$.value);\n }\n break;\n }\n case TELE_BOX_DELEGATE_EVENT.Minimize: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n let isFocusChanged = false;\n if (box.focus) {\n this.blurBox(box);\n isFocusChanged = true;\n }\n this.setBox(box, {\n status: TELE_BOX_STATE.Minimized,\n zIndex: -1\n }, false);\n if (isFocusChanged) {\n this.focusTopBox();\n } else {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n } else {\n minimized$.setValue(true);\n }\n break;\n }\n case TELE_BOX_EVENT.Close: {\n if (this.hasBoxesStatus()) {\n let targetBox = this.maxTitleBar.focusedBox;\n if (!targetBox) {\n targetBox = this.getMaximizedTopBox();\n }\n if (targetBox == null ? void 0 : targetBox.id) {\n const box = this.getBox(targetBox.id);\n if (box) {\n let isFocusChanged = false;\n if (box.focus) {\n this.blurBox(box);\n isFocusChanged = true;\n }\n this.remove(box, false);\n if (isFocusChanged) {\n this.focusTopBox();\n } else {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n } else {\n this.removeTopBox();\n this.focusTopBox();\n }\n break;\n }\n }\n }\n });\n readonly$.subscribe(\n (readonly2) => this.maxTitleBar.setReadonly(readonly2)\n );\n this._darkMode$.subscribe((darkMode) => {\n this.maxTitleBar.setDarkMode(darkMode);\n });\n this.boxes$.reaction((boxes) => {\n this.maxTitleBar.setBoxes(boxes);\n });\n const valConfig = {\n prefersColorScheme: prefersColorScheme$,\n containerRect: containerRect$,\n collector: collector$,\n collectorRect: collectorRect$,\n readonly: readonly$,\n fence: fence$,\n minimized: minimized$,\n maximized: maximized$\n };\n i(this, valConfig);\n this._state$ = state$;\n this.root.appendChild(this.maxTitleBar.render());\n if (useBoxesStatus) {\n this.appMenu = this.createMinimizedAppMenu();\n }\n }\n get boxes() {\n return this.boxes$.value;\n }\n get topBox() {\n return this.topBox$.value;\n }\n get forceTopBoxes() {\n return this.boxes.find((box) => box.forceTop);\n }\n get maxForceTopBox() {\n return this.boxes.reduce((maxTopBox, box) => {\n var _a;\n if (box.forceTop && box.zIndex > ((_a = maxTopBox == null ? void 0 : maxTopBox.zIndex) != null ? _a : 0)) {\n return box;\n }\n return maxTopBox;\n }, void 0);\n }\n get forceNormalBoxes() {\n return this.boxes.find((box) => box.forceNormal);\n }\n get darkMode() {\n return this._darkMode$.value;\n }\n get state() {\n return this._state$.value;\n }\n setState(state, skipUpdate = false) {\n switch (state) {\n case TELE_BOX_STATE.Maximized: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(true, skipUpdate);\n break;\n }\n case TELE_BOX_STATE.Minimized: {\n this.setMinimized(true, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n default: {\n this.setMinimized(false, skipUpdate);\n this.setMaximized(false, skipUpdate);\n break;\n }\n }\n return this;\n }\n setBoxStatus(boxId, boxStatus, skipUpdate = false) {\n if (boxStatus) {\n const oldBoxStatus = this.boxesStatus$.get(boxId);\n this.boxesStatus$.set(boxId, boxStatus);\n if (boxStatus === TELE_BOX_STATE.Minimized && oldBoxStatus !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(boxId, oldBoxStatus, skipUpdate);\n } else if (oldBoxStatus === TELE_BOX_STATE.Minimized && boxStatus !== TELE_BOX_STATE.Minimized) {\n this.setLastNotMinimizedBoxStatus(boxId, void 0, skipUpdate);\n }\n } else {\n this.boxesStatus$.delete(boxId);\n this.setLastNotMinimizedBoxStatus(boxId, void 0, skipUpdate);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.BoxStatus, { id: boxId, boxStatus });\n }\n }\n getBoxStatus(boxId) {\n return this.boxesStatus$.get(boxId);\n }\n get boxesStatus() {\n return this.boxesStatus$;\n }\n get lastNotMinimizedBoxesStatus() {\n return this.lastNotMinimizedBoxesStatus$;\n }\n setBoxesStatus(boxesStatus, skipUpdate = false) {\n this.boxesStatus$ = boxesStatus;\n this.effectBoxesStatusChange(skipUpdate);\n }\n getBoxesStatus() {\n return this.boxesStatus$;\n }\n effectBoxStatusChange() {\n if (!this.useBoxesStatus) {\n return;\n }\n if (this.collector) {\n this.collector.updateBoxesStatus();\n if (this.hasMinimizedBox()) {\n this._setCollectorRect(this._calcCollectorRect());\n }\n }\n if (this.appMenu) {\n this.appMenu.appMenuChange();\n }\n if (this.maxTitleBar) {\n this.maxTitleBar.updateBoxesStatus();\n }\n }\n effectBoxesStatusTimerFunc(skipUpdate) {\n if (!this.useBoxesStatus) {\n return;\n }\n let newTopBox;\n const curTopBox = this.topBox;\n this.boxes.forEach((box) => {\n var _a;\n const boxStatus = this.boxesStatus$.get(box.id);\n if (boxStatus) {\n if (boxStatus !== TELE_BOX_STATE.Minimized && !this.isForceTop(box) && box.zIndex > ((_a = newTopBox == null ? void 0 : newTopBox.zIndex) != null ? _a : 0)) {\n newTopBox = box;\n }\n box.setBoxStatus(boxStatus, skipUpdate);\n }\n });\n this.effectBoxStatusChange();\n if (newTopBox && curTopBox !== newTopBox) {\n this.topBox$.setValue(newTopBox);\n }\n if (!newTopBox && curTopBox) {\n this.topBox$.setValue(void 0);\n }\n }\n async effectBoxesStatusChange(skipUpdate = false) {\n var _a, _b;\n if (!this.useBoxesStatus) {\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.timer) {\n clearTimeout(this.effectBoxesStatusTimer.timer);\n if (this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(!!((_a = this.effectBoxesStatusTimer) == null ? void 0 : _a.skipUpdate));\n }\n }\n this.effectBoxesStatusTimer = void 0;\n return;\n }\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.timer) {\n if (this.effectBoxesStatusTimer.skipUpdate !== skipUpdate) {\n clearTimeout(this.effectBoxesStatusTimer.timer);\n if (this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(!!((_b = this.effectBoxesStatusTimer) == null ? void 0 : _b.skipUpdate));\n }\n this.effectBoxesStatusTimer.skipUpdate = skipUpdate;\n } else {\n return;\n }\n }\n if (!this.effectBoxesStatusTimer) {\n this.effectBoxesStatusTimer = {\n skipUpdate,\n timer: void 0,\n resolve: void 0\n };\n }\n if (this.effectBoxesStatusTimer) {\n const _skipUpdate = await new Promise((resolve) => {\n this.effectBoxesStatusTimer.resolve = resolve;\n this.effectBoxesStatusTimer.timer = setTimeout(() => {\n if (this.effectBoxesStatusTimer && this.effectBoxesStatusTimer.resolve) {\n this.effectBoxesStatusTimer.resolve(this.effectBoxesStatusTimer.skipUpdate);\n }\n }, 100);\n });\n this.effectBoxesStatusTimerFunc(_skipUpdate);\n this.effectBoxesStatusTimer = void 0;\n }\n }\n hasBoxesStatus() {\n if (!this.useBoxesStatus) {\n return false;\n }\n return this.boxesStatus$.size > 0;\n }\n hasMinimizedBox() {\n if (!this.useBoxesStatus) {\n return false;\n }\n return this.boxes.some((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized);\n }\n getMinimizedBoxesStatus() {\n const minimizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Minimized) {\n minimizedBoxes.set(boxId, boxStatus);\n }\n });\n return minimizedBoxes;\n }\n getNotMinimizedBoxesStatus() {\n const notMinimizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus !== TELE_BOX_STATE.Minimized) {\n notMinimizedBoxes.set(boxId, boxStatus);\n }\n });\n return notMinimizedBoxes;\n }\n getAllMaximizedBoxesStatus() {\n const maximizedBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Maximized) {\n maximizedBoxes.set(boxId, boxStatus);\n }\n });\n return maximizedBoxes;\n }\n getAllNormalBoxesStatus() {\n const normalBoxes = /* @__PURE__ */ new Map();\n this.boxesStatus$.forEach((boxStatus, boxId) => {\n if (boxStatus === TELE_BOX_STATE.Normal) {\n normalBoxes.set(boxId, boxStatus);\n }\n });\n return normalBoxes;\n }\n getLastNotMinimizedBoxStatus(boxId) {\n return this.lastNotMinimizedBoxesStatus$.get(boxId);\n }\n setLastNotMinimizedBoxStatus(boxId, lastNotMinimizedBoxStatus, skipUpdate = false) {\n if (lastNotMinimizedBoxStatus) {\n this.lastNotMinimizedBoxesStatus$.set(boxId, lastNotMinimizedBoxStatus);\n } else {\n this.lastNotMinimizedBoxesStatus$.delete(boxId);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.LastNotMinimizedBoxStatus, { id: boxId, boxStatus: lastNotMinimizedBoxStatus });\n }\n }\n setLastNotMinimizedBoxesStatus(lastNotMinimizedBoxesStatus, skipUpdate = false) {\n this.lastNotMinimizedBoxesStatus$ = lastNotMinimizedBoxesStatus;\n this.effectLastNotMinimizedBoxStatusChange(skipUpdate);\n }\n async effectLastNotMinimizedBoxStatusChange(skipUpdate = false) {\n var _a, _b;\n if (!this.useBoxesStatus) {\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.timer) {\n clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer);\n if (this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((_a = this.effectLastNotMinimizedBoxStatusTimer) == null ? void 0 : _a.skipUpdate));\n }\n }\n this.effectLastNotMinimizedBoxStatusTimer = void 0;\n return;\n }\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.timer) {\n clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer);\n if (this.effectLastNotMinimizedBoxStatusTimer.skipUpdate !== skipUpdate) {\n if (this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((_b = this.effectLastNotMinimizedBoxStatusTimer) == null ? void 0 : _b.skipUpdate));\n }\n this.effectLastNotMinimizedBoxStatusTimer.skipUpdate = skipUpdate;\n } else {\n return;\n }\n }\n if (!this.effectLastNotMinimizedBoxStatusTimer) {\n this.effectLastNotMinimizedBoxStatusTimer = {\n skipUpdate,\n timer: void 0,\n resolve: void 0\n };\n }\n if (this.effectLastNotMinimizedBoxStatusTimer) {\n const _skipUpdate = await new Promise((resolve) => {\n this.effectLastNotMinimizedBoxStatusTimer.resolve = resolve;\n this.effectLastNotMinimizedBoxStatusTimer.timer = setTimeout(() => {\n if (this.effectLastNotMinimizedBoxStatusTimer && this.effectLastNotMinimizedBoxStatusTimer.resolve) {\n this.effectLastNotMinimizedBoxStatusTimer.resolve(this.effectLastNotMinimizedBoxStatusTimer.skipUpdate);\n }\n }, 100);\n });\n this.effectLastNotMinimizedBoxStatusFunc(_skipUpdate);\n this.effectLastNotMinimizedBoxStatusTimer = void 0;\n }\n }\n effectLastNotMinimizedBoxStatusFunc(skipUpdate = false) {\n if (!this.useBoxesStatus) {\n return;\n }\n this.boxes.forEach((box) => {\n const boxStatus = this.lastNotMinimizedBoxesStatus$.get(box.id);\n if (boxStatus) {\n box.setLastNotMinimizedBoxStatus(boxStatus, skipUpdate);\n }\n });\n }\n getUnabledBoxesStatusZIndex() {\n return this.topBox ? this.topBox.zIndex : 99;\n }\n getMaxMaximizedBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Maximized && !this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 99);\n }\n getMaxNormalBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && box.boxStatus === TELE_BOX_STATE.Normal && !this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 299);\n }\n getMaxForceTopBoxZIndex() {\n if (!this.useBoxesStatus) {\n return this.getUnabledBoxesStatusZIndex();\n }\n return this.boxes.reduce((maxZIndex, box) => {\n if (box.boxStatus && this.isForceTop(box)) {\n return Math.max(maxZIndex, box.zIndex);\n }\n return maxZIndex;\n }, 699);\n }\n isForceNormal(box) {\n return box._forceNormal$.value;\n }\n isForceTop(box) {\n return box._forceTop$.value;\n }\n create(config = {}, smartPosition = true) {\n const box = new TeleBox({\n zIndex: config.forceTop ? this.getMaxForceTopBoxZIndex() + 1 : this.getMaxNormalBoxZIndex() + 1,\n ...smartPosition ? this.smartPosition(config) : config,\n darkMode: this.darkMode,\n prefersColorScheme: this.prefersColorScheme,\n maximized: this.maximized,\n minimized: this.minimized,\n fence: this.fence,\n namespace: this.namespace,\n containerRect: this.containerRect,\n readonly: this.readonly,\n collectorRect: this.collectorRect\n });\n box.mount(this.root);\n this.boxes$.setValue([...this.boxes, box]);\n if (box.boxStatus && this.useBoxesStatus) {\n this.setBox(box, {\n status: box.boxStatus,\n lastNotMinimizedBoxStatus: box._lastNotMinimizedBoxStatus$.value\n }, true);\n }\n if (box.focus) {\n this.focusBox(box);\n if (smartPosition) {\n this.makeBoxTop(box);\n }\n }\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Maximize, () => {\n if (this.useBoxesStatus && box.boxStatus) {\n if (box._forceNormal$.value) {\n return;\n }\n if (box.boxStatus === TELE_BOX_STATE.Maximized) {\n this.setBox(box.id, {\n status: TELE_BOX_STATE.Normal,\n zIndex: this.getMaxNormalBoxZIndex() + 1\n }, false);\n } else {\n [...this.boxes].filter((box2) => box2.boxStatus === TELE_BOX_STATE.Normal && !this.isForceNormal(box2)).sort((a, b) => a.zIndex - b.zIndex).forEach((box2) => {\n if (box2.boxStatus === TELE_BOX_STATE.Normal) {\n this.setBox(box2.id, {\n status: TELE_BOX_STATE.Maximized,\n zIndex: this.getMaxMaximizedBoxZIndex() + 1\n }, false);\n }\n });\n this.makeMaximizedTopBoxFocus();\n }\n } else {\n this.setMaximized(!this.maximized);\n }\n });\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Minimize, () => {\n if (box.boxStatus && this.useBoxesStatus) {\n if (box._forceNormal$.value) {\n return;\n }\n if (box.focus) {\n this.blurBox(box);\n }\n this.setBox(box, {\n status: TELE_BOX_STATE.Minimized,\n zIndex: -1\n }, false, () => {\n this.focusTopBox();\n });\n } else {\n this.setMinimized(true);\n }\n });\n box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Close, () => {\n if (this.useBoxesStatus && box.focus) {\n this.blurBox(box);\n }\n this.remove(box);\n this.focusTopBox();\n });\n box._coord$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Move, box);\n }\n });\n box._size$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Resize, box);\n }\n });\n box._intrinsicCoord$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.IntrinsicMove, box);\n }\n });\n box._intrinsicSize$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.IntrinsicResize, box);\n }\n });\n box._visualSize$.reaction((_, __, skipUpdate) => {\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.VisualResize, box);\n }\n });\n box._zIndex$.reaction((_, __, skipUpdate) => {\n if (this.boxes.length > 0) {\n let currentTopBox = void 0;\n const topBox = this.boxes.reduce((topBox2, box2) => {\n if (this.isForceTop(box2)) {\n return topBox2;\n }\n if (box2.boxStatus && box2.boxStatus === TELE_BOX_STATE.Minimized) {\n return topBox2;\n }\n if (!topBox2) {\n topBox2 = box2;\n return topBox2;\n }\n return topBox2.zIndex > box2.zIndex ? topBox2 : box2;\n }, currentTopBox);\n this.topBox$.setValue(topBox);\n }\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.ZIndex, box);\n }\n });\n this.events.emit(TELE_BOX_MANAGER_EVENT.Created, box);\n return box;\n }\n query(config) {\n return config ? this.boxes.filter(this.teleBoxMatcher(config)) : [...this.boxes];\n }\n queryOne(config) {\n return config ? this.boxes.find(this.teleBoxMatcher(config)) : this.boxes[0];\n }\n update(boxID, config, skipUpdate = false) {\n const box = this.boxes.find((box2) => box2.id === boxID);\n if (box) {\n return this.updateBox(box, config, skipUpdate);\n }\n }\n updateAll(config, skipUpdate = false) {\n this.boxes.forEach((box) => {\n this.updateBox(box, config, skipUpdate);\n });\n }\n setBox(boxOrID, options, skipUpdate = false, effectFunc) {\n const box = this.getBox(boxOrID);\n if (box) {\n const { status, zIndex, lastNotMinimizedBoxStatus } = options;\n if (status) {\n this.setBoxStatus(box.id, status, skipUpdate);\n box.setBoxStatus(status, skipUpdate);\n this.effectBoxStatusChange();\n }\n if (zIndex) {\n box.setZIndex(zIndex, skipUpdate);\n }\n if (lastNotMinimizedBoxStatus) {\n this.setLastNotMinimizedBoxStatus(box.id, lastNotMinimizedBoxStatus, skipUpdate);\n box.setLastNotMinimizedBoxStatus(lastNotMinimizedBoxStatus, skipUpdate);\n }\n effectFunc && effectFunc();\n }\n }\n remove(boxOrID, skipUpdate = false, effectFunc) {\n const box = this.getBox(boxOrID);\n const index2 = this.getBoxIndex(boxOrID);\n if (index2 >= 0) {\n const boxes = this.boxes.slice();\n const deletedBoxes = boxes.splice(index2, 1);\n this.boxes$.setValue(boxes);\n deletedBoxes.forEach((box2) => box2.destroy());\n if (box && this.useBoxesStatus) {\n this.setBoxStatus(box.id, void 0, skipUpdate);\n this.setLastNotMinimizedBoxStatus(box.id, void 0, skipUpdate);\n this.effectBoxStatusChange();\n effectFunc && effectFunc();\n }\n if (!skipUpdate) {\n if (this.boxes.length <= 0) {\n this.setMaximized(false);\n this.setMinimized(false);\n }\n this.events.emit(TELE_BOX_MANAGER_EVENT.Removed, deletedBoxes);\n }\n return deletedBoxes[0];\n }\n return;\n }\n removeTopBox() {\n if (this.topBox) {\n return this.remove(this.topBox);\n }\n return;\n }\n removeAll(skipUpdate = false) {\n const deletedBoxes = this.boxes$.value;\n this.boxes$.setValue([]);\n deletedBoxes.forEach((box) => box.destroy());\n this.boxesStatus$.clear();\n this.lastNotMinimizedBoxesStatus$.clear();\n if (!skipUpdate) {\n if (this.boxes.length <= 0) {\n this.setMaximized(false);\n this.setMinimized(false);\n }\n this.events.emit(TELE_BOX_MANAGER_EVENT.Removed, deletedBoxes);\n }\n return deletedBoxes;\n }\n destroy(skipUpdate = false) {\n this.events.removeAllListeners();\n this._sideEffect.flushAll();\n this.removeAll(skipUpdate);\n Object.keys(this).forEach((key) => {\n const value = this[key];\n if (value instanceof r) {\n value.destroy();\n }\n });\n }\n wrapClassName(className) {\n return `${this.namespace}-${className}`;\n }\n focusBox(boxOrID, skipUpdate = false) {\n const targetBox = this.getBox(boxOrID);\n if (targetBox) {\n this.boxes.forEach((box) => {\n if (targetBox === box) {\n let focusChanged = false;\n if (!targetBox.focus) {\n focusChanged = true;\n targetBox.setFocus(true, skipUpdate);\n }\n if (focusChanged && !skipUpdate) {\n this.events.emit(\n TELE_BOX_MANAGER_EVENT.Focused,\n targetBox\n );\n }\n } else if (box.focus) {\n this.blurBox(box, skipUpdate);\n }\n });\n if (!this.useBoxesStatus) {\n this.maxTitleBar.focusBox(targetBox);\n } else if (this.useBoxesStatus && this.maxTitleBar.hasMaximizedBoxInStatus()) {\n this.makeMaximizedTopBoxFocus();\n }\n }\n }\n focusTopBox() {\n if (this.topBox && !this.topBox.focus) {\n return this.focusBox(this.topBox);\n }\n }\n blurBox(boxOrID, skipUpdate = false) {\n const targetBox = this.getBox(boxOrID);\n if (targetBox) {\n if (targetBox.focus) {\n targetBox.setFocus(false, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Blurred, targetBox);\n }\n }\n if (this.maxTitleBar.focusedBox === targetBox) {\n this.maxTitleBar.focusBox();\n }\n }\n }\n blurAll(skipUpdate = false) {\n this.boxes.forEach((box) => {\n if (box.focus) {\n box.setFocus(false, skipUpdate);\n if (!skipUpdate) {\n this.events.emit(TELE_BOX_MANAGER_EVENT.Blurred, box);\n }\n }\n });\n if (this.maxTitleBar.focusedBox) {\n this.maxTitleBar.focusBox();\n }\n }\n teleBoxMatcher(config) {\n const keys = Object.keys(config);\n return (box) => keys.every((key) => config[key] === box[key]);\n }\n updateBox(box, config, skipUpdate = false) {\n if (config.x != null || config.y != null) {\n box.move(\n config.x == null ? box.intrinsicX : config.x,\n config.y == null ? box.intrinsicY : config.y,\n skipUpdate\n );\n }\n if (config.width != null || config.height != null) {\n box.resize(\n config.width == null ? box.intrinsicWidth : config.width,\n config.height == null ? box.intrinsicHeight : config.height,\n skipUpdate\n );\n }\n if (config.title != null) {\n box.setTitle(config.title);\n this.maxTitleBar.updateTitles();\n }\n if (config.visible != null) {\n box.setVisible(config.visible, skipUpdate);\n }\n if (config.minHeight != null) {\n box.setMinHeight(config.minHeight, skipUpdate);\n }\n if (config.minWidth != null) {\n box.setMinWidth(config.minWidth, skipUpdate);\n }\n if (config.resizable != null) {\n box.setResizable(config.resizable, skipUpdate);\n }\n if (config.draggable != null) {\n box.setDraggable(config.draggable, skipUpdate);\n }\n if (config.fixRatio != null) {\n box.setFixRatio(config.fixRatio, skipUpdate);\n }\n if (config.zIndex != null) {\n box.setZIndex(config.zIndex, skipUpdate);\n }\n if (config.content != null) {\n box.mountContent(config.content);\n }\n if (config.footer != null) {\n box.mountFooter(config.footer);\n }\n if (this.useBoxesStatus && (config.boxStatus || config.lastNotMinimizedBoxStatus)) {\n this.setBox(box, {\n status: config.boxStatus,\n lastNotMinimizedBoxStatus: config.lastNotMinimizedBoxStatus\n }, skipUpdate);\n }\n if (config.forceTop != null) {\n box.setForceTop(config.forceTop, skipUpdate);\n }\n if (config.forceNormal != null) {\n box.setForceNormal(config.forceNormal, skipUpdate);\n }\n }\n smartPosition(config = {}) {\n let { x, y } = config;\n const { width = 0.5, height = 0.5 } = config;\n if (x == null) {\n let vx = 20;\n if (config.forceTop) {\n const forceTopBox = this.maxForceTopBox || this.topBox;\n if (forceTopBox) {\n vx = forceTopBox.intrinsicX * this.containerRect.width + 20;\n if (vx > this.containerRect.width - width * this.containerRect.width) {\n vx = 20;\n }\n }\n } else if (this.topBox) {\n vx = this.topBox.intrinsicX * this.containerRect.width + 20;\n if (vx > this.containerRect.width - width * this.containerRect.width) {\n vx = 20;\n }\n } else if (this.hasMinimizedBox()) {\n vx = [...this.boxes].filter((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized && box.lastNotMinimizedBoxStatus && box.lastNotMinimizedBoxStatus === TELE_BOX_STATE.Normal).reduce((maxX, box) => {\n return Math.max(maxX, box.intrinsicX * this.containerRect.width + 20);\n }, vx);\n }\n x = vx / this.containerRect.width;\n }\n if (y == null) {\n let vy = 20;\n if (config.forceTop) {\n const forceTopBox = this.maxForceTopBox || this.topBox;\n if (forceTopBox) {\n vy = forceTopBox.intrinsicY * this.containerRect.height + 20;\n if (vy > this.containerRect.height - height * this.containerRect.height) {\n vy = 20;\n }\n }\n } else if (this.topBox) {\n vy = this.topBox.intrinsicY * this.containerRect.height + 20;\n if (vy > this.containerRect.height - height * this.containerRect.height) {\n vy = 20;\n }\n } else if (this.hasMinimizedBox()) {\n vy = [...this.boxes].filter((box) => box.boxStatus && box.boxStatus === TELE_BOX_STATE.Minimized && box.lastNotMinimizedBoxStatus && box.lastNotMinimizedBoxStatus === TELE_BOX_STATE.Normal).reduce((maxY, box) => {\n return Math.max(maxY, box.intrinsicY * this.containerRect.height + 20);\n }, vy);\n }\n y = vy / this.containerRect.height;\n }\n return { ...config, x, y, width, height };\n }\n makeBoxTop(box, skipUpdate = false) {\n if (!this.useBoxesStatus && this.topBox) {\n if (box !== this.topBox) {\n box.setZIndex(this.topBox.zIndex + 1, skipUpdate);\n }\n } else if (this.useBoxesStatus)\n ;\n }\n getMaximizedTopBox() {\n if (!this.useBoxesStatus) {\n return void 0;\n }\n let maximizedBox;\n if (this.maxTitleBar.hasMaximizedBoxInStatus()) {\n maximizedBox = this.maxTitleBar.MaximizedBoxes.reduce((topBox, currentBox) => {\n if (!topBox) {\n return currentBox;\n }\n return topBox.zIndex > currentBox.zIndex ? topBox : currentBox;\n });\n }\n return maximizedBox;\n }\n makeMaximizedTopBoxFocus() {\n if (!this.useBoxesStatus) {\n return;\n }\n const maximizedBox = this.getMaximizedTopBox();\n this.maxTitleBar.focusBox(maximizedBox);\n }\n getBoxIndex(boxOrID) {\n return typeof boxOrID === \"string\" ? this.boxes.findIndex((box) => box.id === boxOrID) : this.boxes.findIndex((box) => box === boxOrID);\n }\n getBox(boxOrID) {\n return typeof boxOrID === \"string\" ? this.boxes.find((box) => box.id === boxOrID) : boxOrID;\n }\n createMinimizedAppMenu() {\n var _a, _b;\n if ((_a = this.collector) == null ? void 0 : _a.$appMenuContainer) {\n return new AppMenu({\n manager: this,\n container: (_b = this.collector) == null ? void 0 : _b.$appMenuContainer,\n theme: this.prefersColorScheme ? \"dark\" : \"light\",\n getBoxesStatus: () => {\n return this.boxesStatus$;\n }\n });\n }\n return;\n }\n}\nTeleBoxManager.kind = \"TeleBoxManager\";\nexport { DefaultTitleBar, TELE_BOX_COLOR_SCHEME, TELE_BOX_DELEGATE_EVENT, TELE_BOX_EVENT, TELE_BOX_MANAGER_EVENT, TELE_BOX_RESIZE_HANDLE, TELE_BOX_STATE, TeleBox, TeleBoxCollector, TeleBoxDragHandleType, TeleBoxManager };\n//# sourceMappingURL=telebox-insider.es.js.map\n","import { AppAttributes, Events, MIN_HEIGHT, MIN_WIDTH } from \"./constants\";\nimport { debounce } from \"lodash\";\nimport { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport { WindowManager } from \"./index\";\nimport type { BoxEmitterType } from \"./BoxEmitter\";\nimport type { AddAppOptions, AppInitState } from \"./index\";\nimport type {\n TeleBoxManagerUpdateConfig,\n TeleBoxManagerCreateConfig,\n ReadonlyTeleBox,\n TeleBoxManagerConfig,\n TeleBoxColorScheme,\n TeleBoxRect,\n TeleBoxConfig,\n TeleBoxState,\n NotMinimizedBoxState,\n} from \"@netless/telebox-insider\";\nimport type Emittery from \"emittery\";\nimport type { NetlessApp } from \"./typings\";\nimport type { View } from \"white-web-sdk\";\nimport type { CallbacksType } from \"./callback\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { getExtendClass, TeleBoxManager, TeleBoxCollector } from \"./Utils/extendClass\";\n\nexport { TELE_BOX_STATE };\n\nexport type CreateBoxParams = {\n appId: string;\n app: NetlessApp;\n view?: View;\n emitter?: Emittery;\n options?: AddAppOptions;\n canOperate?: boolean;\n smartPosition?: boolean;\n boxStatus?: TeleBoxState;\n forceTop?: boolean;\n forceNormal?: boolean;\n isDragContent?: boolean;\n};\n\ntype AppId = { appId: string };\n\ntype MoveBoxParams = AppId & { x: number; y: number };\n\ntype ResizeBoxParams = AppId & { width: number; height: number; skipUpdate: boolean };\n\ntype SetBoxMinSizeParams = AppId & { minWidth: number; minHeight: number };\n\ntype SetBoxTitleParams = AppId & { title: string };\n\nexport type CreateTeleBoxManagerConfig = {\n collectorContainer?: HTMLElement;\n collectorStyles?: Partial<CSSStyleDeclaration>;\n prefersColorScheme?: TeleBoxColorScheme;\n useBoxesStatus?: boolean;\n};\n\nexport type BoxManagerContext = {\n safeSetAttributes: (attributes: any) => void;\n getMainView: () => View;\n updateAppState: (appId: string, field: AppAttributes, value: any) => void;\n setBoxStatus: (appId: string, status?: TeleBoxState) => void;\n setLastNotMinimizedBoxStatus: (appId: string, status?: NotMinimizedBoxState) => void;\n emitter: EmitterType;\n boxEmitter: BoxEmitterType;\n callbacks: CallbacksType;\n canOperate: () => boolean;\n notifyContainerRectUpdate: (rect: TeleBoxRect) => void;\n cleanFocus: () => void;\n setAppFocus: (appId: string) => void;\n};\n\nexport const createBoxManager = (\n manager: WindowManager,\n callbacks: CallbacksType,\n emitter: EmitterType,\n boxEmitter: BoxEmitterType,\n options: CreateTeleBoxManagerConfig\n) => {\n const BoxManagerClass = getExtendClass(BoxManager, WindowManager.extendClass);\n return new BoxManagerClass(\n {\n safeSetAttributes: (attributes: any) => manager.safeSetAttributes(attributes),\n getMainView: () => manager.mainView,\n updateAppState: (...args) => manager.appManager?.store.updateAppState(...args),\n setBoxStatus: (id: string, boxStatus?: TeleBoxState) =>\n manager.appManager?.store.setBoxStatus(id, boxStatus),\n setLastNotMinimizedBoxStatus: (\n id: string,\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState\n ) =>\n manager.appManager?.store.setLastNotMinimizedBoxStatus(\n id,\n lastNotMinimizedBoxStatus\n ),\n canOperate: () => manager.canOperate,\n notifyContainerRectUpdate: (rect: TeleBoxRect) =>\n manager.appManager?.notifyContainerRectUpdate(rect),\n cleanFocus: () => manager.appManager?.store.cleanFocus(),\n setAppFocus: (appId: string) => manager.appManager?.store.setAppFocus(appId, true),\n callbacks,\n emitter,\n boxEmitter,\n },\n options\n );\n};\n\nexport class BoxManager {\n static readonly kind = \"BoxManager\";\n public teleBoxManager: TeleBoxManager;\n\n constructor(\n private context: BoxManagerContext,\n private createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig\n ) {\n const { emitter, callbacks, boxEmitter } = context;\n this.teleBoxManager = this.setupBoxManager(createTeleBoxManagerConfig);\n\n // 使用 _xxx$.reaction 订阅修改的值, 不管有没有 skipUpdate, 修改值都会触发回调\n this.teleBoxManager._state$.reaction(state => {\n callbacks.emit(\"boxStateChange\", state);\n emitter.emit(\"boxStateChange\", state);\n });\n\n this.teleBoxManager._darkMode$.reaction(darkMode => {\n callbacks.emit(\"darkModeChange\", darkMode);\n });\n this.teleBoxManager._prefersColorScheme$.reaction(colorScheme => {\n callbacks.emit(\"prefersColorSchemeChange\", colorScheme);\n });\n\n // ppt 在最小化后刷新恢复正常大小,拿不到正确的宽高,需要手动触发一下窗口的 resize\n this.teleBoxManager._minimized$.reaction(minimized => {\n if (!minimized) {\n setTimeout(() => {\n const offset = 0.001 * (Math.random() > 0.5 ? 1 : -1);\n this.teleBoxManager.boxes.forEach(box => {\n box.resize(box.intrinsicWidth + offset, box.intrinsicHeight + offset, true);\n });\n }, 400);\n }\n });\n\n // events.on 的值则会根据 skipUpdate 来决定是否触发回调\n this.teleBoxManager.events.on(\"minimized\", minimized => {\n this.context.safeSetAttributes({ minimized });\n if (minimized) {\n this.context.cleanFocus();\n this.blurAllBox();\n } else {\n const topBox = this.getTopBox();\n if (topBox) {\n this.context.setAppFocus(topBox.id);\n this.focusBox({ appId: topBox.id }, false);\n }\n }\n });\n this.teleBoxManager.events.on(\"maximized\", maximized => {\n this.context.safeSetAttributes({ maximized });\n });\n this.teleBoxManager.events.on(\"removed\", boxes => {\n boxes.forEach(box => {\n boxEmitter.emit(\"close\", { appId: box.id });\n });\n });\n this.teleBoxManager.events.on(\n \"intrinsic_move\",\n debounce((box: ReadonlyTeleBox): void => {\n boxEmitter.emit(\"move\", { appId: box.id, x: box.intrinsicX, y: box.intrinsicY });\n }, 50)\n );\n this.teleBoxManager.events.on(\n \"intrinsic_resize\",\n debounce((box: ReadonlyTeleBox): void => {\n boxEmitter.emit(\"resize\", {\n appId: box.id,\n width: box.intrinsicWidth,\n height: box.intrinsicHeight,\n });\n }, 200)\n );\n this.teleBoxManager.events.on(\"focused\", box => {\n if (box) {\n if (this.canOperate) {\n boxEmitter.emit(\"focus\", { appId: box.id });\n } else {\n this.teleBoxManager.blurBox(box.id);\n }\n }\n });\n this.teleBoxManager.events.on(\"blurred\", box => {\n if (box) {\n if (this.canOperate) {\n boxEmitter.emit(\"blurred\", { appId: box.id });\n }\n }\n });\n this.teleBoxManager.events.on(\"z_index\", box => {\n this.context.updateAppState(box.id, AppAttributes.ZIndex, box.zIndex);\n });\n this.teleBoxManager.events.on(\n \"box_status\",\n (box: { id: string; boxStatus?: TeleBoxState }) => {\n if (this.canOperate) {\n this.context.setBoxStatus(box.id, box.boxStatus);\n }\n }\n );\n this.teleBoxManager.events.on(\n \"last_not_minimized_box_status\",\n (box: { id: string; boxStatus?: NotMinimizedBoxState }) => {\n if (this.canOperate) {\n this.context.setLastNotMinimizedBoxStatus(box.id, box.boxStatus);\n }\n }\n );\n emitter.on(\"playgroundSizeChange\", () => this.updateManagerRect());\n emitter.on(\"updateManagerRect\", () => this.updateManagerRect());\n }\n\n private get mainView() {\n return this.context.getMainView();\n }\n\n private get canOperate() {\n return this.context.canOperate();\n }\n\n public get boxState() {\n return this.teleBoxManager.state;\n }\n\n public get maximized() {\n return this.teleBoxManager.maximized;\n }\n\n public get minimized() {\n return this.teleBoxManager.minimized;\n }\n\n public get darkMode() {\n return this.teleBoxManager.darkMode;\n }\n\n public get prefersColorScheme(): TeleBoxColorScheme {\n return this.teleBoxManager.prefersColorScheme;\n }\n\n public get boxSize() {\n return this.teleBoxManager.boxes.length;\n }\n\n public createBox(params: CreateBoxParams): void {\n if (!this.teleBoxManager) return;\n let { minwidth = MIN_WIDTH, minheight = MIN_HEIGHT } = params.app.config ?? {};\n const { width, height } = params.app.config ?? {};\n const title = params.options?.title || params.appId;\n const rect = this.teleBoxManager.containerRect;\n\n if (minwidth > 1) {\n minwidth = minwidth / rect.width;\n }\n\n if (minheight > 1) {\n minheight = minheight / rect.height;\n }\n\n const createBoxConfig: TeleBoxManagerCreateConfig = {\n title,\n minWidth: minwidth,\n minHeight: minheight,\n width,\n height,\n id: params.appId,\n boxStatus: params.boxStatus,\n forceTop: params.forceTop,\n forceNormal: params.forceNormal,\n isDragContent: params.isDragContent,\n };\n this.teleBoxManager.create(createBoxConfig, params.smartPosition);\n this.context.emitter.emit(`${params.appId}${Events.WindowCreated}` as any);\n }\n\n public setBoxInitState(appId: string): void {\n const box = this.teleBoxManager.queryOne({ id: appId });\n if (box) {\n if (box.state === TELE_BOX_STATE.Maximized) {\n this.context.boxEmitter.emit(\"resize\", {\n appId: appId,\n x: box.x,\n y: box.y,\n width: box.intrinsicWidth,\n height: box.intrinsicHeight,\n });\n }\n }\n }\n public setBoxesStatus(status?: Record<string, TeleBoxState>): void {\n const map = new Map(Object.entries(status ?? {}));\n this.teleBoxManager.setBoxesStatus(map, true);\n this.context.callbacks.emit(\"onBoxesStatusChange\", map);\n this.context.emitter.emit(\"boxesStatusChange\", map);\n }\n\n // public setBoxStatus(appId: string, status?: TeleBoxState, skipUpdate = false): void {\n // this.teleBoxManager.update(appId, { boxStatus: status }, true);\n // }\n\n public setLastNotMinimizedBoxesStatus(status?: Record<string, NotMinimizedBoxState>): void {\n const map = new Map(Object.entries(status ?? {}));\n this.teleBoxManager.setLastNotMinimizedBoxesStatus(map, true);\n this.context.callbacks.emit(\"onLastNotMinimizedBoxesStatusChange\", map);\n this.context.emitter.emit(\"lastNotMinimizedBoxesStatusChange\", map);\n }\n\n // public setLastNotMinimizedBoxStatus(appId: string, status?: NotMinimizedBoxState): void {\n // this.teleBoxManager.update(appId, { lastNotMinimizedBoxStatus: status }, true);\n // }\n\n public setupBoxManager(\n createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig\n ): TeleBoxManager {\n const root = WindowManager.wrapper ? WindowManager.wrapper : document.body;\n const rect = root.getBoundingClientRect();\n const initManagerState: TeleBoxManagerConfig = {\n root: root,\n containerRect: {\n x: 0,\n y: 0,\n width: rect.width,\n height: rect.height,\n },\n fence: false,\n prefersColorScheme: createTeleBoxManagerConfig?.prefersColorScheme,\n useBoxesStatus: createTeleBoxManagerConfig?.useBoxesStatus || false,\n };\n\n const TeleBoxManagerClass = getExtendClass(TeleBoxManager, WindowManager.extendClass);\n const manager = new TeleBoxManagerClass(initManagerState);\n if (this.teleBoxManager) {\n this.teleBoxManager.destroy();\n }\n this.teleBoxManager = manager;\n const container = createTeleBoxManagerConfig?.collectorContainer || WindowManager.wrapper;\n if (container) {\n this.setCollectorContainer(container);\n }\n return manager;\n }\n\n public setCollectorContainer(container: HTMLElement) {\n const TeleBoxCollectorClass = getExtendClass(TeleBoxCollector, WindowManager.extendClass);\n const collector = new TeleBoxCollectorClass({\n styles: this.createTeleBoxManagerConfig?.collectorStyles,\n }).mount(container);\n this.teleBoxManager.setCollector(collector);\n }\n\n public getBox(appId: string): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.queryOne({ id: appId });\n }\n\n public closeBox(appId: string, skipUpdate = false): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.remove(appId, skipUpdate);\n }\n\n public boxIsFocus(appId: string): boolean | undefined {\n const box = this.getBox(appId);\n return box?.focus;\n }\n\n public getFocusBox(): ReadonlyTeleBox | undefined {\n const boxes = this.teleBoxManager.query({ focus: true });\n return boxes[0];\n }\n\n public getTopBox(): ReadonlyTeleBox | undefined {\n return this.teleBoxManager.topBox;\n }\n\n public updateBoxState(state?: AppInitState): void {\n if (!state) return;\n const box = this.getBox(state.id);\n if (box) {\n this.teleBoxManager.update(\n box.id,\n {\n x: state.x,\n y: state.y,\n width: state.width || 0.5,\n height: state.height || 0.5,\n zIndex: state.zIndex,\n boxStatus: state.boxStatus,\n lastNotMinimizedBoxStatus: state.lastNotMinimizedBoxStatus,\n forceTop: state.forceTop,\n forceNormal: state.forceNormal,\n isDragContent: state.isDragContent,\n },\n true\n );\n setTimeout(() => {\n if (state.focus) {\n this.teleBoxManager.focusBox(box.id, true);\n }\n if (state.maximized != null) {\n this.teleBoxManager.setMaximized(Boolean(state.maximized), true);\n }\n if (state.minimized != null) {\n this.teleBoxManager.setMinimized(Boolean(state.minimized), true);\n }\n }, 50);\n if (!state.boxStatus) {\n this.context.callbacks.emit(\"boxStateChange\", this.teleBoxManager.state);\n }\n }\n }\n\n public updateManagerRect(): void {\n const rect = this.mainView.divElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n const containerRect = { x: 0, y: 0, width: rect.width, height: rect.height };\n this.teleBoxManager.setContainerRect(containerRect);\n this.context.notifyContainerRectUpdate(this.teleBoxManager.containerRect);\n }\n }\n\n public moveBox({ appId, x, y }: MoveBoxParams): void {\n this.teleBoxManager.update(appId, { x, y }, true);\n }\n\n public focusBox({ appId }: AppId, skipUpdate = true): void {\n this.teleBoxManager.focusBox(appId, skipUpdate);\n }\n\n public resizeBox({ appId, width, height, skipUpdate }: ResizeBoxParams): void {\n this.teleBoxManager.update(appId, { width, height }, skipUpdate);\n }\n\n public setBoxMinSize(params: SetBoxMinSizeParams): void {\n this.teleBoxManager.update(\n params.appId,\n {\n minWidth: params.minWidth,\n minHeight: params.minHeight,\n },\n true\n );\n }\n\n public setBoxTitle(params: SetBoxTitleParams): void {\n this.teleBoxManager.update(params.appId, { title: params.title }, true);\n }\n\n public blurAllBox(): void {\n this.teleBoxManager.blurAll();\n }\n\n public updateAll(config: TeleBoxManagerUpdateConfig): void {\n this.teleBoxManager.updateAll(config);\n }\n\n public setMaximized(maximized: boolean, skipUpdate = true): void {\n if (maximized !== this.maximized) {\n this.teleBoxManager.setMaximized(maximized, skipUpdate);\n }\n }\n\n public setMinimized(minimized: boolean, skipUpdate = true) {\n this.teleBoxManager.setMinimized(minimized, skipUpdate);\n }\n\n public focusTopBox(): void {\n const boxes = this.teleBoxManager.query();\n if (boxes.length >= 1) {\n const box = this.getTopBox();\n if (box) {\n this.focusBox({ appId: box.id }, false);\n }\n }\n }\n\n public updateBox(id: string, payload: TeleBoxConfig, skipUpdate = true): void {\n this.teleBoxManager.update(id, payload, skipUpdate);\n }\n\n public setReadonly(readonly: boolean) {\n this.teleBoxManager.setReadonly(readonly);\n }\n\n public setPrefersColorScheme(colorScheme: TeleBoxColorScheme) {\n this.teleBoxManager.setPrefersColorScheme(colorScheme);\n }\n\n public setZIndex(id: string, zIndex: number, skipUpdate = true) {\n this.teleBoxManager.update(id, { zIndex }, skipUpdate);\n }\n\n public destroy() {\n this.teleBoxManager.destroy();\n }\n}\n","/** 合法标识符形式的 key 省略引号,形如 `{aaa:undefined}` */\nfunction formatAttributesLogObjectKey(key: string): string {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\ntype AttributesLogRecord = Record<string, unknown>;\n\n/**\n * attributes 调试日志:对象/数组会写成近似 JS 字面量(保留 `undefined`、数组空洞),避免 `[object Object]`;\n * 并处理 BigInt、循环引用等。\n */\nexport function stringifyForAttributesLog(\n value: unknown,\n seen?: WeakSet<AttributesLogRecord>\n): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n const t = typeof value;\n if (t === \"bigint\") {\n return `${value}n`;\n }\n if (t === \"symbol\") {\n return String(value);\n }\n if (t === \"function\") {\n const fn = value as (...args: unknown[]) => unknown;\n return `[Function ${fn.name || \"anonymous\"}]`;\n }\n if (t !== \"object\") {\n return t === \"string\" ? JSON.stringify(value as string) : String(value);\n }\n\n const obj = value as AttributesLogRecord;\n if (seen?.has(obj)) {\n return \"[Circular]\";\n }\n\n const nextSeen = seen ?? new WeakSet<AttributesLogRecord>();\n nextSeen.add(obj);\n try {\n if (Array.isArray(value)) {\n return `[${Array.from(value as unknown[], item =>\n stringifyForAttributesLog(item, nextSeen)\n ).join(\",\")}]`;\n }\n if (value instanceof Date) {\n return JSON.stringify(value.toISOString());\n }\n if (value instanceof RegExp) {\n return String(value);\n }\n const keys = Object.keys(obj);\n const pairs = keys.map(k => {\n let v: unknown;\n try {\n v = obj[k];\n } catch {\n return `${formatAttributesLogObjectKey(k)}:[Threw]`;\n }\n return `${formatAttributesLogObjectKey(k)}:${stringifyForAttributesLog(v, nextSeen)}`;\n });\n return `{${pairs.join(\",\")}}`;\n } catch {\n return \"[Unserializable]\";\n } finally {\n nextSeen.delete(obj);\n }\n}\n\n/** 仅一层 key 合并:可作为 attributes 片段的「普通对象」(非数组、Date 等) */\nexport function isShallowMergeAttributesRecord(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n );\n}\n","import type { Logger } from \"white-web-sdk\";\nimport {\n isShallowMergeAttributesRecord,\n stringifyForAttributesLog,\n} from \"./attributesLogStringify\";\nimport { WindowManager } from \"../index\";\n\n/** ArgusLog 经 `logger.info` 上报的单条字符串上限(含前缀) */\nconst ARGUS_LOG_INFO_MAX_LENGTH = 1500;\n\nfunction truncateArgusLogInfoMessage(message: string): string {\n if (message.length <= ARGUS_LOG_INFO_MAX_LENGTH) {\n return message;\n }\n const ellipsis = \"…\";\n return message.slice(0, ARGUS_LOG_INFO_MAX_LENGTH - ellipsis.length) + ellipsis;\n}\n\nfunction keysPathEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport const log = (...args: any[]): void => {\n if (WindowManager.debug) {\n console.log(`[WindowManager]:`, ...args);\n }\n};\n\n/**\n * 按 `[window-manager][tagName]` 前缀输出。\n * 若传入 `debounceTime`(毫秒):窗口内多次 `log` 不立即输出,只在连续停止调用满 `debounceTime` 后输出**最后一次**的参数(尾部 debounce)。\n */\nexport class LocalConsole {\n private pendingArgs: unknown[] | null = null;\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly name: string, private readonly debounceTime?: number) {}\n\n private flush(): void {\n this.flushTimer = null;\n const args = this.pendingArgs;\n this.pendingArgs = null;\n if (args === null) {\n return;\n }\n console.log(`[window-manager][${this.name}]: ${args.join(\", \")}`);\n }\n\n log(...args: unknown[]): void {\n const ms = this.debounceTime;\n if (ms != null && ms > 0) {\n this.pendingArgs = args;\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => this.flush(), ms);\n return;\n }\n console.log(`[window-manager][${this.name}]: ${args.join(\", \")}`);\n }\n\n /**\n * 销毁:清除 debounce 定时器与未输出的暂存参数。\n * 持有 LocalConsole 的类在销毁时应调用。\n */\n destroy(): void {\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n this.pendingArgs = null;\n }\n}\n\n/**\n * 按 `[WindowManager][tagName]` 前缀输出。\n * 若传入 `debounceTime`(毫秒):窗口内多次 `log` 不立即输出,只在连续停止调用满 `debounceTime` 后输出**最后一次**的参数(尾部 debounce)。\n */\nexport class ArgusLog {\n private pendingArgs: unknown[] | null = null;\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** debounce 窗口内按一层 key 合并;同 key 后者覆盖;非普通对象则整段待输出被本次值替换 */\n private pendingShallowMerge:\n | { kind: \"record\"; label: string; data: Record<string, unknown> }\n | { kind: \"atom\"; label: string; value: unknown }\n | null = null;\n private shallowMergeTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** debounce 窗口内 safeUpdateAttributes:同 keys 数组则只更新 value,否则追加一段,flush 时拼成一条 */\n private pendingUpdateSegments: { keys: string[]; value: unknown }[] | null = null;\n private updateMergeTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private readonly logger: Logger,\n private readonly name: string,\n private readonly debounceTime?: number\n ) {}\n\n private emitInfo(message: string): void {\n this.logger.info(truncateArgusLogInfoMessage(message));\n }\n\n private flush(): void {\n this.flushTimer = null;\n const args = this.pendingArgs;\n this.pendingArgs = null;\n if (args === null) {\n return;\n }\n this.emitInfo(`[WindowManager][${this.name}]: ${args.join(\", \")}`);\n }\n\n private flushShallowMerge(): void {\n this.shallowMergeTimer = null;\n const p = this.pendingShallowMerge;\n this.pendingShallowMerge = null;\n if (p === null) {\n return;\n }\n const body =\n p.kind === \"record\"\n ? stringifyForAttributesLog(p.data)\n : stringifyForAttributesLog(p.value);\n this.emitInfo(`[WindowManager][${this.name}]: ${p.label} ${body}`);\n // 输出后释放合并对象引用,避免长时间持有 attributes 快照\n if (p.kind === \"record\") {\n for (const k of Object.keys(p.data)) {\n delete p.data[k];\n }\n }\n }\n\n log(...args: unknown[]): void {\n const ms = this.debounceTime;\n if (ms != null && ms > 0) {\n this.pendingArgs = args;\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => this.flush(), ms);\n return;\n }\n this.emitInfo(`[WindowManager][${this.name}]: ${args.join(\", \")}`);\n }\n\n /**\n * 带 debounce 时:窗口内多次调用会把「一层 key」合并进同一条日志(不同 key 并存,同 key 取最后一次)。\n * `payload` 为普通对象时做浅合并;否则视为原子值,覆盖当前待合并状态(丢弃此前累积的对象 key)。\n * 无 debounce 或时间为 0 时立即输出。\n */\n logDebouncedShallowMerge(label: string, payload: unknown): void {\n const ms = this.debounceTime;\n const debounced = ms != null && ms > 0;\n\n const emit = (text: string): void => {\n this.emitInfo(`[WindowManager][${this.name}]: ${label} ${text}`);\n };\n\n if (!debounced) {\n emit(stringifyForAttributesLog(payload));\n return;\n }\n\n if (this.shallowMergeTimer != null) {\n clearTimeout(this.shallowMergeTimer);\n this.shallowMergeTimer = null;\n }\n\n if (isShallowMergeAttributesRecord(payload)) {\n if (this.pendingShallowMerge?.kind === \"record\") {\n this.pendingShallowMerge = {\n kind: \"record\",\n label,\n data: { ...this.pendingShallowMerge.data, ...payload },\n };\n } else {\n this.pendingShallowMerge = { kind: \"record\", label, data: { ...payload } };\n }\n } else {\n this.pendingShallowMerge = { kind: \"atom\", label, value: payload };\n }\n\n this.shallowMergeTimer = setTimeout(() => this.flushShallowMerge(), ms);\n }\n\n private flushUpdateAttributesMerge(): void {\n this.updateMergeTimer = null;\n const segments = this.pendingUpdateSegments;\n this.pendingUpdateSegments = null;\n if (segments === null || segments.length === 0) {\n return;\n }\n const parts = segments.map(\n s => `${s.keys.join(\", \")} ${stringifyForAttributesLog(s.value)}`\n );\n this.emitInfo(`[WindowManager][${this.name}]: safeUpdateAttributes ${parts.join(\" | \")}`);\n for (const s of segments) {\n s.keys.length = 0;\n s.value = undefined;\n }\n segments.length = 0;\n }\n\n /**\n * 带 debounce 时:连续调用若 `keys` 与上一段完全相同则覆盖该段的 `value`;否则追加一段。\n * flush 时输出一条日志,多段用 ` | ` 连接。\n */\n logDebouncedUpdateAttributes(keys: string[], value: unknown): void {\n const ms = this.debounceTime;\n const debounced = ms != null && ms > 0;\n const keysCopy = [...keys];\n\n if (!debounced) {\n this.emitInfo(\n `[WindowManager][${this.name}]: safeUpdateAttributes ${keysCopy.join(\n \", \"\n )} ${stringifyForAttributesLog(value)}`\n );\n return;\n }\n\n if (this.updateMergeTimer != null) {\n clearTimeout(this.updateMergeTimer);\n this.updateMergeTimer = null;\n }\n\n if (this.pendingUpdateSegments === null || this.pendingUpdateSegments.length === 0) {\n this.pendingUpdateSegments = [{ keys: keysCopy, value }];\n } else {\n const last = this.pendingUpdateSegments[this.pendingUpdateSegments.length - 1];\n if (keysPathEqual(last.keys, keysCopy)) {\n last.value = value;\n } else {\n this.pendingUpdateSegments.push({ keys: keysCopy, value });\n }\n }\n\n this.updateMergeTimer = setTimeout(() => this.flushUpdateAttributesMerge(), ms);\n }\n\n /**\n * 销毁:清除所有 `setTimeout` debounce 定时器,并丢弃尚未输出的暂存日志(不补打日志)。\n * WindowManager 销毁时应调用,避免泄漏与销毁后仍触发 `logger.info`。\n */\n destroy(): void {\n if (this.flushTimer != null) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.shallowMergeTimer != null) {\n clearTimeout(this.shallowMergeTimer);\n this.shallowMergeTimer = null;\n }\n if (this.updateMergeTimer != null) {\n clearTimeout(this.updateMergeTimer);\n this.updateMergeTimer = null;\n }\n this.pendingArgs = null;\n this.pendingShallowMerge = null;\n this.pendingUpdateSegments = null;\n }\n\n /** 与 `destroy()` 相同,保留旧名以兼容 */\n dispose(): void {\n this.destroy();\n }\n}\n","import pRetry from \"p-retry\";\nimport type { Room, RoomMember } from \"white-web-sdk\";\nimport { WhiteVersion } from \"white-web-sdk\";\nimport { REQUIRE_VERSION } from \"./constants\";\nimport { WindowManager } from \"./index\";\nimport { getVersionNumber } from \"./Utils/Common\";\nimport { WhiteWebSDKInvalidError } from \"./Utils/error\";\nimport { log } from \"./Utils/log\";\n\nexport const setupWrapper = (\n root: HTMLElement\n): {\n playground: HTMLDivElement;\n wrapper: HTMLDivElement;\n sizer: HTMLDivElement;\n mainViewElement: HTMLDivElement;\n} => {\n const playground = document.createElement(\"div\");\n playground.className = \"netless-window-manager-playground\";\n\n const sizer = document.createElement(\"div\");\n sizer.className = \"netless-window-manager-sizer\";\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"netless-window-manager-wrapper\";\n\n const mainViewElement = document.createElement(\"div\");\n mainViewElement.className = \"netless-window-manager-main-view\";\n\n playground.appendChild(sizer);\n sizer.appendChild(wrapper);\n wrapper.appendChild(mainViewElement);\n root.appendChild(playground);\n WindowManager.wrapper = wrapper;\n\n return { playground, wrapper, sizer, mainViewElement };\n};\n\nexport const checkVersion = () => {\n const version = getVersionNumber(WhiteVersion);\n if (version < getVersionNumber(REQUIRE_VERSION)) {\n throw new WhiteWebSDKInvalidError(REQUIRE_VERSION);\n }\n};\n\nexport const findMemberByUid = (room: Room | undefined, uid: string) => {\n const roomMembers = room?.state.roomMembers || [];\n let maxMemberId = -1; // 第一个进入房间的用户 memberId 是 0\n let result: RoomMember | undefined = undefined;\n for (const member of roomMembers) {\n if (member.payload?.uid === uid && maxMemberId < member.memberId) {\n maxMemberId = member.memberId;\n result = member;\n }\n }\n return result;\n};\n\nexport const createInvisiblePlugin = async (room: Room): Promise<WindowManager> => {\n let manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (manager) return manager;\n\n let resolve!: (manager: WindowManager) => void;\n const promise = new Promise<WindowManager>(r => {\n // @ts-expect-error Set private property.\n WindowManager._resolve = resolve = r;\n });\n\n let wasReadonly = false;\n const canOperate = isRoomTokenWritable(room);\n if (!room.isWritable && canOperate) {\n wasReadonly = true;\n await pRetry(\n async count => {\n log(`switching to writable (x${count})`);\n await room.setWritable(true);\n },\n { retries: 10, maxTimeout: 5000 }\n );\n }\n if (room.isWritable) {\n log(\"creating InvisiblePlugin...\");\n room.createInvisiblePlugin(WindowManager, {}).catch(console.warn);\n } else {\n if (canOperate) console.warn(\"[WindowManager]: failed to switch to writable\");\n console.warn(\"[WindowManager]: waiting for others to create the plugin...\");\n }\n\n const timeout = setTimeout(() => {\n console.warn(\"[WindowManager]: no one called createInvisiblePlugin() after 20 seconds\");\n }, 20_000);\n\n const abort = setTimeout(() => {\n throw new Error(\"[WindowManager]: no one called createInvisiblePlugin() after 60 seconds\");\n }, 60_000);\n\n const interval = setInterval(() => {\n manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (manager) {\n clearTimeout(abort);\n clearTimeout(timeout);\n clearInterval(interval);\n resolve(manager);\n if (wasReadonly && room.isWritable) {\n setTimeout(() => room.setWritable(false).catch(console.warn), 500);\n }\n }\n }, 200);\n\n return promise;\n};\n\nconst isRoomTokenWritable = (room: Room) => {\n try {\n const str = atob(room.roomToken.slice(\"NETLESSROOM_\".length));\n const index = str.indexOf(\"&role=\");\n const role = +str[index + \"&role=\".length];\n return role < 2;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nfunction split_css_unit(value) {\n const split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n return split ? [parseFloat(split[1]), split[2] || 'px'] : [value, 'px'];\n}\nconst contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\n/**\n * Resize observer singleton.\n * One listener per element only!\n * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ\n */\nclass ResizeObserverSingleton {\n constructor(options) {\n this.options = options;\n this._listeners = 'WeakMap' in globals ? new WeakMap() : undefined;\n }\n observe(element, listener) {\n this._listeners.set(element, listener);\n this._getObserver().observe(element, this.options);\n return () => {\n this._listeners.delete(element);\n this._observer.unobserve(element); // this line can probably be removed\n };\n }\n _getObserver() {\n var _a;\n return (_a = this._observer) !== null && _a !== void 0 ? _a : (this._observer = new ResizeObserver((entries) => {\n var _a;\n for (const entry of entries) {\n ResizeObserverSingleton.entries.set(entry.target, entry);\n (_a = this._listeners.get(entry.target)) === null || _a === void 0 ? void 0 : _a(entry);\n }\n }));\n }\n}\n// Needs to be written like this to pass the tree-shake-test\nResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined;\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction comment(content) {\n return document.createComment(content);\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_immediate_propagation(fn) {\n return function (event) {\n event.stopImmediatePropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set && always_set_through_set_attribute.indexOf(key) === -1) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction set_dynamic_element_data(tag) {\n return (/-/.test(tag)) ? set_custom_element_data_map : set_attributes;\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n /* push */ p(...inputs) {\n _inputs = inputs;\n _inputs.forEach(input => group.push(input));\n },\n /* remove */ r() {\n _inputs.forEach(input => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction init_binding_group_dynamic(group, indexes) {\n let _group = get_binding_group(group);\n let _inputs;\n function get_binding_group(group) {\n for (let i = 0; i < indexes.length; i++) {\n group = group[indexes[i]] = group[indexes[i]] || [];\n }\n return group;\n }\n function push() {\n _inputs.forEach(input => _group.push(input));\n }\n function remove() {\n _inputs.forEach(input => _group.splice(_group.indexOf(input), 1));\n }\n return {\n /* update */ u(new_indexes) {\n indexes = new_indexes;\n const new_group = get_binding_group(group);\n if (new_group !== _group) {\n remove();\n _group = new_group;\n push();\n }\n },\n /* push */ p(...inputs) {\n _inputs = inputs;\n push();\n },\n /* remove */ r: remove\n };\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction claim_comment(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 8, (node) => {\n node.data = '' + data;\n return undefined;\n }, () => comment(data), true);\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n text.data = data;\n}\nfunction set_data_contenteditable(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n text.data = data;\n}\nfunction set_data_maybe_contenteditable(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable(text, data);\n }\n else {\n set_data(text, data);\n }\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value == null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== undefined) {\n select.selectedIndex = -1; // no option should be selected\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked');\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_iframe_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n // make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n // see https://github.com/sveltejs/svelte/issues/4233\n fn();\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nconst resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'content-box' });\nconst resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'border-box' });\nconst resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'device-pixel-content-box' });\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n /** #7364 target for <template> may be provided as #document-fragment(11) */\n else\n this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n const options = { direction: 'in' };\n let config = fn(node, params, options);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config(options);\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n const options = { direction: 'out' };\n let config = fn(node, params, options);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = { direction: 'both' };\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n // defer updates until all the DOM shuffling is done\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\nconst _boolean_attributes = [\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n];\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n */\nconst boolean_attributes = new Set([..._boolean_attributes]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&amp;' : (ch === '\"' ? '&quot;' : '&lt;'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${escape_attribute_value(style_object[key])};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.59.2' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation, has_stop_immediate_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n if (has_stop_immediate_propagation)\n modifiers.push('stopImmediatePropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_contenteditable_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction set_data_maybe_contenteditable_dev(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable_dev(text, data);\n }\n else {\n set_data_dev(text, data);\n }\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, ResizeObserverSingleton, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_iframe_resize_listener, add_location, add_render_callback, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_comment, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, comment, component_subscribe, compute_rest_props, compute_slots, construct_svelte_component, construct_svelte_component_dev, contenteditable_truthy_values, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, flush_render_callbacks, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, head_selector, identity, init, init_binding_group, init_binding_group_dynamic, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, resize_observer_border_box, resize_observer_content_box, resize_observer_device_pixel_content_box, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_custom_element_data_map, set_data, set_data_contenteditable, set_data_contenteditable_dev, set_data_dev, set_data_maybe_contenteditable, set_data_maybe_contenteditable_dev, set_dynamic_element_data, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, split_css_unit, spread, src_url_equal, start_hydrating, stop_immediate_propagation, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","<script lang=\"ts\">\n import { isEmpty } from \"lodash\";\n import { ApplianceNames } from \"white-web-sdk\";\n\n export let uid: string;\n export let cursorName: string;\n export let tagName: string | undefined;\n export let backgroundColor: string;\n export let appliance: string;\n export let x: number;\n export let y: number;\n export let src: string | undefined;\n export let visible: boolean;\n export let avatar: string;\n export let theme: string;\n export let color: string;\n export let cursorTagBackgroundColor: string;\n export let opacity: number;\n export let pencilEraserSize: number | undefined;\n export let custom: boolean | undefined;\n\n $: hasName = !isEmpty(cursorName);\n $: hasTagName = !isEmpty(tagName);\n $: hasAvatar = !isEmpty(avatar);\n $: display = visible ? \"\" : \"none\";\n $: isLaserPointer = appliance === ApplianceNames.laserPointer;\n $: isLaserPointerPencilEraser = isLaserPointer || appliance === ApplianceNames.pencilEraser;\n $: offset = isLaserPointerPencilEraser ? \"netless-window-manager-laserPointer-pencilEraser-offset\" : \"\";\n $: pencilEraserSize3ImageOffset = pencilEraserSize === 3 ? \"netless-window-manager-pencilEraser-3-offset\" : \"\";\n\n const computedAvatarStyle = () => {\n return Object.entries({\n width: (hasName ? 19 : 28) + \"px\",\n height: (hasName ? 19 : 28) + \"px\",\n position: hasName ? \"initial\" : \"absolute\",\n \"border-color\": hasName ? \"white\" : backgroundColor,\n \"margin-right\": (hasName ? 4 : 0) + \"px\",\n })\n .map(([key, v]) => `${key}: ${v}`)\n .join(\";\");\n };\n</script>\n\n<div\n class={\"netless-window-manager-cursor-mid\" + (custom ? \" netless-window-manager-cursor-custom\" : \"\")}\n style=\"transform: translateX({x}px) translateY({y}px);display: {display}\"\n data-cursor-uid={uid}\n>\n {#if !isLaserPointer}\n <div class=\"netless-window-manager-cursor-name {offset} {pencilEraserSize3ImageOffset}\">\n <div\n class={theme}\n style=\"background-color: {backgroundColor};color: {color};opacity: {opacity}\"\n >\n {#if hasAvatar}\n <img\n class=\"netless-window-manager-cursor-selector-avatar\"\n style={computedAvatarStyle()}\n src={avatar}\n alt=\"avatar\"\n />\n {/if}\n <span style=\"overflow: hidden;white-space: nowrap;text-overflow: ellipsis;max-width: 80px\">{cursorName}</span>\n {#if hasTagName}\n <span class=\"netless-window-manager-cursor-tag-name\" style=\"background-color: {cursorTagBackgroundColor}\">\n {tagName}\n </span>\n {/if}\n </div>\n </div>\n {/if}\n <div class=\"cursor-image-wrapper\">\n <img\n class=\"netless-window-manager-cursor-{appliance}-image {pencilEraserSize3ImageOffset}\"\n {src}\n alt={appliance}\n />\n </div>\n</div>\n","import type { MemberState } from \"white-web-sdk\";\nimport { ApplianceNames } from \"white-web-sdk\";\n\ntype Color = string;\n\nconst staticCircle = `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23000' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23FFF'/%3E%3C/g%3E%3C/svg%3E`;\n\nfunction circleUrl(color: Color): string {\n return `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23${color}' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23${color}'/%3E%3C/g%3E%3C/svg%3E`;\n}\n\nfunction crossUrl(color: Color): string {\n return `data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' fill='none'%3E%3Cpath d='M5 12H19' stroke='%23${color}' stroke-linejoin='round'/%3E%3Cpath d='M12 5V19' stroke='%23${color}' stroke-linejoin='round'/%3E%3C/svg%3E`;\n}\n\nfunction cssCursor(url: string): string {\n return `url(\"${url}\") 12 12, auto`;\n}\n\nfunction makeStyleContent(config: { [cursor: string]: string }): string {\n let result = \"\";\n for (const cursor in config) {\n result += `.netless-whiteboard.${cursor} {cursor: ${config[cursor]}}\\n`;\n }\n return result;\n}\n\nconst $style = document.createElement(\"style\");\n\nexport function enableLocal(memberState: MemberState): () => void {\n const [r, g, b] = memberState.strokeColor;\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n $style.textContent = makeStyleContent({\n \"cursor-pencil\": cssCursor(circleUrl(hex)),\n \"cursor-eraser\": cssCursor(staticCircle),\n \"cursor-rectangle\": cssCursor(crossUrl(hex)),\n \"cursor-ellipse\": cssCursor(crossUrl(hex)),\n \"cursor-straight\": cssCursor(crossUrl(hex)),\n \"cursor-arrow\": cssCursor(crossUrl(hex)),\n \"cursor-shape\": cssCursor(crossUrl(hex)),\n });\n document.head.appendChild($style);\n\n return () => {\n if ($style.parentNode == null) return;\n document.head.removeChild($style);\n };\n}\n\nconst shapeAppliances: Set<ApplianceNames> = new Set([\n ApplianceNames.rectangle,\n ApplianceNames.ellipse,\n ApplianceNames.straight,\n ApplianceNames.arrow,\n ApplianceNames.shape,\n]);\n\nexport function remoteIcon(applianceName: ApplianceNames, hex: string): string | undefined {\n if (applianceName === ApplianceNames.pencil) {\n return circleUrl(hex);\n } else if (applianceName === ApplianceNames.eraser) {\n return staticCircle;\n } else if (shapeAppliances.has(applianceName)) {\n return crossUrl(hex);\n }\n}\n","import type { RoomMember } from \"white-web-sdk\";\nimport type { CursorOptions } from \"../index\";\nimport type { AppManager } from \"../AppManager\";\nimport type { Position } from \"../AttributesDelegate\";\nimport type { CursorManager } from \"./index\";\n\nimport { omit } from \"lodash\";\nimport { ApplianceNames } from \"white-web-sdk\";\n\nimport { findMemberByUid } from \"../Helper\";\nimport App from \"./Cursor.svelte\";\nimport { remoteIcon } from \"./icons2\";\n\nexport type Payload = {\n [key: string]: any;\n};\n\nexport class Cursor {\n private member?: RoomMember;\n private timer?: number;\n private component?: App;\n private style: CursorOptions[\"style\"] & string = \"default\";\n\n constructor(\n private manager: AppManager,\n private memberId: string,\n private cursorManager: CursorManager,\n private wrapper?: HTMLElement\n ) {\n this.updateMember();\n this.createCursor();\n this.autoHidden();\n this.setStyle(cursorManager.style);\n }\n\n public move = (position: Position) => {\n if (position.type === \"main\") {\n const rect = this.cursorManager.wrapperRect;\n if (this.component && rect) {\n this.autoHidden();\n this.moveCursor(position, rect, this.manager.mainView);\n }\n } else {\n const focusView = this.cursorManager.focusView;\n const viewRect = focusView?.divElement?.getBoundingClientRect();\n const viewCamera = focusView?.camera;\n if (focusView && viewRect && viewCamera && this.component) {\n this.autoHidden();\n this.moveCursor(position, viewRect, focusView);\n }\n }\n };\n\n public setStyle = (style: typeof this.style) => {\n this.style = style;\n if (this.component) {\n this.component.$set({\n src: this.getIcon(),\n custom: this.isCustomIcon(),\n });\n }\n };\n\n public leave = () => {\n this.hide();\n };\n\n private moveCursor(cursor: Position, rect: DOMRect, view: any) {\n const { x, y, type } = cursor;\n const point = view?.screen.convertPointToScreen(x, y);\n if (point) {\n let translateX = point.x - 2;\n let translateY = point.y - 18;\n if (this.isCustomIcon()) {\n translateX -= 11;\n translateY += 4;\n }\n if (type === \"app\") {\n const wrapperRect = this.cursorManager.wrapperRect;\n if (wrapperRect) {\n translateX = translateX + rect.x - wrapperRect.x;\n translateY = translateY + rect.y - wrapperRect.y;\n }\n }\n if (point.x < 0 || point.x > rect.width || point.y < 0 || point.y > rect.height) {\n this.component?.$set({ visible: false, x: translateX, y: translateY });\n } else {\n this.component?.$set({ visible: true, x: translateX, y: translateY });\n }\n }\n }\n\n public get memberApplianceName() {\n return this.member?.memberState?.currentApplianceName;\n }\n\n public get memberColor() {\n const rgb = this.member?.memberState?.strokeColor.join(\",\");\n return `rgb(${rgb})`;\n }\n\n public get memberColorHex(): string {\n const [r, g, b] = this.member?.memberState?.strokeColor || [236, 52, 85];\n return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n }\n\n private get payload(): Payload | undefined {\n return this.member?.payload;\n }\n\n public get memberCursorName() {\n return this.payload?.nickName || this.payload?.cursorName || this.memberId;\n }\n\n private get memberTheme() {\n if (this.payload?.theme) {\n return \"netless-window-manager-cursor-inner-mellow\";\n } else {\n return \"netless-window-manager-cursor-inner\";\n }\n }\n\n private get memberCursorTextColor() {\n return this.payload?.cursorTextColor || \"#FFFFFF\";\n }\n\n private get memberCursorTagBackgroundColor() {\n return this.payload?.cursorTagBackgroundColor || this.memberColor;\n }\n\n private get memberAvatar() {\n return this.payload?.avatar;\n }\n\n private get memberOpacity() {\n if (!this.memberCursorName && !this.memberAvatar) {\n return 0;\n } else {\n return 1;\n }\n }\n\n private get memberTagName(): string | undefined {\n return this.payload?.cursorTagName;\n }\n\n private autoHidden() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = window.setTimeout(() => {\n this.hide();\n }, 1000 * 10); // 10 秒钟自动隐藏\n }\n\n private async createCursor() {\n if (this.member && this.wrapper) {\n this.component = new App({\n target: this.wrapper,\n props: this.initProps(),\n });\n }\n }\n\n private initProps() {\n return {\n uid: this.memberId,\n x: 0,\n y: 0,\n appliance: this.memberApplianceName as string,\n avatar: this.memberAvatar,\n src: this.getIcon(),\n custom: this.isCustomIcon(),\n visible: false,\n backgroundColor: this.memberColor,\n cursorName: this.memberCursorName,\n theme: this.memberTheme,\n color: this.memberCursorTextColor,\n cursorTagBackgroundColor: this.memberCursorTagBackgroundColor,\n opacity: this.memberOpacity,\n tagName: this.memberTagName,\n pencilEraserSize: this.member?.memberState.pencilEraserSize,\n };\n }\n\n private getIcon(): string | undefined {\n if (!this.member) return;\n\n const { memberApplianceName, memberColorHex } = this;\n const { userApplianceIcons, applianceIcons } = this.cursorManager;\n\n let iconsKey: string | undefined = this.memberApplianceName;\n if (iconsKey === ApplianceNames.pencilEraser) {\n iconsKey = `${iconsKey}${this.member?.memberState.pencilEraserSize || 1}`;\n }\n\n const userApplianceSrc = iconsKey && userApplianceIcons[iconsKey];\n if (userApplianceSrc) return userApplianceSrc;\n\n if (this.style === \"custom\" && memberApplianceName) {\n const customApplianceSrc = remoteIcon(memberApplianceName, memberColorHex);\n if (customApplianceSrc) return customApplianceSrc;\n }\n\n const applianceSrc = applianceIcons[iconsKey || ApplianceNames.shape];\n return applianceSrc || applianceIcons[ApplianceNames.shape];\n }\n\n private isCustomIcon(): boolean {\n if (!this.member) return false;\n\n const { memberApplianceName, memberColorHex } = this;\n const { userApplianceIcons } = this.cursorManager;\n\n let iconsKey: string | undefined = this.memberApplianceName;\n if (iconsKey === ApplianceNames.pencilEraser) {\n iconsKey = `${iconsKey}${this.member?.memberState.pencilEraserSize || 1}`;\n }\n\n const userApplianceSrc = iconsKey && userApplianceIcons[iconsKey];\n if (userApplianceSrc) return false;\n\n if (this.style === \"custom\" && memberApplianceName) {\n const customApplianceSrc = remoteIcon(memberApplianceName, memberColorHex);\n if (customApplianceSrc) return true;\n }\n\n return false;\n }\n\n public updateMember() {\n this.member = findMemberByUid(this.manager.room, this.memberId);\n this.updateComponent();\n return this.member;\n }\n\n private updateComponent() {\n this.component?.$set(omit(this.initProps(), [\"x\", \"y\"]));\n }\n\n public destroy() {\n if (this.component) {\n this.component.$destroy();\n }\n this.cursorManager.cursorInstances.delete(this.memberId);\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n\n public hide() {\n if (this.component) {\n this.component.$set({ visible: false });\n this.destroy();\n }\n }\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\"","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjhweCIgaGVpZ2h0PSIyOHB4IiB2aWV3Qm94PSIwIDAgMjggMjgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU1LjEgKDc4MTM2KSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT7nvJbnu4QgMjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgeD0iLTEyMC4wJSIgeT0iLTEyMC4wJSIgd2lkdGg9IjM0MC4wJSIgaGVpZ2h0PSIzNDAuMCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0xIj4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hC0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5LjAwMDAwMCwgOS4wMDAwMDApIiBmaWxsPSIjRkYwMTAwIj4KICAgICAgICAgICAgPGNpcmNsZSBpZD0i5qSt5ZyG5b2iIiBmaWx0ZXI9InVybCgjZmlsdGVyLTEpIiBjeD0iNSIgY3k9IjUiIHI9IjUiPjwvY2lyY2xlPgogICAgICAgICAgICA8cGF0aCBkPSJNNSw4IEM2LjY1Njg1NDI1LDggOCw2LjY1Njg1NDI1IDgsNSBDOCwzLjM0MzE0NTc1IDYuNjU2ODU0MjUsMiA1LDIgQzMuMzQzMTQ1NzUsMiAyLDMuMzQzMTQ1NzUgMiw1IEMyLDYuNjU2ODU0MjUgMy4zNDMxNDU3NSw4IDUsOCBaIE01LDYuMjg1NzE0MjkgQzQuMjg5OTE5NjEsNi4yODU3MTQyOSAzLjcxNDI4NTcxLDUuNzEwMDgwMzkgMy43MTQyODU3MSw1IEMzLjcxNDI4NTcxLDQuMjg5OTE5NjEgNC4yODk5MTk2MSwzLjcxNDI4NTcxIDUsMy43MTQyODU3MSBDNS43MTAwODAzOSwzLjcxNDI4NTcxIDYuMjg1NzE0MjksNC4yODk5MTk2MSA2LjI4NTcxNDI5LDUgQzYuMjg1NzE0MjksNS43MTAwODAzOSA1LjcxMDA4MDM5LDYuMjg1NzE0MjkgNSw2LjI4NTcxNDI5IFoiIGlkPSLmpK3lnIblvaIiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAxOCAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSIyNSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAyNiAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIyNSIgaGVpZ2h0PSIzMyIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCAzNCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIzMyIgaGVpZ2h0PSI0OSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K\"","import { ApplianceNames } from \"white-web-sdk\";\nimport pencil from \"../image/pencil-cursor.png\";\nimport selector from \"../image/selector-cursor.png\";\nimport eraser from \"../image/eraser-cursor.png\";\nimport shape from \"../image/shape-cursor.svg\";\nimport text from \"../image/text-cursor.svg\";\nimport laser from \"../image/laser-pointer-cursor.svg\";\nimport pencilEraser1 from \"../image/pencil-eraser-1.svg\";\nimport pencilEraser2 from \"../image/pencil-eraser-2.svg\";\nimport pencilEraser3 from \"../image/pencil-eraser-3.svg\";\n\nexport const ApplianceMap: {\n [key: string]: string;\n} = {\n [ApplianceNames.pencil]: pencil,\n [ApplianceNames.selector]: selector,\n [ApplianceNames.eraser]: eraser,\n [ApplianceNames.shape]: shape,\n [ApplianceNames.text]: text,\n [ApplianceNames.laserPointer]: laser,\n [\"pencilEraser1\"]: pencilEraser1,\n [\"pencilEraser2\"]: pencilEraser2,\n [\"pencilEraser3\"]: pencilEraser3,\n};\n","import { ApplianceNames, isRoom } from \"white-web-sdk\";\nimport { Cursor } from \"./Cursor\";\nimport { CursorState, Events } from \"../constants\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { WindowManager } from \"../index\";\nimport type { CursorMovePayload, ApplianceIcons, CursorOptions } from \"../index\";\nimport type { PositionType } from \"../AttributesDelegate\";\nimport type { Point, Room, RoomMember, RoomState, View } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport { ApplianceMap } from \"./icons\";\nimport { findMemberByUid } from \"../Helper\";\nimport { enableLocal } from \"./icons2\";\n\nexport type EventType = {\n type: PositionType;\n id?: string;\n};\n\nexport type MoveCursorParams = {\n uid: string;\n x: number;\n y: number;\n};\n\nconst LocalCursorSideEffectId = \"local-cursor\";\n\nexport class CursorManager {\n static readonly kind = \"CursorManager\";\n public containerRect?: DOMRect;\n public wrapperRect?: DOMRect;\n public cursorInstances: Map<string, Cursor> = new Map();\n public roomMembers?: readonly RoomMember[];\n public userApplianceIcons: ApplianceIcons = {};\n\n private mainViewElement?: HTMLDivElement;\n private sideEffectManager = new SideEffectManager();\n private store = this.manager.store;\n private leaveFlag = true;\n private _style: CursorOptions[\"style\"] & string = \"default\";\n\n constructor(\n private manager: AppManager,\n private enableCursor: boolean,\n cursorOptions?: CursorOptions,\n applianceIcons?: ApplianceIcons\n ) {\n this.roomMembers = this.manager.room?.state.roomMembers;\n const wrapper = WindowManager.wrapper;\n if (wrapper) {\n this.setupWrapper(wrapper);\n }\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"cursorMove\", this.onCursorMove);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"playgroundSizeChange\", () => this.updateContainerRect());\n });\n const room = this.manager.room;\n if (room) {\n this.sideEffectManager.add(() => {\n const update = (state: RoomState) => {\n if (this.style === \"custom\" && state.memberState) this.enableCustomCursor();\n };\n room.callbacks.on(\"onRoomStateChanged\", update);\n return () => room.callbacks.off(\"onRoomStateChanged\", update);\n });\n }\n if (applianceIcons) {\n this.userApplianceIcons = applianceIcons;\n }\n this.style = cursorOptions?.style || \"default\";\n }\n\n public get applianceIcons(): ApplianceIcons {\n return { ...ApplianceMap, ...this.userApplianceIcons };\n }\n\n public get style() {\n return this._style;\n }\n\n public set style(value) {\n if (this._style !== value) {\n this._style = value;\n this.cursorInstances.forEach(cursor => {\n cursor.setStyle(value);\n });\n if (value === \"custom\") {\n this.enableCustomCursor();\n } else {\n this.sideEffectManager.flush(LocalCursorSideEffectId);\n }\n }\n }\n\n private onCursorMove = (payload: CursorMovePayload) => {\n const cursorInstance = this.initCursorInstance(payload.uid);\n if (payload.state === CursorState.Leave) {\n cursorInstance.leave();\n } else {\n const member = cursorInstance.updateMember();\n if (this.canMoveCursor(member)) {\n cursorInstance.move(payload.position);\n }\n }\n };\n\n private initCursorInstance = (uid: string) => {\n let cursorInstance = this.cursorInstances.get(uid);\n if (!cursorInstance) {\n cursorInstance = new Cursor(this.manager, uid, this, WindowManager.wrapper);\n this.cursorInstances.set(uid, cursorInstance);\n }\n return cursorInstance;\n };\n\n private enableCustomCursor() {\n this.sideEffectManager.add(\n () => enableLocal(this.manager.getMemberState()),\n LocalCursorSideEffectId\n );\n }\n\n private canMoveCursor(member: RoomMember | undefined) {\n const isLaserPointer =\n member?.memberState.currentApplianceName === ApplianceNames.laserPointer;\n // 激光笔教具在不开启光标的情况下也要显示\n return this.enableCursor || isLaserPointer;\n }\n\n public setupWrapper(wrapper: HTMLElement) {\n this.sideEffectManager.add(() => {\n wrapper.addEventListener(\"pointerenter\", this.mouseMoveListener);\n wrapper.addEventListener(\"pointermove\", this.mouseMoveListener);\n wrapper.addEventListener(\"pointerleave\", this.mouseLeaveListener);\n return () => {\n wrapper.removeEventListener(\"pointerenter\", this.mouseMoveListener);\n wrapper.removeEventListener(\"pointermove\", this.mouseMoveListener);\n wrapper.removeEventListener(\"pointerleave\", this.mouseLeaveListener);\n };\n });\n\n this.wrapperRect = wrapper.getBoundingClientRect();\n }\n\n public setMainViewDivElement(div: HTMLDivElement) {\n this.mainViewElement = div;\n }\n\n public get boxState() {\n return this.store.getBoxState();\n }\n\n public get focusView() {\n return this.manager.focusApp?.view;\n }\n\n private mouseMoveListener_ = (event: PointerEvent, isTouch: boolean) => {\n const type = this.getType(event);\n this.updateCursor(type, event.clientX, event.clientY);\n isTouch && this.showPencilEraserIfNeeded(type, event.clientX, event.clientY);\n };\n\n private mouseMoveTimer = 0;\n private mouseMoveListener = (event: PointerEvent) => {\n const isTouch = event.pointerType === \"touch\";\n if (isTouch && !event.isPrimary) return;\n const now = Date.now();\n if (now - this.mouseMoveTimer > 48) {\n this.mouseMoveTimer = now;\n if (\n WindowManager.supportAppliancePlugin &&\n isRoom(WindowManager.displayer) &&\n (WindowManager.displayer as Room).disableDeviceInputs\n ) {\n if (this.leaveFlag) {\n this.manager.dispatchInternalEvent(Events.CursorMove, {\n uid: this.manager.uid,\n state: CursorState.Leave,\n } as CursorMovePayload);\n this.leaveFlag = false;\n }\n return;\n }\n this.mouseMoveListener_(event, isTouch);\n this.leaveFlag = true;\n }\n };\n\n private mouseLeaveListener = () => {\n this.hideCursor(this.manager.uid);\n };\n\n private showPencilEraserIfNeeded(event: EventType, clientX: number, clientY: number) {\n const self = findMemberByUid(this.manager.room, this.manager.uid);\n const isPencilEraser =\n self?.memberState.currentApplianceName === ApplianceNames.pencilEraser;\n if (\n this.wrapperRect &&\n this.manager.canOperate &&\n this.canMoveCursor(self) &&\n isPencilEraser\n ) {\n const view = event.type === \"main\" ? this.manager.mainView : this.focusView;\n const point = this.getPoint(view, clientX, clientY);\n if (point) {\n this.onCursorMove({\n uid: this.manager.uid,\n position: {\n x: point.x,\n y: point.y,\n type: event.type,\n },\n });\n }\n }\n }\n\n private updateCursor(event: EventType, clientX: number, clientY: number) {\n const self = findMemberByUid(this.manager.room, this.manager.uid);\n if (this.wrapperRect && this.manager.canOperate && this.canMoveCursor(self)) {\n const view = event.type === \"main\" ? this.manager.mainView : this.focusView;\n const point = this.getPoint(view, clientX, clientY);\n if (point) {\n this.manager.dispatchInternalEvent(Events.CursorMove, {\n uid: this.manager.uid,\n position: {\n x: point.x,\n y: point.y,\n type: event.type,\n },\n } as CursorMovePayload);\n }\n }\n }\n\n private getPoint = (\n view: View | undefined,\n clientX: number,\n clientY: number\n ): Point | undefined => {\n const rect = view?.divElement?.getBoundingClientRect();\n if (rect) {\n const point = view?.convertToPointInWorld({\n x: clientX - rect.x,\n y: clientY - rect.y,\n });\n return point;\n }\n };\n\n /**\n * 因为窗口内框在不同分辨率下的大小不一样,所以这里通过来鼠标事件的 target 来判断是在主白板还是在 APP 中\n */\n private getType = (event: MouseEvent | Touch): EventType => {\n const target = event.target as HTMLElement;\n const focusApp = this.manager.focusApp;\n switch (target.parentElement) {\n case this.mainViewElement: {\n return { type: \"main\" };\n }\n case focusApp?.view?.divElement: {\n return { type: \"app\" };\n }\n default: {\n return { type: \"main\" };\n }\n }\n };\n\n public updateContainerRect() {\n this.containerRect = WindowManager.container?.getBoundingClientRect();\n this.wrapperRect = WindowManager.wrapper?.getBoundingClientRect();\n }\n\n public deleteCursor(uid: string) {\n this.store.cleanCursor(uid);\n const cursor = this.cursorInstances.get(uid);\n if (cursor) {\n cursor.destroy();\n }\n }\n\n public hideCursor(uid: string) {\n const cursor = this.cursorInstances.get(uid);\n if (cursor) {\n cursor.hide();\n }\n }\n\n public destroy() {\n this.sideEffectManager.flushAll();\n if (this.cursorInstances.size) {\n this.cursorInstances.forEach(cursor => {\n cursor.destroy();\n });\n this.cursorInstances.clear();\n }\n }\n}\n","import { AppContext, AppProxy } from \"../App\";\nimport { AppManager } from \"../AppManager\";\nimport { AttributesDelegate } from \"../AttributesDelegate\";\nimport { BoxManager } from \"../BoxManager\";\nimport { CursorManager } from \"../Cursor\";\nimport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport { AppManager } from \"../AppManager\";\nexport { AppContext, AppProxy } from \"../App\";\nexport { BoxManager } from \"../BoxManager\";\nexport { AttributesDelegate } from \"../AttributesDelegate\";\nexport { CursorManager } from \"../Cursor\";\nexport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport type ExtendClassAble =\n | typeof AppManager\n | typeof AppProxy\n | typeof AppContext\n | typeof BoxManager\n | typeof AttributesDelegate\n | typeof CursorManager\n | typeof TeleBoxManager\n | typeof TeleBoxCollector;\n\nexport type ExtendClass = {\n AppManager?: typeof AppManager;\n BoxManager?: typeof BoxManager;\n AttributesDelegate?: typeof AttributesDelegate;\n CursorManager?: typeof CursorManager;\n AppProxy?: typeof AppProxy;\n AppContext?: typeof AppContext;\n TeleBoxManager?: typeof TeleBoxManager;\n TeleBoxCollector?: typeof TeleBoxCollector;\n};\nexport function getExtendClass<T extends ExtendClassAble>(\n baseClass: T,\n extendClass?: ExtendClass\n): T {\n if (baseClass.kind && extendClass && Object.keys(extendClass).includes(baseClass.kind)) {\n switch (baseClass.kind) {\n case \"AppManager\":\n return (extendClass?.AppManager || AppManager) as T;\n case \"BoxManager\":\n return (extendClass?.BoxManager || BoxManager) as T;\n case \"AttributesDelegate\":\n return (extendClass?.AttributesDelegate || AttributesDelegate) as T;\n case \"CursorManager\":\n return (extendClass?.CursorManager || CursorManager) as T;\n case \"AppProxy\":\n return (extendClass?.AppProxy || AppProxy) as T;\n case \"AppContext\":\n return (extendClass?.AppContext || AppContext) as T;\n case \"TeleBoxManager\":\n return (extendClass?.TeleBoxManager || TeleBoxManager) as T;\n case \"TeleBoxCollector\":\n return (extendClass?.TeleBoxCollector || TeleBoxCollector) as T;\n default:\n return baseClass;\n }\n }\n return baseClass;\n}\n","import { AppAttributes } from \"./constants\";\nimport { get, isObject, pick } from \"lodash\";\nimport { setViewFocusScenePath } from \"./Utils/Common\";\nimport type { AddAppParams, AppSyncAttributes } from \"./index\";\nimport type { Camera, Size, View } from \"white-web-sdk\";\nimport type { Cursor } from \"./Cursor/Cursor\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { ExtendClass } from \"./Utils/extendClass\";\nimport type { NotMinimizedBoxState, TeleBoxState } from \"@netless/telebox-insider\";\n\nexport enum Fields {\n Apps = \"apps\",\n Focus = \"focus\",\n State = \"state\",\n /** 默认窗口状态, (用于窗口状态的统一管理) */\n BoxState = \"boxState\",\n MainViewCamera = \"mainViewCamera\",\n MainViewSize = \"mainViewSize\",\n Broadcaster = \"broadcaster\",\n Cursors = \"cursors\",\n Position = \"position\",\n CursorState = \"cursorState\",\n FullPath = \"fullPath\",\n Registered = \"registered\",\n IframeBridge = \"iframeBridge\",\n /** 所有窗口状态, (用于窗口状态的单独管理) */\n BoxesStatus = \"boxesStatus\",\n /** 上次非最小化窗口状态 */\n LastNotMinimizedBoxesStatus = \"lastNotMinimizedBoxesStatus\",\n}\n\nexport type Apps = {\n [key: string]: AppSyncAttributes;\n};\n\nexport type Position = {\n x: number;\n y: number;\n type: PositionType;\n id?: string;\n};\n\nexport type PositionType = \"main\" | \"app\";\n\nexport type StoreContext = {\n getAttributes: () => any;\n safeUpdateAttributes: (keys: string[], value: any) => void;\n safeSetAttributes: (attributes: any) => void;\n};\n\nexport type ICamera = Camera & { id: string };\n\nexport type ISize = Size & { id: string };\n\nexport class AttributesDelegate {\n static readonly kind = \"AttributesDelegate\";\n constructor(private context: StoreContext) {}\n\n public setContext(context: StoreContext) {\n this.context = context;\n }\n\n public get attributes() {\n return this.context.getAttributes();\n }\n\n public apps(): Apps {\n return get(this.attributes, [Fields.Apps]);\n }\n\n public get focus(): string | undefined {\n return get(this.attributes, [Fields.Focus]);\n }\n\n public getAppAttributes(id: string): AppSyncAttributes {\n return get(this.apps(), [id]);\n }\n\n public getAppState(id: string) {\n return get(this.apps(), [id, Fields.State]);\n }\n\n public getMaximized() {\n return get(this.attributes, [\"maximized\"]);\n }\n\n public getMinimized() {\n return get(this.attributes, [\"minimized\"]);\n }\n\n public getBoxesStatus(): Record<string, TeleBoxState> | undefined {\n return get(this.attributes, [Fields.BoxesStatus]);\n }\n\n public getBoxStatus(id: string): TeleBoxState | undefined {\n return get(this.attributes, [Fields.BoxesStatus, id]);\n }\n\n public setBoxStatus(id: string, status?: TeleBoxState) {\n const attributes = this.attributes;\n if (!attributes.boxesStatus) {\n this.context.safeSetAttributes({ boxesStatus: {} });\n }\n if (this.getBoxStatus(id) !== status) {\n this.context.safeUpdateAttributes([Fields.BoxesStatus, id], status);\n }\n }\n\n public getLastNotMinimizedBoxesStatus(): Record<string, NotMinimizedBoxState> | undefined {\n return get(this.attributes, [Fields.LastNotMinimizedBoxesStatus]);\n }\n\n public getLastNotMinimizedBoxStatus(id: string): NotMinimizedBoxState | undefined {\n return get(this.attributes, [Fields.LastNotMinimizedBoxesStatus, id]);\n }\n\n public setLastNotMinimizedBoxStatus(id: string, status?: NotMinimizedBoxState) {\n const attributes = this.attributes;\n if (!attributes.lastNotMinimizedBoxesStatus) {\n this.context.safeSetAttributes({ lastNotMinimizedBoxesStatus: {} });\n }\n if (this.getLastNotMinimizedBoxStatus(id) !== status) {\n this.context.safeUpdateAttributes([Fields.LastNotMinimizedBoxesStatus, id], status);\n }\n }\n\n public setupAppAttributes(params: AddAppParams, id: string, isDynamicPPT: boolean) {\n const attributes = this.attributes;\n if (!attributes.apps) {\n this.context.safeSetAttributes({ apps: {} });\n }\n const attrNames = [\"scenePath\", \"title\"];\n if (!isDynamicPPT) {\n attrNames.push(\"scenes\");\n }\n const options = pick(params.options, attrNames);\n const attrs: AppSyncAttributes = {\n kind: params.kind,\n options,\n isDynamicPPT,\n forceTop: params.forceTop,\n forceNormal: params.forceNormal,\n isDragContent: params.isDragContent,\n };\n if (typeof params.src === \"string\") {\n attrs.src = params.src;\n }\n attrs.createdAt = Date.now();\n this.context.safeUpdateAttributes([Fields.Apps, id], attrs);\n this.context.safeUpdateAttributes([Fields.Apps, id, Fields.State], {\n [AppAttributes.Size]: {},\n [AppAttributes.Position]: {},\n [AppAttributes.SceneIndex]: 0,\n });\n }\n\n public updateAppState(appId: string, stateName: AppAttributes, state: any) {\n if (get(this.attributes, [Fields.Apps, appId, Fields.State])) {\n this.context.safeUpdateAttributes([Fields.Apps, appId, Fields.State, stateName], state);\n }\n }\n\n public cleanAppAttributes(id: string) {\n this.context.safeUpdateAttributes([Fields.Apps, id], undefined);\n this.context.safeSetAttributes({ [id]: undefined });\n const focus = this.attributes[Fields.Focus];\n if (focus === id) {\n this.cleanFocus();\n }\n }\n\n public cleanFocus() {\n this.context.safeSetAttributes({ [Fields.Focus]: undefined });\n }\n\n public getAppSceneIndex(id: string) {\n return this.getAppState(id)?.[AppAttributes.SceneIndex];\n }\n\n public getAppScenePath(id: string) {\n return this.getAppAttributes(id)?.options?.scenePath;\n }\n\n public getMainViewScenePath(): string | undefined {\n return this.attributes[\"_mainScenePath\"];\n }\n\n public getMainViewSceneIndex() {\n return this.attributes[\"_mainSceneIndex\"];\n }\n\n public getBoxState() {\n return this.attributes[Fields.BoxState];\n }\n\n public setMainViewScenePath(scenePath: string) {\n this.context.safeSetAttributes({ _mainScenePath: scenePath });\n }\n\n public setMainViewSceneIndex(index: number) {\n this.context.safeSetAttributes({ _mainSceneIndex: index });\n }\n\n public getMainViewCamera(): MainViewCamera {\n return get(this.attributes, [Fields.MainViewCamera]);\n }\n\n public getMainViewSize(): MainViewSize {\n return get(this.attributes, [Fields.MainViewSize]);\n }\n\n public setMainViewCamera(camera: ICamera) {\n this.context.safeSetAttributes({ [Fields.MainViewCamera]: { ...camera } });\n }\n\n public setMainViewSize(size: ISize) {\n if (size.width === 0 || size.height === 0) return;\n this.context.safeSetAttributes({ [Fields.MainViewSize]: { ...size } });\n }\n\n public setMainViewCameraAndSize(camera: ICamera, size: ISize) {\n if (size.width === 0 || size.height === 0) return;\n this.context.safeSetAttributes({\n [Fields.MainViewCamera]: { ...camera },\n [Fields.MainViewSize]: { ...size },\n });\n }\n\n public setAppFocus = (appId: string, focus: boolean) => {\n if (focus) {\n this.context.safeSetAttributes({ [Fields.Focus]: appId });\n } else {\n this.context.safeSetAttributes({ [Fields.Focus]: undefined });\n }\n };\n\n public updateCursor(uid: string, position: Position) {\n if (!get(this.attributes, [Fields.Cursors])) {\n this.context.safeUpdateAttributes([Fields.Cursors], {});\n }\n if (!get(this.attributes, [Fields.Cursors, uid])) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], {});\n }\n this.context.safeUpdateAttributes([Fields.Cursors, uid, Fields.Position], position);\n }\n\n public updateCursorState(uid: string, cursorState: string | undefined) {\n if (!get(this.attributes, [Fields.Cursors, uid])) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], {});\n }\n this.context.safeUpdateAttributes([Fields.Cursors, uid, Fields.CursorState], cursorState);\n }\n\n public getCursorState(uid: string) {\n return get(this.attributes, [Fields.Cursors, uid, Fields.CursorState]);\n }\n\n public cleanCursor(uid: string) {\n this.context.safeUpdateAttributes([Fields.Cursors, uid], undefined);\n }\n\n // TODO 状态中保存一个 SceneName 优化性能\n public setMainViewFocusPath(mainView: View) {\n const scenePath = this.getMainViewScenePath();\n if (scenePath) {\n setViewFocusScenePath(mainView, scenePath);\n }\n }\n\n public getIframeBridge() {\n return get(this.attributes, [Fields.IframeBridge]);\n }\n\n public setIframeBridge(data: any) {\n if (isObject(data)) {\n const oldState = this.getIframeBridge();\n for (const key in data) {\n const value = (data as any)[key];\n if (oldState[key] !== value) {\n this.context.safeUpdateAttributes([Fields.IframeBridge, key], value);\n }\n }\n }\n }\n}\n\nexport type MainViewSize = {\n id: string;\n width: number;\n height: number;\n};\n\nexport type MainViewCamera = {\n id: string;\n centerX: number;\n centerY: number;\n scale: number;\n};\n\nexport type Cursors = {\n [key: string]: Cursor;\n};\n\n// export const store = new AttributesDelegate({\n// getAttributes: () => {\n// throw new Error(\"getAttributes not implemented\");\n// },\n// safeSetAttributes: () => {\n// throw new Error(\"safeSetAttributes not implemented\");\n// },\n// safeUpdateAttributes: () => {\n// throw new Error(\"safeUpdateAttributes not implemented\");\n// },\n// });\n\nexport const createAttributesDelegate = (\n extendClass?: ExtendClass,\n context: StoreContext = {\n getAttributes: () => {\n throw new Error(\"getAttributes not implemented\");\n },\n safeSetAttributes: () => {\n throw new Error(\"safeSetAttributes not implemented\");\n },\n safeUpdateAttributes: () => {\n throw new Error(\"safeUpdateAttributes not implemented\");\n },\n }\n) => {\n const AttributesDelegateClass = getExtendClass(AttributesDelegate, extendClass);\n return new AttributesDelegateClass(context);\n};\n","import type { PageState } from \"./PageController\";\n\nexport * from \"./PageController\";\n\nexport const calculateNextIndex = (index: number, pageState: PageState) => {\n let nextIndex = 0;\n const maxIndex = pageState.length - 1;\n if (index === pageState.index) {\n if (index === maxIndex) {\n nextIndex = index - 1;\n } else {\n nextIndex = pageState.index + 1;\n }\n } else {\n nextIndex = pageState.index;\n }\n return nextIndex;\n};\n","import type { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport Emittery from \"emittery\";\n\nexport type BoxMovePayload = { appId: string; x: number; y: number };\nexport type BoxFocusPayload = { appId: string };\nexport type BoxBlurredPayload = { appId: string };\nexport type BoxResizePayload = {\n appId: string;\n width: number;\n height: number;\n x?: number;\n y?: number;\n};\nexport type BoxClosePayload = { appId: string; error?: Error };\nexport type BoxStateChangePayload = { appId: string; state: TELE_BOX_STATE };\n\nexport type BoxEvent = {\n move: BoxMovePayload;\n focus: BoxFocusPayload;\n resize: BoxResizePayload;\n close: BoxClosePayload;\n boxStateChange: BoxStateChangePayload;\n blurred: BoxBlurredPayload;\n};\n\nexport type BoxEmitterType = Emittery<BoxEvent>;\nexport const boxEmitter: BoxEmitterType = new Emittery();\n","import Emittery from \"emittery\";\nimport { AppAttributes, AppEvents, Events, SETUP_APP_DELAY } from \"../constants\";\nimport { AppContext } from \"./AppContext\";\nimport { AppPageStateImpl } from \"./AppPageStateImpl\";\nimport { appRegister } from \"../Register\";\nimport { autorun } from \"white-web-sdk\";\nimport { BoxManagerNotFoundError } from \"../Utils/error\";\nimport { debounce, get } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { Fields } from \"../AttributesDelegate\";\nimport { log } from \"../Utils/log\";\nimport {\n entireScenes,\n getScenePath,\n removeScenes,\n setScenePath,\n setViewFocusScenePath,\n} from \"../Utils/Common\";\nimport type {\n AppEmitterEvent,\n AppInitState,\n BaseInsertParams,\n setAppOptions,\n AppListenerKeys,\n} from \"../index\";\nimport { WindowManager } from \"../index\";\nimport type { SceneState, View, SceneDefinition } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { NetlessApp } from \"../typings\";\nimport { TELE_BOX_STATE } from \"@netless/telebox-insider\";\nimport type { ReadonlyTeleBox, TeleBoxState } from \"@netless/telebox-insider\";\nimport type { PageRemoveService, PageState } from \"../Page\";\nimport { calculateNextIndex } from \"../Page\";\nimport { boxEmitter } from \"../BoxEmitter\";\nimport { callbacks } from \"../callback\";\nimport { getExtendClass } from \"../Utils/extendClass\";\n\nexport type AppEmitter = Emittery<AppEmitterEvent>;\n\nexport class AppProxy implements PageRemoveService {\n static readonly kind = \"AppProxy\";\n public kind: string;\n public id: string;\n public scenePath?: string;\n public appEmitter: AppEmitter;\n public scenes?: SceneDefinition[];\n\n private appListener: any;\n private boxManager = this.manager.boxManager;\n private appProxies = this.manager.appProxies;\n private viewManager = this.manager.viewManager;\n private store = this.manager.store;\n\n public isAddApp: boolean;\n private status: \"normal\" | \"destroyed\" = \"normal\";\n private stateKey: string;\n private _pageState: AppPageStateImpl;\n private _prevFullPath: string | undefined;\n\n public appResult?: NetlessApp<any>;\n public appContext?: AppContext<any, any>;\n\n constructor(\n private params: BaseInsertParams,\n private manager: AppManager,\n appId: string,\n isAddApp: boolean\n ) {\n this.kind = params.kind;\n this.id = appId;\n this.stateKey = `${this.id}_state`;\n this.appProxies.set(this.id, this);\n this.appEmitter = new Emittery();\n this.appListener = this.makeAppEventListener(this.id);\n this.isAddApp = isAddApp;\n\n this.initScenes();\n\n if (this.params.options?.scenePath) {\n // 只有传入了 scenePath 的 App 才会创建 View\n this.createView();\n }\n this._pageState = new AppPageStateImpl({\n displayer: this.manager.displayer,\n scenePath: this.scenePath,\n view: this.view,\n notifyPageStateChange: this.notifyPageStateChange,\n });\n }\n\n private initScenes() {\n const options = this.params.options;\n if (options) {\n this.scenePath = options.scenePath;\n if (this.appAttributes?.isDynamicPPT && this.scenePath) {\n this.scenes = entireScenes(this.manager.displayer)[this.scenePath];\n } else {\n this.scenes = options.scenes;\n }\n }\n }\n\n public get view(): View | undefined {\n return this.manager.viewManager.getView(this.id);\n }\n\n public get viewIndex(): number | undefined {\n return this.view?.focusSceneIndex;\n }\n\n public get isWritable(): boolean {\n return this.manager.canOperate && !this.box?.readonly;\n }\n\n public get attributes() {\n return this.manager.attributes[this.id];\n }\n\n public get appAttributes() {\n return this.store.getAppAttributes(this.id);\n }\n\n public get Logger() {\n return this.manager.windowManger.Logger;\n }\n\n public getFullScenePath(): string | undefined {\n if (this.scenePath) {\n return get(this.appAttributes, [Fields.FullPath]) || this.getFullScenePathFromScenes();\n }\n }\n\n private getFullScenePathFromScenes() {\n const sceneIndex = get(this.appAttributes, [\"state\", \"SceneIndex\"], 0);\n const fullPath = getScenePath(this.manager.room, this.scenePath, sceneIndex);\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n return fullPath;\n }\n\n public setFullPath(path: string) {\n this.manager.safeUpdateAttributes([\"apps\", this.id, Fields.FullPath], path);\n }\n\n public async baseInsertApp(\n skipUpdate = false,\n boxStatus: TeleBoxState = TELE_BOX_STATE.Normal\n ): Promise<{ appId: string; app: NetlessApp }> {\n const params = this.params;\n if (!params.kind) {\n this.Logger && this.Logger.error(`[WindowManager]: kind require`);\n throw new Error(\"[WindowManager]: kind require\");\n }\n const appImpl = await appRegister.appClasses.get(params.kind)?.();\n const appParams = appRegister.registered.get(params.kind);\n const appOptions = this.manager.windowManger.resolveAppOptions(\n params.kind,\n appParams?.appOptions\n );\n if (appImpl) {\n await this.setupApp(\n this.id,\n skipUpdate,\n appImpl,\n params.options,\n appOptions,\n this.manager.useBoxesStatus ? boxStatus : undefined,\n params.forceTop,\n params.forceNormal,\n params.isDragContent\n );\n } else {\n this.Logger &&\n this.Logger.error(`[WindowManager]: app load failed ${params.kind} ${params.src}`);\n throw new Error(`[WindowManager]: app load failed ${params.kind} ${params.src}`);\n }\n internalEmitter.emit(\"updateManagerRect\");\n return {\n appId: this.id,\n app: appImpl,\n };\n }\n\n public get box(): ReadonlyTeleBox | undefined {\n return this.boxManager?.getBox(this.id);\n }\n\n private async setupApp(\n appId: string,\n skipUpdate: boolean,\n app: NetlessApp,\n options?: setAppOptions,\n appOptions?: any,\n boxStatus?: TeleBoxState,\n forceTop?: boolean,\n forceNormal?: boolean,\n isDragContent?: boolean\n ) {\n log(\"setupApp\", appId, app, options, boxStatus, forceTop, forceNormal, isDragContent);\n if (!this.boxManager) {\n throw new BoxManagerNotFoundError();\n }\n const AppContextClass = getExtendClass(AppContext, WindowManager.extendClass);\n const context = new AppContextClass(this.manager, this.boxManager, appId, this, appOptions);\n this.appContext = context;\n try {\n internalEmitter.once(`${appId}${Events.WindowCreated}` as any).then(async () => {\n let boxInitState: AppInitState | undefined;\n if (!skipUpdate) {\n boxInitState = this.getAppInitState(appId);\n this.boxManager?.updateBoxState(boxInitState);\n }\n this.appEmitter.onAny(this.appListener);\n this.appAttributesUpdateListener(appId);\n this.setViewFocusScenePath();\n // 如果当前是回放模式, 则需要记录当前主视图的场景路径, 以便在 app 创建后恢复\n let currentMainViewScenePath: string | undefined;\n if (this.manager.isReplay) {\n currentMainViewScenePath = (this.manager.mainView as any).scenePath as string;\n }\n setTimeout(async () => {\n // 延迟执行 setup, 防止初始化的属性没有更新成功\n this.Logger &&\n this.Logger.info(\n `[WindowManager]: setup app ${this.kind}, appId: ${appId}`\n );\n const result = await app.setup(context);\n this.appResult = result;\n appRegister.notifyApp(this.kind, \"created\", { appId, result });\n this.afterSetupApp(boxInitState);\n this.fixMobileSize();\n if (currentMainViewScenePath) {\n this.manager.mainViewProxy.setFocusScenePath(currentMainViewScenePath);\n }\n callbacks.emit(\"onAppSetup\", appId);\n }, SETUP_APP_DELAY);\n });\n this.boxManager?.createBox({\n appId: appId,\n app,\n options,\n canOperate: this.manager.canOperate,\n smartPosition: this.isAddApp,\n boxStatus,\n forceTop,\n forceNormal,\n isDragContent,\n });\n if (this.isAddApp && this.box) {\n if (boxStatus) {\n this.store.setBoxStatus(appId, boxStatus);\n }\n this.store.updateAppState(appId, AppAttributes.ZIndex, this.box.zIndex);\n this.store.updateAppState(appId, AppAttributes.Size, {\n width: this.box.intrinsicWidth,\n height: this.box.intrinsicHeight,\n });\n this.boxManager.focusBox({ appId }, false);\n }\n } catch (error: any) {\n this.Logger && this.Logger.error(`[WindowManager]: app setup error: ${error.message}`);\n throw new Error(`[WindowManager]: app setup error: ${error.message}`);\n }\n }\n\n // 兼容移动端创建时会出现 PPT 不适配的问题\n private fixMobileSize() {\n const box = this.boxManager?.getBox(this.id);\n if (box) {\n this.boxManager?.resizeBox({\n appId: this.id,\n width: box.intrinsicWidth + 0.001,\n height: box.intrinsicHeight + 0.001,\n skipUpdate: true,\n });\n }\n }\n\n private afterSetupApp(boxInitState: AppInitState | undefined): void {\n if (boxInitState) {\n if (!boxInitState?.x || !boxInitState.y) {\n this.boxManager?.setBoxInitState(this.id);\n }\n }\n }\n\n public async onSeek(time: number) {\n this.appEmitter.emit(\"seek\", time).catch(err => {\n console.log(`[WindowManager]: emit seek error: ${err.message}`);\n });\n const boxInitState = this.getAppInitState(this.id);\n this.boxManager?.updateBoxState(boxInitState);\n }\n\n public async onReconnected() {\n const isExist = Boolean(this.manager.attributes.apps[this.id]);\n if (!isExist) {\n await this.destroy(true, false, true);\n return;\n }\n this.appEmitter.emit(\"reconnected\", undefined);\n const currentAppState = this.getAppInitState(this.id);\n await this.destroy(true, false, true);\n const params = this.params;\n const AppProxyClass = getExtendClass(AppProxy, WindowManager.extendClass);\n const appProxy = new AppProxyClass(params, this.manager, this.id, this.isAddApp);\n await appProxy.baseInsertApp(true, currentAppState?.boxStatus);\n this.boxManager?.updateBoxState(currentAppState);\n }\n\n public async onRemoveScene(scenePath: string) {\n if (this.scenePath && scenePath.startsWith(this.scenePath + \"/\")) {\n let nextIndex = this.pageState.index;\n let fullPath = this._pageState.getFullPath(nextIndex);\n if (!fullPath) {\n nextIndex = 0;\n fullPath = this._pageState.getFullPath(nextIndex);\n }\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n this.setViewFocusScenePath();\n if (this.view) {\n this.view.focusSceneIndex = nextIndex;\n }\n }\n }\n\n public getAppInitState = (id: string) => {\n const attrs = this.store.getAppState(id);\n if (!attrs) return;\n const position = attrs?.[AppAttributes.Position];\n const focus = this.store.focus;\n const size = attrs?.[AppAttributes.Size];\n const sceneIndex = attrs?.[AppAttributes.SceneIndex];\n const maximized = this.attributes?.[\"maximized\"];\n const minimized = this.attributes?.[\"minimized\"];\n const boxStatus = this.store.getBoxStatus(id) ?? undefined;\n const lastNotMinimizedBoxStatus = this.store.getLastNotMinimizedBoxStatus(id) ?? undefined;\n const { forceTop, forceNormal, isDragContent } = this.store.getAppAttributes(id);\n const zIndex = attrs?.zIndex;\n let payload = { maximized, minimized, zIndex } as AppInitState;\n if (position) {\n payload = { ...payload, id: id, x: position.x, y: position.y };\n }\n if (focus === id) {\n payload = { ...payload, focus: true };\n }\n if (size) {\n payload = { ...payload, width: size.width, height: size.height };\n }\n if (sceneIndex) {\n payload = { ...payload, sceneIndex };\n }\n if (boxStatus) {\n payload = { ...payload, boxStatus };\n }\n if (lastNotMinimizedBoxStatus) {\n payload = { ...payload, lastNotMinimizedBoxStatus };\n }\n if (forceTop) {\n payload = { ...payload, forceTop };\n }\n if (forceNormal) {\n payload = { ...payload, forceNormal };\n }\n if (isDragContent) {\n payload = { ...payload, isDragContent };\n }\n return payload;\n };\n\n public emitAppSceneStateChange(sceneState: SceneState) {\n this.appEmitter.emit(\"sceneStateChange\", sceneState);\n }\n\n public emitAppIsWritableChange() {\n this.appEmitter.emit(\"writableChange\", this.isWritable);\n }\n\n private makeAppEventListener(appId: string) {\n return (eventName: AppListenerKeys, data: any) => {\n if (!this.manager.canOperate) return;\n switch (eventName) {\n case \"setBoxSize\": {\n this.boxManager?.resizeBox({\n appId,\n width: data.width,\n height: data.height,\n skipUpdate: false,\n });\n break;\n }\n case \"setBoxMinSize\": {\n this.boxManager?.setBoxMinSize({\n appId,\n minWidth: data.minwidth,\n minHeight: data.minheight,\n });\n break;\n }\n case \"setBoxTitle\": {\n this.boxManager?.setBoxTitle({ appId, title: data.title });\n break;\n }\n case AppEvents.destroy: {\n if (this.status === \"destroyed\") return;\n this.destroy(true, false, true, data?.error);\n if (data?.error) {\n console.error(data?.error);\n }\n break;\n }\n case \"focus\": {\n this.boxManager?.focusBox({ appId: this.id });\n boxEmitter.emit(\"focus\", { appId: this.id });\n break;\n }\n default: {\n break;\n }\n }\n };\n }\n\n private appAttributesUpdateListener = (appId: string) => {\n this.manager.refresher.add(appId, () => {\n return autorun(() => {\n const attrs = this.manager.attributes[appId];\n if (attrs) {\n this.appEmitter.emit(\"attributesUpdate\", attrs);\n }\n });\n });\n this.manager.refresher.add(this.stateKey, () => {\n return autorun(() => {\n const appState = this.appAttributes?.state;\n if (appState?.zIndex > 0 && appState.zIndex !== this.box?.zIndex) {\n this.boxManager?.setZIndex(appId, appState.zIndex);\n this.boxManager?.focusBox({ appId });\n }\n });\n });\n this.manager.refresher.add(`${appId}-fullPath`, () => {\n return autorun(() => {\n const fullPath = this.appAttributes?.fullPath;\n this.setFocusScenePathHandler(fullPath);\n if (this._prevFullPath !== fullPath) {\n this.notifyPageStateChange();\n this._prevFullPath = fullPath;\n }\n });\n });\n };\n\n private setFocusScenePathHandler = debounce((fullPath: string | undefined) => {\n if (this.view && fullPath && fullPath !== this.view?.focusScenePath) {\n setViewFocusScenePath(this.view, fullPath);\n callbacks.emit(\"onAppScenePathChange\", { appId: this.id, view: this.view });\n }\n }, 50);\n\n public setScenePath(): void {\n if (!this.manager.canOperate) return;\n const fullScenePath = this.getFullScenePath();\n if (this.manager.room && fullScenePath && this.view) {\n setScenePath(this.manager.room, fullScenePath);\n }\n }\n\n public setViewFocusScenePath() {\n const fullPath = this.getFullScenePath();\n if (fullPath && this.view) {\n setViewFocusScenePath(this.view, fullPath);\n }\n return fullPath;\n }\n\n private async createView(): Promise<View> {\n const view = await this.viewManager.createView(this.id);\n this.setViewFocusScenePath();\n return view;\n }\n\n public notifyPageStateChange = debounce(() => {\n this.appEmitter.emit(\"pageStateChange\", this.pageState);\n }, 50);\n\n public notifyBoxStatusChange = (status: TeleBoxState) => {\n this.appEmitter.emit(\"boxStatusChange\", { appId: this.id, status });\n };\n\n public get pageState(): PageState {\n return this._pageState.toObject();\n }\n\n // PageRemoveService\n public async removeSceneByIndex(index: number) {\n const scenePath = this._pageState.getFullPath(index);\n if (scenePath) {\n const nextIndex = calculateNextIndex(index, this.pageState);\n // 只修改 focus path 不修改 FullPath\n this.setSceneIndexWithoutSync(nextIndex);\n this.manager.dispatchInternalEvent(Events.SetAppFocusIndex, {\n type: \"app\",\n appID: this.id,\n index: nextIndex,\n });\n // 手动添加一个延迟, 让 app 切换场景后再删除以避免闪烁\n setTimeout(() => {\n removeScenes(this.manager.room, scenePath, index);\n }, 100);\n return true;\n } else {\n return false;\n }\n }\n\n public setSceneIndexWithoutSync(index: number) {\n if (this.view) {\n this.view.focusSceneIndex = index;\n }\n }\n // PageRemoveService end\n\n public setSceneIndex(index: number) {\n if (this.view) {\n this.view.focusSceneIndex = index;\n const fullPath = this._pageState.getFullPath(index);\n if (fullPath) {\n this.setFullPath(fullPath);\n }\n }\n }\n\n public async destroy(\n needCloseBox: boolean,\n cleanAttrs: boolean,\n skipUpdate: boolean,\n error?: Error\n ) {\n if (this.status === \"destroyed\") return;\n this.status = \"destroyed\";\n try {\n await appRegister.notifyApp(this.kind, \"destroy\", { appId: this.id });\n await this.appEmitter.emit(\"destroy\", { error });\n } catch (error) {\n this.Logger && this.Logger.error(`[WindowManager]: notifyApp error: ${error.message}`);\n console.error(\"[WindowManager]: notifyApp error\", error.message, error.stack);\n }\n this.appEmitter.clearListeners();\n internalEmitter.emit(`destroy-${this.id}` as any, { error });\n if (needCloseBox) {\n this.boxManager?.closeBox(this.id, skipUpdate);\n }\n if (cleanAttrs) {\n this.store.cleanAppAttributes(this.id);\n if (this.scenePath) {\n removeScenes(this.manager.room, this.scenePath);\n }\n }\n this.appProxies.delete(this.id);\n this._pageState.destroy();\n\n this.viewManager.destroyView(this.id);\n this.manager.appStatus.delete(this.id);\n this.manager.refresher.remove(this.id);\n this.manager.refresher.remove(this.stateKey);\n this.manager.refresher.remove(`${this.id}-fullPath`);\n this._prevFullPath = undefined;\n this.Logger &&\n this.Logger.info(`[WindowManager]: destroy app ${this.kind} appId: ${this.id}`);\n }\n\n public close(): Promise<void> {\n return this.destroy(true, true, false);\n }\n}\n","import type { View, Displayer } from \"white-web-sdk\";\n\nexport class ViewManager {\n public views: Map<string, View> = new Map();\n\n constructor(private displayer: Displayer) {}\n\n public createView(id: string): View {\n const view = createView(this.displayer);\n this.views.set(id, view);\n return view;\n }\n\n public getView(id: string): View | undefined {\n return this.views.get(id);\n }\n\n public destroyView(id: string): void {\n const view = this.views.get(id);\n if (view) {\n try {\n view.release();\n } catch {\n // ignore\n }\n this.views.delete(id);\n }\n }\n\n public setViewScenePath(id: string, scenePath: string): void {\n const view = this.views.get(id);\n if (view) {\n view.focusScenePath = scenePath;\n }\n }\n\n public destroy() {\n this.views.forEach(view => {\n try {\n view.release();\n } catch {\n // ignore\n }\n });\n this.views.clear();\n }\n}\n\nexport const createView = (displayer: Displayer): View => {\n const view = displayer.views.createView();\n setDefaultCameraBound(view);\n return view;\n};\n\nexport const setDefaultCameraBound = (view: View) => {\n view.setCameraBound({\n maxContentMode: () => 10,\n minContentMode: () => 0.1,\n });\n};\n","import { AnimationMode, reaction, ViewMode } from \"white-web-sdk\";\nimport { callbacks } from \"../callback\";\nimport { createView } from \"./ViewManager\";\nimport { debounce, get, isEmpty, isEqual } from \"lodash\";\nimport { internalEmitter } from \"../InternalEmitter\";\nimport { Fields } from \"../AttributesDelegate\";\nimport { setViewFocusScenePath } from \"../Utils/Common\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport type { Camera, Room, Size, View } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { MainViewCamera } from \"../AttributesDelegate\";\nimport { Events } from \"../constants\";\nimport { LocalConsole } from \"../Utils/log\";\n\ntype MainViewScreenLike = {\n refreshSize?: (width: number, height: number) => void;\n resizeObserver?: {\n disconnect?: () => void;\n observe?: (target: Element) => void;\n };\n};\n\nexport class MainViewProxy {\n /** Refresh the view's camera in an interval of 1.5s. */\n public polling = false;\n\n private scale?: number;\n private started = false;\n private mainViewIsAddListener = false;\n private isForcingMainViewDivElement = false;\n private wrapperRectWorkaroundFrame = 0;\n private pendingWrapperRectChange?: { width: number; height: number; origin?: string };\n private mainView: View;\n private store = this.manager.store;\n private viewMode = this.manager.windowManger.viewMode;\n\n private sideEffectManager = new SideEffectManager();\n\n private playgroundSizeChangeListenerLocalConsole = new LocalConsole(\n \"playgroundSizeChangeListener\",\n 100\n );\n private sizeUpdatedLocalConsole = new LocalConsole(\"sizeUpdated\", 100);\n private cameraUpdatedLocalConsole = new LocalConsole(\"cameraUpdated\", 100);\n private cameraReactionLocalConsole = new LocalConsole(\"cameraReaction\", 100);\n\n constructor(private manager: AppManager) {\n this.mainView = this.createMainView();\n this.moveCameraSizeByAttributes();\n internalEmitter.once(\"mainViewMounted\").then(() => {\n this.addMainViewListener();\n this.start();\n this.ensureCameraAndSize();\n this.startListenWritableChange();\n });\n const playgroundSizeChangeListener = () => {\n this.playgroundSizeChangeListenerLocalConsole.log(\n JSON.stringify(this.mainView.camera),\n JSON.stringify(this.mainView.size),\n JSON.stringify(this.mainViewSize),\n JSON.stringify(this.mainViewCamera),\n window.outerHeight,\n window.outerWidth,\n window.visualViewport?.width ?? \"null\",\n window.visualViewport?.height ?? \"null\",\n window.visualViewport?.offsetLeft ?? \"null\",\n window.visualViewport?.offsetTop ?? \"null\"\n );\n this.sizeChangeHandler(this.mainViewSize);\n };\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"playgroundSizeChange\", playgroundSizeChangeListener);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"containerSizeRatioUpdate\", this.onUpdateContainerSizeRatio);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"wrapperRectChange\", this.onWrapperRectChange);\n });\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"startReconnect\", () => {\n if (!this.didRelease) {\n this.mainView.release();\n }\n });\n });\n this.sideEffectManager.setInterval(this.syncCamera, 1500);\n }\n\n // Guard function when the camera is not synced\n private syncCamera = () => {\n if (!this.polling || this.viewMode !== ViewMode.Broadcaster) return;\n const { mainViewCamera } = this;\n if (mainViewCamera && mainViewCamera.id !== this.manager.uid) {\n this.moveCameraSizeByAttributes();\n }\n };\n\n private startListenWritableChange = () => {\n this.sideEffectManager.add(() => {\n return internalEmitter.on(\"writableChange\", isWritable => {\n if (isWritable) {\n this.ensureCameraAndSize();\n }\n if (this.manager.room) this.syncMainView(this.manager.room);\n });\n });\n };\n\n public ensureCameraAndSize() {\n if (this.viewMode !== ViewMode.Broadcaster) return;\n if (!this.mainViewCamera || !this.mainViewSize) {\n this.manager.dispatchInternalEvent(Events.InitMainViewCamera);\n this.setCameraAndSize();\n }\n }\n\n private get mainViewCamera() {\n return this.store.getMainViewCamera();\n }\n\n private get mainViewSize() {\n return this.store.getMainViewSize();\n }\n\n private get didRelease(): boolean {\n return get(this.view, [\"didRelease\"]);\n }\n\n private moveCameraSizeByAttributes() {\n this.moveCameraToContian(this.mainViewSize);\n this.moveCamera(this.mainViewCamera);\n }\n\n private onWrapperRectChange = (payload: { width: number; height: number; origin?: string }) => {\n this.pendingWrapperRectChange = payload;\n if (this.wrapperRectWorkaroundFrame) {\n cancelAnimationFrame(this.wrapperRectWorkaroundFrame);\n }\n this.wrapperRectWorkaroundFrame = requestAnimationFrame(this.runWrapperRectWorkaround);\n };\n\n private runWrapperRectWorkaround = () => {\n this.wrapperRectWorkaroundFrame = 0;\n const payload = this.pendingWrapperRectChange;\n const element = this.mainView.divElement;\n this.pendingWrapperRectChange = undefined;\n if (!payload || !element) return;\n\n const rect = element.getBoundingClientRect();\n const observedSize = { width: rect.width, height: rect.height };\n const wrapperMatchesDom =\n Math.abs(payload.width - observedSize.width) <= 0.5 &&\n Math.abs(payload.height - observedSize.height) <= 0.5;\n const viewIsStale =\n Math.abs(this.mainView.size.width - observedSize.width) > 0.5 ||\n Math.abs(this.mainView.size.height - observedSize.height) > 0.5;\n\n if (wrapperMatchesDom && viewIsStale) {\n this.forceSyncMainViewDivElement(\n `wrapperRectChange:${payload.origin || \"unknown\"}`,\n observedSize,\n element\n );\n }\n };\n\n private forceSyncMainViewDivElement(\n reason: string,\n observedSize: Pick<Size, \"width\" | \"height\">,\n element: HTMLDivElement\n ) {\n const { width: viewWidth, height: viewHeight } = this.mainView.size;\n const targetElement = element;\n if (\n Math.abs(viewWidth - observedSize.width) <= 0.5 &&\n Math.abs(viewHeight - observedSize.height) <= 0.5\n ) {\n return;\n }\n if (this.isForcingMainViewDivElement) {\n console.log(\n \"[window-manager] skipForceSyncMainViewDivElement \" +\n JSON.stringify({\n reason,\n observedSize,\n viewSize: this.mainView.size,\n })\n );\n return;\n }\n this.isForcingMainViewDivElement = true;\n try {\n const mainView = this.mainView as View & { screen?: MainViewScreenLike };\n const screen = mainView.screen;\n const resizeObserver = screen?.resizeObserver;\n if (typeof screen?.refreshSize === \"function\") {\n console.log(\n \"[window-manager] forceSyncMainViewDivElement observerReset \" +\n JSON.stringify({\n reason,\n viewSize: this.mainView.size,\n observedSize,\n })\n );\n // Reset the observer queue so we sync against the current DOM box,\n // not a stale ResizeObserver entry from a rapid resize burst.\n resizeObserver?.disconnect?.();\n screen.refreshSize(observedSize.width, observedSize.height);\n resizeObserver?.observe?.(element);\n }\n } finally {\n queueMicrotask(() => {\n const rect = targetElement.getBoundingClientRect();\n console.log(\n \"[window-manager] forceSyncMainViewDivElementResult \" +\n JSON.stringify({\n reason,\n viewSize: this.mainView.size,\n rect: { width: rect.width, height: rect.height },\n })\n );\n this.isForcingMainViewDivElement = false;\n });\n }\n }\n\n public start() {\n console.log(\"[window-manager] start attributes size:\" + JSON.stringify(this.mainViewSize));\n this.sizeChangeHandler(this.mainViewSize);\n if (this.started) return;\n this.addCameraListener();\n this.addCameraReaction();\n if (this.manager.room) this.syncMainView(this.manager.room);\n this.started = true;\n if (this.mainView.focusScenePath) {\n this.manager.windowManger.onMainViewScenePathChangeHandler(\n this.mainView.focusScenePath\n );\n }\n console.log(\n \"[window-manager] start end mainView size:\" + JSON.stringify(this.mainView.size)\n );\n }\n\n public addCameraReaction = () => {\n this.manager.refresher.add(Fields.MainViewCamera, this.cameraReaction);\n };\n\n public setCameraAndSize(): void {\n const camera = { ...this.mainView.camera, id: this.manager.uid };\n const size = { ...this.mainView.size, id: this.manager.uid };\n this.store.setMainViewCameraAndSize(camera, size);\n }\n\n private cameraReaction = () => {\n return reaction(\n () => this.mainViewCamera,\n (camera: MainViewCamera | undefined) => {\n if (camera && camera.id !== this.manager.uid) {\n this.moveCameraToContian(this.mainViewSize);\n this.moveCamera(camera);\n this.cameraReactionLocalConsole.log(\n `camera: ${JSON.stringify(camera)}, current size: ${JSON.stringify(\n this.mainViewSize\n )}`\n );\n }\n },\n { fireImmediately: true }\n );\n };\n\n public sizeChangeHandler = debounce((size: Size) => {\n if (size) {\n this.moveCameraToContian(size);\n this.moveCamera(this.mainViewCamera);\n console.log(\n \"[window-manager] sizeChangeHandler current size and camera\" +\n JSON.stringify(size) +\n JSON.stringify(this.mainViewCamera) +\n JSON.stringify(this.mainView.camera) +\n JSON.stringify(this.mainView.size)\n );\n }\n this.ensureMainViewSize();\n }, 30);\n\n public onUpdateContainerSizeRatio = () => {\n const size = this.store.getMainViewSize();\n console.log(\"[window-manager] onUpdateContainerSizeRatio \" + JSON.stringify(size));\n this.sizeChangeHandler(size);\n };\n\n public get view(): View {\n return this.mainView;\n }\n\n public get cameraState() {\n return { ...this.view.camera, ...this.view.size };\n }\n\n public createMainView(): View {\n const mainView = createView(this.manager.displayer);\n const mainViewScenePath = this.store.getMainViewScenePath();\n if (mainViewScenePath) {\n setViewFocusScenePath(mainView, mainViewScenePath);\n }\n return mainView;\n }\n\n public onReconnect(): void {\n if (this.didRelease) {\n this.rebind();\n } else {\n const mainViewScenePath = this.store.getMainViewScenePath();\n this.setFocusScenePath(mainViewScenePath);\n }\n }\n\n public setFocusScenePath(path: string | undefined) {\n if (path) {\n return setViewFocusScenePath(this.view, path);\n }\n }\n\n public rebind(): void {\n const divElement = this.mainView.divElement;\n const disableCameraTransform = this.mainView.disableCameraTransform;\n this.stop();\n if (!this.didRelease) {\n this.mainView.release();\n }\n this.removeMainViewListener();\n this.mainView = this.createMainView();\n this.mainView.disableCameraTransform = disableCameraTransform;\n this.mainView.divElement = divElement;\n this.addMainViewListener();\n this.start();\n callbacks.emit(\"onMainViewRebind\", this.mainView);\n }\n\n private onCameraUpdatedByDevice = (camera: Camera) => {\n if (this.viewMode === ViewMode.Follower) return;\n this.store.setMainViewCamera({ ...camera, id: this.manager.uid });\n if (!isEqual(this.mainViewSize, { ...this.mainView.size, id: this.manager.uid })) {\n this.setMainViewSize(this.view.size);\n }\n };\n\n public addMainViewListener(): void {\n if (this.mainViewIsAddListener) return;\n if (this.view.divElement) {\n this.view.divElement.addEventListener(\"click\", this.mainViewClickListener);\n this.view.divElement.addEventListener(\"touchend\", this.mainViewClickListener);\n this.mainViewIsAddListener = true;\n }\n }\n\n public removeMainViewListener(): void {\n if (this.view.divElement) {\n this.view.divElement.removeEventListener(\"click\", this.mainViewClickListener);\n this.view.divElement.removeEventListener(\"touchend\", this.mainViewClickListener);\n }\n this.mainViewIsAddListener = false;\n }\n\n private mainViewClickListener = () => {\n this.mainViewClickHandler();\n };\n\n public async mainViewClickHandler(): Promise<void> {\n if (!this.manager.canOperate) return;\n this.store.cleanFocus();\n this.manager.boxManager?.blurAllBox();\n }\n\n public setMainViewSize = debounce((size: Size) => {\n this.store.setMainViewSize({ ...size, id: this.manager.uid });\n }, 50);\n\n private addCameraListener() {\n this.view.callbacks.on(\"onCameraUpdatedByDevice\", this.onCameraUpdatedByDevice);\n this.view.callbacks.on(\"onCameraUpdated\", this.onCameraUpdated);\n this.view.callbacks.on(\"onSizeUpdated\", this.onSizeUpdated);\n }\n\n private removeCameraListener() {\n this.view.callbacks.off(\"onCameraUpdatedByDevice\", this.onCameraUpdatedByDevice);\n this.view.callbacks.off(\"onCameraUpdated\", this.onCameraUpdated);\n this.view.callbacks.off(\"onSizeUpdated\", this.onSizeUpdated);\n }\n\n private _syncMainViewTimer = 0;\n private handleCameraOrSizeUpdated = () => {\n callbacks.emit(\"cameraStateChange\", this.cameraState);\n // sdk >= 2.16.43 的 syncMainView() 可以写入当前 main view 的 camera, 以修复复制粘贴元素的位置\n // 注意到这个操作会发送信令,应当避免频繁调用\n if (this.manager.room && (this.manager.room as any).syncMainView) {\n clearTimeout(this._syncMainViewTimer);\n this._syncMainViewTimer = setTimeout(this.syncMainView, 100, this.manager.room);\n }\n this.ensureMainViewSize();\n };\n\n private onCameraUpdated = (camera: Camera) => {\n this.cameraUpdatedLocalConsole.log(JSON.stringify(camera));\n this.handleCameraOrSizeUpdated();\n };\n\n private onSizeUpdated = (size: Size) => {\n this.sizeUpdatedLocalConsole.log(JSON.stringify(size));\n this.handleCameraOrSizeUpdated();\n };\n\n private ensureMainViewSize() {\n if (\n (!this.mainViewSize ||\n this.mainViewSize.width === 0 ||\n this.mainViewSize.height === 0) &&\n this.mainView.size.width > 0 &&\n this.mainView.size.height > 0\n ) {\n this.setMainViewSize(this.mainView.size);\n }\n }\n\n private syncMainView = (room: Room) => {\n if (room.isWritable) {\n room.syncMainView(this.mainView);\n }\n };\n\n public moveCameraToContian(size: Size): void {\n if (!isEmpty(size)) {\n this.view.moveCameraToContain({\n width: size.width,\n height: size.height,\n originX: -size.width / 2,\n originY: -size.height / 2,\n animationMode: AnimationMode.Immediately,\n });\n this.scale = this.view.camera.scale;\n }\n }\n\n public moveCamera(camera: Camera): void {\n if (!isEmpty(camera)) {\n if (isEqual(camera, this.view.camera)) return;\n const { centerX, centerY, scale } = camera;\n const needScale = scale * (this.scale || 1);\n this.view.moveCamera({\n centerX: centerX,\n centerY: centerY,\n scale: needScale,\n animationMode: AnimationMode.Immediately,\n });\n }\n }\n\n public stop() {\n this.removeCameraListener();\n this.manager.refresher.remove(Fields.MainViewCamera);\n this.manager.refresher.remove(Fields.MainViewSize);\n this.started = false;\n }\n\n public setViewMode = (mode: ViewMode) => {\n this.viewMode = mode;\n };\n\n public destroy() {\n console.log(\"[window-manager] destroy \");\n if (this.wrapperRectWorkaroundFrame) {\n cancelAnimationFrame(this.wrapperRectWorkaroundFrame);\n this.wrapperRectWorkaroundFrame = 0;\n }\n this.playgroundSizeChangeListenerLocalConsole.destroy();\n this.sizeUpdatedLocalConsole.destroy();\n this.cameraUpdatedLocalConsole.destroy();\n this.cameraReactionLocalConsole.destroy();\n this.removeMainViewListener();\n this.stop();\n this.sideEffectManager.flushAll();\n }\n}\n","import { callbacks } from \"./callback\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport type { View } from \"white-web-sdk\";\nimport type { AppProxy } from \"./App\";\n\nexport type RedoUndoContext = {\n mainView: () => View;\n focus: () => string | undefined;\n getAppProxy: (id: string) => AppProxy | undefined;\n};\n\nexport class RedoUndo {\n constructor(private context: RedoUndoContext) {\n internalEmitter.on(\"focusedChange\", changed => {\n this.disposePrevFocusViewRedoUndoListeners(changed.prev);\n setTimeout(() => {\n this.addRedoUndoListeners(changed.focused);\n }, 0);\n });\n internalEmitter.on(\"rootDirRemoved\", () => {\n this.disposePrevFocusViewRedoUndoListeners(context.focus());\n this.addRedoUndoListeners(context.focus());\n });\n this.addRedoUndoListeners(context.focus());\n }\n\n private addRedoUndoListeners = (focused: string | undefined) => {\n if (focused === undefined) {\n this.addViewCallbacks(\n this.context.mainView(),\n this.onCanRedoStepsUpdate,\n this.onCanUndoStepsUpdate\n );\n } else {\n const focusApp = this.context.getAppProxy(focused);\n if (focusApp && focusApp.view) {\n this.addViewCallbacks(\n focusApp.view,\n this.onCanRedoStepsUpdate,\n this.onCanUndoStepsUpdate\n );\n }\n }\n };\n\n private addViewCallbacks = (\n view: View,\n redoListener: (steps: number) => void,\n undoListener: (steps: number) => void\n ) => {\n redoListener(view.canRedoSteps);\n undoListener(view.canUndoSteps);\n view.callbacks.on(\"onCanRedoStepsUpdate\", redoListener);\n view.callbacks.on(\"onCanUndoStepsUpdate\", undoListener);\n };\n\n private disposeViewCallbacks = (view: View) => {\n view.callbacks.off(\"onCanRedoStepsUpdate\", this.onCanRedoStepsUpdate);\n view.callbacks.off(\"onCanUndoStepsUpdate\", this.onCanUndoStepsUpdate);\n };\n\n private onCanRedoStepsUpdate = (steps: number) => {\n callbacks.emit(\"canRedoStepsChange\", steps);\n };\n\n private onCanUndoStepsUpdate = (steps: number) => {\n callbacks.emit(\"canUndoStepsChange\", steps);\n };\n\n private disposePrevFocusViewRedoUndoListeners = (prevFocused: string | undefined) => {\n let view: View | undefined = undefined;\n if (prevFocused === undefined) {\n view = this.context.mainView();\n } else {\n const appProxy = this.context.getAppProxy(prevFocused);\n if (appProxy && appProxy.view) {\n view = appProxy.view;\n }\n }\n if (view) {\n this.disposeViewCallbacks(view);\n }\n };\n\n public destroy() {\n this.disposePrevFocusViewRedoUndoListeners(this.context.focus());\n }\n}\n","import { AppAttributes, AppStatus, Events, INIT_DIR, MagixEventName, ROOT_DIR } from \"./constants\";\nimport { AppCreateQueue } from \"./Utils/AppCreateQueue\";\nimport { AppListeners } from \"./AppListener\";\nimport { AppProxy } from \"./App\";\nimport { appRegister } from \"./Register\";\nimport { autorun, isPlayer, isRoom, ScenePathType, UpdateEventKind } from \"white-web-sdk\";\nimport { boxEmitter } from \"./BoxEmitter\";\nimport { calculateNextIndex } from \"./Page\";\nimport { callbacks } from \"./callback\";\nimport { debounce, get, isInteger, orderBy } from \"lodash\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { createAttributesDelegate, Fields } from \"./AttributesDelegate\";\nimport type { AttributesDelegate } from \"./AttributesDelegate\";\nimport { log } from \"./Utils/log\";\nimport { MainViewProxy } from \"./View/MainView\";\nimport { safeListenPropsUpdated } from \"./Utils/Reactive\";\nimport { reconnectRefresher, WindowManager } from \"./index\";\nimport { RedoUndo } from \"./RedoUndo\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { ViewManager } from \"./View/ViewManager\";\nimport type { SyncRegisterAppPayload } from \"./Register\";\nimport type { RemoveSceneParams } from \"./InternalEmitter\";\nimport {\n entireScenes,\n genAppId,\n isRootDirPage,\n makeValidScenePath,\n parseSceneDir,\n removeScenes,\n setScenePath,\n setViewFocusScenePath,\n} from \"./Utils/Common\";\nimport type { ReconnectRefresher } from \"./ReconnectRefresher\";\nimport type { BoxManager } from \"./BoxManager\";\nimport type {\n Displayer,\n Room,\n ScenesCallbacksNode,\n SceneState,\n RoomState,\n MemberState,\n} from \"white-web-sdk\";\nimport type { AddAppParams, BaseInsertParams, TeleBoxRect } from \"./index\";\nimport type {\n BoxBlurredPayload,\n BoxClosePayload,\n BoxFocusPayload,\n BoxMovePayload,\n BoxResizePayload,\n BoxStateChangePayload,\n} from \"./BoxEmitter\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { TeleBoxState } from \"@netless/telebox-insider\";\n\nexport class AppManager {\n static readonly kind = \"AppManager\";\n public displayer: Displayer;\n public viewManager: ViewManager;\n public appProxies: Map<string, AppProxy> = new Map();\n public appStatus: Map<string, AppStatus> = new Map();\n public store!: AttributesDelegate;\n public mainViewProxy: MainViewProxy;\n public refresher: ReconnectRefresher;\n public isReplay = this.windowManger.isReplay;\n public mainViewScenesLength = 0;\n\n private appListeners: AppListeners;\n public boxManager?: BoxManager;\n\n private _prevSceneIndex: number | undefined;\n private _prevFocused: string | undefined;\n private callbacksNode: ScenesCallbacksNode | null = null;\n private appCreateQueue = new AppCreateQueue();\n\n private _focusAppCreatedResolve?: (appProxy?: AppProxy) => void;\n private _focusAppId: string | undefined;\n private _resolveTimer: number | undefined;\n\n private sideEffectManager = new SideEffectManager();\n\n public sceneState: SceneState | null = null;\n\n public rootDirRemoving = false;\n\n private _useBoxesStatus = false;\n\n public get useBoxesStatus() {\n return this._useBoxesStatus;\n }\n\n public set useBoxesStatus(value: boolean) {\n this._useBoxesStatus = value;\n }\n\n constructor(public windowManger: WindowManager) {\n this.displayer = windowManger.displayer;\n this.store = createAttributesDelegate(WindowManager.extendClass, {\n getAttributes: () => this.attributes,\n safeSetAttributes: attributes => this.safeSetAttributes(attributes),\n safeUpdateAttributes: (keys, val) => this.safeUpdateAttributes(keys, val),\n });\n\n this.mainViewProxy = new MainViewProxy(this);\n this.viewManager = new ViewManager(this.displayer);\n this.appListeners = new AppListeners(this);\n this.displayer.callbacks.on(this.eventName, this.displayerStateListener);\n this.appListeners.addListeners();\n\n this.refresher = reconnectRefresher;\n this.refresher.setRoom(this.room);\n this.refresher.setContext({ emitter: internalEmitter });\n\n this.sideEffectManager.addDisposer(() => {\n this.appCreateQueue.destroy();\n this.mainViewProxy.destroy();\n this.refresher.destroy();\n this.viewManager.destroy();\n this.boxManager?.destroy();\n this.callbacksNode?.dispose();\n });\n\n internalEmitter.once(\"onCreated\").then(() => this.onCreated());\n internalEmitter.on(\"onReconnected\", () => this.onReconnected());\n\n if (isPlayer(this.displayer)) {\n internalEmitter.on(\"seekStart\", this.onPlayerSeekStart);\n internalEmitter.on(\"seek\", this.onPlayerSeekDone);\n }\n\n internalEmitter.on(\"removeScenes\", this.onRemoveScenes);\n internalEmitter.on(\"setReadonly\", this.onReadonlyChanged);\n\n this.createRootDirScenesCallback();\n\n appRegister.setSyncRegisterApp(payload => {\n this.safeUpdateAttributes([Fields.Registered, payload.kind], payload);\n });\n }\n\n public getMemberState(): MemberState {\n return this.room?.state.memberState || ({ strokeColor: [0, 0, 0] } as MemberState);\n }\n\n private onRemoveScenes = async (params: RemoveSceneParams) => {\n const { scenePath } = params;\n // 如果移除根目录就把 scenePath 设置为初始值\n if (scenePath === ROOT_DIR) {\n console.log(\"[window-manager] onRemoveScenes ROOT_DIR\");\n await this.onRootDirRemoved();\n this.dispatchInternalEvent(Events.RootDirRemoved);\n return;\n }\n if (isRootDirPage(scenePath)) {\n let nextIndex = this.mainView.focusSceneIndex || 0;\n let sceneName = this.callbacksNode?.scenes[nextIndex];\n if (!sceneName) {\n nextIndex = 0;\n sceneName = this.callbacksNode?.scenes[nextIndex];\n }\n if (sceneName) {\n console.log(\n `[window-manager] onRemoveScenes setMainViewScenePath ${ROOT_DIR}${sceneName}`\n );\n this.setMainViewScenePath(`${ROOT_DIR}${sceneName}`);\n }\n await this.setMainViewSceneIndex(nextIndex);\n } else {\n this.appProxies.forEach(app => {\n app.onRemoveScene(scenePath);\n });\n }\n };\n\n /**\n * 根目录被删除时所有的 scene 都会被删除.\n * 所以需要关掉所有开启了 view 的 app\n */\n public async onRootDirRemoved(needClose = true) {\n this.setMainViewScenePath(INIT_DIR);\n this.createRootDirScenesCallback();\n\n for (const [id, appProxy] of this.appProxies.entries()) {\n if (appProxy.view) {\n await this.closeApp(id, needClose);\n }\n }\n // 删除了根目录的 scenes 之后 mainview 需要重新绑定, 否则主白板会不能渲染\n this.mainViewProxy.rebind();\n internalEmitter.emit(\"rootDirRemoved\");\n this.updateRootDirRemoving(false);\n }\n\n private onReadonlyChanged = () => {\n this.appProxies.forEach(appProxy => {\n appProxy.emitAppIsWritableChange();\n });\n };\n\n private onPlayerSeekStart = async () => {\n await this.closeAll();\n };\n\n private onPlayerSeekDone = async (time: number) => {\n await this._attributesUpdateCallback(this.attributes.apps);\n this.appProxies.forEach(appProxy => {\n appProxy.onSeek(time);\n });\n };\n\n public createRootDirScenesCallback = () => {\n let isRecreate = false;\n if (this.callbacksNode) {\n this.callbacksNode.dispose();\n isRecreate = true;\n }\n this.callbacksNode = this.displayer.createScenesCallback(ROOT_DIR, {\n onAddScene: this.onSceneChange,\n onRemoveScene: async (node, name) => {\n await this.onSceneChange(node);\n internalEmitter.emit(\"rootDirSceneRemoved\", name);\n },\n });\n if (this.callbacksNode) {\n this.updateSceneState(this.callbacksNode);\n this.mainViewScenesLength = this.callbacksNode.scenes.length;\n if (isRecreate) {\n this.emitMainViewScenesChange(this.callbacksNode.scenes.length);\n }\n }\n };\n\n public removeSceneByIndex = async (index: number) => {\n const nextIndex = calculateNextIndex(index, this.windowManger.pageState);\n this.setSceneIndexWithoutSync(nextIndex);\n this.dispatchInternalEvent(Events.SetAppFocusIndex, { type: \"main\", index: nextIndex });\n const scene = this.callbacksNode?.scenes[index];\n setTimeout(() => {\n if (scene) {\n removeScenes(this.room, `${ROOT_DIR}${scene}`, index);\n }\n }, 100);\n return new Promise<boolean>((resolve, reject) => {\n internalEmitter\n .once(\"rootDirSceneRemoved\")\n .then(name => {\n if (name === scene) {\n resolve(true);\n }\n })\n .catch(e => {\n console.log(`[WindowManager]: removePage error: ${e}`);\n reject(false);\n });\n });\n };\n\n public setSceneIndexWithoutSync = (index: number) => {\n const sceneName = this.callbacksNode?.scenes[index];\n if (sceneName) {\n this.mainViewProxy.setFocusScenePath(`${ROOT_DIR}${sceneName}`);\n }\n };\n\n private onSceneChange = (node: ScenesCallbacksNode) => {\n this.mainViewScenesLength = node.scenes.length;\n this.updateSceneState(node);\n return this.emitMainViewScenesChange(this.mainViewScenesLength);\n };\n\n private emitMainViewScenesChange = (length: number) => {\n return Promise.all([\n callbacks.emit(\"mainViewScenesLengthChange\", length),\n internalEmitter.emit(\"changePageState\"),\n ]);\n };\n\n private updateSceneState = (node: ScenesCallbacksNode) => {\n const currentIndex = this.store.getMainViewSceneIndex() || 0;\n let sceneName = node.scenes[currentIndex];\n if (!sceneName) {\n sceneName = node.scenes[this.mainView.focusSceneIndex || 0];\n }\n this.sceneState = {\n scenePath: `${ROOT_DIR}${sceneName}`,\n contextPath: node.path,\n index: currentIndex,\n scenes: node.scenes.map(scene => {\n return {\n name: scene,\n };\n }),\n sceneName: sceneName,\n };\n callbacks.emit(\"sceneStateChange\", this.sceneState);\n };\n\n private get eventName() {\n return isRoom(this.displayer) ? \"onRoomStateChanged\" : \"onPlayerStateChanged\";\n }\n\n public get attributes() {\n return this.windowManger.attributes;\n }\n\n public get canOperate() {\n return this.windowManger.canOperate;\n }\n\n public get room() {\n return isRoom(this.displayer) ? (this.displayer as Room) : undefined;\n }\n\n public get mainView() {\n return this.mainViewProxy.view;\n }\n\n public get polling() {\n return this.mainViewProxy.polling;\n }\n\n public set polling(b: boolean) {\n this.mainViewProxy.polling = b;\n }\n\n public get focusApp() {\n if (this.store.focus) {\n return this.appProxies.get(this.store.focus);\n }\n }\n\n public get uid() {\n return this.room?.uid || \"\";\n }\n\n public get Logger() {\n return this.windowManger.Logger;\n }\n\n public getMainViewSceneDir() {\n const scenePath = this.store.getMainViewScenePath();\n if (scenePath) {\n return parseSceneDir(scenePath);\n } else {\n throw new Error(\"[WindowManager]: mainViewSceneDir not found\");\n }\n }\n\n private async onCreated() {\n if (Object.keys(this.attributes.apps).length && this.store.focus) {\n this._focusAppId = this.store.focus;\n await new Promise<AppProxy | undefined>(resolve => {\n this._focusAppCreatedResolve = resolve;\n this._resolveTimer = setTimeout(() => {\n resolve(this.appProxies.get(this._focusAppId || \"\"));\n }, 500);\n }).then(() => {\n this._resolveTimer = undefined;\n this._focusAppCreatedResolve = undefined;\n this.focusByAttributes(this.attributes.apps);\n });\n }\n await this._attributesUpdateCallback(this.attributes.apps);\n internalEmitter.emit(\"updateManagerRect\");\n boxEmitter.on(\"move\", this.onBoxMove);\n boxEmitter.on(\"resize\", this.onBoxResize);\n boxEmitter.on(\"focus\", this.onBoxFocus);\n boxEmitter.on(\"close\", this.onBoxClose);\n boxEmitter.on(\"boxStateChange\", this.onBoxStateChange);\n boxEmitter.on(\"blurred\", this.onBoxBlurred);\n\n this.addAppsChangeListener();\n this.addAppCloseListener();\n this.addBoxesStatusChangeListener();\n this.refresher.add(\"maximized\", () => {\n return autorun(() => {\n const maximized = this.attributes.maximized;\n this.boxManager?.setMaximized(Boolean(maximized));\n });\n });\n this.refresher.add(\"minimized\", () => {\n return autorun(() => {\n const minimized = this.attributes.minimized;\n this.onMinimized(minimized);\n });\n });\n this.refresher.add(\"mainViewIndex\", () => {\n return autorun(() => {\n const mainSceneIndex = get(this.attributes, \"_mainSceneIndex\");\n this.onMainViewIndexChange(mainSceneIndex);\n });\n });\n this.refresher.add(\"focusedChange\", () => {\n return autorun(() => {\n const focused = get(this.attributes, \"focus\");\n this.onFocusChange(focused);\n });\n });\n this.refresher.add(\"registeredChange\", () => {\n return autorun(() => {\n const registered = get(this.attributes, Fields.Registered);\n this.onRegisteredChange(registered);\n });\n });\n if (!this.attributes.apps || Object.keys(this.attributes.apps).length === 0) {\n const mainScenePath = this.store.getMainViewScenePath();\n if (!mainScenePath) return;\n this.resetScenePath(mainScenePath);\n }\n this.displayerWritableListener(!this.room?.isWritable);\n this.displayer.callbacks.on(\"onEnableWriteNowChanged\", this.displayerWritableListener);\n this.focusByAttributes(this.attributes.apps);\n this._prevFocused = this.attributes.focus;\n\n if (!WindowManager.supportAppliancePlugin) {\n this.sideEffectManager.add(() => {\n const redoUndo = new RedoUndo({\n mainView: () => this.mainViewProxy.view,\n focus: () => this.attributes.focus,\n getAppProxy: id => this.appProxies.get(id),\n });\n return () => redoUndo.destroy();\n });\n }\n }\n\n private onBoxMove = (payload: BoxMovePayload) => {\n this.dispatchInternalEvent(Events.AppMove, payload);\n this.store.updateAppState(payload.appId, AppAttributes.Position, {\n x: payload.x,\n y: payload.y,\n });\n callbacks.emit(\"onBoxMove\", payload);\n };\n\n private onBoxResize = (payload: BoxResizePayload) => {\n if (payload.width && payload.height) {\n this.dispatchInternalEvent(Events.AppResize, payload);\n this.store.updateAppState(payload.appId, AppAttributes.Size, {\n width: payload.width,\n height: payload.height,\n });\n callbacks.emit(\"onBoxResize\", payload);\n }\n };\n\n private onBoxFocus = (payload: BoxFocusPayload) => {\n this.windowManger.safeSetAttributes({ focus: payload.appId });\n callbacks.emit(\"onBoxFocus\", payload);\n };\n\n private onBoxBlurred = (payload: BoxBlurredPayload) => {\n const focus = this.attributes.focus;\n if (focus === payload.appId) {\n this.windowManger.safeSetAttributes({ focus: undefined });\n callbacks.emit(\"onBoxBlurred\", payload);\n }\n };\n\n private onBoxClose = (payload: BoxClosePayload) => {\n const appProxy = this.appProxies.get(payload.appId);\n if (appProxy) {\n appProxy.destroy(false, true, true, payload.error);\n }\n callbacks.emit(\"onBoxClose\", payload);\n };\n\n private onBoxStateChange = (payload: BoxStateChangePayload) => {\n this.dispatchInternalEvent(Events.AppBoxStateChange, payload);\n callbacks.emit(\"onBoxStateChange\", payload);\n };\n\n private notifyBoxesStatusChange = debounce(() => {\n this.boxManager?.setBoxesStatus(this.attributes.boxesStatus);\n const entries = Object.entries(this.attributes.boxesStatus);\n if (entries.length > 0) {\n entries.forEach(([appId, status]) => {\n const appProxy = this.appProxies.get(appId);\n if (appProxy) {\n appProxy.notifyBoxStatusChange(status as TeleBoxState);\n }\n });\n }\n }, 100);\n\n public addBoxesStatusChangeListener = () => {\n this.refresher.add(\"boxesStatus\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.boxesStatus,\n () => {\n this.notifyBoxesStatusChange();\n }\n );\n });\n this.refresher.add(\"lastNotMinimizedBoxesStatus\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.lastNotMinimizedBoxesStatus,\n () => {\n this.boxManager?.setLastNotMinimizedBoxesStatus(\n this.attributes.lastNotMinimizedBoxesStatus\n );\n }\n );\n });\n };\n public addAppsChangeListener = () => {\n this.refresher.add(\"apps\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.apps,\n () => {\n this.attributesUpdateCallback(this.attributes.apps);\n }\n );\n });\n };\n\n public addAppCloseListener = () => {\n // this.refresher.add(\"appsClose\", () => {\n // return onObjectRemoved(this.attributes.apps, () => {\n // this.onAppDelete(this.attributes.apps);\n // });\n // });\n this.refresher.add(\"appsClose\", () => {\n return safeListenPropsUpdated(\n () => this.attributes.apps,\n events => {\n if (events.some(e => e.kind === UpdateEventKind.Removed)) {\n this.onAppDelete(this.attributes.apps);\n }\n }\n );\n });\n };\n\n private onMainViewIndexChange = (index: number) => {\n if (index !== undefined && this._prevSceneIndex !== index) {\n callbacks.emit(\"mainViewSceneIndexChange\", index);\n internalEmitter.emit(\"changePageState\");\n if (this.callbacksNode) {\n this.updateSceneState(this.callbacksNode);\n }\n this._prevSceneIndex = index;\n }\n };\n\n private onFocusChange = (focused: string | undefined) => {\n if (this._prevFocused !== focused) {\n callbacks.emit(\"focusedChange\", focused);\n internalEmitter.emit(\"focusedChange\", { focused, prev: this._prevFocused });\n this._prevFocused = focused;\n if (focused !== undefined) {\n this.boxManager?.focusBox({ appId: focused });\n // 确保 focus 修改的时候, appProxy 已经创建\n setTimeout(() => {\n const appProxy = this.appProxies.get(focused);\n if (appProxy) {\n appRegister.notifyApp(appProxy.kind, \"focus\", { appId: focused });\n }\n }, 0);\n }\n }\n };\n\n public attributesUpdateCallback = debounce(\n (apps: any) => this._attributesUpdateCallback(apps),\n 100\n );\n\n private _appIds: string[] = [];\n public notifyAppsChange(appIds: string[]): void {\n if (\n this._appIds.length !== appIds.length ||\n !this._appIds.every(id => appIds.includes(id))\n ) {\n this._appIds = appIds;\n callbacks.emit(\"appsChange\", appIds);\n }\n }\n\n /**\n * 插件更新 attributes 时的回调\n *\n * @param {*} attributes\n * @memberof WindowManager\n */\n public async _attributesUpdateCallback(apps: any) {\n if (apps && WindowManager.container) {\n const appIds = Object.keys(apps);\n if (appIds.length === 0) {\n this.appCreateQueue.emitReady();\n }\n const appsWithCreatedAt = orderBy(\n appIds.map(appId => {\n return {\n id: appId,\n createdAt: apps[appId].createdAt,\n };\n }),\n \"createdAt\",\n \"asc\"\n );\n const orderedAppIds = appsWithCreatedAt.map(({ id }) => id);\n this.notifyAppsChange(orderedAppIds);\n for (const id of orderedAppIds) {\n if (!this.appProxies.has(id) && !this.appStatus.has(id)) {\n const app = apps[id];\n try {\n const appAttributes = this.attributes[id];\n if (!appAttributes) {\n this.Logger &&\n this.Logger.error(\n `[WindowManager]: appAttributes is undefined, appId: ${id}`\n );\n throw new Error(\"appAttributes is undefined\");\n }\n\n this.appCreateQueue.push<AppProxy>(async () => {\n this.appStatus.set(id, AppStatus.StartCreate);\n const appProxy = await this.baseInsertApp(\n {\n kind: app.kind,\n options: app.options,\n isDynamicPPT: app.isDynamicPPT,\n forceNormal: app.forceNormal,\n forceTop: app.forceTop,\n isDragContent: app.isDragContent,\n },\n id,\n false\n );\n if (\n appProxy &&\n this._focusAppId === id &&\n this._focusAppCreatedResolve\n ) {\n if (this._resolveTimer) {\n clearTimeout(this._resolveTimer);\n }\n this._focusAppCreatedResolve(appProxy);\n }\n return appProxy;\n });\n this.focusByAttributes(apps);\n } catch (error) {\n console.warn(`[WindowManager]: Insert App Error`, error);\n }\n }\n }\n }\n }\n\n private onRegisteredChange = (registered: Record<string, SyncRegisterAppPayload>) => {\n if (!registered) return;\n Object.entries(registered).forEach(([kind, payload]) => {\n if (!appRegister.appClasses.has(kind)) {\n appRegister.register({\n kind,\n src: payload.src,\n name: payload.name,\n });\n }\n });\n };\n\n private onMinimized = (minimized: boolean | undefined) => {\n if (this.boxManager?.minimized !== minimized) {\n if (minimized === true) {\n this.boxManager?.blurAllBox();\n }\n setTimeout(() => {\n this.boxManager?.setMinimized(Boolean(minimized));\n }, 0);\n }\n };\n\n public refresh() {\n this.attributesUpdateCallback(this.attributes.apps);\n }\n\n public setBoxManager(boxManager: BoxManager) {\n this.boxManager = boxManager;\n }\n\n public resetMaximized() {\n this.boxManager?.setMaximized(Boolean(this.store.getMaximized()));\n }\n\n public resetMinimized() {\n this.boxManager?.setMinimized(Boolean(this.store.getMinimized()));\n }\n\n private onAppDelete = async (apps: any) => {\n const ids = Object.keys(apps);\n for (const [id, appProxy] of this.appProxies.entries()) {\n if (!ids.includes(id)) {\n await appProxy.destroy(true, false, true);\n }\n }\n };\n\n private closeAll = async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const [_, appProxy] of this.appProxies.entries()) {\n await appProxy.destroy(true, false, true);\n }\n };\n\n public bindMainView(divElement: HTMLDivElement, disableCameraTransform: boolean) {\n const mainView = this.mainViewProxy.view;\n mainView.disableCameraTransform = disableCameraTransform;\n mainView.divElement = divElement;\n if (!mainView.focusScenePath) {\n this.setMainViewFocusPath();\n }\n internalEmitter.emit(\"mainViewMounted\");\n callbacks.emit(\"onMainViewMounted\", mainView);\n const hasRoot = this.hasRoot(mainView.divElement);\n const rect = this.getRectByDivElement(mainView.divElement);\n let log = `[window-manager] bindMainView hasRoot:${hasRoot}, rect:${JSON.stringify(\n rect\n )}, outerHeight:${window.outerHeight}, outerWidth:${window.outerWidth}`;\n const visualViewport = window.visualViewport;\n if (visualViewport) {\n log += `, visualViewportWidth:${visualViewport.width}, visualViewportHeight:${visualViewport.height}, visualViewportOffsetLeft:${visualViewport.offsetLeft}, visualViewportOffsetTop:${visualViewport.offsetTop}`;\n }\n console.log(log);\n }\n\n private hasRoot(divElement: HTMLDivElement) {\n let current = divElement;\n while (current) {\n if (current.parentElement === document.body) {\n return true;\n }\n current = current.parentElement as HTMLDivElement;\n }\n return false;\n }\n\n private getRectByDivElement(divElement: HTMLDivElement) {\n // 获取当前divElement的矩形区域\n const rect = divElement.getBoundingClientRect();\n return rect;\n }\n\n public setMainViewFocusPath(scenePath?: string) {\n const focusScenePath = scenePath || this.store.getMainViewScenePath();\n if (focusScenePath) {\n setViewFocusScenePath(this.mainView, focusScenePath);\n return this.mainView?.focusScenePath === focusScenePath;\n }\n }\n\n private resetScenePath(scenePath: string) {\n const sceneState = this.displayer.state.sceneState;\n if (sceneState.scenePath !== scenePath) {\n setScenePath(this.room, scenePath);\n }\n }\n\n public async addApp(params: AddAppParams, isDynamicPPT: boolean): Promise<string | undefined> {\n log(\"addApp\", params);\n this.windowManger.Logger?.info(\n `[WindowManager]: addApp ${params.kind}, isDynamicPPT: ${isDynamicPPT}`\n );\n const { appId, needFocus } = await this.beforeAddApp(params, isDynamicPPT);\n const appProxy = await this.baseInsertApp(params, appId, true, needFocus);\n this.afterAddApp(appProxy);\n return appProxy?.id;\n }\n\n private async beforeAddApp(params: AddAppParams, isDynamicPPT: boolean) {\n const appId = await genAppId(params.kind);\n this.appStatus.set(appId, AppStatus.StartCreate);\n const attrs = params.attributes ?? {};\n this.safeUpdateAttributes([appId], attrs);\n this.store.setupAppAttributes(params, appId, isDynamicPPT);\n const needFocus = !this.boxManager?.minimized;\n if (needFocus) {\n this.store.setAppFocus(appId, true);\n }\n return { appId, needFocus };\n }\n\n private afterAddApp(appProxy: AppProxy | undefined) {\n if (appProxy && appProxy.box) {\n const box = appProxy.box;\n boxEmitter.emit(\"move\", {\n appId: appProxy.id,\n x: box?.intrinsicX,\n y: box?.intrinsicY,\n });\n this.store.updateAppState(appProxy.id, AppAttributes.ZIndex, box.zIndex);\n }\n if (this.boxManager?.minimized) {\n this.boxManager?.setMinimized(false, false);\n }\n }\n\n public async closeApp(appId: string, needClose = true) {\n const appProxy = this.appProxies.get(appId);\n if (appProxy) {\n await appProxy.destroy(true, needClose, false);\n }\n }\n\n private async baseInsertApp(\n params: BaseInsertParams,\n appId: string,\n isAddApp: boolean,\n focus?: boolean\n ) {\n if (this.appProxies.has(appId)) {\n this.windowManger.Logger?.warn(\n `[WindowManager]: app duplicate exists and cannot be created again, appId: ${appId}`\n );\n return;\n }\n const AppProxyClass = getExtendClass(AppProxy, WindowManager.extendClass);\n const appProxy = new AppProxyClass(params, this, appId, isAddApp);\n if (appProxy) {\n await appProxy.baseInsertApp(focus);\n this.appStatus.delete(appId);\n return appProxy;\n } else {\n this.appStatus.delete(appId);\n this.Logger &&\n this.Logger.error(`[WindowManager]: initialize AppProxy failed, appId: ${appId}`);\n throw new Error(\"[WindowManger]: initialize AppProxy failed\");\n }\n }\n\n private displayerStateListener = (state: Partial<RoomState>) => {\n this.appProxies.forEach(appProxy => {\n appProxy.appEmitter.emit(\"roomStateChange\", state);\n });\n internalEmitter.emit(\"observerIdChange\", this.displayer.observerId);\n };\n\n public displayerWritableListener = (isReadonly: boolean) => {\n const isWritable = !isReadonly;\n const isManualWritable =\n this.windowManger.readonly === undefined || this.windowManger.readonly === false;\n if (this.windowManger.readonly === undefined) {\n this.boxManager?.setReadonly(isReadonly);\n } else {\n this.boxManager?.setReadonly(!(isWritable && isManualWritable));\n }\n this.appProxies.forEach(appProxy => {\n appProxy.emitAppIsWritableChange();\n });\n internalEmitter.emit(\"writableChange\", isWritable);\n };\n\n public safeSetAttributes(attributes: any) {\n this.windowManger.safeSetAttributes(attributes);\n }\n\n public safeUpdateAttributes(keys: string[], value: any) {\n this.windowManger.safeUpdateAttributes(keys, value);\n }\n\n public async setMainViewScenePath(scenePath: string) {\n if (this.room) {\n const scenePathType = this.displayer.scenePathType(scenePath);\n const sceneDir = parseSceneDir(scenePath);\n if (sceneDir !== ROOT_DIR) {\n this.Logger &&\n this.Logger.error(`[WindowManager]: main view scenePath must in root dir \"/\"`);\n throw new Error(`[WindowManager]: main view scenePath must in root dir \"/\"`);\n }\n if (scenePathType === ScenePathType.None) {\n this.Logger && this.Logger.error(`[WindowManager]: ${scenePath} not valid scene`);\n throw new Error(`[WindowManager]: ${scenePath} not valid scene`);\n } else if (scenePathType === ScenePathType.Page) {\n await this._setMainViewScenePath(scenePath);\n } else if (scenePathType === ScenePathType.Dir) {\n const validScenePath = makeValidScenePath(this.displayer, scenePath);\n if (validScenePath) {\n await this._setMainViewScenePath(validScenePath);\n }\n }\n }\n }\n\n private async _setMainViewScenePath(scenePath: string) {\n const success = this.setMainViewFocusPath(scenePath);\n if (success) {\n this.safeSetAttributes({ _mainScenePath: scenePath });\n this.store.setMainViewFocusPath(this.mainView);\n this.updateSceneIndex();\n this.dispatchSetMainViewScenePath(scenePath);\n }\n }\n\n private updateSceneIndex = () => {\n const scenePath = this.store.getMainViewScenePath() as string;\n const sceneDir = parseSceneDir(scenePath);\n const scenes = entireScenes(this.displayer)[sceneDir];\n if (scenes.length) {\n // \"/ppt3/1\" -> \"1\"\n const pageName = scenePath.replace(sceneDir, \"\").replace(\"/\", \"\");\n const index = scenes.findIndex(scene => scene.name === pageName);\n if (isInteger(index) && index >= 0) {\n this.safeSetAttributes({ _mainSceneIndex: index });\n }\n }\n };\n\n public async setMainViewSceneIndex(index: number) {\n if (this.room) {\n if (this.store.getMainViewSceneIndex() === index) return;\n const sceneName = this.callbacksNode?.scenes[index];\n const scenePath = `${ROOT_DIR}${sceneName}`;\n if (sceneName) {\n const success = this.setMainViewFocusPath(scenePath);\n if (success) {\n this.store.setMainViewScenePath(scenePath);\n this.store.setMainViewSceneIndex(index);\n this.dispatchSetMainViewScenePath(scenePath);\n }\n } else {\n this.Logger && this.Logger.error(`[WindowManager]: ${index} not valid index`);\n throw new Error(`[WindowManager]: ${index} not valid index`);\n }\n }\n }\n\n private dispatchSetMainViewScenePath(scenePath: string): void {\n this.dispatchInternalEvent(Events.SetMainViewScenePath, { nextScenePath: scenePath });\n callbacks.emit(\"mainViewScenePathChange\", scenePath);\n // 兼容 15 的 SDK, 需要 room 的当前 ScenePath\n setScenePath(this.room, scenePath);\n }\n\n public getAppInitPath(appId: string): string | undefined {\n const attrs = this.store.getAppAttributes(appId);\n if (attrs) {\n return attrs?.options?.scenePath;\n }\n }\n\n public safeDispatchMagixEvent(event: string, payload: any) {\n if (this.canOperate) {\n (this.displayer as Room).dispatchMagixEvent(event, payload);\n }\n }\n\n public focusByAttributes(apps: any) {\n if (apps && Object.keys(apps).length === this.boxManager?.boxSize) {\n const focusAppId = this.store.focus;\n if (focusAppId) {\n this.boxManager.focusBox({ appId: focusAppId });\n }\n }\n }\n\n public async onReconnected() {\n await this._attributesUpdateCallback(this.attributes.apps);\n const appProxies = Array.from(this.appProxies.values());\n const reconnected = appProxies.map(appProxy => {\n return appProxy.onReconnected();\n });\n this.mainViewProxy.onReconnect();\n await Promise.all(reconnected);\n if (this.callbacksNode) {\n this.onSceneChange(this.callbacksNode);\n }\n }\n\n public notifyContainerRectUpdate(rect: TeleBoxRect) {\n this.appProxies.forEach(appProxy => {\n appProxy.appEmitter.emit(\"containerRectUpdate\", rect);\n });\n }\n\n public updateRootDirRemoving = (removing: boolean) => {\n this.rootDirRemoving = removing;\n };\n\n public dispatchInternalEvent(event: Events, payload?: any) {\n this.safeDispatchMagixEvent(MagixEventName, {\n eventName: event,\n payload: payload,\n });\n }\n\n public destroy() {\n this.displayer.callbacks.off(this.eventName, this.displayerStateListener);\n this.displayer.callbacks.off(\"onEnableWriteNowChanged\", this.displayerWritableListener);\n this.appListeners.removeListeners();\n boxEmitter.clearListeners();\n internalEmitter.clearListeners();\n if (this.appProxies.size) {\n this.appProxies.forEach(appProxy => {\n appProxy.destroy(true, false, true);\n });\n }\n callbacks.clearListeners();\n this.sideEffectManager.flushAll();\n this._prevFocused = undefined;\n this._prevSceneIndex = undefined;\n if (this._resolveTimer) {\n clearTimeout(this._resolveTimer);\n }\n this._focusAppCreatedResolve = undefined;\n this._resolveTimer = undefined;\n }\n}\n","import { ResizeObserver as ResizeObserverPolyfill } from \"@juggle/resize-observer\";\nimport { WindowManager } from \"./index\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport type { UnsubscribeFn } from \"emittery\";\nimport { LocalConsole } from \"./Utils/log\";\n\nconst ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n\nexport class ContainerResizeObserver {\n private containerResizeObserver?: ResizeObserver;\n private disposer?: UnsubscribeFn;\n\n private updateSizerLocalConsole = new LocalConsole(\"updateSizer\", 100);\n\n constructor(private emitter: EmitterType) {}\n\n public static create(\n container: HTMLElement,\n sizer: HTMLElement,\n wrapper: HTMLDivElement,\n emitter: EmitterType\n ) {\n const containerResizeObserver = new ContainerResizeObserver(emitter);\n containerResizeObserver.observePlaygroundSize(container, sizer, wrapper);\n return containerResizeObserver;\n }\n\n public observePlaygroundSize(\n container: HTMLElement,\n sizer: HTMLElement,\n wrapper: HTMLDivElement\n ) {\n this.updateSizer(\n container.getBoundingClientRect(),\n sizer,\n wrapper,\n \"observePlaygroundSize\"\n );\n\n this.containerResizeObserver = new ResizeObserver(entries => {\n const containerRect = entries[0]?.contentRect;\n if (containerRect) {\n this.updateSizer(containerRect, sizer, wrapper, \"containerResizeObserver\");\n this.emitter.emit(\"playgroundSizeChange\", containerRect);\n }\n });\n\n this.disposer = this.emitter.on(\"containerSizeRatioUpdate\", () => {\n const containerRect = container.getBoundingClientRect();\n this.updateSizer(containerRect, sizer, wrapper, \"containerSizeRatioUpdate\");\n this.emitter.emit(\"playgroundSizeChange\", containerRect);\n });\n\n this.containerResizeObserver.observe(container);\n }\n\n public updateSizer(\n { width, height }: DOMRectReadOnly,\n sizer: HTMLElement,\n wrapper: HTMLDivElement,\n origin?: string\n ) {\n if (width && height) {\n if (height / width > WindowManager.containerSizeRatio) {\n height = width * WindowManager.containerSizeRatio;\n sizer.classList.toggle(\"netless-window-manager-sizer-horizontal\", true);\n } else {\n width = height / WindowManager.containerSizeRatio;\n sizer.classList.toggle(\"netless-window-manager-sizer-horizontal\", false);\n }\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n const wrapperRect = wrapper.getBoundingClientRect();\n this.updateSizerLocalConsole.log(\n `from ${origin}, traget size: ${JSON.stringify({ width, height })}, wrapperRect: ${\n wrapperRect.width\n } ${wrapperRect.height}`\n );\n this.emitter.emit(\"wrapperRectChange\", {\n width: wrapperRect.width,\n height: wrapperRect.height,\n origin,\n });\n }\n }\n\n public disconnect() {\n this.updateSizerLocalConsole.destroy();\n this.containerResizeObserver?.disconnect();\n this.disposer?.();\n this.disposer = undefined;\n }\n}\n","import type { AppManager } from \"./AppManager\";\nimport type { PageState } from \"./Page\";\n\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { callbacks } from \"./callback\";\n\nexport class PageStateImpl {\n constructor(private manager: AppManager) {\n internalEmitter.on(\"changePageState\", () => {\n callbacks.emit(\"pageStateChange\", this.toObject());\n });\n }\n\n public get index(): number {\n return this.manager.store.getMainViewSceneIndex() || 0;\n }\n\n public get length(): number {\n return this.manager.mainViewScenesLength || 0;\n }\n\n public toObject(): PageState {\n const index = this.index >= this.length ? this.length - 1 : this.index;\n return {\n index,\n length: this.length,\n };\n }\n}\n","import { debounce, isFunction } from \"lodash\";\nimport { log } from \"./Utils/log\";\nimport { RoomPhase } from \"white-web-sdk\";\nimport type { Room } from \"white-web-sdk\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { EnsureReconnectEvent } from \"./constants\";\nimport { wait } from \"./Utils/Common\";\n\nexport type ReconnectRefresherContext = {\n emitter: EmitterType;\n};\n\n// 白板重连之后会刷新所有的对象,导致 listener 失效, 所以这里在重连之后重新对所有对象进行监听\nexport class ReconnectRefresher {\n private phase?: RoomPhase;\n private room: Room | undefined;\n private reactors: Map<string, any> = new Map();\n private disposers: Map<string, any> = new Map();\n\n constructor(private ctx: ReconnectRefresherContext) {}\n\n public setRoom(room: Room | undefined) {\n this.room = room;\n this.phase = room?.phase;\n if (room) {\n room.callbacks.off(\"onPhaseChanged\", this.onPhaseChanged);\n room.callbacks.on(\"onPhaseChanged\", this.onPhaseChanged);\n // 重连成功之后向服务发送一次消息, 确认当前的状态是最新的\n room.addMagixEventListener(\n EnsureReconnectEvent,\n payload => {\n if (payload.authorId === room.observerId) {\n this.onReconnected();\n }\n },\n { fireSelfEventAfterCommit: true }\n );\n }\n }\n\n public setContext(ctx: ReconnectRefresherContext) {\n this.ctx = ctx;\n }\n\n private onPhaseChanged = async (phase: RoomPhase) => {\n if (phase === RoomPhase.Reconnecting) {\n this.ctx.emitter.emit(\"startReconnect\");\n }\n if (phase === RoomPhase.Connected && this.phase === RoomPhase.Reconnecting) {\n if (this.room?.isWritable) {\n this.room?.dispatchMagixEvent(EnsureReconnectEvent, {});\n } else {\n await wait(500);\n this.onReconnected();\n }\n }\n this.phase = phase;\n };\n\n private onReconnected = debounce(() => {\n this._onReconnected();\n }, 1000);\n\n private _onReconnected = () => {\n log(\"onReconnected refresh reactors\");\n this.releaseDisposers();\n this.reactors.forEach((func, id) => {\n if (isFunction(func)) {\n this.disposers.set(id, func());\n }\n });\n this.ctx.emitter.emit(\"onReconnected\");\n };\n\n private releaseDisposers() {\n this.disposers.forEach(disposer => {\n if (isFunction(disposer)) {\n disposer();\n }\n });\n this.disposers.clear();\n }\n\n public refresh() {\n this._onReconnected();\n }\n\n public add(id: string, func: any) {\n const disposer = this.disposers.get(id);\n if (disposer && isFunction(disposer)) {\n disposer();\n }\n if (isFunction(func)) {\n this.reactors.set(id, func);\n this.disposers.set(id, func());\n }\n }\n\n public remove(id: string) {\n if (this.reactors.has(id)) {\n this.reactors.delete(id);\n }\n const disposer = this.disposers.get(id);\n if (disposer) {\n if (isFunction(disposer)) {\n disposer();\n }\n this.disposers.delete(id);\n }\n }\n\n public hasReactor(id: string) {\n return this.reactors.has(id);\n }\n\n public destroy() {\n this.room?.callbacks.off(\"onPhaseChanged\", this.onPhaseChanged);\n this.room?.removeMagixEventListener(EnsureReconnectEvent, this.onReconnected);\n this.releaseDisposers();\n }\n}\n","import { internalEmitter } from \"../InternalEmitter\";\nimport { isPlayer } from \"white-web-sdk\";\nimport type { WindowManager } from \"../index\";\nimport type { Camera, Room, Player, PlayerSeekingResult } from \"white-web-sdk\";\nimport { ROOT_DIR } from \"../constants\";\n\n// 修改多窗口状态下一些失效的方法实现到 manager 的 mainview 上, 降低迁移成本\nexport const replaceRoomFunction = (room: Room | Player, manager: WindowManager) => {\n if (isPlayer(room)) {\n const player = room as unknown as Player;\n delegateSeekToProgressTime(player);\n } else {\n room = room as unknown as Room;\n const descriptor = Object.getOwnPropertyDescriptor(room, \"disableCameraTransform\");\n if (descriptor) return;\n Object.defineProperty(room, \"disableCameraTransform\", {\n get() {\n return manager.mainView.disableCameraTransform;\n },\n set(disable: boolean) {\n manager.mainView.disableCameraTransform = disable;\n },\n });\n\n Object.defineProperty(room, \"canUndoSteps\", {\n get() {\n return manager.canUndoSteps;\n },\n });\n\n Object.defineProperty(room, \"canRedoSteps\", {\n get() {\n return manager.canRedoSteps;\n },\n });\n const _scalePptToFit = room.scalePptToFit;\n room.scalePptToFit = (...args) => {\n _scalePptToFit.call(room, ...args);\n if (manager.appManager?.mainViewProxy) {\n manager.appManager.mainViewProxy.setCameraAndSize();\n }\n };\n const _putScenes = room.putScenes;\n room.putScenes = (...args) => {\n const [path, scenes] = args;\n const currentScenePath = manager.mainView.focusScenePath;\n if (currentScenePath && path && scenes) {\n console.log(\"[window-manager] putScenes \" + JSON.stringify(args));\n for (const scene of scenes) {\n if (`${path}${scene.name}` === currentScenePath) {\n console.error(\n `[window-manager] putScenes: scene name can not be the same as the current scene path: ${currentScenePath}`\n );\n return;\n }\n }\n }\n return _putScenes.call(room, ...args);\n };\n room.moveCamera = (camera: Camera) => manager.moveCamera(camera);\n room.moveCameraToContain = (...args) => manager.moveCameraToContain(...args);\n room.convertToPointInWorld = (...args) => manager.mainView.convertToPointInWorld(...args);\n room.setCameraBound = (...args) => manager.mainView.setCameraBound(...args);\n room.scenePreview = (...args) => manager.mainView.scenePreview(...args);\n room.fillSceneSnapshot = (...args) => manager.mainView.fillSceneSnapshot(...args);\n room.generateScreenshot = (...args) => manager.mainView.generateScreenshot(...args);\n room.setMemberState = (...args) => manager.mainView.setMemberState(...args);\n room.redo = () => manager.redo();\n room.undo = () => manager.undo();\n room.cleanCurrentScene = () => manager.cleanCurrentScene();\n room.delete = () => manager.delete();\n room.copy = () => manager.copy();\n room.paste = () => manager.paste();\n room.duplicate = () => manager.duplicate();\n room.insertImage = (...args) => manager.insertImage(...args);\n room.completeImageUpload = (...args) => manager.completeImageUpload(...args);\n room.insertText = (...args) => manager.insertText(...args);\n room.lockImage = (...args) => manager.lockImage(...args);\n room.lockImages = (...args) => manager.lockImages(...args);\n\n delegateRemoveScenes(room, manager);\n }\n};\n\nconst delegateRemoveScenes = (room: Room, manager: WindowManager) => {\n const originRemoveScenes = room.removeScenes;\n room.removeScenes = (scenePath: string, index?: number) => {\n if (scenePath === ROOT_DIR) {\n manager.appManager?.updateRootDirRemoving(true);\n }\n const result = originRemoveScenes.call(room, scenePath);\n internalEmitter.emit(\"removeScenes\", { scenePath, index });\n return result;\n };\n};\n\nconst delegateSeekToProgressTime = (player: Player) => {\n const originSeek = player.seekToProgressTime;\n // eslint-disable-next-line no-inner-declarations\n async function newSeek(time: number): Promise<PlayerSeekingResult> {\n // seek 时需要先关闭所有的 app 防止内部使用的 mobx 出现错误\n await internalEmitter.emit(\"seekStart\");\n const seekResult = await originSeek.call(player, time);\n internalEmitter.emit(\"seek\", time);\n return seekResult;\n }\n player.seekToProgressTime = newSeek;\n};\n","import { WindowManager } from \"./index\";\nimport type { PresentationAppOptions } from \"@netless/app-presentation\";\n\nexport interface BuiltinAppOptions {\n Presentation?: PresentationAppOptions;\n}\n\nconst loadAppMediaPlayer = async () => {\n const mod = await import(\"@netless/app-media-player\");\n if (WindowManager.debug) {\n mod.setOptions({ verbose: true });\n }\n return (mod.default || mod) as any;\n};\n\nconst loadAppDocsViewer = async () => {\n const mod = await import(\"@netless/app-docs-viewer\");\n return (mod.default || mod) as any;\n};\n\nconst loadAppPresentation = async () => {\n const mod = await import(\"@netless/app-presentation\");\n return (mod.default || mod) as any;\n};\n\nexport const setupBuiltin = () => {\n WindowManager.register({\n kind: BuiltinApps.DocsViewer,\n src: loadAppDocsViewer,\n });\n WindowManager.register({\n kind: BuiltinApps.MediaPlayer,\n src: loadAppMediaPlayer,\n });\n WindowManager.register({\n kind: BuiltinApps.Presentation,\n src: loadAppPresentation,\n appOptions: {\n debounceSync: true,\n useScrollbar: true,\n },\n });\n};\n\nexport const BuiltinApps = {\n DocsViewer: \"DocsViewer\",\n MediaPlayer: \"MediaPlayer\",\n Presentation: \"Presentation\",\n};\n","import type { Displayer, DisplayerState, Room, RoomState } from \"white-web-sdk\";\nimport type { AppManager } from \"../AppManager\";\nimport type { WindowManager } from \"../index\";\n\nimport Emittery from \"emittery\";\nimport { PlayerPhase, AnimationMode, autorun } from \"white-web-sdk\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { debounce, noop } from \"lodash\";\nimport { log } from \"../Utils/log\";\n\n// Note: typo below should not be fixed.\nexport enum IframeEvents {\n Init = \"Init\",\n AttributesUpdate = \"AttributesUpdate\",\n SetAttributes = \"SetAttributes\",\n RegisterMagixEvent = \"RegisterMagixEvent\",\n RemoveMagixEvent = \"RemoveMagixEvent\",\n RemoveAllMagixEvent = \"RemoveAllMagixEvent\",\n RoomStateChanged = \"RoomStateChanged\",\n DispatchMagixEvent = \"DispatchMagixEvent\",\n ReciveMagixEvent = \"ReciveMagixEvent\",\n NextPage = \"NextPage\",\n PrevPage = \"PrevPage\",\n SDKCreate = \"SDKCreate\",\n OnCreate = \"OnCreate\",\n SetPage = \"SetPage\",\n GetAttributes = \"GetAttributes\",\n Ready = \"Ready\",\n Destory = \"Destory\",\n StartCreate = \"StartCreate\",\n WrapperDidUpdate = \"WrapperDidUpdate\",\n DispayIframe = \"DispayIframe\",\n HideIframe = \"HideIframe\",\n GetRootRect = \"GetRootRect\",\n ReplayRootRect = \"ReplayRootRect\",\n PageTo = \"PageTo\",\n}\n\nexport enum DomEvents {\n WrapperDidMount = \"WrapperDidMount\",\n IframeLoad = \"IframeLoad\",\n}\n\nexport type IframeBridgeAttributes = {\n readonly url: string;\n readonly width: number;\n readonly height: number;\n readonly displaySceneDir: string;\n readonly lastEvent?: { name: string; payload: any };\n readonly useClicker?: boolean;\n readonly useSelector?: boolean;\n};\n\nexport type IframeBridgeEvents = {\n created: undefined;\n [IframeEvents.Ready]: undefined;\n [IframeEvents.StartCreate]: undefined;\n [IframeEvents.OnCreate]: IframeBridge;\n [IframeEvents.Destory]: undefined;\n [IframeEvents.GetRootRect]: undefined;\n [IframeEvents.ReplayRootRect]: DOMRect;\n [DomEvents.WrapperDidMount]: undefined;\n [IframeEvents.WrapperDidUpdate]: undefined;\n [DomEvents.IframeLoad]: Event;\n [IframeEvents.HideIframe]: undefined;\n [IframeEvents.DispayIframe]: undefined;\n};\n\nexport type IframeSize = {\n readonly width: number;\n readonly height: number;\n};\n\ntype BaseOption = {\n readonly url: string;\n readonly width: number;\n readonly height: number;\n readonly displaySceneDir: string;\n};\n\nexport type InsertOptions = {\n readonly useClicker?: boolean;\n readonly useSelector?: boolean;\n} & BaseOption;\n\nexport type OnCreateInsertOption = {\n readonly displayer: Displayer;\n} & BaseOption;\n\nconst RefreshIDs = {\n Ready: IframeEvents.Ready,\n RootRect: IframeEvents.ReplayRootRect,\n Message: \"message\",\n ComputeStyle: \"computeStyle\",\n Load: \"load\",\n DisplayerState: \"displayerState\",\n Show: \"show\",\n Hide: \"hide\",\n};\n\nconst times = <T>(number: number, iteratee: (value: number) => T) => {\n return new Array(number).fill(0).map((_, index) => iteratee(index));\n};\n\n/**\n * {@link https://github.com/netless-io/netless-iframe-bridge @netless/iframe-bridge}\n */\nexport class IframeBridge {\n public static readonly kind = \"IframeBridge\";\n public static readonly hiddenClass = \"netless-iframe-brdige-hidden\";\n public static emitter: Emittery<IframeBridgeEvents> = new Emittery();\n private static displayer: Displayer | null = null;\n private static alreadyCreate = false;\n\n public displayer: Displayer;\n public iframe: HTMLIFrameElement;\n\n private readonly magixEventMap = new Map<string, any>();\n private cssList: string[] = [];\n private allowAppliances: string[] = [\"clicker\"];\n private bridgeDisposer: () => void = noop;\n private rootRect: DOMRect | null = null;\n\n private sideEffectManager = new SideEffectManager();\n\n constructor(readonly manager: WindowManager, readonly appManager: AppManager) {\n this.displayer = IframeBridge.displayer = appManager.displayer;\n\n this.iframe = this._createIframe();\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.ReplayRootRect, rect => {\n this.rootRect = rect;\n }),\n RefreshIDs.RootRect\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.HideIframe, () => {\n this.iframe.className = IframeBridge.hiddenClass;\n }),\n RefreshIDs.Hide\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.DispayIframe, () => {\n this.iframe.className = \"\";\n }),\n RefreshIDs.Show\n );\n\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(\"created\", () => {\n this.bridgeDisposer();\n this.bridgeDisposer = autorun(() => {\n const attributes = this.attributes;\n if (attributes.url) {\n const iframeSrc = this.iframe?.src;\n if (iframeSrc && iframeSrc !== attributes.url) {\n this.execListenIframe(attributes);\n }\n }\n if (attributes.displaySceneDir) {\n this.computedIframeDisplay(this.displayer.state, attributes);\n }\n if ((attributes.width || attributes.height) && this.iframe) {\n this.iframe.width = `${attributes.width}px`;\n this.iframe.height = `${attributes.height}px`;\n }\n this.postMessage({ kind: IframeEvents.AttributesUpdate, payload: attributes });\n });\n })\n );\n\n this.sideEffectManager.addDisposer(\n manager.emitter.on(\"cameraStateChange\", () => {\n this.computedStyle(this.displayer.state);\n })\n );\n\n IframeBridge.onCreate(this);\n }\n\n public static onCreate(plugin: IframeBridge): void {\n IframeBridge.emitter.emit(IframeEvents.StartCreate);\n IframeBridge.emitter.emit(IframeEvents.OnCreate, plugin);\n IframeBridge.emitter.emit(\"created\");\n }\n\n public insert(options: InsertOptions): this {\n const initAttributes: IframeBridgeAttributes = {\n url: options.url,\n width: options.width,\n height: options.height,\n displaySceneDir: options.displaySceneDir,\n useClicker: options.useClicker || false,\n useSelector: options.useSelector,\n };\n this.setAttributes(initAttributes);\n\n const wrapperDidMountListener = () => {\n this.getIframe();\n this.listenIframe(this.attributes);\n this.listenDisplayerState();\n IframeBridge.emitter.emit(IframeEvents.GetRootRect);\n };\n\n if (this.getIframe()) {\n wrapperDidMountListener();\n }\n // Code below will never be executed, just copying the old code...\n else {\n const didMount = this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(DomEvents.WrapperDidMount, () => {\n wrapperDidMountListener();\n this.sideEffectManager.flush(didMount);\n })\n );\n const didUpdate = this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.WrapperDidUpdate, () => {\n wrapperDidMountListener();\n this.sideEffectManager.flush(didUpdate);\n })\n );\n }\n if (this.attributes.useSelector) {\n this.allowAppliances.push(\"selector\");\n }\n\n this.computedStyle(this.displayer.state);\n this.listenDisplayerCallbacks();\n this.getComputedIframeStyle();\n this.sideEffectManager.addEventListener(\n window,\n \"message\",\n this.messageListener.bind(this),\n void 0,\n RefreshIDs.Message\n );\n\n IframeBridge.alreadyCreate = true;\n return this;\n }\n\n // 在某些安卓机型中会遇到 iframe 嵌套计算 bug,需要手动延迟触发一下重绘\n private getComputedIframeStyle(): void {\n this.sideEffectManager.setTimeout(\n () => {\n if (this.iframe) {\n getComputedStyle(this.iframe);\n }\n },\n 200,\n RefreshIDs.ComputeStyle\n );\n }\n\n public destroy() {\n this.sideEffectManager.flushAll();\n IframeBridge.emitter.emit(IframeEvents.Destory);\n IframeBridge.alreadyCreate = false;\n IframeBridge.emitter.clearListeners();\n }\n\n private getIframe(): HTMLIFrameElement {\n this.iframe || (this.iframe = this._createIframe());\n return this.iframe;\n }\n\n public setIframeSize(params: IframeSize): void {\n if (this.iframe) {\n this.iframe.width = `${params.width}px`;\n this.iframe.height = `${params.height}px`;\n this.setAttributes({ width: params.width, height: params.height });\n }\n }\n\n public get attributes(): Partial<IframeBridgeAttributes> {\n return this.appManager.store.getIframeBridge();\n }\n\n public setAttributes(data: Partial<IframeBridgeAttributes>): void {\n this.appManager.store.setIframeBridge(data);\n }\n\n private _createIframe() {\n const iframe = document.createElement(\"iframe\");\n iframe.id = \"IframeBridge\";\n iframe.className = IframeBridge.hiddenClass;\n if (this.appManager.mainView.divElement) {\n this.appManager.mainView.divElement.appendChild(iframe);\n }\n return iframe;\n }\n\n public scaleIframeToFit(animationMode: AnimationMode = AnimationMode.Immediately) {\n if (!this.inDisplaySceneDir) {\n return;\n }\n const { width = 1280, height = 720 } = this.attributes;\n const x = width ? -width / 2 : 0;\n const y = height ? -height / 2 : 0;\n\n this.manager.moveCameraToContain({\n originX: x,\n originY: y,\n width,\n height,\n animationMode,\n });\n }\n\n public get isReplay(): boolean {\n return this.manager.isReplay;\n }\n\n private handleSetPage(data: any): void {\n if (this.isReplay || !this.attributes.displaySceneDir) {\n return;\n }\n const page = data.payload;\n const room = this.displayer as Room;\n const scenes = room.entireScenes()[this.attributes.displaySceneDir];\n if (!scenes || scenes.length !== page) {\n const genScenes = times<{ name: string }>(page, (index: number) => ({\n name: String(index + 1),\n }));\n room.putScenes(this.attributes.displaySceneDir, genScenes);\n this.manager.setMainViewScenePath(this.attributes.displaySceneDir);\n }\n }\n\n private execListenIframe = debounce((options: Partial<IframeBridgeAttributes>) => {\n this.listenIframe(options);\n }, 50);\n\n private src_url_equal_anchor?: HTMLAnchorElement;\n private listenIframe(options: Partial<IframeBridgeAttributes>): void {\n const loadListener = (ev: Event) => {\n this.postMessage({\n kind: IframeEvents.Init,\n payload: {\n attributes: this.attributes,\n roomState: IframeBridge.displayer?.state,\n currentPage: this.currentPage,\n observerId: this.displayer.observerId,\n },\n });\n IframeBridge.emitter.emit(DomEvents.IframeLoad, ev);\n this.sideEffectManager.addDisposer(\n IframeBridge.emitter.on(IframeEvents.Ready, () => {\n this.postMessage(this.attributes.lastEvent?.payload);\n }),\n RefreshIDs.Ready\n );\n this.computedStyleAndIframeDisplay();\n // if ((this.displayer as Room).isWritable) {\n // this.manager.moveCamera({\n // scale: this.manager.camera.scale + 1e-6,\n // animationMode: AnimationMode.Immediately,\n // })\n // }\n };\n if (options.url && this.iframe.src !== options.url) {\n if (!this.src_url_equal_anchor) this.src_url_equal_anchor = document.createElement(\"a\");\n this.src_url_equal_anchor.href = options.url;\n if (this.src_url_equal_anchor.href !== this.iframe.src) {\n this.iframe.src = options.url;\n }\n }\n this.iframe.width = `${options.width}px`;\n this.iframe.height = `${options.height}px`;\n this.sideEffectManager.addEventListener(\n this.iframe,\n \"load\",\n loadListener,\n void 0,\n RefreshIDs.Load\n );\n }\n\n private onPhaseChangedListener = (phase: PlayerPhase) => {\n if (phase === PlayerPhase.Playing) {\n this.computedStyleAndIframeDisplay();\n }\n };\n\n private listenDisplayerState(): void {\n if (this.isReplay) {\n if ((this.displayer as any)._phase === PlayerPhase.Playing) {\n this.computedStyleAndIframeDisplay();\n }\n this.sideEffectManager.add(() => {\n this.displayer.callbacks.on(\"onPhaseChanged\", this.onPhaseChangedListener);\n return () =>\n this.displayer.callbacks.off(\"onPhaseChanged\", this.onPhaseChangedListener);\n }, RefreshIDs.DisplayerState);\n }\n this.computedStyleAndIframeDisplay();\n }\n\n private computedStyleAndIframeDisplay(): void {\n this.computedStyle(this.displayer.state);\n this.computedIframeDisplay(this.displayer.state, this.attributes);\n }\n\n private listenDisplayerCallbacks(): void {\n this.displayer.callbacks.on(this.callbackName as any, this.stateChangeListener);\n }\n\n private get callbackName(): string {\n return this.isReplay ? \"onPlayerStateChanged\" : \"onRoomStateChanged\";\n }\n\n private stateChangeListener = (state: RoomState) => {\n state = { ...state };\n state.cameraState = this.manager.cameraState;\n this.postMessage({ kind: IframeEvents.RoomStateChanged, payload: state });\n if (state.cameraState) {\n IframeBridge.emitter.emit(IframeEvents.GetRootRect);\n this.computedStyle(state);\n }\n if (state.memberState) {\n this.computedZindex();\n this.updateStyle();\n }\n if (state.sceneState) {\n this.computedIframeDisplay(state, this.attributes);\n }\n };\n\n private computedStyle(_state: DisplayerState): void {\n const cameraState = this.manager.cameraState;\n const setWidth = this.attributes.width || 1280;\n const setHeight = this.attributes.height || 720;\n if (this.iframe) {\n const { width, height, scale, centerX, centerY } = cameraState;\n const rootRect = this.rootRect || { x: 0, y: 0 };\n const transformOriginX = `${width / 2 + rootRect.x}px`;\n const transformOriginY = `${height / 2 + rootRect.y}px`;\n const transformOrigin = `transform-origin: ${transformOriginX} ${transformOriginY};`;\n const iframeXDiff = ((width - setWidth) / 2) * scale;\n const iframeYDiff = ((height - setHeight) / 2) * scale;\n const x = -(centerX * scale) + iframeXDiff;\n const y = -(centerY * scale) + iframeYDiff;\n const transform = `transform: translate(${x}px,${y}px) scale(${scale}, ${scale});`;\n const position = \"position: absolute;\";\n // 在某些安卓机型, border-width 不为 0 时,才能正确计算 iframe 里嵌套 iframe 的大小\n const borderWidth = \"border: 0.1px solid rgba(0,0,0,0);\";\n const left = `left: 0px;`;\n const top = `top: 0px;`;\n const cssList = [position, borderWidth, top, left, transformOrigin, transform];\n this.cssList = cssList;\n this.computedZindex();\n this.updateStyle();\n }\n }\n\n private computedIframeDisplay(\n _state: DisplayerState,\n _attributes: Partial<IframeBridgeAttributes>\n ): void {\n if (this.inDisplaySceneDir) {\n IframeBridge.emitter.emit(IframeEvents.DispayIframe);\n } else {\n IframeBridge.emitter.emit(IframeEvents.HideIframe);\n }\n }\n\n public computedZindex(): void {\n const zIndexString = \"z-index: -1;\";\n const index = this.cssList.findIndex(css => css === zIndexString);\n if (index !== -1) {\n this.cssList.splice(index, 1);\n }\n if (!this.isClicker() || this.isDisableInput) {\n this.cssList.push(zIndexString);\n }\n }\n\n private updateStyle(): void {\n this.iframe.style.cssText = this.cssList.join(\" \");\n }\n\n private get iframeOrigin(): string | undefined {\n if (this.iframe) {\n try {\n return new URL(this.iframe.src).origin;\n } catch (err) {\n console.warn(err);\n }\n }\n }\n\n private messageListener(event: MessageEvent): void {\n log(\"<<<\", JSON.stringify(event.data));\n if (event.origin !== this.iframeOrigin) {\n return;\n }\n const data = event.data;\n switch (data.kind) {\n case IframeEvents.SetAttributes: {\n this.handleSetAttributes(data);\n break;\n }\n case IframeEvents.RegisterMagixEvent: {\n this.handleRegisterMagixEvent(data);\n break;\n }\n case IframeEvents.RemoveMagixEvent: {\n this.handleRemoveMagixEvent(data);\n break;\n }\n case IframeEvents.DispatchMagixEvent: {\n this.handleDispatchMagixEvent(data);\n break;\n }\n case IframeEvents.RemoveAllMagixEvent: {\n this.handleRemoveAllMagixEvent();\n break;\n }\n case IframeEvents.NextPage: {\n this.handleNextPage();\n break;\n }\n case IframeEvents.PrevPage: {\n this.handlePrevPage();\n break;\n }\n case IframeEvents.SDKCreate: {\n this.handleSDKCreate();\n break;\n }\n case IframeEvents.SetPage: {\n this.handleSetPage(data);\n break;\n }\n case IframeEvents.GetAttributes: {\n this.handleGetAttributes();\n break;\n }\n case IframeEvents.PageTo: {\n this.handlePageTo(data);\n break;\n }\n default: {\n log(`${data.kind} not allow event.`);\n break;\n }\n }\n }\n\n private handleSDKCreate(): void {\n this.postMessage({\n kind: IframeEvents.Init,\n payload: {\n attributes: this.attributes,\n roomState: this.displayer.state,\n currentPage: this.currentPage,\n observerId: this.displayer.observerId,\n },\n });\n }\n\n private handleDispatchMagixEvent(data: any): void {\n const eventPayload: { event: string; payload: any } = data.payload;\n this.appManager.safeDispatchMagixEvent(eventPayload.event, eventPayload.payload);\n }\n\n private handleSetAttributes(data: any): void {\n this.setAttributes(data.payload);\n }\n\n private handleRegisterMagixEvent(data: any): void {\n const eventName = data.payload as string;\n const listener = (event: any) => {\n if (event.authorId === this.displayer.observerId) {\n return;\n }\n this.postMessage({ kind: IframeEvents.ReciveMagixEvent, payload: event });\n };\n this.magixEventMap.set(eventName, listener);\n this.displayer.addMagixEventListener(eventName, listener);\n }\n\n private handleRemoveMagixEvent(data: any): void {\n const eventName = data.payload as string;\n const listener = this.magixEventMap.get(eventName);\n this.displayer.removeMagixEventListener(eventName, listener);\n }\n\n private handleNextPage(): void {\n if (this.manager.canOperate) {\n this.manager.nextPage();\n this.dispatchMagixEvent(IframeEvents.NextPage, {});\n }\n }\n\n private handlePrevPage(): void {\n if (this.manager.canOperate) {\n this.manager.prevPage();\n this.dispatchMagixEvent(IframeEvents.PrevPage, {});\n }\n }\n\n private handlePageTo(data: any): void {\n if (this.manager.canOperate) {\n const page = data.payload as number;\n if (!Number.isSafeInteger(page) || page <= 0) {\n return;\n }\n this.manager.setMainViewSceneIndex(page - 1);\n this.dispatchMagixEvent(IframeEvents.PageTo, page - 1);\n }\n }\n\n private handleRemoveAllMagixEvent(): void {\n this.magixEventMap.forEach((listener, event) => {\n this.displayer.removeMagixEventListener(event, listener);\n });\n this.magixEventMap.clear();\n }\n\n private handleGetAttributes(): void {\n this.postMessage({\n kind: IframeEvents.GetAttributes,\n payload: this.attributes,\n });\n }\n\n public postMessage(message: any): void {\n if (this.iframe) {\n this.iframe.contentWindow?.postMessage(JSON.parse(JSON.stringify(message)), \"*\");\n }\n }\n\n public dispatchMagixEvent(event: string, payload: any): void {\n if (this.manager.canOperate) {\n this.setAttributes({ lastEvent: { name: event, payload } });\n (this.displayer as Room).dispatchMagixEvent(event, payload);\n }\n }\n\n private get currentIndex(): number {\n return this.manager.mainViewSceneIndex;\n }\n\n private get currentPage(): number {\n return this.currentIndex + 1;\n }\n\n private get totalPage(): number {\n return this.manager.mainViewScenesLength;\n }\n\n private get readonly(): boolean {\n return !(this.displayer as any).isWritable;\n }\n\n public get inDisplaySceneDir(): boolean {\n return this.manager.mainViewSceneDir === this.attributes.displaySceneDir;\n }\n\n private isClicker(): boolean {\n if (this.readonly) {\n return false;\n }\n const currentApplianceName = (this.displayer as Room).state.memberState\n .currentApplianceName;\n return this.allowAppliances.includes(currentApplianceName);\n }\n\n private get isDisableInput(): boolean {\n if (\"disableDeviceInputs\" in this.displayer) {\n return (this.displayer as Room).disableDeviceInputs;\n } else {\n return true;\n }\n }\n}\n","import type { WindowManager } from \".\";\nimport Emittery from \"emittery\";\nimport type { EmitterType } from \"./InternalEmitter\";\nimport { appRegister } from \"./Register\";\n\nexport interface ExtendContext {\n readonly manager: ExtendPluginManager;\n readonly windowManager: WindowManager;\n readonly internalEmitter: EmitterType;\n windowManagerContainer?: HTMLElement;\n}\n\nexport abstract class ExtendPlugin extends Emittery {\n context!: ExtendContext;\n abstract readonly kind: string;\n protected _inject(context: ExtendContext) {\n this.context = context;\n }\n abstract onCreate(): void;\n abstract onDestroy(): void;\n}\n\nexport type ExtendPluginInstance<T extends ExtendPlugin> = T;\n\nexport interface ExtendManagerOptions {\n readonly windowManager: WindowManager;\n readonly internalEmitter: EmitterType;\n readonly container?: HTMLElement;\n}\n\nexport class ExtendPluginManager {\n private extends: Map<string, ExtendPluginInstance<any>> = new Map();\n private context: ExtendContext;\n constructor(props: ExtendManagerOptions) {\n this.context = {\n manager: this,\n windowManager: props.windowManager,\n internalEmitter: props.internalEmitter,\n };\n if (props.container) {\n this.refreshContainer(props.container);\n }\n }\n\n refreshContainer(container: HTMLElement) {\n this.context.windowManagerContainer = container;\n this.extends.forEach(extend => {\n extend._inject(this.context);\n });\n }\n\n hasRegister(kind: string) {\n return appRegister.appClasses.has(kind);\n }\n\n use(extend: ExtendPluginInstance<any>) {\n this.extends.set(extend.kind, extend);\n extend._inject(this.context);\n extend.onCreate();\n }\n destroy() {\n this.extends.forEach(extend => {\n this.extends.delete(extend.kind);\n extend.onDestroy();\n });\n }\n}\n","export function resolveAppOptions(\n registeredOptions: any | (() => any),\n override: any\n): any | (() => any) {\n if (override === undefined) {\n return registeredOptions;\n }\n return () => ({\n ...(typeof registeredOptions === \"function\" ? registeredOptions() : registeredOptions),\n ...override,\n });\n}\n","import { AppContext, AppProxy } from \"../App\";\nimport { AppManager } from \"../AppManager\";\nimport { AttributesDelegate } from \"../AttributesDelegate\";\nimport { BoxManager } from \"../BoxManager\";\nimport { CursorManager } from \"../Cursor\";\nimport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport { AppManager } from \"../AppManager\";\nexport { AppContext, AppProxy } from \"../App\";\nexport { BoxManager } from \"../BoxManager\";\nexport { AttributesDelegate } from \"../AttributesDelegate\";\nexport { CursorManager } from \"../Cursor\";\nexport { TeleBoxManager, TeleBoxCollector } from \"@netless/telebox-insider\";\n\nexport type ExtendClassAble =\n | typeof AppManager\n | typeof AppProxy\n | typeof AppContext\n | typeof BoxManager\n | typeof AttributesDelegate\n | typeof CursorManager\n | typeof TeleBoxManager\n | typeof TeleBoxCollector;\n\nexport type ExtendClass = {\n AppManager?: typeof AppManager;\n BoxManager?: typeof BoxManager;\n AttributesDelegate?: typeof AttributesDelegate;\n CursorManager?: typeof CursorManager;\n AppProxy?: typeof AppProxy;\n AppContext?: typeof AppContext;\n TeleBoxManager?: typeof TeleBoxManager;\n TeleBoxCollector?: typeof TeleBoxCollector;\n};\nexport function getExtendClass<T extends ExtendClassAble>(\n baseClass: T,\n extendClass?: ExtendClass\n): T {\n if (baseClass.kind && extendClass && Object.keys(extendClass).includes(baseClass.kind)) {\n switch (baseClass.kind) {\n case \"AppManager\":\n return (extendClass?.AppManager || AppManager) as T;\n case \"BoxManager\":\n return (extendClass?.BoxManager || BoxManager) as T;\n case \"AttributesDelegate\":\n return (extendClass?.AttributesDelegate || AttributesDelegate) as T;\n case \"CursorManager\":\n return (extendClass?.CursorManager || CursorManager) as T;\n case \"AppProxy\":\n return (extendClass?.AppProxy || AppProxy) as T;\n case \"AppContext\":\n return (extendClass?.AppContext || AppContext) as T;\n case \"TeleBoxManager\":\n return (extendClass?.TeleBoxManager || TeleBoxManager) as T;\n case \"TeleBoxCollector\":\n return (extendClass?.TeleBoxCollector || TeleBoxCollector) as T;\n default:\n return baseClass;\n }\n }\n return baseClass;\n}\n","import pRetry from \"p-retry\";\nimport { AppManager } from \"./AppManager\";\nimport { appRegister } from \"./Register\";\nimport { callbacks } from \"./callback\";\nimport { checkVersion, createInvisiblePlugin, setupWrapper } from \"./Helper\";\nimport { ContainerResizeObserver } from \"./ContainerResizeObserver\";\nimport { createBoxManager } from \"./BoxManager\";\nimport { CursorManager } from \"./Cursor\";\nimport { DEFAULT_CONTAINER_RATIO, Events, INIT_DIR, ROOT_DIR } from \"./constants\";\nimport { internalEmitter } from \"./InternalEmitter\";\nimport { Fields } from \"./AttributesDelegate\";\nimport { initDb } from \"./Register/storage\";\nimport { InvisiblePlugin, isPlayer, isRoom, RoomPhase, ViewMode } from \"white-web-sdk\";\nimport { isEqual, isNull, isObject, omit, isNumber } from \"lodash\";\nimport { ArgusLog, log } from \"./Utils/log\";\nimport { PageStateImpl } from \"./PageState\";\nimport { ReconnectRefresher } from \"./ReconnectRefresher\";\nimport { replaceRoomFunction } from \"./Utils/RoomHacker\";\nimport { BuiltinApps, setupBuiltin } from \"./BuiltinApps\";\nimport type { BuiltinAppOptions } from \"./BuiltinApps\";\nimport \"video.js/dist/video-js.css\";\nimport \"./style.css\";\nimport \"@netless/telebox-insider/dist/style.css\";\nimport {\n addEmitterOnceListener,\n ensureValidScenePath,\n entireScenes,\n isValidScenePath,\n putScenes,\n wait,\n} from \"./Utils/Common\";\nimport type { BoxManager } from \"./BoxManager\";\nimport type { TELE_BOX_STATE } from \"./BoxManager\";\nimport * as Errors from \"./Utils/error\";\nimport type { Apps, Position } from \"./AttributesDelegate\";\nimport type {\n Displayer,\n SceneDefinition,\n View,\n Room,\n InvisiblePluginContext,\n Camera,\n AnimationMode,\n CameraBound,\n Point,\n Rectangle,\n CameraState,\n Player,\n ImageInformation,\n SceneState,\n Logger,\n} from \"white-web-sdk\";\nimport type { AppListeners } from \"./AppListener\";\nimport type { ApplianceIcons, NetlessApp, RegisterParams } from \"./typings\";\nimport type {\n NotMinimizedBoxState,\n TeleBoxColorScheme,\n TeleBoxState,\n} from \"@netless/telebox-insider\";\nimport type { AppProxy } from \"./App\";\nimport type { PublicEvent } from \"./callback\";\nimport type Emittery from \"emittery\";\nimport type { PageController, AddPageParams, PageState } from \"./Page\";\nimport { boxEmitter } from \"./BoxEmitter\";\nimport { IframeBridge } from \"./View/IframeBridge\";\nimport type { ExtendPluginInstance } from \"./ExtendPluginManager\";\nimport { ExtendPluginManager } from \"./ExtendPluginManager\";\nimport { getExtendClass } from \"./Utils/extendClass\";\nimport type { ExtendClass } from \"./Utils/extendClass\";\nimport { resolveAppOptions as mergeAppOptions } from \"./Utils/resolveAppOptions\";\n\nexport * from \"./utils/extendClass\";\n\nexport type WindowMangerAttributes = {\n modelValue?: string;\n boxState: TELE_BOX_STATE;\n maximized?: boolean;\n minimized?: boolean;\n [key: string]: any;\n};\n\nexport type apps = {\n [key: string]: NetlessApp;\n};\n\nexport type AddAppOptions = {\n scenePath?: string;\n title?: string;\n scenes?: SceneDefinition[];\n};\n\nexport type setAppOptions = AddAppOptions & { appOptions?: any };\n\nexport type DocsEvent =\n | \"prevPage\"\n | \"nextPage\"\n | \"prevStep\"\n | \"nextStep\"\n | \"jumpToPage\"\n | \"scalePage\";\n\nexport type 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 /** Used by `scalePage` event. Range from 1 to 4, decimals allowed. `1` means default fitted size. */\n scale?: number;\n};\n\ntype SlideDocsAppResult = {\n prevPage: () => boolean;\n nextPage: () => boolean;\n prevStep: () => boolean;\n nextStep: () => boolean;\n jumpToPage: (page: number) => boolean;\n scaleView: (scale: number) => void;\n};\n\ntype PresentationDocsAppResult = {\n prevPage: () => boolean;\n nextPage: () => boolean;\n jumpPage: (index: number) => boolean;\n moveCamera: (camera: { centerX: number; centerY: number; scale: number }) => void;\n getOriginScale: () => number;\n};\n\nconst SlideAppKind = \"Slide\";\nconst PresentationAppKind = BuiltinApps.Presentation;\nconst MinDocsPageScale = 1;\nconst MaxDocsPageScale = 4;\n\nfunction isValidDocsPageScale(scale: unknown): scale is number {\n return (\n typeof scale === \"number\" &&\n Number.isFinite(scale) &&\n scale >= MinDocsPageScale &&\n scale <= MaxDocsPageScale\n );\n}\n\nexport type AddAppParams<TAttributes = any> = {\n kind: string;\n // app 地址(本地 app 不需要传)\n src?: string;\n // 窗口配置\n options?: AddAppOptions;\n // 初始化 attributes\n attributes?: TAttributes;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type BaseInsertParams = {\n kind: string;\n // app 地址(本地 app 不需要传)\n src?: string;\n // 窗口配置\n options?: AddAppOptions;\n // 初始化 attributes\n attributes?: any;\n isDynamicPPT?: boolean;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type AppSyncAttributes = {\n kind: string;\n src?: string;\n options: any;\n state?: any;\n isDynamicPPT?: boolean;\n fullPath?: string;\n createdAt?: number;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type AppInitState = {\n id: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n focus?: boolean;\n maximized?: boolean;\n minimized?: boolean;\n sceneIndex?: number;\n /** 所有box的基本状态 */\n boxState?: TeleBoxState; // 兼容旧版 telebox\n zIndex?: number;\n /** 扩展版本,单个box的状态 */\n boxStatus?: TeleBoxState;\n /** 上次非最小化窗口状态 */\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState;\n // 强制置顶\n forceTop?: boolean;\n // 强制正常窗口\n forceNormal?: boolean;\n // 是否可以在内容区域拖动\n isDragContent?: boolean;\n};\n\nexport type CursorMovePayload = { uid: string; state?: \"leave\"; position: Position };\n\nexport type CursorOptions = {\n /**\n * If `\"custom\"`, it will render the pencil / eraser cursor as a circle and shapes cursor as a cross.\n *\n * @default \"default\"\n */\n style?: \"default\" | \"custom\";\n};\n\nexport type MountParams = {\n room: Room | Player;\n container?: HTMLElement;\n /** 白板高宽比例, 默认为 9 / 16 */\n containerSizeRatio?: number;\n /** @deprecated 显示 PS 透明背景,默认 true */\n chessboard?: boolean;\n collectorContainer?: HTMLElement;\n collectorStyles?: Partial<CSSStyleDeclaration>;\n overwriteStyles?: string;\n cursor?: boolean;\n cursorOptions?: CursorOptions;\n debug?: boolean;\n disableCameraTransform?: boolean;\n prefersColorScheme?: TeleBoxColorScheme;\n applianceIcons?: ApplianceIcons;\n fullscreen?: boolean;\n polling?: boolean;\n /** 是否支持 appliance plugin */\n supportAppliancePlugin?: boolean;\n /** 是否使用 boxesStatus 状态管理窗口 */\n useBoxesStatus?: boolean;\n /** Local Presentation options applied before restoring apps. Not synchronized. */\n builtinAppOptions?: BuiltinAppOptions;\n};\n\nexport const reconnectRefresher = new ReconnectRefresher({ emitter: internalEmitter });\nexport class WindowManager\n extends InvisiblePlugin<WindowMangerAttributes, any>\n implements PageController\n{\n public static readonly kind = \"WindowManager\";\n public static displayer: Displayer;\n public static wrapper?: HTMLElement;\n public static sizer?: HTMLElement;\n public static playground?: HTMLElement;\n public static container?: HTMLElement;\n public static debug = false;\n public static containerSizeRatio = DEFAULT_CONTAINER_RATIO;\n public static supportAppliancePlugin?: boolean;\n private static isCreated = false;\n private static _resolve = (_manager: WindowManager) => void 0;\n\n public version = __APP_VERSION__;\n public dependencies = __APP_DEPENDENCIES__;\n\n public appListeners?: AppListeners;\n\n public readonly?: boolean;\n public emitter: Emittery<PublicEvent> = callbacks;\n public appManager?: AppManager;\n public cursorManager?: CursorManager;\n public viewMode = ViewMode.Broadcaster;\n public isReplay = isPlayer(this.displayer);\n private _pageState?: PageStateImpl;\n private _fullscreen?: boolean;\n private _cursorUIDs: string[] = [];\n private _cursorUIDsStyleDOM?: HTMLStyleElement;\n\n public _appliancePlugin?: any;\n\n public builtinAppOptions?: BuiltinAppOptions;\n\n private boxManager?: BoxManager;\n private static params?: MountParams;\n static extendClass?: ExtendClass;\n\n private containerResizeObserver?: ContainerResizeObserver;\n public containerSizeRatio = WindowManager.containerSizeRatio;\n\n private extendPluginManager?: ExtendPluginManager;\n\n private _roomLogger?: Logger;\n\n public attributesDeboundceLog?: ArgusLog;\n\n get Logger(): Logger | undefined {\n return this._roomLogger;\n }\n\n constructor(context: InvisiblePluginContext) {\n super(context);\n WindowManager.displayer = context.displayer;\n (window as any).NETLESS_DEPS = __APP_DEPENDENCIES__;\n this.emitter.on(\"mainViewScenePathChange\", this.onMainViewScenePathChangeHandler);\n }\n\n public static onCreate(manager: WindowManager) {\n WindowManager._resolve(manager);\n }\n\n public static async mount(\n params: MountParams,\n extendClass?: ExtendClass\n ): Promise<WindowManager> {\n const room = params.room;\n WindowManager.container = params.container;\n WindowManager.supportAppliancePlugin = params.supportAppliancePlugin;\n const containerSizeRatio = params.containerSizeRatio;\n const debug = params.debug;\n\n const cursor = params.cursor;\n WindowManager.params = params;\n WindowManager.extendClass = extendClass;\n WindowManager.displayer = params.room;\n checkVersion();\n let manager: WindowManager | undefined = undefined;\n if (isRoom(room)) {\n if (room.phase !== RoomPhase.Connected) {\n throw new Error(\"[WindowManager]: Room only Connected can be mount\");\n }\n if (room.phase === RoomPhase.Connected && room.isWritable) {\n // redo undo 需要设置这个属性\n room.disableSerialization = false;\n }\n manager = await this.initManager(room);\n if (manager) {\n manager._roomLogger = (room as unknown as { logger: Logger }).logger;\n manager.attributesDeboundceLog = new ArgusLog(\n manager._roomLogger,\n \"attributes\",\n 300\n );\n if (WindowManager.registered.size > 0) {\n manager._roomLogger.info(\n `[WindowManager] registered apps: ${JSON.stringify(\n Array.from(WindowManager.registered.keys())\n )}`\n );\n }\n }\n }\n if (WindowManager.isCreated) {\n throw new Error(\"[WindowManager]: Already created cannot be created again\");\n }\n\n this.debug = Boolean(debug);\n if (manager?._roomLogger) {\n manager._roomLogger.info(\n `[WindowManager] Already insert room version: ${manager.version}`\n );\n } else {\n log(\"Already insert room\", manager);\n }\n\n if (isRoom(this.displayer)) {\n if (!manager) {\n throw new Error(\"[WindowManager]: init InvisiblePlugin failed\");\n }\n } else {\n await pRetry(\n async count => {\n manager = room.getInvisiblePlugin(WindowManager.kind) as WindowManager;\n if (!manager) {\n log(`manager is empty. retrying ${count}`);\n throw new Error();\n }\n },\n // 1s, 2s, 4s, 5s, 5s, 5s, 5s, 5s, 5s\n { retries: 10, maxTimeout: 5000 } as any\n );\n }\n\n if (!manager) {\n throw new Error(\"[WindowManager]: create manager failed\");\n }\n\n manager.builtinAppOptions = params.builtinAppOptions;\n\n if (containerSizeRatio) {\n WindowManager.containerSizeRatio = containerSizeRatio;\n }\n await manager.ensureAttributes();\n\n const AppManagerClass = getExtendClass(AppManager, WindowManager.extendClass);\n const CursorManagerClass = getExtendClass(CursorManager, WindowManager.extendClass);\n\n manager._fullscreen = params.fullscreen;\n manager.appManager = new AppManagerClass(manager);\n manager.appManager.polling = params.polling || false;\n manager._pageState = new PageStateImpl(manager.appManager);\n manager.cursorManager = new CursorManagerClass(\n manager.appManager,\n Boolean(cursor),\n params.cursorOptions,\n params.applianceIcons\n );\n\n manager.extendPluginManager = new ExtendPluginManager({\n internalEmitter: internalEmitter,\n windowManager: manager,\n });\n\n if (containerSizeRatio) {\n manager.containerSizeRatio = containerSizeRatio;\n }\n\n if (params.container) {\n manager.bindContainer(params.container);\n }\n\n replaceRoomFunction(room, manager);\n internalEmitter.emit(\"onCreated\");\n WindowManager.isCreated = true;\n if (\n manager._roomLogger &&\n manager.attributes.registered &&\n Object.keys(manager.attributes.registered).length > 0\n ) {\n manager._roomLogger.info(\n `[WindowManager] attributes registered apps: ${JSON.stringify(\n Array.from(Object.keys(manager.attributes.registered))\n )}`\n );\n }\n try {\n await initDb();\n } catch (error) {\n manager._roomLogger?.warn(`[WindowManager] indexedDB open failed: ${error.message}`);\n console.warn(\"[WindowManager]: indexedDB open failed\");\n console.log(error);\n }\n manager.emitter.on(\"mainViewScenePathChange\", manager.onMainViewScenePathChangeHandler);\n return manager;\n }\n\n public onMainViewScenePathChangeHandler = (scenePath: string) => {\n const mainViewElement = this.mainView.divElement;\n if (mainViewElement) {\n const backgroundImage = mainViewElement.querySelector(\".background img\");\n if (backgroundImage) {\n const backgroundImageRect = backgroundImage?.getBoundingClientRect();\n const backgroundImageCSS = window.getComputedStyle(backgroundImage);\n const backgroundImageVisible =\n backgroundImageRect?.width > 0 &&\n backgroundImageRect?.height > 0 &&\n backgroundImageCSS.display !== \"none\";\n const camera = this.mainView.camera;\n console.log(\n \"[window-manager] backgroundImageVisible:\" +\n backgroundImageVisible +\n \" camera:\" +\n JSON.stringify(camera)\n );\n return;\n }\n console.log(\n \"[window-manager] onMainViewScenePathChange scenePath:\" +\n scenePath +\n \" backgroundImageVisible is not found\"\n );\n return;\n }\n console.log(\n \"[window-manager] onMainViewScenePathChange scenePath:\" +\n scenePath +\n \" mainViewElement is not found\"\n );\n };\n\n private static initManager(room: Room): Promise<WindowManager | undefined> {\n return createInvisiblePlugin(room);\n }\n\n private static initContainer(\n manager: WindowManager,\n container: HTMLElement,\n params: {\n chessboard?: boolean;\n overwriteStyles?: string;\n fullscreen?: boolean;\n }\n ) {\n const { chessboard, overwriteStyles, fullscreen } = params;\n if (!WindowManager.container) {\n WindowManager.container = container;\n }\n const { playground, wrapper, sizer, mainViewElement } = setupWrapper(container);\n WindowManager.playground = playground;\n if (chessboard) {\n sizer.classList.add(\"netless-window-manager-chess-sizer\");\n }\n if (fullscreen) {\n sizer.classList.add(\"netless-window-manager-fullscreen\");\n }\n if (overwriteStyles) {\n const style = document.createElement(\"style\");\n style.textContent = overwriteStyles;\n playground.appendChild(style);\n }\n manager.containerResizeObserver = ContainerResizeObserver.create(\n playground,\n sizer,\n wrapper,\n internalEmitter\n );\n WindowManager.wrapper = wrapper;\n WindowManager.sizer = sizer;\n return mainViewElement;\n }\n\n public static get registered() {\n return appRegister.registered;\n }\n\n public bindContainer(container: HTMLElement) {\n if (isRoom(this.displayer) && this.room.phase !== RoomPhase.Connected) {\n throw new Errors.BindContainerRoomPhaseInvalidError();\n }\n if (WindowManager.isCreated && WindowManager.container) {\n if (WindowManager.container.firstChild) {\n container.appendChild(WindowManager.container.firstChild);\n }\n } else {\n if (WindowManager.params) {\n const params = WindowManager.params;\n const mainViewElement = WindowManager.initContainer(this, container, params);\n if (this.boxManager) {\n this.boxManager.destroy();\n }\n const boxManager = createBoxManager(this, callbacks, internalEmitter, boxEmitter, {\n collectorContainer: params.collectorContainer,\n collectorStyles: params.collectorStyles,\n prefersColorScheme: params.prefersColorScheme,\n useBoxesStatus: params.useBoxesStatus,\n });\n this.boxManager = boxManager;\n if (this.appManager) {\n this.appManager.useBoxesStatus = params.useBoxesStatus || false;\n this.appManager.setBoxManager(boxManager);\n }\n this.bindMainView(mainViewElement, params.disableCameraTransform);\n if (WindowManager.wrapper) {\n this.cursorManager?.setupWrapper(WindowManager.wrapper);\n }\n }\n }\n internalEmitter.emit(\"updateManagerRect\");\n this.appManager?.refresh();\n this.appManager?.resetMaximized();\n this.appManager?.resetMinimized();\n this.appManager?.displayerWritableListener(!this.room.isWritable);\n WindowManager.container = container;\n this.extendPluginManager?.refreshContainer(container);\n }\n\n public bindCollectorContainer(container: HTMLElement) {\n if (WindowManager.isCreated && this.boxManager) {\n this.boxManager.setCollectorContainer(container);\n } else {\n if (WindowManager.params) {\n WindowManager.params.collectorContainer = container;\n }\n }\n }\n\n /**\n * 注册插件\n */\n public static register(params: RegisterParams<any, any, any>): Promise<void> {\n return appRegister.register(params);\n }\n\n /**\n * 注销插件\n */\n public static unregister(kind: string) {\n return appRegister.unregister(kind);\n }\n\n public resolveAppOptions(\n kind: string,\n registeredOptions?: any | (() => any)\n ): any | (() => any) {\n const override =\n kind === BuiltinApps.Presentation ? this.builtinAppOptions?.Presentation : undefined;\n return mergeAppOptions(registeredOptions, override);\n }\n\n /**\n * 创建一个 app 至白板\n */\n public async addApp<T = any>(params: AddAppParams<T>): Promise<string | undefined> {\n if (this.appManager) {\n // 移除根目录时需要做一些异步的释放操作 addApp 需要等待释放完成才可以继续添加\n if (this.appManager.rootDirRemoving) {\n return new Promise((resolve, reject) => {\n internalEmitter.once(\"rootDirRemoved\").then(async () => {\n try {\n const appId = await this._addApp(params);\n resolve(appId);\n } catch (error) {\n reject(error.message);\n }\n });\n });\n } else {\n return this._addApp(params);\n }\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n private async _addApp<T = any>(params: AddAppParams<T>): Promise<string | undefined> {\n if (this.appManager) {\n if (!params.kind || typeof params.kind !== \"string\") {\n throw new Errors.ParamsInvalidError();\n }\n if (params.src && typeof params.src === \"string\") {\n appRegister.register({ kind: params.kind, src: params.src });\n }\n const appImpl = await appRegister.appClasses.get(params.kind)?.();\n if (appImpl && appImpl.config?.singleton) {\n if (this.appManager.appProxies.has(params.kind)) {\n throw new Errors.AppCreateError();\n }\n }\n const isDynamicPPT = this.setupScenePath(params, this.appManager);\n if (isDynamicPPT === undefined) {\n return;\n }\n if (params?.options?.scenePath) {\n params.options.scenePath = ensureValidScenePath(params.options.scenePath);\n }\n const appId = await this.appManager.addApp(params, Boolean(isDynamicPPT));\n return appId;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n private setupScenePath(params: AddAppParams, appManager: AppManager): boolean | undefined {\n let isDynamicPPT = false;\n if (params.options) {\n const { scenePath, scenes } = params.options;\n if (scenePath) {\n if (!isValidScenePath(scenePath)) {\n throw new Errors.InvalidScenePath();\n }\n const apps = Object.keys(this.apps || {});\n for (const appId of apps) {\n const appScenePath = appManager.store.getAppScenePath(appId);\n if (appScenePath && appScenePath === scenePath) {\n console.warn(`[WindowManager]: ScenePath \"${scenePath}\" already opened`);\n if (this.boxManager) {\n const topBox = this.boxManager.getTopBox();\n if (topBox) {\n this.boxManager.setZIndex(appId, topBox.zIndex + 1, false);\n this.boxManager.focusBox({ appId }, false);\n }\n }\n return;\n }\n }\n }\n if (scenePath && scenes && scenes.length > 0) {\n if (this.isDynamicPPT(scenes)) {\n isDynamicPPT = true;\n if (!entireScenes(this.displayer)[scenePath]) {\n putScenes(this.room, scenePath, scenes);\n }\n } else {\n if (!entireScenes(this.displayer)[scenePath]) {\n putScenes(this.room, scenePath, [{ name: scenes[0].name }]);\n }\n }\n }\n if (scenePath && scenes === undefined) {\n putScenes(this.room, scenePath, [{}]);\n }\n }\n return isDynamicPPT;\n }\n\n /**\n * 设置 mainView 的 ScenePath, 并且切换白板为可写状态\n */\n public async setMainViewScenePath(scenePath: string): Promise<void> {\n if (this.appManager) {\n await this.appManager.setMainViewScenePath(scenePath);\n }\n }\n\n /**\n * 设置 mainView 的 SceneIndex, 并且切换白板为可写状态\n */\n public async setMainViewSceneIndex(index: number): Promise<void> {\n if (this.appManager) {\n await this.appManager.setMainViewSceneIndex(index);\n }\n }\n\n public async nextPage(): Promise<boolean> {\n if (this.appManager) {\n const nextIndex = this.mainViewSceneIndex + 1;\n if (nextIndex >= this.mainViewScenesLength) {\n console.warn(`[WindowManager]: current page is the last page`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(nextIndex);\n return true;\n } else {\n return false;\n }\n }\n\n public async prevPage(): Promise<boolean> {\n if (this.appManager) {\n const prevIndex = this.mainViewSceneIndex - 1;\n if (prevIndex < 0) {\n console.warn(`[WindowManager]: current page is the first page`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(prevIndex);\n return true;\n } else {\n return false;\n }\n }\n\n public async jumpPage(index: number): Promise<boolean> {\n if (this.appManager) {\n if (index < 0 || index >= this.pageState.length) {\n console.warn(`[WindowManager]: index ${index} out of range`);\n return false;\n }\n await this.appManager.setMainViewSceneIndex(index);\n return true;\n } else {\n return false;\n }\n }\n\n public async addPage(params?: AddPageParams): Promise<void> {\n if (this.appManager) {\n const after = params?.after;\n const scene = params?.scene;\n if (after) {\n const nextIndex = this.mainViewSceneIndex + 1;\n this.room.putScenes(ROOT_DIR, [scene || {}], nextIndex);\n } else {\n this.room.putScenes(ROOT_DIR, [scene || {}]);\n }\n }\n }\n\n /**\n * 删除一页\n * 默认删除当前页, 可以删除指定 index 页\n * 最低保留一页\n */\n public async removePage(index?: number): Promise<boolean> {\n if (this.appManager) {\n const needRemoveIndex = index === undefined ? this.pageState.index : index;\n if (this.pageState.length === 1) {\n console.warn(`[WindowManager]: can not remove the last page`);\n return false;\n }\n if (needRemoveIndex < 0 || needRemoveIndex >= this.pageState.length) {\n console.warn(`[WindowManager]: index ${index} out of range`);\n return false;\n }\n return this.appManager.removeSceneByIndex(needRemoveIndex);\n } else {\n return false;\n }\n }\n\n /**\n * 返回 mainView 的 ScenePath\n */\n public getMainViewScenePath(): string | undefined {\n return this.appManager?.store.getMainViewScenePath();\n }\n\n /**\n * 返回 mainView 的 SceneIndex\n */\n public getMainViewSceneIndex(): number {\n return this.appManager?.store.getMainViewSceneIndex();\n }\n\n /**\n * 设置所有 app 的 readonly 模式\n */\n public setReadonly(readonly: boolean): void {\n this.readonly = readonly;\n this.boxManager?.setReadonly(readonly);\n internalEmitter.emit(\"setReadonly\", readonly);\n }\n\n /**\n * 切换 mainView 为可写\n */\n public switchMainViewToWriter(): Promise<void> | undefined {\n return this.appManager?.mainViewProxy.mainViewClickHandler();\n }\n\n /**\n * app destroy 回调\n */\n public onAppDestroy(kind: string, listener: (error: Error) => void): void {\n addEmitterOnceListener(`destroy-${kind}`, listener);\n }\n\n /**\n * app 本地自定义事件回调\n *\n * 返回一个用于撤销此监听的函数\n */\n public onAppEvent(\n kind: string,\n listener: (args: { kind: string; appId: string; type: string; value: any }) => void\n ): () => void {\n return internalEmitter.on(`custom-${kind}` as any, listener);\n }\n\n /**\n * 设置 ViewMode\n */\n public setViewMode(mode: ViewMode): void {\n if (mode === ViewMode.Broadcaster || mode === ViewMode.Follower) {\n if (this.canOperate && mode === ViewMode.Broadcaster) {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }\n this.appManager?.mainViewProxy.start();\n }\n if (mode === ViewMode.Freedom) {\n this.appManager?.mainViewProxy.stop();\n }\n this.viewMode = mode;\n this.appManager?.mainViewProxy.setViewMode(mode);\n }\n\n public setBoxState(boxState: TeleBoxState): void {\n if (!this.canOperate) return;\n switch (boxState) {\n case \"normal\":\n this.setMaximized(false);\n this.setMinimized(false);\n break;\n case \"maximized\":\n this.setMaximized(true);\n this.setMinimized(false);\n break;\n case \"minimized\":\n this.setMinimized(true);\n break;\n default:\n break;\n }\n }\n\n public setMaximized(maximized: boolean): void {\n if (!this.canOperate) return;\n this.boxManager?.setMaximized(maximized, false);\n }\n\n public setMinimized(minimized: boolean): void {\n if (!this.canOperate) return;\n this.boxManager?.setMinimized(minimized, false);\n }\n\n /** 设置指定 box 的状态, 如果为 undefined, 则移除状态*/\n public setBoxStatus(boxId: string, boxStatus?: TELE_BOX_STATE): void {\n if (!this.canOperate) return;\n this.appManager?.store.setBoxStatus(boxId, boxStatus);\n }\n\n /** 设置指定 box 的非最小化状态, 如果为 undefined, 则移除状态 */\n public setLastNotMinimizedBoxStatus(\n boxId: string,\n lastNotMinimizedBoxStatus?: NotMinimizedBoxState\n ): void {\n if (!this.canOperate) return;\n this.appManager?.store.setLastNotMinimizedBoxStatus(boxId, lastNotMinimizedBoxStatus);\n }\n\n public setFullscreen(fullscreen: boolean): void {\n if (this._fullscreen !== fullscreen) {\n this._fullscreen = fullscreen;\n WindowManager.sizer?.classList.toggle(\"netless-window-manager-fullscreen\", fullscreen);\n callbacks.emit(\"fullscreenChange\", fullscreen);\n }\n }\n\n public get cursorUIDs(): string[] {\n return this._cursorUIDs;\n }\n\n public setCursorUIDs(cursorUIDs?: string[] | null): void {\n this._cursorUIDs = cursorUIDs || [];\n if (this._cursorUIDs.length === 0) {\n this._cursorUIDsStyleDOM?.remove();\n } else {\n if (!this._cursorUIDsStyleDOM) {\n this._cursorUIDsStyleDOM = document.createElement(\"style\");\n }\n WindowManager.playground?.appendChild(this._cursorUIDsStyleDOM);\n let style = \"[data-cursor-uid] { display: none }\";\n for (const uid of this._cursorUIDs) {\n style += `\\n[data-cursor-uid=\"${uid}\"] { display: flex }`;\n }\n this._cursorUIDsStyleDOM.textContent = style;\n }\n }\n\n public get mainView(): View {\n if (this.appManager) {\n return this.appManager.mainViewProxy.view;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get camera(): Camera {\n if (this.appManager) {\n return this.appManager.mainViewProxy.view.camera;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get cameraState(): CameraState {\n if (this.appManager) {\n return this.appManager.mainViewProxy.cameraState;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get apps(): Apps | undefined {\n return this.appManager?.store.apps();\n }\n\n public get boxState(): TeleBoxState | undefined {\n if (this.appManager) {\n return this.appManager.boxManager?.boxState;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get boxStatus(): Record<string, TeleBoxState> | undefined {\n if (this.appManager) {\n return this.appManager.store.getBoxesStatus();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get lastNotMinimizedBoxStatus(): Record<string, NotMinimizedBoxState> | undefined {\n if (this.appManager) {\n return this.appManager.store.getLastNotMinimizedBoxesStatus();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get darkMode(): boolean {\n return Boolean(this.appManager?.boxManager?.darkMode);\n }\n\n public get prefersColorScheme(): TeleBoxColorScheme | undefined {\n if (this.appManager) {\n return this.appManager.boxManager?.prefersColorScheme;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get focused(): string | undefined {\n return this.attributes.focus;\n }\n\n public get focusedView(): View | undefined {\n return this.appManager?.focusApp?.view || this.mainView;\n }\n\n public get polling(): boolean {\n return this.appManager?.polling || false;\n }\n\n public set polling(b: boolean) {\n if (this.appManager) {\n this.appManager.polling = b;\n }\n }\n\n public get cursorStyle(): \"default\" | \"custom\" {\n return this.cursorManager?.style || \"default\";\n }\n\n public set cursorStyle(value: \"default\" | \"custom\") {\n if (!this.cursorManager) {\n throw new Error(\"[WindowManager]: cursor is not enabled, please set { cursor: true }.\");\n }\n this.cursorManager.style = value;\n }\n\n public get mainViewSceneIndex(): number {\n return this._pageState?.index || 0;\n }\n\n public get mainViewSceneDir(): string {\n if (this.appManager) {\n return this.appManager?.getMainViewSceneDir();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get topApp(): string | undefined {\n return this.boxManager?.getTopBox()?.id;\n }\n\n public get mainViewScenesLength(): number {\n return this._pageState?.length || 0;\n }\n\n public get canRedoSteps(): number {\n return this.focusedView?.canRedoSteps || 0;\n }\n\n public get canUndoSteps(): number {\n return this.focusedView?.canUndoSteps || 0;\n }\n\n public get sceneState(): SceneState {\n if (this.appManager) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.appManager.sceneState!;\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get pageState(): PageState {\n if (this._pageState) {\n return this._pageState.toObject();\n } else {\n throw new Errors.AppManagerNotInitError();\n }\n }\n\n public get fullscreen(): boolean {\n return Boolean(this._fullscreen);\n }\n\n /**\n * 查询所有的 App\n */\n public queryAll(): AppProxy[] {\n return Array.from(this.appManager?.appProxies.values() || []);\n }\n\n /**\n * 查询单个 App\n */\n public queryOne(appId: string): AppProxy | undefined {\n return this.appManager?.appProxies.get(appId);\n }\n\n /**\n * Send specific command to DocsViewer / Presentation / Slide app.\n *\n * Static docs and Presentation do not have animation steps, so `prevStep` / `nextStep`\n * are treated as `prevPage` / `nextPage`.\n */\n public dispatchDocsEvent(event: DocsEvent, options: DocsEventOptions = {}): boolean {\n const appId = options.appId || this.focused;\n if (!appId) {\n console.warn(\"not found \" + (options.appId || \"focused app\"));\n return false;\n }\n\n const app = this.queryOne(appId);\n if (!app) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n const isDocsViewerApp =\n appId.startsWith(`${BuiltinApps.DocsViewer}-`) || app.kind === BuiltinApps.DocsViewer;\n const isPresentationApp =\n appId.startsWith(`${PresentationAppKind}-`) || app.kind === PresentationAppKind;\n const isSlideApp = appId.startsWith(`${SlideAppKind}-`) || app.kind === SlideAppKind;\n let appKind = app.kind;\n if (isDocsViewerApp) {\n appKind = BuiltinApps.DocsViewer;\n } else if (isPresentationApp) {\n appKind = PresentationAppKind;\n } else if (isSlideApp) {\n appKind = SlideAppKind;\n }\n\n if (!WindowManager.registered.has(appKind)) {\n console.warn(\"not registered app kind \" + appKind);\n return false;\n }\n\n let page: number | undefined, input: HTMLInputElement | null, scale: number | undefined;\n\n if (isDocsViewerApp) {\n const dom = app.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 case \"scalePage\":\n console.warn(\"not supported event \" + event + \" for app kind \" + appKind);\n return false;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n\n return true;\n }\n\n if (isPresentationApp) {\n const controller = app.appResult as PresentationDocsAppResult | undefined;\n if (!controller) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n case \"prevStep\":\n return controller.prevPage();\n case \"nextPage\":\n case \"nextStep\":\n return controller.nextPage();\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 controller.jumpPage(page - 1);\n case \"scalePage\":\n scale = options.scale;\n if (!isValidDocsPageScale(scale)) {\n console.warn(\"failed to scale, scale should be a number from 1 to 4\");\n return false;\n }\n try {\n controller.moveCamera({\n centerX: 0,\n centerY: 0,\n scale: controller.getOriginScale() * scale,\n });\n return true;\n } catch (error) {\n console.warn(error);\n return false;\n }\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n if (isSlideApp) {\n const controller = app.appResult as SlideDocsAppResult | undefined;\n if (!controller) {\n console.warn(\"not found app with id \" + appId);\n return false;\n }\n\n switch (event) {\n case \"prevPage\":\n return controller.prevPage();\n case \"nextPage\":\n return controller.nextPage();\n case \"prevStep\":\n return controller.prevStep();\n case \"nextStep\":\n return controller.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 controller.jumpToPage(page);\n case \"scalePage\":\n scale = options.scale;\n if (!isValidDocsPageScale(scale)) {\n console.warn(\"failed to scale, scale should be a number from 1 to 4\");\n return false;\n }\n controller.scaleView(scale);\n return true;\n default:\n console.warn(\"unknown event \" + event);\n return false;\n }\n }\n\n console.warn(\"not supported app kind \" + app.kind);\n return false;\n }\n\n /**\n * 关闭 APP\n */\n public async closeApp(appId: string): Promise<void> {\n return this.appManager?.closeApp(appId);\n }\n\n /**\n * 切换 focus 到指定的 app, 并且把这个 app 放到最前面\n */\n public focusApp(appId: string) {\n const box = this.boxManager?.getBox(appId);\n if (box) {\n this.boxManager?.focusBox({ appId }, false);\n // 1.0 版本这里会有正式的 api\n (this.boxManager?.teleBoxManager as any).makeBoxTop(box, false);\n }\n }\n\n public moveCamera(\n camera: Partial<Camera> & { animationMode?: AnimationMode | undefined }\n ): void {\n const pureCamera = omit(camera, [\"animationMode\"]);\n const mainViewCamera = { ...this.mainView.camera };\n if (isEqual({ ...mainViewCamera, ...pureCamera }, mainViewCamera)) return;\n this.mainView.moveCamera(camera);\n setTimeout(() => {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }, 500);\n }\n\n public moveCameraToContain(\n rectangle: Rectangle &\n Readonly<{\n animationMode?: AnimationMode;\n }>\n ): void {\n this.mainView.moveCameraToContain(rectangle);\n setTimeout(() => {\n this.appManager?.mainViewProxy.setCameraAndSize();\n }, 500);\n }\n\n public convertToPointInWorld(point: Point): Point {\n return this.mainView.convertToPointInWorld(point);\n }\n\n public setCameraBound(cameraBound: CameraBound): void {\n this.mainView.setCameraBound(cameraBound);\n }\n\n public override onDestroy(): void {\n this._destroy();\n }\n\n public override destroy(): void {\n this._destroy();\n }\n\n private _destroy() {\n this.attributesDeboundceLog?.destroy();\n this.attributesDeboundceLog = undefined;\n this.containerResizeObserver?.disconnect();\n this.appManager?.destroy();\n this.cursorManager?.destroy();\n this.extendPluginManager?.destroy();\n WindowManager.container = undefined;\n WindowManager.wrapper = undefined;\n WindowManager.sizer = undefined;\n WindowManager.isCreated = false;\n if (WindowManager.playground) {\n WindowManager.playground.parentNode?.removeChild(WindowManager.playground);\n }\n WindowManager.params = undefined;\n this.emitter.off(\"mainViewScenePathChange\", this.onMainViewScenePathChangeHandler);\n this._iframeBridge?.destroy();\n this._iframeBridge = undefined;\n log(\"Destroyed\");\n }\n\n private bindMainView(divElement: HTMLDivElement, disableCameraTransform: boolean | undefined) {\n if (this.appManager) {\n this.appManager.bindMainView(divElement, Boolean(disableCameraTransform));\n this.cursorManager?.setMainViewDivElement(divElement);\n }\n }\n\n public get canOperate(): boolean {\n if (isRoom(this.displayer)) {\n return (\n (this.displayer as Room).isWritable &&\n (this.displayer as Room).phase === RoomPhase.Connected\n );\n } else {\n return false;\n }\n }\n\n public get room(): Room {\n return this.displayer as Room;\n }\n\n public safeSetAttributes(attributes: any): void {\n if (this.canOperate) {\n this.setAttributes(attributes);\n if (this.attributesDeboundceLog) {\n this.attributesDeboundceLog.logDebouncedShallowMerge(\n \"safeSetAttributes\",\n attributes\n );\n }\n }\n }\n\n public safeUpdateAttributes(keys: string[], value: any): void {\n if (this.canOperate) {\n this.updateAttributes(keys, value);\n if (this.attributesDeboundceLog) {\n this.attributesDeboundceLog.logDebouncedUpdateAttributes(keys, value);\n }\n }\n }\n\n public setPrefersColorScheme(scheme: TeleBoxColorScheme): void {\n this.appManager?.boxManager?.setPrefersColorScheme(scheme);\n }\n\n public cleanCurrentScene(): void {\n log(\"clean current scene\");\n this.focusedView?.cleanCurrentScene();\n this.Logger &&\n this.Logger.info(\n `[WindowManager]: cleanCurrentScene ${this.focusedView?.focusScenePath}`\n );\n }\n\n public redo(): number {\n return this.focusedView?.redo() || 0;\n }\n\n public undo(): number {\n return this.focusedView?.undo() || 0;\n }\n\n public delete(): void {\n this.focusedView?.delete();\n this.Logger &&\n this.Logger.info(`[WindowManager]: delete ${this.focusedView?.focusScenePath}`);\n }\n\n public copy(): void {\n this.focusedView?.copy();\n }\n\n public paste(): void {\n this.focusedView?.paste();\n }\n\n public duplicate(): void {\n this.focusedView?.duplicate();\n }\n\n public insertText(x: number, y: number, text: string | undefined): string {\n return this.focusedView?.insertText(x, y, text) || \"\";\n }\n\n public insertImage(info: ImageInformation): void {\n return this.focusedView?.insertImage(info);\n }\n\n public completeImageUpload(uuid: string, url: string): void {\n return this.focusedView?.completeImageUpload(uuid, url);\n }\n\n public lockImage(uuid: string, locked: boolean): void {\n return this.focusedView?.lockImage(uuid, locked);\n }\n\n public lockImages(locked: boolean): void {\n return this.focusedView?.lockImages(locked);\n }\n\n public refresh() {\n this._refresh();\n this.appManager?.dispatchInternalEvent(Events.Refresh);\n }\n\n /** @internal */\n public _refresh() {\n this.appManager?.mainViewProxy.rebind();\n if (WindowManager.container) {\n this.bindContainer(WindowManager.container);\n }\n this.appManager?.refresher.refresh();\n }\n\n public setContainerSizeRatio(ratio: number) {\n if (!isNumber(ratio) || !(ratio > 0)) {\n throw new Error(\n `[WindowManager]: updateContainerSizeRatio error, ratio must be a positive number. but got ${ratio}`\n );\n }\n WindowManager.containerSizeRatio = ratio;\n this.containerSizeRatio = ratio;\n internalEmitter.emit(\"containerSizeRatioUpdate\", ratio);\n }\n\n private isDynamicPPT(scenes: SceneDefinition[]) {\n const sceneSrc = scenes[0]?.ppt?.src;\n return sceneSrc?.startsWith(\"pptx://\");\n }\n\n private async ensureAttributes() {\n if (isNull(this.attributes)) {\n await wait(50);\n }\n if (isObject(this.attributes)) {\n if (!this.attributes[Fields.Apps]) {\n this.safeSetAttributes({ [Fields.Apps]: {} });\n }\n if (!this.attributes[Fields.Cursors]) {\n this.safeSetAttributes({ [Fields.Cursors]: {} });\n }\n if (!this.attributes[\"_mainScenePath\"]) {\n this.safeSetAttributes({ _mainScenePath: INIT_DIR });\n }\n if (!this.attributes[\"_mainSceneIndex\"]) {\n this.safeSetAttributes({ _mainSceneIndex: 0 });\n }\n if (!this.attributes[Fields.Registered]) {\n this.safeSetAttributes({ [Fields.Registered]: {} });\n }\n if (!this.attributes[Fields.IframeBridge]) {\n this.safeSetAttributes({ [Fields.IframeBridge]: {} });\n }\n }\n }\n\n private _iframeBridge?: IframeBridge;\n public getIframeBridge() {\n if (!this.appManager) {\n throw new Error(\"[WindowManager]: should call getIframeBridge() after await mount()\");\n }\n this._iframeBridge || (this._iframeBridge = new IframeBridge(this, this.appManager));\n return this._iframeBridge;\n }\n\n public useExtendPlugin(extend: ExtendPluginInstance<any>) {\n this.extendPluginManager?.use(extend);\n }\n}\n\nsetupBuiltin();\n\nexport * from \"./typings\";\n\nexport { BuiltinApps } from \"./BuiltinApps\";\nexport type { BuiltinAppOptions } from \"./BuiltinApps\";\nexport type { PublicEvent } from \"./callback\";\n\nexport * from \"./ExtendPluginManager\";\n"],"names":["Events","MagixEventName","EnsureReconnectEvent","AppAttributes","AppEvents","AppStatus","CursorState","REQUIRE_VERSION","MIN_WIDTH","MIN_HEIGHT","DEFAULT_CONTAINER_RATIO","ROOT_DIR","INIT_DIR","SETUP_APP_DELAY","callbacks","Emittery","AppCreateQueue","item","error","internalEmitter","DatabaseName","db","store","initDb","createDb","setItem","key","val","addRecord","getItem","query","resolve","reject","request","e","event","payload","Prefix","TIMEOUT","getScript","url","text","fetchWithTimeout","executeScript","appName","result","loadApp","name","getResult","define","resource","options","timeout","controller","id","response","AppRegister","fn","params","paramSrc","downloadApp","appClass","app","emitter","kind","kindEmitter","appRegister","genAppId","impl","_a","_b","v4","setViewFocusScenePath","view","focusScenePath","setScenePath","room","scenePath","nextScenePath","getScenePath","dir","index","scene","entireScenes","removeScenes","ScenePathType","addEmitterOnceListener","listener","debounce","mode","makeValidScenePath","displayer","scenes","firstSceneName","putScenes","path","i","isValidScenePath","parseSceneDir","sceneList","sceneDir","ensureValidScenePath","getVersionNumber","version","versionString","s","wait","time","isRootDirPage","prev","cur","AppListeners","manager","data","state","AppCreateError","AppNotRegisterError","AppManagerNotInitError","WhiteWebSDKInvalidError","ParamsInvalidError","BoxNotCreatedError","InvalidScenePath","BoxManagerNotFoundError","BindContainerRoomPhaseInvalidError","t","r","o","onObjectByEvent","object","func","listenUpdated","events","unlistenUpdated","reaction","safeListenPropsUpdated","getProps","callback","onDestroyed","disposeListenUpdated","disposeReaction","props","isObject","UpdateEventKind","StorageEvent","message","plainObjectKeys","isRef","has","makeRef","v","genUID","STORAGE_NS","Storage","context","defaultState","SideEffectManager","rawState","get","rawValue","handler","keys","value","refValue","size","mapValues","noop","defaultValue","actions","diffs","action","oldValue","newValue","k","curValue","AppContext","boxManager","appId","appProxy","appOptions","autorun","toJS","listenDisposed","unlistenDisposed","appAttr","dom","box","attributes","storeId","storage","args","appScopeEvent","nextIndex","after","needRemoveIndex","type","AppPageStateImpl","node","eventemitter3","module","prefix","EE","once","addListener","evt","clearEvent","EventEmitter2","names","handlers","i2","l","ee","listeners","a1","a2","a3","a4","a5","len","length","j","EventEmitter","__assign","t2","s2","n","p","__rest","e2","prevTime","onNextFrame","timestamp","timeToCall","createStep","setRunNextFrame","processToRun","processToRunNextFrame","numThisFrame","isProcessing2","cancelled","toKeepAlive","renderStep","process","indexOfCallback","frame2","process_1","keepAlive","immediate","addToCurrentBuffer","buffer","maxElapsed","defaultElapsed","useDefaultElapsed","willRunNextFrame","isProcessing","frame","stepsOrder","setWillRunNextFrame","willRun","steps","acc","sync","step","startLoop","processStep","stepId","processFrame","clamp$1","min","max","sanitize","singleColorRegex","number","alpha","scale","createUnitType","unit","degrees","percent","px","progressPercentage","getValueFromFunctionString","clampRgbUnit","isRgba","isHsla","getValuesAsArray","splitColorValues","terms","values","valuesArray","rgbaTemplate","red","green","blue","alpha2","hslaTemplate","hue","saturation","lightness","rgbUnit","isColorString","color2","colorType","rgba","alpha$1","hsla","hex","r2","g","b","color","createStyler","onRead2","onRender2","uncachedValues","_c","useCache","_a2","changedValues","hasChanged","setValue","currentValue","styler","forceRead","useCached","forceRender","CAMEL_CASE_PATTERN","REPLACE_TEMPLATE","camelToDash","str","camelCache","dashCache","prefixes","numPrefixes","isBrowser","testElement","setDashPrefix","prefixed","testPrefix","noPrefix","prefixedPropertyName","setServerProperty","prefixer","asDashCase","cache2","axes","order","transformProps","axesAcc","axesKey","transformPropDictionary","dict","isTransformProp","sortTransformProps","a","transformOriginProps","isTransformOriginProp","int","valueTypes","getValueType","getValueAsType","SCROLL_LEFT","SCROLL_TOP","scrollKeys","blacklist","translateAlias","isCustomTemplate","buildTransform","transform","transformKeys","transformIsDefault","enableHardwareAcceleration","allowTransformNone","transformString","transformHasZ","numTransformKeys","buildStyleProperty","styles","transformOrigin","isDashCase","hasTransform","hasTransformOrigin","valueType","valueAsType","createStyleBuilder","_d","_e","onRead","element","preparseOutput","defaultValueType","domValue","onRender","buildStyles","hasCSSVariable","numChangedValues","cssStyler","createCssStyler","camelCaseAttributes","defaultOrigin","svgAttrsTemplate","progressToPixels","progress","unmeasured","calcOrigin","origin","offset","calculateSVGTransformOrigin","dimensions","originX","originY","svgStyleConfig","buildSVGAttrs","totalPathLength","cssBuilder","attrs","attrX","attrY","pathLength","pathSpacing","pathOffset","style2","attrKey","createAttrBuilder","getDimensions","getSVGElementDimensions","isPath","svgStyler","buildAttrs","svg","viewport","scrollTop","scrollLeft","cache","isHTMLElement","isSVGElement","createDOMStyler","getStyler","nodeOrSelector","shallowequal","objA","objB","compare","compareContext","ret","keysA","keysB","bHasOwnProperty","idx","valueA","valueB","e$1","s$1","t$1","r$1","o2","t3","s3","r3","e3","u2","e4","t4","i3","c2","u","c","TELE_BOX_COLOR_SCHEME","TELE_BOX_COLOR_SCHEME2","TELE_BOX_STATE","TELE_BOX_STATE2","TELE_BOX_EVENT","TELE_BOX_EVENT2","TELE_BOX_DELEGATE_EVENT","TELE_BOX_DELEGATE_EVENT2","TELE_BOX_RESIZE_HANDLE","TELE_BOX_RESIZE_HANDLE2","TeleBoxDragHandleType","clamp","preventEvent","ev","flattenEvent","genUniqueKey","defaultBoxCount","getBoxDefaultName","isTruthy","isFalsy","DefaultTitleBar","readonly","title","buttons","onEvent","onDragStart","namespace","boxStatus","forceTop","forceNormal","now","clientX","clientY","state2","btn","$titleArea","$buttonsContainer","iconClassName","isActive","teleTitleBarBtnIndex","$btn","target","$dragArea","className","TeleBox","prefersColorScheme","darkMode","visible","width","height","minWidth","minHeight","x","y","minimized","maximized","resizable","draggable","fence","fixRatio","focus","zIndex","titleBar","content","footer","containerRect","collectorRect","lastNotMinimizedBoxStatus","isDragContent","combine","createVal","boxStatus$","lastNotMinimizedBoxStatus$","prefersColorScheme$","prefersColorScheme2","_","skipUpdate","darkMode$","prefersDark","darkMode2","containerRect$","collectorRect$","forceTop$","forceTop2","forceNormal$","forceNormal2","isDragContent$","title$","title2","visible$","visible2","readonly$","readonly2","resizable$","draggable$","fence$","fixRatio$","zIndex$","zIndex2","focus$","focus2","minimized$","minimized2","maximized$","maximized2","state$","boxStatus2","minSize$","intrinsicSize$","minSize","size$","intrinsicSize","visualSize$","containerRect2","collectorRect2","intrinsicCoord$","coord","coord$","intrinsicCoord","lastNotMinimizedBoxStatus2","$userContent$","$userFooter$","$userStyles$","newHeight","container","$styles","root","bindClassName","el","predicate","wrappedClassName","minimizedClassName","maximizedClassName","MAXIMIZED_TIMER_ID","boxStyler","translateX","translateY","absoluteWidth","absoluteHeight","$boxMain","$titleBar","$contentWrap","$content","last$userStyles","$userStyles","last$userContent","$userContent","$footer","last$userFooter","$userFooter","$resizeHandles","handleType","$handle","TRACKING_DISPOSER_ID","transformingClassName","$trackMask","trackStartX","trackStartY","trackStartWidth","trackStartHeight","trackStartPageX","trackStartPageY","trackingHandle","handleTracking","pageX","pageY","offsetX","offsetY","xOverflowOffset","yOverflowOffset","handleTrackEnd","handleTrackStart","cursor","collectorSVG","TeleBoxCollector","onClick","getBoxesStatus","boxesStatus","status","hasMinimizedBox","$collector","TELE_BOX_MANAGER_EVENT","TELE_BOX_MANAGER_EVENT2","MaxTitleBar","config","children","$tab","rect","boxes","$titlesArea","AppMenu","minimizedBoxesStatus","arr","appItem","titleDiv","items","TeleBoxManager","collector","useBoxesStatus","currentTopBox","topBox2","prefersDark$","prefersDark2","fence2","collector$","collector2","rootRect","closeBtnClassName","checkFocusBox","maxNormalBoxZIndex","maxMaximizedBoxZIndex","targetBox","isFocusChanged","maxTopBox","boxId","oldBoxStatus","newTopBox","curTopBox","_skipUpdate","minimizedBoxes","notMinimizedBoxes","maximizedBoxes","normalBoxes","lastNotMinimizedBoxesStatus","maxZIndex","smartPosition","box2","__","topBox","boxID","boxOrID","effectFunc","index2","deletedBoxes","focusChanged","vx","forceTopBox","maxX","vy","maxY","maximizedBox","currentBox","createBoxManager","boxEmitter","BoxManagerClass","getExtendClass","BoxManager","WindowManager","createTeleBoxManagerConfig","colorScheme","minwidth","minheight","createBoxConfig","map","initManagerState","TeleBoxManagerClass","TeleBoxCollectorClass","formatAttributesLogObjectKey","stringifyForAttributesLog","seen","obj","nextSeen","isShallowMergeAttributesRecord","ARGUS_LOG_INFO_MAX_LENGTH","truncateArgusLogInfoMessage","ellipsis","keysPathEqual","log","LocalConsole","debounceTime","ms","ArgusLog","logger","body","label","debounced","emit","segments","parts","keysCopy","last","setupWrapper","playground","sizer","wrapper","mainViewElement","checkVersion","WhiteVersion","findMemberByUid","uid","roomMembers","maxMemberId","member","createInvisiblePlugin","promise","wasReadonly","canOperate","isRoomTokenWritable","pRetry","count","abort","interval","run","blank_object","run_all","fns","is_function","thing","safe_not_equal","src_url_equal_anchor","src_url_equal","element_src","is_empty","append","insert","anchor","detach","space","attr","attribute","set_data","set_style","important","current_component","set_current_component","component","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","add_render_callback","seen_callbacks","flushidx","saved_component","update","$$","dirty","flush_render_callbacks","filtered","targets","outroing","transition_in","block","local","mount_component","customElement","fragment","after_update","new_on_destroy","destroy_component","detaching","make_dirty","init","instance","create_fragment","not_equal","append_styles","parent_component","ready","rest","nodes","SvelteComponent","$$props","cursorName","tagName","backgroundColor","appliance","src","avatar","theme","cursorTagBackgroundColor","opacity","pencilEraserSize","custom","computedAvatarStyle","hasName","isEmpty","$$invalidate","hasTagName","hasAvatar","display","isLaserPointer","ApplianceNames","isLaserPointerPencilEraser","pencilEraserSize3ImageOffset","staticCircle","circleUrl","crossUrl","cssCursor","makeStyleContent","$style","enableLocal","memberState","shapeAppliances","remoteIcon","applianceName","Cursor","memberId","cursorManager","position","focusView","viewRect","viewCamera","style","point","wrapperRect","App","memberApplianceName","memberColorHex","userApplianceIcons","applianceIcons","iconsKey","userApplianceSrc","customApplianceSrc","omit","pencil","selector","eraser","shape","laser","pencilEraser1","pencilEraser2","pencilEraser3","ApplianceMap","LocalCursorSideEffectId","CursorManager","enableCursor","cursorOptions","cursorInstance","isTouch","isRoom","focusApp","div","self","isPencilEraser","baseClass","extendClass","AppManager","AttributesDelegate","AppProxy","Fields","isDynamicPPT","attrNames","pick","stateName","camera","cursorState","mainView","oldState","createAttributesDelegate","AttributesDelegateClass","calculateNextIndex","pageState","maxIndex","_AppProxy","isAddApp","sceneIndex","appState","fullPath","appImpl","appParams","AppContextClass","boxInitState","currentMainViewScenePath","err","currentAppState","AppProxyClass","sceneState","eventName","fullScenePath","needCloseBox","cleanAttrs","ViewManager","createView","setDefaultCameraBound","MainViewProxy","ViewMode","mainViewCamera","isWritable","observedSize","wrapperMatchesDom","viewIsStale","isEqual","playgroundSizeChangeListener","_f","_h","_g","reason","viewWidth","viewHeight","targetElement","screen","resizeObserver","mainViewScenePath","divElement","disableCameraTransform","AnimationMode","centerX","centerY","needScale","RedoUndo","focused","redoListener","undoListener","prevFocused","changed","windowManger","sceneName","isRecreate","currentIndex","entries","apps","registered","ids","isReadonly","isManualWritable","pageName","isInteger","removing","reconnectRefresher","isPlayer","needClose","mainSceneIndex","mainScenePath","redoUndo","appIds","orderedAppIds","orderBy","hasRoot","visualViewport","current","needFocus","scenePathType","validScenePath","focusAppId","reconnected","ResizeObserver","ResizeObserverPolyfill","ContainerResizeObserver","containerResizeObserver","PageStateImpl","ReconnectRefresher","ctx","phase","RoomPhase","isFunction","disposer","replaceRoomFunction","delegateSeekToProgressTime","disable","_scalePptToFit","_putScenes","currentScenePath","delegateRemoveScenes","originRemoveScenes","player","originSeek","newSeek","seekResult","loadAppMediaPlayer","mod","loadAppDocsViewer","loadAppPresentation","setupBuiltin","BuiltinApps","RefreshIDs","times","iteratee","_IframeBridge","appManager","PlayerPhase","iframeSrc","plugin","initAttributes","wrapperDidMountListener","didMount","didUpdate","iframe","animationMode","page","genScenes","loadListener","_state","cameraState","setWidth","setHeight","transformOriginX","transformOriginY","iframeXDiff","iframeYDiff","cssList","_attributes","zIndexString","css","eventPayload","currentApplianceName","IframeBridge","ExtendPlugin","ExtendPluginManager","extend","resolveAppOptions","registeredOptions","override","SlideAppKind","PresentationAppKind","MinDocsPageScale","MaxDocsPageScale","isValidDocsPageScale","_WindowManager","InvisiblePlugin","backgroundImage","backgroundImageRect","backgroundImageCSS","backgroundImageVisible","containerSizeRatio","debug","AppManagerClass","CursorManagerClass","chessboard","overwriteStyles","fullscreen","Errors.BindContainerRoomPhaseInvalidError","mergeAppOptions","Errors.AppManagerNotInitError","Errors.ParamsInvalidError","Errors.AppCreateError","Errors.InvalidScenePath","appScenePath","prevIndex","boxState","cursorUIDs","isDocsViewerApp","isPresentationApp","isSlideApp","appKind","input","click","pureCamera","rectangle","cameraBound","scheme","info","uuid","locked","ratio","isNumber","sceneSrc","isNull","_manager"],"mappings":"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"}