@netless/window-manager 0.2.18 → 0.2.19-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AppListener.d.ts +1 -5
- package/dist/AppManager.d.ts +1 -0
- package/dist/AttributesDelegate.d.ts +0 -1
- package/dist/Cursor/Cursor.d.ts +0 -1
- package/dist/Cursor/index.d.ts +9 -10
- package/dist/MainView.d.ts +10 -1
- package/dist/ViewManager.d.ts +3 -14
- package/dist/constants.d.ts +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/AppListener.ts +0 -4
- package/src/AppManager.ts +23 -11
- package/src/AppProxy.ts +8 -4
- package/src/AttributesDelegate.ts +0 -10
- package/src/Cursor/Cursor.ts +0 -4
- package/src/Cursor/index.ts +59 -70
- package/src/MainView.ts +78 -13
- package/src/constants.ts +1 -1
- package/src/index.ts +7 -26
- package/src/viewManager.ts +12 -97
package/dist/AppListener.d.ts
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
-
import type { ViewManager } from "./ViewManager";
|
2
1
|
import type { AppProxy } from "./AppProxy";
|
3
2
|
import type { AppManager } from "./AppManager";
|
4
|
-
import type { WindowManager } from "./index";
|
5
3
|
export declare class AppListeners {
|
6
4
|
private manager;
|
7
|
-
private windowManager;
|
8
|
-
private viewManager;
|
9
5
|
private appProxies;
|
10
6
|
private displayer;
|
11
7
|
private boxManager;
|
12
|
-
constructor(manager: AppManager,
|
8
|
+
constructor(manager: AppManager, appProxies: Map<string, AppProxy>);
|
13
9
|
addListeners(): void;
|
14
10
|
removeListeners(): void;
|
15
11
|
private mainMagixEventListener;
|
package/dist/AppManager.d.ts
CHANGED
@@ -31,6 +31,7 @@ export declare class AppManager {
|
|
31
31
|
*/
|
32
32
|
attributesUpdateCallback(apps: any): Promise<void>;
|
33
33
|
private onAppDelete;
|
34
|
+
bindMainView(divElement: HTMLDivElement, disableCameraTransform: boolean): void;
|
34
35
|
addApp(params: AddAppParams, isDynamicPPT: boolean): Promise<string | undefined>;
|
35
36
|
private beforeAddApp;
|
36
37
|
private afterAddApp;
|
@@ -37,7 +37,6 @@ export declare class AttributesDelegate {
|
|
37
37
|
updateAppState(appId: string, stateName: AppAttributes, state: any): void;
|
38
38
|
cleanAppAttributes(id: string): void;
|
39
39
|
cleanFocus(): void;
|
40
|
-
cleanAttributes(): void;
|
41
40
|
getAppSceneIndex(id: string): any;
|
42
41
|
getAppScenePath(id: string): any;
|
43
42
|
getMainViewScenePath(): any;
|
package/dist/Cursor/Cursor.d.ts
CHANGED
@@ -30,7 +30,6 @@ export declare class Cursor {
|
|
30
30
|
private get memberOpacity();
|
31
31
|
get cursorState(): CursorState | undefined;
|
32
32
|
get cursorPosition(): Position | undefined;
|
33
|
-
getFocusBox(): import("@netless/telebox-insider/dist/TeleBox").ReadonlyTeleBox | undefined;
|
34
33
|
private autoHidden;
|
35
34
|
private createCursor;
|
36
35
|
private initProps;
|
package/dist/Cursor/index.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { Cursor } from
|
2
|
-
import { WindowManager } from
|
3
|
-
import type { PositionType } from
|
4
|
-
import type { RoomMember } from "white-web-sdk";
|
1
|
+
import { Cursor } from "./Cursor";
|
2
|
+
import { WindowManager } from "../index";
|
3
|
+
import type { PositionType } from "../AttributesDelegate";
|
4
|
+
import type { RoomMember, View } from "white-web-sdk";
|
5
5
|
import type { AppManager } from "../AppManager";
|
6
6
|
export declare type EventType = {
|
7
7
|
type: PositionType;
|
@@ -24,17 +24,16 @@ export declare class CursorManager {
|
|
24
24
|
private get observerId();
|
25
25
|
get cursors(): any;
|
26
26
|
get boxState(): import("@netless/telebox-insider").TELE_BOX_STATE;
|
27
|
-
get
|
28
|
-
|
27
|
+
get focusView(): View | undefined;
|
28
|
+
private mouseMoveListener;
|
29
|
+
private touchMoveListener;
|
30
|
+
private updateCursor;
|
31
|
+
private getPoint;
|
29
32
|
/**
|
30
33
|
* 因为窗口内框在不同分辨率下的大小不一样,所以这里通过来鼠标事件的 target 来判断是在主白板还是在 APP 中
|
31
34
|
*/
|
32
35
|
private getType;
|
33
|
-
private mouseMoveListener;
|
34
|
-
private touchMoveListener;
|
35
36
|
private initCursorAttributes;
|
36
|
-
getFocusBox(): import("@netless/telebox-insider/dist/TeleBox").ReadonlyTeleBox | undefined;
|
37
|
-
private updateCursor;
|
38
37
|
private setNormalCursorState;
|
39
38
|
private mouseLeaveListener;
|
40
39
|
updateContainerRect(): void;
|
package/dist/MainView.d.ts
CHANGED
@@ -5,18 +5,27 @@ export declare class MainViewProxy {
|
|
5
5
|
private scale?;
|
6
6
|
private store;
|
7
7
|
private started;
|
8
|
+
private mainViewIsAddListener;
|
9
|
+
private mainView;
|
8
10
|
constructor(manager: AppManager);
|
11
|
+
start(): void;
|
9
12
|
private get observerId();
|
10
13
|
private cameraReaction;
|
11
14
|
private sizeReaction;
|
12
15
|
get view(): View;
|
16
|
+
createMainView(): View;
|
13
17
|
private cameraListener;
|
18
|
+
addMainViewListener(): void;
|
19
|
+
removeMainViewListener(): void;
|
20
|
+
private mainViewClickListener;
|
21
|
+
mainViewClickHandler(): Promise<void>;
|
14
22
|
private sizeListener;
|
15
23
|
setMainViewSize: import("lodash").DebouncedFunc<(size: any) => void>;
|
16
24
|
private addCameraListener;
|
17
25
|
private removeCameraListener;
|
26
|
+
private mainViewCameraListener;
|
27
|
+
switchViewModeToWriter(): void;
|
18
28
|
moveCameraToContian(size: Size): void;
|
19
29
|
moveCamera(camera: Camera): void;
|
20
|
-
start(): void;
|
21
30
|
stop(): void;
|
22
31
|
}
|
package/dist/ViewManager.d.ts
CHANGED
@@ -1,31 +1,20 @@
|
|
1
|
+
import { Base } from './Base';
|
1
2
|
import type { Displayer, View } from "white-web-sdk";
|
2
3
|
import type { AppManager } from "./AppManager";
|
3
4
|
import type { CameraStore } from "./Utils/CameraStore";
|
4
|
-
import { Base } from './Base';
|
5
5
|
export declare class ViewManager extends Base {
|
6
6
|
private displayer;
|
7
7
|
private cameraStore;
|
8
|
-
mainView: View;
|
9
8
|
private views;
|
10
|
-
private mainViewIsAddListener;
|
11
9
|
private timer?;
|
10
|
+
private mainViewProxy;
|
12
11
|
constructor(displayer: Displayer, manager: AppManager, cameraStore: CameraStore);
|
13
12
|
get currentScenePath(): string;
|
14
|
-
|
15
|
-
setMainViewSize: import("lodash").DebouncedFunc<(size: any) => void>;
|
13
|
+
get mainView(): View;
|
16
14
|
createView(appId: string): View;
|
17
15
|
destroyView(appId: string): void;
|
18
16
|
private releaseView;
|
19
17
|
getView(appId: string): View | undefined;
|
20
|
-
private addMainViewCameraListener;
|
21
|
-
private removeMainViewCameraListener;
|
22
|
-
switchMainViewToFreedom(): void;
|
23
|
-
switchMainViewModeToWriter(): void;
|
24
|
-
addMainViewListener(): void;
|
25
|
-
removeMainViewListener(): void;
|
26
|
-
private mainViewClickListener;
|
27
|
-
mainViewClickHandler(): Promise<void>;
|
28
|
-
private mainViewCameraListener;
|
29
18
|
switchMainViewToWriter(): Promise<boolean> | undefined;
|
30
19
|
refreshViews(): void;
|
31
20
|
setMainViewFocusScenePath(): void;
|
package/dist/constants.d.ts
CHANGED
@@ -35,7 +35,7 @@ export declare enum CursorState {
|
|
35
35
|
export declare const REQUIRE_VERSION = "2.13.16";
|
36
36
|
export declare const MIN_WIDTH: number;
|
37
37
|
export declare const MIN_HEIGHT: number;
|
38
|
-
export declare const SET_SCENEPATH_DELAY =
|
38
|
+
export declare const SET_SCENEPATH_DELAY = 100;
|
39
39
|
export declare const DEFAULT_COLLECTOR_STYLE: {
|
40
40
|
right: string;
|
41
41
|
bottom: string;
|
package/dist/index.d.ts
CHANGED
@@ -4,8 +4,8 @@ import { CursorManager } from './Cursor';
|
|
4
4
|
import './style.css';
|
5
5
|
import '@netless/telebox-insider/dist/style.css';
|
6
6
|
import type { Apps } from "./AttributesDelegate";
|
7
|
-
import { InvisiblePlugin, ViewMode
|
8
|
-
import type { Displayer, SceneDefinition, View, Room, InvisiblePluginContext, Camera, AnimationMode, CameraBound, Point, Rectangle } from "white-web-sdk";
|
7
|
+
import { InvisiblePlugin, ViewMode } from "white-web-sdk";
|
8
|
+
import type { Displayer, SceneDefinition, View, Room, InvisiblePluginContext, Camera, AnimationMode, CameraBound, Point, Rectangle, ViewVisionMode } from "white-web-sdk";
|
9
9
|
import type { AppListeners } from "./AppListener";
|
10
10
|
import type { NetlessApp, RegisterParams } from "./typings";
|
11
11
|
import type { TELE_BOX_STATE } from "./BoxManager";
|
@@ -214,7 +214,6 @@ export declare class WindowManager extends InvisiblePlugin<WindowMangerAttribute
|
|
214
214
|
get room(): Room;
|
215
215
|
safeSetAttributes(attributes: any): void;
|
216
216
|
safeUpdateAttributes(keys: string[], value: any): void;
|
217
|
-
private safeDispatchMagixEvent;
|
218
217
|
private isDynamicPPT;
|
219
218
|
private static checkVersion;
|
220
219
|
private ensureAttributes;
|
package/dist/index.es.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
var e=Object.defineProperty,t=Object.defineProperties,i=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,n=(t,i,s)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[i]=s,o=(e,t)=>{for(var i in t||(t={}))a.call(t,i)&&n(e,i,t[i]);if(s)for(var i of s(t))r.call(t,i)&&n(e,i,t[i]);return e},h=(e,s)=>t(e,i(s));import c from"@netless/app-docs-viewer";import d,{setOptions as p}from"@netless/app-media-player";import g from"emittery";import l from"p-retry";import{ViewVisionMode as u,autorun as m,reaction as M,toJS as w,listenUpdated as I,unlistenUpdated as A,listenDisposed as y,unlistenDisposed as C,AnimationMode as b,UpdateEventKind as x,RoomPhase as v,isPlayer as S,isRoom as N,ScenePathType as D,ApplianceNames as T,WhiteWebSdk as j,InvisiblePlugin as f,ViewMode as L,WhiteVersion as E}from"white-web-sdk";import{debounce as B,get as V,pick as P,isEmpty as z,maxBy as U,isEqual as k,isFunction as O,omit as Q,isBoolean as Z,isNull as R,isObject as W}from"lodash";import{TELE_BOX_MANAGER_EVENT as G,TELE_BOX_STATE as F,TeleBoxCollector as Y,TeleBoxManager as H}from"@netless/telebox-insider";import{ResizeObserver as X}from"@juggle/resize-observer";import{v4 as J}from"uuid";let K,q;const $=async()=>{K=await new Promise(((e,t)=>{const i=indexedDB.open("__WindowManagerAppCache",2);i.onerror=e=>{t(e)},i.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains("apps")||(q=t.createObjectStore("apps",{keyPath:"kind"}),q.createIndex("kind","kind",{unique:!0}))},i.onsuccess=()=>{const t=i.result;e(t)}}))},_=(e,t)=>{var i,s;if(K)return i=K,s={kind:e,sourceCode:t},new Promise(((e,t)=>{const a=i.transaction(["apps"],"readwrite").objectStore("apps").add(s);a.onsuccess=()=>e(),a.onerror=()=>t()}))},ee=async e=>{return K?await(t=K,i=e,new Promise(((e,s)=>{const a=t.transaction(["apps"]).objectStore("apps").index("kind").get(i);a.onerror=e=>s(e),a.onsuccess=()=>{a.result?e(a.result):e(null)}}))):null;var t,i};const te=async e=>{const t=await ee(e);if(t)return t;{const t=await async function(e,t){const{timeout:i=1e4}=t,s=new AbortController,a=setTimeout((()=>s.abort()),i),r=await fetch(e,h(o({},t),{signal:s.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(a),r}(e,{timeout:1e4}),i=await t.text();return await _(e,i),i}},ie=(e,t)=>{let i=Function(e+`;return ${t}`)();return void 0===i&&(i=window[t]),i};const se=new class{constructor(){this.kindEmitters=new Map,this.registered=new Map,this.appClassesCache=new Map,this.appClasses=new Map}async register(e){this.registered.set(e.kind,e);const t=e.src;let i;if(i="string"==typeof t?async()=>{const i=await(async(e,t,i)=>{const s=i||"NetlessApp"+t,a=await te(e);try{return ie(a,s)}catch(r){if(r.message.includes("Can only have one anonymous define call per script file")){const e=window.define;return"function"==typeof e&&e.amd&&delete e.amd,ie(a,s)}}})(t,e.kind);if(i)return i;throw new Error(`[WindowManager]: load remote script failed, ${t}`)}:"function"==typeof t?t:async()=>t,this.appClasses.set(e.kind,(async()=>{let t=this.appClassesCache.get(e.kind);return t||(t=i(),this.appClassesCache.set(e.kind,t)),t})),e.addHooks){const t=this.createKindEmitter(e.kind);t&&e.addHooks(t)}}async notifyApp(e,t,i){const s=this.kindEmitters.get(e);await(null==s?void 0:s.emit(t,i))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new g;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}},ae=(e,t)=>{e.focusScenePath!==t&&(e.focusScenePath=t)},re=(e,t)=>{e&&e.isWritable&&e.state.sceneState.scenePath!==t&&e.setScenePath(t)},ne=(e,t)=>{e.mode!==t&&(e.mode=t)},oe=B(((e,t)=>{e.emit("mainViewModeChange",t)}),200),he=e=>{const t=e.split(".").map((e=>e.padStart(2,"0"))).join("");return parseInt(t)},ce=e=>new Promise((t=>setTimeout(t,e)));var de,pe;(pe=de||(de={})).AppMove="AppMove",pe.AppFocus="AppFocus",pe.AppResize="AppResize",pe.AppBlur="AppBlur",pe.AppBoxStateChange="AppBoxStateChange",pe.AppSnapshot="AppSnapshot",pe.GetAttributes="GetAttributes",pe.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",pe.InitReplay="InitReplay",pe.WindowCreated="WindowCreated",pe.SetMainViewScenePath="SetMainViewScenePath",pe.SetMainViewSceneIndex="SetMainViewSceneIndex",pe.SwitchViewsToFreedom="SwitchViewsToFreedom";var ge,le,ue,me,Me,we,Ie;(le=ge||(ge={})).Size="size",le.Position="position",le.SnapshotRect="SnapshotRect",le.SceneIndex="SceneIndex",(me=ue||(ue={})).setBoxSize="setBoxSize",me.setBoxMinSize="setBoxMinSize",me.destroy="destroy",(Me||(Me={})).StartCreate="StartCreate",(Ie=we||(we={})).Leave="leave",Ie.Normal="normal";const Ae=340/720,ye=340/720,Ce={right:"10px",bottom:"15px",position:"absolute"};class be{constructor(e,t,i,s){this.manager=e,this.windowManager=t,this.viewManager=i,this.appProxies=s,this.displayer=this.manager.displayer,this.boxManager=this.manager.boxManager,this.mainMagixEventListener=e=>{if(e.authorId!==this.displayer.observerId){const t=e.payload;switch(t.eventName){case de.AppMove:this.appMoveHandler(t.payload);break;case de.AppResize:this.appResizeHandler(t.payload);break;case de.AppBlur:this.appBlurHandler(t.payload);break;case de.AppBoxStateChange:this.appBoxStateHandler(t.payload);break;case de.AppSnapshot:this.appSnapshotHandler(t.payload);break;case de.SwitchViewsToFreedom:this.switchViewsToFreedomHandler()}}},this.appMoveHandler=e=>{this.boxManager.moveBox(e)},this.appResizeHandler=e=>{var t;this.boxManager.resizeBox(Object.assign(e,{skipUpdate:!0})),null==(t=this.manager.room)||t.refreshViewSize()},this.appBlurHandler=e=>{var t;const i=this.appProxies.get(e.appId);i&&(i.appEmitter.emit("writableChange",!1),(null==(t=i.view)?void 0:t.mode)===u.Writable&&this.manager.viewManager.refreshViews())},this.appBoxStateHandler=e=>{this.boxManager.setBoxState(e.state)},this.appSnapshotHandler=e=>{const t=this.boxManager.getBox(e.appId);t&&t.setSnapshot(e.rect)},this.switchViewsToFreedomHandler=()=>{this.manager.viewManager.freedomAllViews()}}addListeners(){this.displayer.addMagixEventListener("__WindowManger",this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener("__WindowManger",this.mainMagixEventListener)}}class xe extends Error{constructor(){super(...arguments),this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class ve extends Error{constructor(){super(...arguments),this.message="[WindowManager]: AppManager must be initialized"}}class Se extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class Ne extends Error{constructor(){super(...arguments),this.message="[WindowManager]: kind must be a valid string"}}class De extends Error{constructor(){super(...arguments),this.message="[WindowManager]: box need created"}}class Te extends Error{constructor(){super(...arguments),this.message='[WindowManager]: ScenePath should start with "/"'}}class je{constructor(e,t,i,s){this.manager=e,this.appId=t,this.appProxy=i,this.appOptions=s,this.mobxUtils={autorun:m,reaction:M,toJS:w},this.objectUtils={listenUpdated:I,unlistenUpdated:A,listenDisposed:y,unlistenDisposed:C},this.store=this.manager.store,this.emitter=i.appEmitter,this.boxManager=this.manager.boxManager,this.isAddApp=i.isAddApp}getDisplayer(){return this.manager.displayer}getAttributes(){return this.appProxy.attributes}getScenes(){const e=this.store.getAppAttributes(this.appId);if(!(null==e?void 0:e.isDynamicPPT))return null==e?void 0:e.options.scenes;{const e=this.manager.appProxies.get(this.appId);if(e)return e.scenes}}getView(){return this.appProxy.view}getInitScenePath(){return this.manager.getAppInitPath(this.appId)}getIsWritable(){return this.manager.canOperate}getBox(){const e=this.boxManager.getBox(this.appId);if(e)return e;throw new De}getRoom(){return this.manager.room}setAttributes(e){this.manager.safeSetAttributes({[this.appId]:e})}updateAttributes(e,t){this.manager.attributes[this.appId]&&this.manager.safeUpdateAttributes([this.appId,...e],t)}async setScenePath(e){this.appProxy.box&&(this.appProxy.box.focus||(this.emitter.emit("focus",!0),await ce(50)),re(this.getRoom(),e))}mountView(e){const t=this.getView();t&&(t.divElement=e,setTimeout((()=>{var e;null==(e=this.getRoom())||e.refreshViewSize()}),1e3))}getAppOptions(){return"function"==typeof this.appOptions?this.appOptions():this.appOptions}}var fe,Le;(Le=fe||(fe={})).Apps="apps",Le.Focus="focus",Le.State="state",Le.BoxState="boxState",Le.MainViewCamera="mainViewCamera",Le.MainViewSize="mainViewSize",Le.Broadcaster="broadcaster",Le.Cursors="cursors",Le.Position="position",Le.CursorState="cursorState",Le.FullPath="fullPath";class Ee{constructor(e){this.manager=e}apps(){return V(this.manager.attributes,[fe.Apps])}get focus(){return V(this.manager.attributes,[fe.Focus])}getAppAttributes(e){return V(this.apps(),[e])}getAppState(e){return V(this.apps(),[e,fe.State])}setupAppAttributes(e,t,i){this.manager.attributes.apps||this.manager.safeSetAttributes({apps:{}});const s=["scenePath","title"];i||s.push("scenes");const a=P(e.options,s),r={kind:e.kind,options:a,isDynamicPPT:i};"string"==typeof e.src&&(r.src=e.src),this.manager.safeUpdateAttributes([fe.Apps,t],r),this.manager.safeUpdateAttributes([fe.Apps,t,fe.State],{[ge.Size]:{},[ge.Position]:{},[ge.SnapshotRect]:{},[ge.SceneIndex]:0})}updateAppState(e,t,i){V(this.manager.attributes,[fe.Apps,e,fe.State])&&this.manager.safeUpdateAttributes([fe.Apps,e,fe.State,t],i)}cleanAppAttributes(e){this.manager.safeUpdateAttributes([fe.Apps,e],void 0),this.manager.safeSetAttributes({[e]:void 0});this.manager.attributes[fe.Focus]===e&&this.cleanFocus()}cleanFocus(){this.manager.safeSetAttributes({[fe.Focus]:void 0})}cleanAttributes(){this.manager.safeSetAttributes({[fe.Apps]:void 0,[fe.BoxState]:void 0,[fe.Focus]:void 0,_mainScenePath:void 0,_mainSceneIndex:void 0})}getAppSceneIndex(e){var t;return null==(t=this.getAppState(e))?void 0:t[ge.SceneIndex]}getAppScenePath(e){var t,i;return null==(i=null==(t=this.getAppAttributes(e))?void 0:t.options)?void 0:i.scenePath}getMainViewScenePath(){return this.manager.attributes._mainScenePath}getMainViewSceneIndex(){return this.manager.attributes._mainSceneIndex}getBoxState(){return this.manager.attributes[fe.BoxState]}setMainViewScenePath(e){this.manager.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.manager.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return V(this.manager.attributes,[fe.MainViewCamera])}getMainViewSize(){return V(this.manager.attributes,[fe.MainViewSize])}setMainViewCamera(e){this.manager.safeSetAttributes({[fe.MainViewCamera]:o({},e)})}setMainViewSize(e){this.manager.safeSetAttributes({[fe.MainViewSize]:o({},e)})}setAppFocus(e,t){t?this.manager.safeSetAttributes({[fe.Focus]:e}):this.manager.safeSetAttributes({[fe.Focus]:void 0})}updateCursor(e,t){V(this.manager.attributes,[fe.Cursors])||this.manager.safeUpdateAttributes([fe.Cursors],{}),V(this.manager.attributes,[fe.Cursors,e])||this.manager.safeUpdateAttributes([fe.Cursors,e],{}),this.manager.safeUpdateAttributes([fe.Cursors,e,fe.Position],t)}updateCursorState(e,t){V(this.manager.attributes,[fe.Cursors,e])||this.manager.safeUpdateAttributes([fe.Cursors,e],{}),this.manager.safeUpdateAttributes([fe.Cursors,e,fe.CursorState],t)}getCursorState(e){return V(this.manager.attributes,[fe.Cursors,e,fe.CursorState])}cleanCursor(e){this.manager.safeUpdateAttributes([fe.Cursors,e],void 0)}setMainViewFocusPath(){const e=this.getMainViewScenePath();e&&ae(this.manager.mainView,e)}}const Be=(...e)=>{Ut.debug&&console.log("[WindowManager]:",...e)};class Ve{constructor(e){this.manager=e,this.store=new Ee(this.manager)}}class Pe extends Ve{constructor(e,t,i,s){var a,r;super(t),this.params=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=e=>{const t=this.store.getAppState(e);if(!t)return;const i=null==t?void 0:t[ge.Position],s=this.store.focus,a=null==t?void 0:t[ge.Size],r=null==t?void 0:t[ge.SnapshotRect],n=null==t?void 0:t[ge.SceneIndex];let c={boxState:this.store.getBoxState()};return i&&(c=h(o({},c),{id:e,x:i.x,y:i.y})),s===e&&(c=h(o({},c),{focus:!0})),a&&(c=h(o({},c),{width:a.width,height:a.height})),r&&(c=h(o({},c),{snapshotRect:r})),n&&(c=h(o({},c),{sceneIndex:n})),c},this.appAttributesUpdateListener=e=>{var t;null==(t=this.manager.refresher)||t.add(e,(()=>m((()=>{const t=this.manager.windowManger.attributes[e];t&&this.appEmitter.emit("attributesUpdate",t)}))))},this.cameraListener=e=>{this.manager.cameraStore.setCamera(this.id,e)},this.kind=e.kind,this.id=i,this.appProxies.set(this.id,this),this.appEmitter=new g,this.appListener=this.makeAppEventListener(this.id);const n=this.params.options;n&&(this.scenePath=n.scenePath,(null==(a=this.appAttributes)?void 0:a.isDynamicPPT)&&this.scenePath?this.scenes=this.manager.displayer.entireScenes()[this.scenePath]:this.scenes=n.scenes),(null==(r=this.params.options)?void 0:r.scenePath)&&(this.createView(),this.addCameraListener()),this.isAddApp=s}get view(){return this.manager.viewManager.getView(this.id)}get isWritable(){var e;return this.manager.canOperate&&!(null==(e=this.box)?void 0:e.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}getFullScenePath(){if(this.scenePath)return V(this.appAttributes,[fe.FullPath],this.scenePath)}setFullPath(e){this.manager.safeUpdateAttributes(["apps",this.id,fe.FullPath],e)}async baseInsertApp(e){var t;const i=this.params;if(i.kind){const s=await(null==(t=se.appClasses.get(i.kind))?void 0:t()),a=se.registered.get(i.kind);if(!s)throw new Error(`[WindowManager]: app load failed ${i.kind} ${i.src}`);return await this.setupApp(this.id,s,i.options,null==a?void 0:a.appOptions),this.boxManager.updateManagerRect(),e&&(this.focusBox(),this.manager.viewManager.switchAppToWriter(this.id),this.store.setMainViewFocusPath()),{appId:this.id,app:s}}throw new Error("[WindowManager]: kind require")}get box(){return this.boxManager.getBox(this.id)}focusBox(){this.boxManager.focusBox({appId:this.id})}async setupApp(e,t,i,s){Be("setupApp",e,t,i);const a=new je(this.manager,e,this,s);try{Vt.once(`${e}${de.WindowCreated}`).then((async()=>{const i=this.getAppInitState(e);this.boxManager.updateBoxState(i),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(e),this.setViewFocusScenePath(),setTimeout((async()=>{const s=await t.setup(a);se.notifyApp(t.kind,"created",{appId:e,result:s}),i&&(i.focus&&this.scenePath&&(this.manager.viewManager.switchAppToWriter(this.id),this.manager.viewManager.setMainViewFocusScenePath()),(null==i?void 0:i.x)&&i.y&&i.snapshotRect||this.boxManager.setBoxInitState(e));const r=this.boxManager.getBox(e);r&&this.boxManager.resizeBox({appId:e,width:r.width+.001,height:r.height+.001,skipUpdate:!0})}),50)})),this.boxManager.createBox({appId:e,app:t,options:i,canOperate:this.manager.canOperate})}catch(r){throw console.error(r),new Error(`[WindowManager]: app setup error: ${r.message}`)}}onSeek(e){this.appEmitter.emit("seek",e);const t=this.getAppInitState(this.id);this.boxManager.updateBoxState(t)}async onReconnected(){this.appEmitter.emit("reconnected",void 0),await this.destroy(!0,!1);const e=this.params,t=new Pe(e,this.manager,this.id,this.isAddApp);await t.baseInsertApp(this.store.focus===this.id)}switchToWritable(){if(this.view)try{if(this.view.mode===u.Writable)return;this.manager.mainView.mode===u.Writable&&(this.store.setMainViewFocusPath(),oe(Pt,u.Freedom),ne(this.manager.mainView,u.Freedom)),ne(this.view,u.Writable)}catch(e){Be("switch view failed",e)}}emitAppSceneStateChange(e){this.appEmitter.emit("sceneStateChange",e)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(e){return(t,i)=>{if(this.manager.canOperate)switch(t){case"setBoxSize":this.boxManager.resizeBox({appId:e,width:i.width,height:i.height,skipUpdate:!1});break;case"setBoxMinSize":this.boxManager.setBoxMinSize({appId:e,minWidth:i.minwidth,minHeight:i.minheight});break;case"setBoxTitle":this.boxManager.setBoxTitle({appId:e,title:i.title});break;case ue.destroy:if("destroyed"===this.status)return;this.destroy(!0,null==i?void 0:i.error),(null==i?void 0:i.error)&&console.error(null==i?void 0:i.error);break;case"focus":this.boxManager.focusBox({appId:this.id}),Vt.emit("focus",{appId:this.id})}}}recoverCamera(){this.manager.cameraStore.recoverCamera(this.id,this.view)}setScenePath(){if(!this.manager.canOperate)return;const e=this.getFullScenePath();this.manager.room&&e&&this.view&&re(this.manager.room,e)}switchToFreedom(){if(this.view&&this.view.mode===u.Writable){const e=this.getFullScenePath();e&&(ae(this.view,e),ne(this.view,u.Freedom))}}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&ae(this.view,e)}addCameraListener(){var e;null==(e=this.view)||e.callbacks.on("onCameraUpdated",this.cameraListener)}removeCameraListener(){var e;null==(e=this.view)||e.callbacks.off("onCameraUpdated",this.cameraListener)}createView(){const e=this.viewManager.createView(this.id);return this.setViewFocusScenePath(),e}async destroy(e,t,i){var s;"destroyed"!==this.status&&(this.status="destroyed",await se.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:i}),this.appEmitter.clearListeners(),Vt.emit(`destroy-${this.id}`,{error:i}),e&&this.boxManager.closeBox(this.id),t&&this.store.cleanAppAttributes(this.id),this.appProxies.delete(this.id),this.manager.cameraStore.deleteCamera(this.id),this.removeCameraListener(),this.manager.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),null==(s=this.manager.refresher)||s.remove(this.id))}async close(){return await this.destroy(!0,!0)}}class ze{constructor(e,t,i,s){this.manager=e,this.mainView=t,this.appProxies=i,this.appBoxMap=new Map,this.store=this.manager.store,this.mainView=t,this.teleBoxManager=this.setupBoxManager(s),this.teleBoxManager.events.on(G.State,(e=>{e&&(Pt.emit("boxStateChange",e),Vt.emit(e,void 0))})),this.teleBoxManager.events.on("removed",(e=>{e.forEach((e=>{Vt.emit("close",{appId:e.id})}))})),this.teleBoxManager.events.on("move",B((e=>{Vt.emit("move",{appId:e.id,x:e.x,y:e.y})}),50)),this.teleBoxManager.events.on("resize",B((e=>{Vt.emit("resize",{appId:e.id,width:e.width,height:e.height})}),200)),this.teleBoxManager.events.on("focused",(e=>{e?this.manager.canOperate?Vt.emit("focus",{appId:e.id}):this.teleBoxManager.update(e.id,{focus:!1}):this.blurFocusBox()})),this.teleBoxManager.events.on("snapshot",(e=>{Vt.emit("snapshot",{appId:e.id,rect:o({},e.rectSnapshot)})}))}get boxState(){return this.teleBoxManager.state}createBox(e){var t,i,s;if(!this.teleBoxManager)return;let{minwidth:a=Ae,minheight:r=ye}=null!=(t=e.app.config)?t:{};const{width:n,height:o}=null!=(i=e.app.config)?i:{},h=(null==(s=e.options)?void 0:s.title)||e.appId,c=this.teleBoxManager.containerRect;a>1&&(a/=c.width),r>1&&(r/=c.height);const d={title:h,minWidth:a,minHeight:r,width:n,height:o,id:e.appId};this.teleBoxManager.create(d),Vt.emit(`${e.appId}${de.WindowCreated}`);const p=this.manager.store.getAppState(e.appId);if(p){const t=V(p,[ge.SnapshotRect]);z(t)&&this.setBoxInitState(e.appId)}}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&(Vt.emit("snapshot",{appId:e,rect:o({},t.rectSnapshot)}),t.state===F.Maximized&&Vt.emit("resize",{appId:e,x:t.x,y:t.y,width:t.width,height:t.height}))}setupBoxManager(e){const t=Ut.wrapper?Ut.wrapper:document.body,i=t.getBoundingClientRect(),s={root:t,containerRect:{x:0,y:0,width:i.width,height:i.height},fence:!1},a=(null==e?void 0:e.collectorContainer)||Ut.wrapper,r=o(o({},Ce),null==e?void 0:e.collectorStyles),n=new Y({styles:r}).mount(a);s.collector=n;const h=new H(s);return this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=h,h}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e){return this.teleBoxManager.remove(e)}boxIsFocus(e){const t=this.getBox(e);return null==t?void 0:t.focus}getFocusBox(){return this.teleBoxManager.query({focus:!0})[0]}getTopBox(){const e=this.teleBoxManager.query();return U(e,"zIndex")}updateBoxState(e){if(!e)return;const t=this.getBox(e.id);t&&(this.teleBoxManager.update(t.id,{x:e.x,y:e.y,width:e.width||.5,height:e.height||.5},!0),setTimeout((()=>{e.boxState&&this.teleBoxManager.state!==e.boxState&&this.teleBoxManager.setState(e.boxState,!0)}),0),setTimeout((()=>{e.snapshotRect&&t.setSnapshot(e.snapshotRect)}),30),setTimeout((()=>{e.focus&&this.teleBoxManager.update(t.id,{focus:!0},!0)}),50))}updateManagerRect(){var e;const t=null==(e=this.mainView.divElement)?void 0:e.getBoundingClientRect();if(t&&t.width>0&&t.height>0){const e={x:0,y:0,width:t.width,height:t.height};this.teleBoxManager.setContainerRect(e),this.appProxies.forEach((e=>{this.teleBoxManager&&e.appEmitter.emit("containerRectUpdate",this.teleBoxManager.containerRect)}))}}moveBox({appId:e,x:t,y:i}){this.teleBoxManager.update(e,{x:t,y:i},!0)}focusBox({appId:e}){this.teleBoxManager.update(e,{focus:!0},!0)}resizeBox({appId:e,width:t,height:i,skipUpdate:s}){this.teleBoxManager.update(e,{width:t,height:i},s)}setBoxMinSize(e){this.teleBoxManager.update(e.appId,{minWidth:e.minWidth,minHeight:e.minHeight},!0)}setBoxTitle(e){this.teleBoxManager.update(e.appId,{title:e.title},!0)}blurAllBox(){this.teleBoxManager.updateAll({focus:!1})}blurFocusBox(){const e=this.teleBoxManager.query({focus:!0});if(e.length){const t=e[0];this.teleBoxManager.update(t.id,{focus:!1})}}updateAll(e){this.teleBoxManager.updateAll(e)}setBoxState(e){this.teleBoxManager.setState(e,!0),Pt.emit("boxStateChange",e)}}class Ue{constructor(){this.cameras=new Map}setCamera(e,t){this.cameras.set(e,t)}getCamera(e){return this.cameras.get(e)}deleteCamera(e){this.cameras.delete(e)}recoverCamera(e,t){const i=this.cameras.get(e);i&&t&&t.moveCamera(h(o({},i),{animationMode:b.Immediately}))}}class ke{constructor(e){this.manager=e,this.store=this.manager.store,this.started=!1,this.cameraReaction=()=>M((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[fe.MainViewCamera]}),(e=>{e&&e.id!==this.observerId&&this.moveCamera(e)}),{fireImmediately:!0}),this.sizeReaction=()=>M((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[fe.MainViewSize]}),(e=>{e&&e.id!==this.observerId&&(this.moveCameraToContian(e),this.moveCamera(this.store.getMainViewCamera()))}),{fireImmediately:!0}),this.cameraListener=e=>{var t;this.store.setMainViewCamera(h(o({},e),{id:this.observerId})),(null==(t=this.store.getMainViewSize())?void 0:t.id)!==this.observerId&&this.setMainViewSize(this.view.size)},this.sizeListener=e=>{this.setMainViewSize(e)},this.setMainViewSize=B((e=>{this.manager.store.setMainViewSize(h(o({},e),{id:this.observerId}))}),50),Vt.once("mainViewMounted").then((()=>{setTimeout((()=>{this.start()}),300)}))}get observerId(){return this.manager.displayer.observerId}get view(){return this.manager.viewManager.mainView}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.cameraListener)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.cameraListener)}moveCameraToContian(e){z(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:b.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!z(e)){if(k(e,this.view.camera))return;const{centerX:t,centerY:i,scale:s}=e,a=s*(this.scale||1);this.view.moveCamera({centerX:t,centerY:i,scale:a,animationMode:b.Immediately})}}start(){var e,t;this.started||(this.addCameraListener(),null==(e=this.manager.refresher)||e.add(fe.MainViewCamera,this.cameraReaction),null==(t=this.manager.refresher)||t.add(fe.MainViewSize,this.sizeReaction),this.view.callbacks.on("onSizeUpdated",this.sizeListener),this.started=!0)}stop(){var e,t;this.removeCameraListener(),null==(e=this.manager.refresher)||e.remove(fe.MainViewCamera),null==(t=this.manager.refresher)||t.remove(fe.MainViewSize),this.view.callbacks.off("onSizeUpdated",this.sizeListener),this.started=!1}}const Oe=e=>(t,i)=>{if(void 0!==t){if(I){const s=t=>{t.map((e=>e.kind)).includes(e)&&i()};return I(t,s),i(),()=>A(t,s)}return M((()=>t),(()=>{i()}),{fireImmediately:!0})}},Qe=Oe(x.Removed),Ze=Oe(x.Inserted);class Re{constructor(e,t){this.manager=t,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=e=>{e===v.Connected&&this.phase===v.Reconnecting&&this.onReconnected(),this.phase=e},this.onReconnected=()=>{Be("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach(((e,t)=>{O(e)&&this.disposers.set(t,e())})),this.manager.notifyReconnected()},this.room=e,this.phase=null==e?void 0:e.phase,null==e||e.callbacks.on("onPhaseChanged",this.onPhaseChanged)}releaseDisposers(){this.disposers.forEach((e=>{O(e)&&e()})),this.disposers.clear()}add(e,t){O(t)&&(this.reactors.set(e,t),this.disposers.set(e,t()))}remove(e){this.reactors.has(e)&&this.reactors.delete(e);const t=this.disposers.get(e);t&&(O(t)&&t(),this.disposers.delete(e))}destroy(){var e;null==(e=this.room)||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),this.releaseDisposers()}}class We extends Ve{constructor(e,t,i){super(t),this.displayer=e,this.cameraStore=i,this.views=new Map,this.mainViewIsAddListener=!1,this.setMainViewSize=B((e=>{this.store.setMainViewSize(o({},e))}),200),this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.mainViewCameraListener=e=>{this.cameraStore.setCamera("mainView",e)},this.mainView=this.createMainView(),this.addMainViewCameraListener(),setTimeout((()=>{var e;null==(e=this.manager.refresher)||e.add("focus",(()=>M((()=>this.store.focus),(e=>{e?this.switchAppToWriter(e):this.switchMainViewToWriter()}),{fireImmediately:!0})))}),100)}get currentScenePath(){return this.displayer.state.sceneState.scenePath}createMainView(){const e=this.displayer.views.createView();this.cameraStore.setCamera("mainView",e.camera),e.callbacks.on("onSizeUpdated",(()=>{this.manager.boxManager.updateManagerRect()}));const t=this.store.getMainViewScenePath();return t&&ae(e,t),this.store.focus||this.switchMainViewModeToWriter(),e}createView(e){const t=this.displayer.views.createView();return this.cameraStore.setCamera(e,t.camera),ne(t,u.Freedom),this.views.set(e,t),t}destroyView(e){const t=this.views.get(e);t&&(this.releaseView(t),this.views.delete(e))}releaseView(e){e.didRelease||e.release()}getView(e){return this.views.get(e)}addMainViewCameraListener(){this.mainView.callbacks.on("onCameraUpdated",this.mainViewCameraListener)}removeMainViewCameraListener(){this.mainView.callbacks.off("onCameraUpdated",this.mainViewCameraListener)}switchMainViewToFreedom(){this.store.setMainViewFocusPath(),oe(Pt,u.Freedom),ne(this.mainView,u.Freedom)}switchMainViewModeToWriter(){if(this.manager.canOperate&&this.mainView){if(this.mainView.mode===u.Writable)return;oe(Pt,u.Writable),ne(this.mainView,u.Writable)}}addMainViewListener(){this.mainViewIsAddListener||this.mainView.divElement&&(this.mainView.divElement.addEventListener("click",this.mainViewClickListener),this.mainView.divElement.addEventListener("touchend",this.mainViewClickListener),this.mainViewIsAddListener=!0)}removeMainViewListener(){this.mainView.divElement&&(this.mainView.divElement.removeEventListener("click",this.mainViewClickListener),this.mainView.divElement.removeEventListener("touchend",this.mainViewClickListener))}async mainViewClickHandler(){this.manager.canOperate&&this.mainView.mode!==u.Writable&&(this.store.cleanFocus(),this.manager.boxManager.blurFocusBox())}switchMainViewToWriter(){if(this.timer&&clearTimeout(this.timer),this.mainView.mode!==u.Writable)return new Promise(((e,t)=>{this.timer=window.setTimeout((()=>{try{const t=this.store.getMainViewScenePath();t&&(this.freedomAllViews(),this.removeMainViewCameraListener(),re(this.manager.room,t),this.switchMainViewModeToWriter(),this.manager.cameraStore.recoverCamera("mainView",this.mainView),this.addMainViewCameraListener()),e(!0)}catch(i){t(i)}}),50)}))}refreshViews(){var e;const t=this.store.focus;if(this.setMainViewFocusScenePath(),t){const i=this.manager.appProxies.get(t);if(i){if((null==(e=i.view)?void 0:e.mode)===u.Writable)return;i.removeCameraListener(),i.switchToWritable(),i.recoverCamera(),i.addCameraListener()}}else{if(this.manager.mainView.mode===u.Writable)return;this.switchMainViewToWriter()}}setMainViewFocusScenePath(){const e=this.store.getMainViewScenePath();e&&ae(this.manager.mainView,e)}freedomAllViews(){this.manager.appProxies.forEach((e=>{e.setViewFocusScenePath(),e.view&&ne(e.view,u.Freedom)})),this.mainView.mode===u.Writable&&(oe(Pt,u.Freedom),this.mainView.mode=u.Freedom),this.manager.viewManager.mainView.focusScenePath||this.store.setMainViewFocusPath()}switchAppToWriter(e){this.freedomAllViews(),setTimeout((()=>{const t=this.manager.appProxies.get(e);if(t){const e=this.store.getBoxState();if(e&&e===F.Minimized)return;t.removeCameraListener(),t.setScenePath(),t.switchToWritable(),t.recoverCamera(),t.addCameraListener(),t.focusBox()}}),50)}destroy(){var e;this.removeMainViewListener(),Ut.wrapper&&(null==(e=Ut.wrapper.parentNode)||e.removeChild(Ut.wrapper),Ut.wrapper=void 0),this.releaseView(this.mainView)}}class Ge{constructor(e,t){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.store=new Ee(this),this.onAppDelete=e=>{const t=Object.keys(e);this.appProxies.forEach(((e,i)=>{t.includes(i)||e.destroy(!0,!1)}))},this.displayerStateListener=e=>{var t,i;const s=e.sceneState;if(s){const e=s.scenePath;this.appProxies.forEach((t=>{t.scenePath&&e.startsWith(t.scenePath)&&(t.emitAppSceneStateChange(s),t.setFullPath(e))}))}e.roomMembers&&(null==(t=this.windowManger.cursorManager)||t.setRoomMembers(e.roomMembers),null==(i=this.windowManger.cursorManager)||i.cleanMemberAttributes(e.roomMembers)),this.appProxies.forEach((t=>{t.appEmitter.emit("roomStateChange",e)}))},this.displayerWritableListener=e=>{const t=!e,i=void 0===this.windowManger.readonly||!1===this.windowManger.readonly;void 0===this.windowManger.readonly?this.boxManager.teleBoxManager.setReadonly(e):this.boxManager.teleBoxManager.setReadonly(!(t&&i)),this.appProxies.forEach((e=>{e.emitAppIsWritableChange()})),!0===t?(this.store.focus||this.viewManager.switchMainViewModeToWriter(),this.mainView.disableCameraTransform=!1):this.mainView.disableCameraTransform=!0},this.boxEventListener=(e,t)=>{switch(e){case"move":this.dispatchInternalEvent(de.AppMove,t),this.store.updateAppState(t.appId,ge.Position,{x:t.x,y:t.y});break;case"focus":this.windowManger.safeSetAttributes({focus:t.appId});break;case"blur":this.dispatchInternalEvent(de.AppBlur,t);break;case"resize":t.width&&t.height&&(this.dispatchInternalEvent(de.AppResize,t),this.store.updateAppState(t.appId,ge.Size,{width:t.width,height:t.height}));break;case F.Minimized:this.safeDispatchMagixEvent("__WindowManger",{eventName:de.AppBoxStateChange,payload:h(o({},t),{state:e})}),this.safeSetAttributes({boxState:e}),this.store.cleanFocus(),this.boxManager.blurFocusBox();break;case F.Maximized:{this.safeDispatchMagixEvent("__WindowManger",{eventName:de.AppBoxStateChange,payload:h(o({},t),{state:e})});const i=this.boxManager.getTopBox();i&&Vt.emit("focus",{appId:i.id}),this.safeSetAttributes({boxState:e});break}case F.Normal:this.safeDispatchMagixEvent("__WindowManger",{eventName:de.AppBoxStateChange,payload:h(o({},t),{state:e})}),this.safeSetAttributes({boxState:e});break;case"snapshot":this.safeDispatchMagixEvent("__WindowManger",{eventName:de.AppSnapshot,payload:t}),this.store.updateAppState(t.appId,ge.SnapshotRect,o({},t.rect));break;case"close":{const e=this.appProxies.get(t.appId);e&&e.destroy(!1,!0,t.error);break}}},this.displayer=e.displayer,this.cameraStore=new Ue,this.viewManager=new We(this.displayer,this,this.cameraStore),this.boxManager=new ze(this,this.viewManager.mainView,this.appProxies,t),this.appListeners=new be(this,this.windowManger,this.viewManager,this.appProxies),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=new Re(this.room,this),this.mainViewProxy=new ke(this),Vt.once("onCreated").then((()=>this.onCreated())),S(this.displayer)&&Vt.on("seek",(e=>{this.appProxies.forEach((t=>{t.onSeek(e)})),this.attributesUpdateCallback(this.attributes.apps)}))}async onCreated(){var e,t,i,s;if(await this.attributesUpdateCallback(this.attributes.apps),Vt.onAny(this.boxEventListener),null==(e=this.refresher)||e.add("apps",(()=>Ze(this.attributes.apps,(()=>{this.attributesUpdateCallback(this.attributes.apps)})))),null==(t=this.refresher)||t.add("appsClose",(()=>Qe(this.attributes.apps,(()=>{this.onAppDelete(this.attributes.apps)})))),!this.attributes.apps||0===Object.keys(this.attributes.apps).length){const e=this.store.getMainViewScenePath();if(!e)return;this.displayer.state.sceneState.scenePath!==e&&(null==(i=this.room)||i.setScenePath(e))}this.displayerWritableListener(!(null==(s=this.room)?void 0:s.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener)}async attributesUpdateCallback(e){if(e)for(const t in e)if(!this.appProxies.has(t)&&!this.appStatus.has(t)){const i=e[t];await this.baseInsertApp({kind:i.kind,options:i.options,isDynamicPPT:i.isDynamicPPT},t,!1),this.focusByAttributes(e)}}async addApp(e,t){Be("addApp",e);const{appId:i,needFocus:s}=await this.beforeAddApp(e,t),a=await this.baseInsertApp(e,i,!0,s);return this.afterAddApp(a),null==a?void 0:a.id}async beforeAddApp(e,t){var i;const s=await(async e=>{var t,i;const s=await(null==(t=se.appClasses.get(e))?void 0:t());return s&&(null==(i=s.config)?void 0:i.singleton)?e:`${e}-${J().replace("-","").slice(0,8)}`})(e.kind);this.appStatus.set(s,Me.StartCreate),this.store.setupAppAttributes(e,s,t),this.boxManager.boxState===F.Minimized&&this.boxManager.teleBoxManager.setState(F.Normal);const a=this.boxManager.boxState!==F.Minimized;a&&this.store.setAppFocus(s,!0);const r=null!=(i=e.attributes)?i:{};return this.safeUpdateAttributes([s],r),{appId:s,needFocus:a}}afterAddApp(e){var t,i;e&&e.box&&Vt.emit("move",{appId:e.id,x:null==(t=e.box)?void 0:t.x,y:null==(i=e.box)?void 0:i.y})}async closeApp(e){const t=this.appProxies.get(e);t&&t.destroy(!0,!0)}async baseInsertApp(e,t,i,s){if(this.appStatus.set(t,Me.StartCreate),this.appProxies.has(t))return void console.warn("[WindowManager]: app duplicate exists and cannot be created again");const a=new Pe(e,this,t,i);if(a)return await a.baseInsertApp(s),this.appStatus.delete(t),a;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return N(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return N(this.displayer)?this.displayer:void 0}get mainView(){return this.windowManger.mainView}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}async setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===D.None)throw new Error(`[WindowManager]: ${e} not valid scene`);if(t===D.Page)await this._setMainViewScenePath(e);else if(t===D.Dir){const t=((e,t)=>{const i=e.entireScenes()[t][0].name;return"/"===t?`/${i}`:`${t}/${i}`})(this.displayer,e);await this._setMainViewScenePath(t)}}}async _setMainViewScenePath(e){this.safeSetAttributes({_mainScenePath:e}),await this.viewManager.switchMainViewToWriter(),re(this.room,e),this.store.setMainViewFocusPath()}async setMainViewSceneIndex(e){this.room&&(this.safeSetAttributes({_mainSceneIndex:e}),await this.viewManager.switchMainViewToWriter(),this.room.setSceneIndex(e),this.store.setMainViewScenePath(this.room.state.sceneState.scenePath),this.store.setMainViewFocusPath())}getAppInitPath(e){var t;const i=this.store.getAppAttributes(e);if(i)return null==(t=null==i?void 0:i.options)?void 0:t.scenePath}safeDispatchMagixEvent(e,t){this.canOperate&&this.displayer.dispatchMagixEvent(e,t)}focusByAttributes(e){if(e&&Object.keys(e).length===this.boxManager.appBoxMap.size){const e=this.store.focus;e&&this.boxManager.focusBox({appId:e})}}notifyReconnected(){this.appProxies.forEach((e=>{e.onReconnected()}))}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent("__WindowManger",{eventName:e,payload:t})}destroy(){var e;this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),Vt.offAny(this.boxEventListener),Vt.clearListeners(),this.appProxies.size&&this.appProxies.forEach((e=>{e.destroy(!0,!1)})),this.viewManager.destroy(),null==(e=this.refresher)||e.destroy(),Pt.clearListeners()}}function Fe(){}function Ye(e){return e()}function He(){return Object.create(null)}function Xe(e){e.forEach(Ye)}function Je(e){return"function"==typeof e}function Ke(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}let qe,$e;function _e(e,t){return qe||(qe=document.createElement("a")),qe.href=t,e===qe.href}function et(e,t){e.appendChild(t)}function tt(e,t,i){e.insertBefore(t,i||null)}function it(e){e.parentNode.removeChild(e)}function st(e){return document.createElement(e)}function at(e){return document.createTextNode(e)}function rt(){return at(" ")}function nt(e,t,i){null==i?e.removeAttribute(t):e.getAttribute(t)!==i&&e.setAttribute(t,i)}function ot(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function ht(e,t,i,s){e.style.setProperty(t,i,s?"important":"")}function ct(e){$e=e}const dt=[],pt=[],gt=[],lt=[],ut=Promise.resolve();let mt=!1;function Mt(e){gt.push(e)}let wt=!1;const It=new Set;function At(){if(!wt){wt=!0;do{for(let e=0;e<dt.length;e+=1){const t=dt[e];ct(t),yt(t.$$)}for(ct(null),dt.length=0;pt.length;)pt.pop()();for(let e=0;e<gt.length;e+=1){const t=gt[e];It.has(t)||(It.add(t),t())}gt.length=0}while(dt.length);for(;lt.length;)lt.pop()();mt=!1,wt=!1,It.clear()}}function yt(e){if(null!==e.fragment){e.update(),Xe(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(Mt)}}const Ct=new Set;function bt(e,t){-1===e.$$.dirty[0]&&(dt.push(e),mt||(mt=!0,ut.then(At)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function xt(e,t,i,s,a,r,n,o=[-1]){const h=$e;ct(e);const c=e.$$={fragment:null,ctx:null,props:r,update:Fe,not_equal:a,bound:He(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(h?h.$$.context:t.context||[]),callbacks:He(),dirty:o,skip_bound:!1,root:t.target||h.$$.root};n&&n(c.root);let d=!1;if(c.ctx=i?i(e,t.props||{},((t,i,...s)=>{const r=s.length?s[0]:i;return c.ctx&&a(c.ctx[t],c.ctx[t]=r)&&(!c.skip_bound&&c.bound[t]&&c.bound[t](r),d&&bt(e,t)),i})):[],c.update(),d=!0,Xe(c.before_update),c.fragment=!!s&&s(c.ctx),t.target){if(t.hydrate){const e=(l=t.target,Array.from(l.childNodes));c.fragment&&c.fragment.l(e),e.forEach(it)}else c.fragment&&c.fragment.c();t.intro&&((p=e.$$.fragment)&&p.i&&(Ct.delete(p),p.i(g))),function(e,t,i,s){const{fragment:a,on_mount:r,on_destroy:n,after_update:o}=e.$$;a&&a.m(t,i),s||Mt((()=>{const t=r.map(Ye).filter(Je);n?n.push(...t):Xe(t),e.$$.on_mount=[]})),o.forEach(Mt)}(e,t.target,t.anchor,t.customElement),At()}var p,g,l;ct(h)}function vt(e){let t,i,s;return{c(){t=st("img"),nt(t,"class","netless-window-manager-cursor-selector-avatar"),nt(t,"style",i=e[15]()),_e(t.src,s=e[7])||nt(t,"src",s),nt(t,"alt","avatar")},m(e,i){tt(e,t,i)},p(e,i){128&i&&!_e(t.src,s=e[7])&&nt(t,"src",s)},d(e){e&&it(t)}}}function St(e){let t,i;return{c(){t=st("span"),i=at(e[1]),nt(t,"class","netless-window-manager-cursor-tag-name"),ht(t,"background-color",e[10])},m(e,s){tt(e,t,s),et(t,i)},p(e,s){2&s&&ot(i,e[1]),1024&s&&ht(t,"background-color",e[10])},d(e){e&&it(t)}}}function Nt(e){let t,i,s,a,r,n,o,h,c,d,p,g,l=e[13]&&vt(e),u=e[14]&&St(e);return{c(){t=st("div"),i=st("div"),s=st("div"),l&&l.c(),a=rt(),r=st("span"),n=at(e[0]),o=rt(),u&&u.c(),h=rt(),c=st("div"),d=st("img"),ht(r,"overflow","hidden"),ht(r,"white-space","nowrap"),ht(r,"text-overflow","ellipsis"),ht(r,"max-width","80px"),nt(s,"class",e[8]),ht(s,"background-color",e[2]),ht(s,"color",e[9]),ht(s,"opacity",e[11]),nt(i,"class","netless-window-manager-cursor-name"),nt(d,"class",p="netless-window-manager-cursor-"+e[3]+"-image"),_e(d.src,g=e[6])||nt(d,"src",g),nt(d,"alt",e[3]),nt(c,"class","cursor-image-wrapper"),nt(t,"class","netless-window-manager-cursor-mid"),ht(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),ht(t,"display",e[12])},m(e,p){tt(e,t,p),et(t,i),et(i,s),l&&l.m(s,null),et(s,a),et(s,r),et(r,n),et(s,o),u&&u.m(s,null),et(t,h),et(t,c),et(c,d)},p(e,[i]){e[13]?l?l.p(e,i):(l=vt(e),l.c(),l.m(s,a)):l&&(l.d(1),l=null),1&i&&ot(n,e[0]),e[14]?u?u.p(e,i):(u=St(e),u.c(),u.m(s,null)):u&&(u.d(1),u=null),256&i&&nt(s,"class",e[8]),4&i&&ht(s,"background-color",e[2]),512&i&&ht(s,"color",e[9]),2048&i&&ht(s,"opacity",e[11]),8&i&&p!==(p="netless-window-manager-cursor-"+e[3]+"-image")&&nt(d,"class",p),64&i&&!_e(d.src,g=e[6])&&nt(d,"src",g),8&i&&nt(d,"alt",e[3]),48&i&&ht(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),4096&i&&ht(t,"display",e[12])},i:Fe,o:Fe,d(e){e&&it(t),l&&l.d(),u&&u.d()}}}function Dt(e,t,i){let s,a,r,n,{cursorName:o}=t,{tagName:h}=t,{backgroundColor:c}=t,{appliance:d}=t,{x:p}=t,{y:g}=t,{src:l}=t,{visible:u}=t,{avatar:m}=t,{theme:M}=t,{color:w}=t,{cursorTagBackgroundColor:I}=t,{opacity:A}=t;return e.$$set=e=>{"cursorName"in e&&i(0,o=e.cursorName),"tagName"in e&&i(1,h=e.tagName),"backgroundColor"in e&&i(2,c=e.backgroundColor),"appliance"in e&&i(3,d=e.appliance),"x"in e&&i(4,p=e.x),"y"in e&&i(5,g=e.y),"src"in e&&i(6,l=e.src),"visible"in e&&i(16,u=e.visible),"avatar"in e&&i(7,m=e.avatar),"theme"in e&&i(8,M=e.theme),"color"in e&&i(9,w=e.color),"cursorTagBackgroundColor"in e&&i(10,I=e.cursorTagBackgroundColor),"opacity"in e&&i(11,A=e.opacity)},e.$$.update=()=>{1&e.$$.dirty&&(s=!z(o)),2&e.$$.dirty&&i(14,a=!z(h)),128&e.$$.dirty&&i(13,r=!z(m)),65536&e.$$.dirty&&i(12,n=u?"initial":"none")},[o,h,c,d,p,g,l,m,M,w,I,A,n,r,a,()=>Object.entries({width:(s?19:28)+"px",height:(s?19:28)+"px",position:s?"initial":"absolute","border-color":s?"white":c,"margin-right":(s?4:0)+"px"}).map((([e,t])=>`${e}: ${t}`)).join(";"),u]}class Tt extends class{$destroy(){!function(e,t){const i=e.$$;null!==i.fragment&&(Xe(i.on_destroy),i.fragment&&i.fragment.d(t),i.on_destroy=i.fragment=null,i.ctx=[])}(this,1),this.$destroy=Fe}$on(e,t){const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}$set(e){var t;this.$$set&&(t=e,0!==Object.keys(t).length)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}{constructor(e){super(),xt(this,e,Dt,Nt,Ke,{cursorName:0,tagName:1,backgroundColor:2,appliance:3,x:4,y:5,src:6,visible:16,avatar:7,theme:8,color:9,cursorTagBackgroundColor:10,opacity:11})}}const jt={[T.pencil]:"data:image/png;base64,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",[T.selector]:"data:image/png;base64,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",[T.eraser]:"data:image/png;base64,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",[T.shape]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",[T.text]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="};class ft{constructor(e,t,i,s,a){this.manager=e,this.cursors=t,this.memberId=i,this.cursorManager=s,this.wrapper=a,this.setMember(),this.createCursor(),l((()=>{if(this.disposer&&this.disposer(),!this.cursorPosition)throw new Error;this.startReaction()}),{retries:3}),this.autoHidden()}startReaction(){this.disposer=m((()=>{var e;const t=this.cursorPosition,i=this.cursorState;if(t){if("main"===t.type){const e=this.cursorManager.wrapperRect;this.component&&e&&(this.autoHidden(),this.moveCursor(t,e,this.manager.mainView))}else{const i=this.cursorManager.focusView,s=null==(e=null==i?void 0:i.divElement)?void 0:e.getBoundingClientRect(),a=null==i?void 0:i.camera;i&&s&&a&&this.component&&(this.autoHidden(),this.moveCursor(t,s,i))}i&&i===we.Leave&&this.hide()}}))}moveCursor(e,t,i){var s,a;const{x:r,y:n}=e,o=null==i?void 0:i.screen.convertPointToScreen(r,n);if(o){const e=o.x+t.x-2,i=o.y+t.y-18;o.x<0||o.x>t.width||o.y<0||o.y>t.height?null==(s=this.component)||s.$set({visible:!1}):null==(a=this.component)||a.$set({visible:!0,x:e,y:i})}}get memberApplianceName(){var e,t;return null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.currentApplianceName}get memberColor(){var e,t;return`rgb(${null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.strokeColor.join(",")})`}get payload(){var e;return null==(e=this.member)?void 0:e.payload}get memberCursorName(){var e,t;return(null==(e=this.payload)?void 0:e.nickName)||(null==(t=this.payload)?void 0:t.cursorName)||this.memberId}get memberTheme(){var e;return(null==(e=this.payload)?void 0:e.theme)?"netless-window-manager-cursor-inner-mellow":"netless-window-manager-cursor-inner"}get memberCursorTextColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTextColor)||"#FFFFFF"}get memberCursorTagBackgroundColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTagBackgroundColor)||this.memberColor}get memberAvatar(){var e;return null==(e=this.payload)?void 0:e.avatar}get memberOpacity(){return this.memberCursorName||this.memberAvatar?1:0}get cursorState(){return V(this.cursors,[this.memberId,fe.CursorState])}get cursorPosition(){return V(this.cursors,[this.memberId,fe.Position])}getFocusBox(){return this.cursorManager.getFocusBox()}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout((()=>{this.hide()}),1e4)}async createCursor(){this.member&&this.wrapper&&(this.component=new Tt({target:this.wrapper,props:this.initProps()}))}initProps(){return{x:0,y:0,appliance:this.memberApplianceName,avatar:this.memberAvatar,src:this.getIcon(),visible:!1,backgroundColor:this.memberColor,cursorName:this.memberCursorName,theme:this.memberTheme,color:this.memberCursorTextColor,cursorTagBackgroundColor:this.memberCursorTagBackgroundColor,opacity:this.memberOpacity}}getIcon(){if(this.member){return jt[this.memberApplianceName||T.shape]||jt[T.shape]}}setMember(){var e,t;this.member=null==(e=this.cursorManager.roomMembers)?void 0:e.find((e=>e.memberId===Number(this.memberId))),null==(t=this.component)||t.$set(Q(this.initProps(),["x","y","visible"]))}destroy(){this.disposer&&this.disposer(),this.component&&this.component.$destroy(),this.cursorManager.cursorInstances.delete(this.memberId)}hide(){this.component&&this.component.$set({visible:!1})}}class Lt{constructor(e,t){var i;this.manager=e,this.appManager=t,this.cursorInstances=new Map,this.store=this.appManager.store,this.getType=e=>{var t;const i=e.target;if(i.parentElement===this.mainViewElement)return{type:"main"};{if(!this.focusView)return{type:"main"};const e=this.appManager.focusApp;return i.parentElement===(null==(t=null==e?void 0:e.view)?void 0:t.divElement)?{type:"app"}:{type:"main"}}},this.mouseMoveListener=B((e=>{this.updateCursor(this.getType(e),e.clientX,e.clientY)}),5),this.touchMoveListener=B((e=>{if(1===e.touches.length){const t=e.touches[0];this.updateCursor(this.getType(t),t.clientX,t.clientY)}}),5),this.mouseLeaveListener=()=>{this.hideCursor(this.observerId),this.store.updateCursorState(this.observerId,we.Leave)},this.roomMembers=null==(i=this.manager.room)?void 0:i.state.roomMembers;const s=Ut.wrapper;s&&(s.addEventListener("mousemove",this.mouseMoveListener),s.addEventListener("touchmove",this.touchMoveListener),s.addEventListener("mouseleave",this.mouseLeaveListener),s.addEventListener("touchend",this.mouseLeaveListener),this.initCursorAttributes(),this.wrapperRect=s.getBoundingClientRect(),this.startReaction(s))}setMainViewDivElement(e){this.mainViewElement=e}startReaction(e){this.disposer=Ze(this.cursors,(()=>{this.handleRoomMembersChange(e)}))}handleRoomMembersChange(e){var t;const i=null==(t=this.roomMembers)?void 0:t.map((e=>e.memberId));if(null==i?void 0:i.length)for(const s in this.cursors)if(i.includes(Number(s))&&!this.cursorInstances.has(s)&&s!==this.observerId){const t=new ft(this.manager,this.cursors,s,this,e);this.cursorInstances.set(s,t)}}get observerId(){return String(this.manager.displayer.observerId)}get cursors(){var e;return null==(e=this.manager.attributes)?void 0:e[fe.Cursors]}get boxState(){return this.store.getBoxState()}get focusBox(){return this.appManager.boxManager.getFocusBox()}get focusView(){var e;return null==(e=this.appManager.focusApp)?void 0:e.view}initCursorAttributes(){this.store.updateCursor(this.observerId,{x:0,y:0,type:"main"}),this.store.updateCursorState(this.observerId,we.Leave)}getFocusBox(){return this.appManager.boxManager.getFocusBox()}updateCursor(e,t,i){var s,a,r,n;if(this.wrapperRect&&this.manager.canOperate)if("main"===e.type){const a=this.appManager.mainView,r=null==(s=null==a?void 0:a.divElement)?void 0:s.getBoundingClientRect();if(r){const s=a.convertToPointInWorld({x:t-r.x,y:i-r.y});this.setNormalCursorState(),this.store.updateCursor(this.observerId,o({x:s.x,y:s.y},e))}}else if("app"===e.type){const s=null==(r=null==(a=this.focusView)?void 0:a.divElement)?void 0:r.getBoundingClientRect();if(s){const a=null==(n=this.focusView)?void 0:n.convertToPointInWorld({x:t-s.x,y:i-s.y});if(!a)return;this.setNormalCursorState(),this.store.updateCursor(this.observerId,o({x:a.x,y:a.y},e))}}}setNormalCursorState(){this.store.getCursorState(this.observerId)!==we.Normal&&this.store.updateCursorState(this.observerId,we.Normal)}updateContainerRect(){var e,t;this.containerRect=null==(e=Ut.container)?void 0:e.getBoundingClientRect(),this.wrapperRect=null==(t=Ut.wrapper)?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach((e=>{e.setMember()})),Ut.wrapper&&this.handleRoomMembersChange(Ut.wrapper)}cleanMemberCursor(e){this.store.cleanCursor(e);const t=this.cursorInstances.get(e);t&&t.destroy()}hideCursor(e){const t=this.cursorInstances.get(e);t&&t.hide()}cleanMemberAttributes(e){const t=e.map((e=>e.memberId)),i=[];for(const s in this.cursors){-1===t.findIndex((e=>e===Number(s)))&&i.push(s)}i.forEach((e=>{const t=this.cursorInstances.get(e);t&&t.destroy(),this.store.cleanCursor(e)}))}destroy(){const e=Ut.wrapper;e&&(e.removeEventListener("mousemove",this.mouseMoveListener),e.removeEventListener("touchmove",this.touchMoveListener),e.removeEventListener("mouseleave",this.mouseLeaveListener),e.removeEventListener("touchend",this.mouseLeaveListener)),this.disposer&&this.disposer(),this.cursorInstances.size&&(this.cursorInstances.forEach((e=>e.destroy())),this.cursorInstances.clear())}}class Et{constructor(e){this.sdk=new j(h(o({},e),{useMobXState:!0}))}async mount(e){const t=e.joinRoomParams.invisiblePlugins||[],i=await this.sdk.joinRoom(h(o({},e.joinRoomParams),{useMultiViews:!0,invisiblePlugins:[...t,Ut],disableMagixEventDispatchLimit:!0})),s=await Ut.mount(o({room:i},e.mountParams));return Z(e.joinRoomParams.disableCameraTransform)&&(s.mainView.disableCameraTransform=e.joinRoomParams.disableCameraTransform),s}}const Bt=window.ResizeObserver||X,Vt=new g,Pt=new g,zt=class extends f{constructor(e){super(e),this.version="0.2.18",this.emitter=Pt,this.viewMode=L.Broadcaster}static async mount(e,t,i,s){let a,r,n,o,h,c,d=!0,g=!1;if("room"in e?(a=e.room,t=e.container,i=e.collectorContainer,r=e.containerSizeRatio,n=e.collectorStyles,o=e.debug,null!=e.chessboard&&(d=e.chessboard),h=e.overwriteStyles,c=e.cursor,g=Boolean(null==e?void 0:e.disableCameraTransform)):(a=e,r=null==s?void 0:s.containerSizeRatio,n=null==s?void 0:s.collectorStyles,o=null==s?void 0:s.debug,null!=(null==s?void 0:s.chessboard)&&(d=s.chessboard),h=null==s?void 0:s.overwriteStyles),this.checkVersion(),N(a)&&a.phase!==v.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");if(!t)throw new Error("[WindowManager]: Container must provide");if(zt.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");let u=await this.initManager(a);if(this.debug=Boolean(o),this.debug&&p({verbose:!0}),Be("Already insert room",u),N(this.displayer)){if(!u)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await l((async e=>{if(u=await this.initManager(a),!u)throw Be(`manager is empty. retrying ${e}`),new Error}),{retries:10});r&&(zt.containerSizeRatio=r),zt.container=t;const{playground:m,wrapper:M,sizer:w,mainViewElement:I}=(e=>{const t=document.createElement("div");t.className="netless-window-manager-playground";const i=document.createElement("div");i.className="netless-window-manager-sizer";const s=document.createElement("div");s.className="netless-window-manager-wrapper";const a=document.createElement("div");return a.className="netless-window-manager-main-view",t.appendChild(i),i.appendChild(s),s.appendChild(a),e.appendChild(t),Ut.wrapper=s,{playground:t,wrapper:s,sizer:i,mainViewElement:a}})(t);if(zt.playground=m,d&&w.classList.add("netless-window-manager-chess-sizer"),h){const e=document.createElement("style");e.textContent=h,m.appendChild(e)}await u.ensureAttributes(),u.appManager=new Ge(u,{collectorContainer:i,collectorStyles:n}),u.observePlaygroundSize(m,w,M),c&&(u.cursorManager=new Lt(u,u.appManager)),u.bindMainView(I,g),((e,t)=>{if(S(e)){const t=e,i=t.seekToProgressTime;t.seekToProgressTime=async function(e){const s=await i.call(t,e);return"success"===s&&Vt.emit("seek",e),s}}else{if(Object.getOwnPropertyDescriptor(e,"disableCameraTransform"))return;Object.defineProperty(e,"disableCameraTransform",{get:()=>t.mainView.disableCameraTransform,set(e){t.mainView.disableCameraTransform=e}}),e.moveCamera=e=>t.mainView.moveCamera(e),e.moveCameraToContain=(...e)=>t.mainView.moveCameraToContain(...e),e.convertToPointInWorld=(...e)=>t.mainView.convertToPointInWorld(...e),e.setCameraBound=(...e)=>t.mainView.setCameraBound(...e)}})(a,u.appManager),Vt.emit("onCreated"),zt.isCreated=!0;try{await $()}catch(A){console.warn("[WindowManager]: indexedDB open failed"),console.log(A)}return u}static async initManager(e){let t=e.getInvisiblePlugin(zt.kind);if(!t&&N(e))if(!1===e.isWritable){try{await e.setWritable(!0)}catch(i){throw new Error("[WindowManger]: room must be switched to be writable")}t=await e.createInvisiblePlugin(zt,{}),t.ensureAttributes(),await ce(500),await e.setWritable(!1)}else t=await e.createInvisiblePlugin(zt,{});return t}static register(e){return se.register(e)}async addApp(e){var t,i,s,a;if(this.appManager){if(!e.kind||"string"!=typeof e.kind)throw new Ne;const r=await(null==(t=se.appClasses.get(e.kind))?void 0:t());if(r&&(null==(i=r.config)?void 0:i.singleton)&&this.appManager.appProxies.has(e.kind))throw new xe;const n=this.setupScenePath(e,this.appManager);if(void 0===n)return;(null==(s=null==e?void 0:e.options)?void 0:s.scenePath)&&(e.options.scenePath=(a=e.options.scenePath).endsWith("/")?a.slice(0,-1):a);return await this.appManager.addApp(e,Boolean(n))}throw new ve}setupScenePath(e,t){var i,s,a;let r=!1;if(e.options){const{scenePath:n,scenes:o}=e.options;if(n){if(!(e=>e.startsWith("/"))(n))throw new Te;for(const e in this.apps){const i=t.store.getAppScenePath(e);if(i&&i===n)return void console.warn(`[WindowManager]: ScenePath ${n} Already opened`)}}n&&o&&o.length>0&&(this.isDynamicPPT(o)?(r=!0,this.displayer.entireScenes()[n]||null==(i=this.room)||i.putScenes(n,o)):this.displayer.entireScenes()[n]||null==(s=this.room)||s.putScenes(n,[{name:o[0].name}])),n&&void 0===o&&(null==(a=this.room)||a.putScenes(n,[{}]))}return r}async setMainViewScenePath(e){this.appManager&&await this.appManager.setMainViewScenePath(e)}async setMainViewSceneIndex(e){this.appManager&&await this.appManager.setMainViewSceneIndex(e)}getMainViewScenePath(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewScenePath()}getMainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewSceneIndex()}setReadonly(e){var t,i;(null==(t=this.room)?void 0:t.isWritable)&&(this.readonly=e,null==(i=this.appManager)||i.boxManager.teleBoxManager.setReadonly(e))}switchMainViewToWriter(){var e;return null==(e=this.appManager)?void 0:e.viewManager.mainViewClickHandler()}onAppDestroy(e,t){((e,t)=>{Vt.once(e).then(t)})(`destroy-${e}`,t)}setViewMode(e){var t,i,s,a;this.canOperate&&(e===L.Broadcaster&&(null==(t=this.appManager)||t.store.setMainViewCamera(h(o({},this.mainView.camera),{id:this.displayer.observerId})),null==(i=this.appManager)||i.store.setMainViewSize(h(o({},this.mainView.size),{id:this.displayer.observerId})),null==(s=this.appManager)||s.mainViewProxy.start()),e===L.Freedom&&(null==(a=this.appManager)||a.mainViewProxy.stop()),this.viewMode=e)}get mainView(){if(this.appManager)return this.appManager.viewManager.mainView;throw new ve}get camera(){if(this.appManager)return this.appManager.viewManager.mainView.camera;throw new ve}get apps(){var e;return null==(e=this.appManager)?void 0:e.store.apps()}get boxState(){if(this.appManager)return this.appManager.boxManager.teleBoxManager.state;throw new ve}queryAll(){var e;return Array.from((null==(e=this.appManager)?void 0:e.appProxies.values())||[])}queryOne(e){var t;return null==(t=this.appManager)?void 0:t.appProxies.get(e)}async closeApp(e){var t;return null==(t=this.appManager)?void 0:t.closeApp(e)}moveCamera(e){this.mainView.moveCamera(e)}moveCameraToContain(e){this.mainView.moveCameraToContain(e)}convertToPointInWorld(e){return this.mainView.convertToPointInWorld(e)}setCameraBound(e){this.mainView.setCameraBound(e)}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var e,t,i,s;null==(e=this.containerResizeObserver)||e.disconnect(),null==(t=this.appManager)||t.destroy(),null==(i=this.cursorManager)||i.destroy(),zt.container=void 0,zt.wrapper=void 0,zt.isCreated=!1,zt.playground&&(null==(s=zt.playground.parentNode)||s.removeChild(zt.playground)),Be("Destroyed")}bindMainView(e,t){var i;if(this.appManager){const s=this.appManager.viewManager.mainView;s.disableCameraTransform=t,s.divElement=e,null==(i=this.cursorManager)||i.setMainViewDivElement(e),s.focusScenePath||this.appManager.store.setMainViewFocusPath(),void 0===this.appManager.store.focus&&s.mode!==u.Writable&&this.appManager.viewManager.switchMainViewToWriter(),this.appManager.viewManager.addMainViewListener(),Vt.emit("mainViewMounted")}}get canOperate(){return!!N(this.displayer)&&(this.displayer.isWritable&&this.displayer.phase===v.Connected)}get room(){return this.displayer}safeSetAttributes(e){this.canOperate&&this.setAttributes(e)}safeUpdateAttributes(e,t){this.canOperate&&this.updateAttributes(e,t)}safeDispatchMagixEvent(e,t){this.canOperate&&this.displayer.dispatchMagixEvent(e,t)}isDynamicPPT(e){var t,i;const s=null==(i=null==(t=e[0])?void 0:t.ppt)?void 0:i.src;return null==s?void 0:s.startsWith("pptx://")}static checkVersion(){if(he(E)<he("2.13.16"))throw new Se("2.13.16")}async ensureAttributes(){if(R(this.attributes)&&await ce(50),W(this.attributes)){this.attributes[fe.Apps]||this.safeSetAttributes({[fe.Apps]:{}}),this.attributes[fe.Cursors]||this.safeSetAttributes({[fe.Cursors]:{}});const e=this.displayer.state.sceneState;this.attributes._mainScenePath||this.safeSetAttributes({_mainScenePath:e.scenePath}),this.attributes._mainSceneIndex||this.safeSetAttributes({_mainSceneIndex:e.index})}}observePlaygroundSize(e,t,i){this.updateSizer(e.getBoundingClientRect(),t,i),this.containerResizeObserver=new Bt((e=>{var s,a;const r=null==(s=e[0])?void 0:s.contentRect;r&&(this.updateSizer(r,t,i),null==(a=this.cursorManager)||a.updateContainerRect())})),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},i,s){e&&t&&(t/e>zt.containerSizeRatio?(t=e*zt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/zt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!1)),s.style.width=`${e}px`,s.style.height=`${t}px`)}};let Ut=zt;Ut.kind="WindowManager",Ut.debug=!1,Ut.containerSizeRatio=9/16,Ut.isCreated=!1,Ut.register({kind:c.kind,src:c}),Ut.register({kind:d.kind,src:d});const kt={DocsViewer:c.kind,MediaPlayer:d.kind};export{kt as BuiltinApps,Et as WhiteWindowSDK,Ut as WindowManager,Pt as callbacks,Vt as emitter};
|
1
|
+
var e=Object.defineProperty,t=Object.defineProperties,i=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,n=(t,i,s)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[i]=s,o=(e,t)=>{for(var i in t||(t={}))a.call(t,i)&&n(e,i,t[i]);if(s)for(var i of s(t))r.call(t,i)&&n(e,i,t[i]);return e},h=(e,s)=>t(e,i(s));import c from"@netless/app-docs-viewer";import p,{setOptions as d}from"@netless/app-media-player";import g from"emittery";import l from"p-retry";import{ViewVisionMode as u,autorun as m,reaction as M,toJS as w,listenUpdated as I,unlistenUpdated as A,listenDisposed as y,unlistenDisposed as C,AnimationMode as b,UpdateEventKind as x,RoomPhase as v,isPlayer as S,isRoom as N,ScenePathType as D,ApplianceNames as T,WhiteWebSdk as j,InvisiblePlugin as L,ViewMode as f,WhiteVersion as E}from"white-web-sdk";import{debounce as P,get as B,pick as V,isEmpty as z,maxBy as U,isEqual as k,isFunction as O,omit as Q,isBoolean as Z,isNull as R,isObject as W}from"lodash";import{TELE_BOX_MANAGER_EVENT as G,TELE_BOX_STATE as F,TeleBoxCollector as Y,TeleBoxManager as H}from"@netless/telebox-insider";import{ResizeObserver as X}from"@juggle/resize-observer";import{v4 as J}from"uuid";let K,q;const $=async()=>{K=await new Promise(((e,t)=>{const i=indexedDB.open("__WindowManagerAppCache",2);i.onerror=e=>{t(e)},i.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains("apps")||(q=t.createObjectStore("apps",{keyPath:"kind"}),q.createIndex("kind","kind",{unique:!0}))},i.onsuccess=()=>{const t=i.result;e(t)}}))},_=(e,t)=>{var i,s;if(K)return i=K,s={kind:e,sourceCode:t},new Promise(((e,t)=>{const a=i.transaction(["apps"],"readwrite").objectStore("apps").add(s);a.onsuccess=()=>e(),a.onerror=()=>t()}))},ee=async e=>{return K?await(t=K,i=e,new Promise(((e,s)=>{const a=t.transaction(["apps"]).objectStore("apps").index("kind").get(i);a.onerror=e=>s(e),a.onsuccess=()=>{a.result?e(a.result):e(null)}}))):null;var t,i};const te=async e=>{const t=await ee(e);if(t)return t;{const t=await async function(e,t){const{timeout:i=1e4}=t,s=new AbortController,a=setTimeout((()=>s.abort()),i),r=await fetch(e,h(o({},t),{signal:s.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(a),r}(e,{timeout:1e4}),i=await t.text();return await _(e,i),i}},ie=(e,t)=>{let i=Function(e+`;return ${t}`)();return void 0===i&&(i=window[t]),i};const se=new class{constructor(){this.kindEmitters=new Map,this.registered=new Map,this.appClassesCache=new Map,this.appClasses=new Map}async register(e){this.registered.set(e.kind,e);const t=e.src;let i;if(i="string"==typeof t?async()=>{const i=await(async(e,t,i)=>{const s=i||"NetlessApp"+t,a=await te(e);try{return ie(a,s)}catch(r){if(r.message.includes("Can only have one anonymous define call per script file")){const e=window.define;return"function"==typeof e&&e.amd&&delete e.amd,ie(a,s)}}})(t,e.kind);if(i)return i;throw new Error(`[WindowManager]: load remote script failed, ${t}`)}:"function"==typeof t?t:async()=>t,this.appClasses.set(e.kind,(async()=>{let t=this.appClassesCache.get(e.kind);return t||(t=i(),this.appClassesCache.set(e.kind,t)),t})),e.addHooks){const t=this.createKindEmitter(e.kind);t&&e.addHooks(t)}}async notifyApp(e,t,i){const s=this.kindEmitters.get(e);await(null==s?void 0:s.emit(t,i))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new g;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}},ae=(e,t)=>{e.focusScenePath!==t&&(e.focusScenePath=t)},re=(e,t)=>{e&&e.isWritable&&e.state.sceneState.scenePath!==t&&e.setScenePath(t)},ne=(e,t)=>{e.mode!==t&&(e.mode=t)},oe=P(((e,t)=>{e.emit("mainViewModeChange",t)}),200),he=e=>{const t=e.split(".").map((e=>e.padStart(2,"0"))).join("");return parseInt(t)},ce=e=>new Promise((t=>setTimeout(t,e)));var pe,de;(de=pe||(pe={})).AppMove="AppMove",de.AppFocus="AppFocus",de.AppResize="AppResize",de.AppBlur="AppBlur",de.AppBoxStateChange="AppBoxStateChange",de.AppSnapshot="AppSnapshot",de.GetAttributes="GetAttributes",de.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",de.InitReplay="InitReplay",de.WindowCreated="WindowCreated",de.SetMainViewScenePath="SetMainViewScenePath",de.SetMainViewSceneIndex="SetMainViewSceneIndex",de.SwitchViewsToFreedom="SwitchViewsToFreedom";var ge,le,ue,me,Me,we,Ie;(le=ge||(ge={})).Size="size",le.Position="position",le.SnapshotRect="SnapshotRect",le.SceneIndex="SceneIndex",(me=ue||(ue={})).setBoxSize="setBoxSize",me.setBoxMinSize="setBoxMinSize",me.destroy="destroy",(Me||(Me={})).StartCreate="StartCreate",(Ie=we||(we={})).Leave="leave",Ie.Normal="normal";const Ae=340/720,ye=340/720,Ce={right:"10px",bottom:"15px",position:"absolute"};class be{constructor(e,t){this.manager=e,this.appProxies=t,this.displayer=this.manager.displayer,this.boxManager=this.manager.boxManager,this.mainMagixEventListener=e=>{if(e.authorId!==this.displayer.observerId){const t=e.payload;switch(t.eventName){case pe.AppMove:this.appMoveHandler(t.payload);break;case pe.AppResize:this.appResizeHandler(t.payload);break;case pe.AppBlur:this.appBlurHandler(t.payload);break;case pe.AppBoxStateChange:this.appBoxStateHandler(t.payload);break;case pe.AppSnapshot:this.appSnapshotHandler(t.payload);break;case pe.SwitchViewsToFreedom:this.switchViewsToFreedomHandler()}}},this.appMoveHandler=e=>{this.boxManager.moveBox(e)},this.appResizeHandler=e=>{var t;this.boxManager.resizeBox(Object.assign(e,{skipUpdate:!0})),null==(t=this.manager.room)||t.refreshViewSize()},this.appBlurHandler=e=>{var t;const i=this.appProxies.get(e.appId);i&&(i.appEmitter.emit("writableChange",!1),(null==(t=i.view)?void 0:t.mode)===u.Writable&&this.manager.viewManager.refreshViews())},this.appBoxStateHandler=e=>{this.boxManager.setBoxState(e.state)},this.appSnapshotHandler=e=>{const t=this.boxManager.getBox(e.appId);t&&t.setSnapshot(e.rect)},this.switchViewsToFreedomHandler=()=>{this.manager.viewManager.freedomAllViews()}}addListeners(){this.displayer.addMagixEventListener("__WindowManger",this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener("__WindowManger",this.mainMagixEventListener)}}class xe extends Error{constructor(){super(...arguments),this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class ve extends Error{constructor(){super(...arguments),this.message="[WindowManager]: AppManager must be initialized"}}class Se extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class Ne extends Error{constructor(){super(...arguments),this.message="[WindowManager]: kind must be a valid string"}}class De extends Error{constructor(){super(...arguments),this.message="[WindowManager]: box need created"}}class Te extends Error{constructor(){super(...arguments),this.message='[WindowManager]: ScenePath should start with "/"'}}class je{constructor(e,t,i,s){this.manager=e,this.appId=t,this.appProxy=i,this.appOptions=s,this.mobxUtils={autorun:m,reaction:M,toJS:w},this.objectUtils={listenUpdated:I,unlistenUpdated:A,listenDisposed:y,unlistenDisposed:C},this.store=this.manager.store,this.emitter=i.appEmitter,this.boxManager=this.manager.boxManager,this.isAddApp=i.isAddApp}getDisplayer(){return this.manager.displayer}getAttributes(){return this.appProxy.attributes}getScenes(){const e=this.store.getAppAttributes(this.appId);if(!(null==e?void 0:e.isDynamicPPT))return null==e?void 0:e.options.scenes;{const e=this.manager.appProxies.get(this.appId);if(e)return e.scenes}}getView(){return this.appProxy.view}getInitScenePath(){return this.manager.getAppInitPath(this.appId)}getIsWritable(){return this.manager.canOperate}getBox(){const e=this.boxManager.getBox(this.appId);if(e)return e;throw new De}getRoom(){return this.manager.room}setAttributes(e){this.manager.safeSetAttributes({[this.appId]:e})}updateAttributes(e,t){this.manager.attributes[this.appId]&&this.manager.safeUpdateAttributes([this.appId,...e],t)}async setScenePath(e){this.appProxy.box&&(this.appProxy.box.focus||(this.emitter.emit("focus",!0),await ce(50)),re(this.getRoom(),e))}mountView(e){const t=this.getView();t&&(t.divElement=e,setTimeout((()=>{var e;null==(e=this.getRoom())||e.refreshViewSize()}),1e3))}getAppOptions(){return"function"==typeof this.appOptions?this.appOptions():this.appOptions}}var Le,fe;(fe=Le||(Le={})).Apps="apps",fe.Focus="focus",fe.State="state",fe.BoxState="boxState",fe.MainViewCamera="mainViewCamera",fe.MainViewSize="mainViewSize",fe.Broadcaster="broadcaster",fe.Cursors="cursors",fe.Position="position",fe.CursorState="cursorState",fe.FullPath="fullPath";class Ee{constructor(e){this.manager=e}apps(){return B(this.manager.attributes,[Le.Apps])}get focus(){return B(this.manager.attributes,[Le.Focus])}getAppAttributes(e){return B(this.apps(),[e])}getAppState(e){return B(this.apps(),[e,Le.State])}setupAppAttributes(e,t,i){this.manager.attributes.apps||this.manager.safeSetAttributes({apps:{}});const s=["scenePath","title"];i||s.push("scenes");const a=V(e.options,s),r={kind:e.kind,options:a,isDynamicPPT:i};"string"==typeof e.src&&(r.src=e.src),this.manager.safeUpdateAttributes([Le.Apps,t],r),this.manager.safeUpdateAttributes([Le.Apps,t,Le.State],{[ge.Size]:{},[ge.Position]:{},[ge.SnapshotRect]:{},[ge.SceneIndex]:0})}updateAppState(e,t,i){B(this.manager.attributes,[Le.Apps,e,Le.State])&&this.manager.safeUpdateAttributes([Le.Apps,e,Le.State,t],i)}cleanAppAttributes(e){this.manager.safeUpdateAttributes([Le.Apps,e],void 0),this.manager.safeSetAttributes({[e]:void 0});this.manager.attributes[Le.Focus]===e&&this.cleanFocus()}cleanFocus(){this.manager.safeSetAttributes({[Le.Focus]:void 0})}getAppSceneIndex(e){var t;return null==(t=this.getAppState(e))?void 0:t[ge.SceneIndex]}getAppScenePath(e){var t,i;return null==(i=null==(t=this.getAppAttributes(e))?void 0:t.options)?void 0:i.scenePath}getMainViewScenePath(){return this.manager.attributes._mainScenePath}getMainViewSceneIndex(){return this.manager.attributes._mainSceneIndex}getBoxState(){return this.manager.attributes[Le.BoxState]}setMainViewScenePath(e){this.manager.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.manager.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return B(this.manager.attributes,[Le.MainViewCamera])}getMainViewSize(){return B(this.manager.attributes,[Le.MainViewSize])}setMainViewCamera(e){this.manager.safeSetAttributes({[Le.MainViewCamera]:o({},e)})}setMainViewSize(e){this.manager.safeSetAttributes({[Le.MainViewSize]:o({},e)})}setAppFocus(e,t){t?this.manager.safeSetAttributes({[Le.Focus]:e}):this.manager.safeSetAttributes({[Le.Focus]:void 0})}updateCursor(e,t){B(this.manager.attributes,[Le.Cursors])||this.manager.safeUpdateAttributes([Le.Cursors],{}),B(this.manager.attributes,[Le.Cursors,e])||this.manager.safeUpdateAttributes([Le.Cursors,e],{}),this.manager.safeUpdateAttributes([Le.Cursors,e,Le.Position],t)}updateCursorState(e,t){B(this.manager.attributes,[Le.Cursors,e])||this.manager.safeUpdateAttributes([Le.Cursors,e],{}),this.manager.safeUpdateAttributes([Le.Cursors,e,Le.CursorState],t)}getCursorState(e){return B(this.manager.attributes,[Le.Cursors,e,Le.CursorState])}cleanCursor(e){this.manager.safeUpdateAttributes([Le.Cursors,e],void 0)}setMainViewFocusPath(){const e=this.getMainViewScenePath();e&&ae(this.manager.mainView,e)}}const Pe=(...e)=>{Ut.debug&&console.log("[WindowManager]:",...e)};class Be{constructor(e){this.manager=e,this.store=new Ee(this.manager)}}class Ve extends Be{constructor(e,t,i,s){var a,r;super(t),this.params=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=e=>{const t=this.store.getAppState(e);if(!t)return;const i=null==t?void 0:t[ge.Position],s=this.store.focus,a=null==t?void 0:t[ge.Size],r=null==t?void 0:t[ge.SnapshotRect],n=null==t?void 0:t[ge.SceneIndex];let c={boxState:this.store.getBoxState()};return i&&(c=h(o({},c),{id:e,x:i.x,y:i.y})),s===e&&(c=h(o({},c),{focus:!0})),a&&(c=h(o({},c),{width:a.width,height:a.height})),r&&(c=h(o({},c),{snapshotRect:r})),n&&(c=h(o({},c),{sceneIndex:n})),c},this.appAttributesUpdateListener=e=>{var t;null==(t=this.manager.refresher)||t.add(e,(()=>m((()=>{const t=this.manager.windowManger.attributes[e];t&&this.appEmitter.emit("attributesUpdate",t)}))))},this.cameraListener=e=>{this.manager.cameraStore.setCamera(this.id,e)},this.kind=e.kind,this.id=i,this.appProxies.set(this.id,this),this.appEmitter=new g,this.appListener=this.makeAppEventListener(this.id);const n=this.params.options;n&&(this.scenePath=n.scenePath,(null==(a=this.appAttributes)?void 0:a.isDynamicPPT)&&this.scenePath?this.scenes=this.manager.displayer.entireScenes()[this.scenePath]:this.scenes=n.scenes),(null==(r=this.params.options)?void 0:r.scenePath)&&this.createView(),this.isAddApp=s}get view(){return this.manager.viewManager.getView(this.id)}get isWritable(){var e;return this.manager.canOperate&&!(null==(e=this.box)?void 0:e.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}getFullScenePath(){if(this.scenePath)return B(this.appAttributes,[Le.FullPath],this.scenePath)}setFullPath(e){this.manager.safeUpdateAttributes(["apps",this.id,Le.FullPath],e)}async baseInsertApp(e){var t;const i=this.params;if(i.kind){const s=await(null==(t=se.appClasses.get(i.kind))?void 0:t()),a=se.registered.get(i.kind);if(!s)throw new Error(`[WindowManager]: app load failed ${i.kind} ${i.src}`);return await this.setupApp(this.id,s,i.options,null==a?void 0:a.appOptions),this.boxManager.updateManagerRect(),e&&(this.focusBox(),this.manager.viewManager.switchAppToWriter(this.id),this.store.setMainViewFocusPath()),{appId:this.id,app:s}}throw new Error("[WindowManager]: kind require")}get box(){return this.boxManager.getBox(this.id)}focusBox(){this.boxManager.focusBox({appId:this.id})}async setupApp(e,t,i,s){Pe("setupApp",e,t,i);const a=new je(this.manager,e,this,s);try{Bt.once(`${e}${pe.WindowCreated}`).then((async()=>{const i=this.getAppInitState(e);this.boxManager.updateBoxState(i),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(e),this.setViewFocusScenePath(),setTimeout((async()=>{const s=await t.setup(a);se.notifyApp(t.kind,"created",{appId:e,result:s}),i&&(i.focus&&this.scenePath&&(this.manager.viewManager.switchAppToWriter(this.id),this.manager.viewManager.setMainViewFocusScenePath()),(null==i?void 0:i.x)&&i.y&&i.snapshotRect||this.boxManager.setBoxInitState(e));const r=this.boxManager.getBox(e);r&&this.boxManager.resizeBox({appId:e,width:r.width+.001,height:r.height+.001,skipUpdate:!0})}),50)})),this.boxManager.createBox({appId:e,app:t,options:i,canOperate:this.manager.canOperate})}catch(r){throw console.error(r),new Error(`[WindowManager]: app setup error: ${r.message}`)}}onSeek(e){this.appEmitter.emit("seek",e);const t=this.getAppInitState(this.id);this.boxManager.updateBoxState(t)}async onReconnected(){this.appEmitter.emit("reconnected",void 0),await this.destroy(!0,!1);const e=this.params,t=new Ve(e,this.manager,this.id,this.isAddApp);await t.baseInsertApp(this.store.focus===this.id)}switchToWritable(){if(this.view){if(this.view.mode===u.Writable)return;this.removeCameraListener();try{this.manager.mainView.mode===u.Writable&&(this.store.setMainViewFocusPath(),oe(Vt,u.Freedom),ne(this.manager.mainView,u.Freedom)),ne(this.view,u.Writable),this.recoverCamera()}catch(e){Pe("switch view failed",e)}finally{this.addCameraListener()}}}emitAppSceneStateChange(e){this.appEmitter.emit("sceneStateChange",e)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(e){return(t,i)=>{if(this.manager.canOperate)switch(t){case"setBoxSize":this.boxManager.resizeBox({appId:e,width:i.width,height:i.height,skipUpdate:!1});break;case"setBoxMinSize":this.boxManager.setBoxMinSize({appId:e,minWidth:i.minwidth,minHeight:i.minheight});break;case"setBoxTitle":this.boxManager.setBoxTitle({appId:e,title:i.title});break;case ue.destroy:if("destroyed"===this.status)return;this.destroy(!0,null==i?void 0:i.error),(null==i?void 0:i.error)&&console.error(null==i?void 0:i.error);break;case"focus":this.boxManager.focusBox({appId:this.id}),Bt.emit("focus",{appId:this.id})}}}recoverCamera(){this.manager.cameraStore.recoverCamera(this.id,this.view)}setScenePath(){if(!this.manager.canOperate)return;const e=this.getFullScenePath();this.manager.room&&e&&this.view&&re(this.manager.room,e)}switchToFreedom(){if(this.view&&this.view.mode===u.Writable){const e=this.getFullScenePath();e&&(ae(this.view,e),ne(this.view,u.Freedom))}}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&ae(this.view,e)}addCameraListener(){var e;null==(e=this.view)||e.callbacks.on("onCameraUpdated",this.cameraListener)}removeCameraListener(){var e;null==(e=this.view)||e.callbacks.off("onCameraUpdated",this.cameraListener)}async createView(){const e=await this.viewManager.createView(this.id);return this.addCameraListener(),this.setViewFocusScenePath(),e}async destroy(e,t,i){var s;"destroyed"!==this.status&&(this.status="destroyed",await se.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:i}),this.appEmitter.clearListeners(),Bt.emit(`destroy-${this.id}`,{error:i}),e&&this.boxManager.closeBox(this.id),t&&this.store.cleanAppAttributes(this.id),this.appProxies.delete(this.id),this.manager.cameraStore.deleteCamera(this.id),this.removeCameraListener(),this.manager.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),null==(s=this.manager.refresher)||s.remove(this.id))}async close(){return await this.destroy(!0,!0)}}class ze{constructor(e,t,i,s){this.manager=e,this.mainView=t,this.appProxies=i,this.appBoxMap=new Map,this.store=this.manager.store,this.mainView=t,this.teleBoxManager=this.setupBoxManager(s),this.teleBoxManager.events.on(G.State,(e=>{e&&(Vt.emit("boxStateChange",e),Bt.emit(e,void 0))})),this.teleBoxManager.events.on("removed",(e=>{e.forEach((e=>{Bt.emit("close",{appId:e.id})}))})),this.teleBoxManager.events.on("move",P((e=>{Bt.emit("move",{appId:e.id,x:e.x,y:e.y})}),50)),this.teleBoxManager.events.on("resize",P((e=>{Bt.emit("resize",{appId:e.id,width:e.width,height:e.height})}),200)),this.teleBoxManager.events.on("focused",(e=>{e?this.manager.canOperate?Bt.emit("focus",{appId:e.id}):this.teleBoxManager.update(e.id,{focus:!1}):this.blurFocusBox()})),this.teleBoxManager.events.on("snapshot",(e=>{Bt.emit("snapshot",{appId:e.id,rect:o({},e.rectSnapshot)})}))}get boxState(){return this.teleBoxManager.state}createBox(e){var t,i,s;if(!this.teleBoxManager)return;let{minwidth:a=Ae,minheight:r=ye}=null!=(t=e.app.config)?t:{};const{width:n,height:o}=null!=(i=e.app.config)?i:{},h=(null==(s=e.options)?void 0:s.title)||e.appId,c=this.teleBoxManager.containerRect;a>1&&(a/=c.width),r>1&&(r/=c.height);const p={title:h,minWidth:a,minHeight:r,width:n,height:o,id:e.appId};this.teleBoxManager.create(p),Bt.emit(`${e.appId}${pe.WindowCreated}`);const d=this.manager.store.getAppState(e.appId);if(d){const t=B(d,[ge.SnapshotRect]);z(t)&&this.setBoxInitState(e.appId)}}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&(Bt.emit("snapshot",{appId:e,rect:o({},t.rectSnapshot)}),t.state===F.Maximized&&Bt.emit("resize",{appId:e,x:t.x,y:t.y,width:t.width,height:t.height}))}setupBoxManager(e){const t=Ut.wrapper?Ut.wrapper:document.body,i=t.getBoundingClientRect(),s={root:t,containerRect:{x:0,y:0,width:i.width,height:i.height},fence:!1},a=(null==e?void 0:e.collectorContainer)||Ut.wrapper,r=o(o({},Ce),null==e?void 0:e.collectorStyles),n=new Y({styles:r}).mount(a);s.collector=n;const h=new H(s);return this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=h,h}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e){return this.teleBoxManager.remove(e)}boxIsFocus(e){const t=this.getBox(e);return null==t?void 0:t.focus}getFocusBox(){return this.teleBoxManager.query({focus:!0})[0]}getTopBox(){const e=this.teleBoxManager.query();return U(e,"zIndex")}updateBoxState(e){if(!e)return;const t=this.getBox(e.id);t&&(this.teleBoxManager.update(t.id,{x:e.x,y:e.y,width:e.width||.5,height:e.height||.5},!0),setTimeout((()=>{e.boxState&&this.teleBoxManager.state!==e.boxState&&this.teleBoxManager.setState(e.boxState,!0)}),0),setTimeout((()=>{e.snapshotRect&&t.setSnapshot(e.snapshotRect)}),30),setTimeout((()=>{e.focus&&this.teleBoxManager.update(t.id,{focus:!0},!0)}),50))}updateManagerRect(){var e;const t=null==(e=this.mainView.divElement)?void 0:e.getBoundingClientRect();if(t&&t.width>0&&t.height>0){const e={x:0,y:0,width:t.width,height:t.height};this.teleBoxManager.setContainerRect(e),this.appProxies.forEach((e=>{this.teleBoxManager&&e.appEmitter.emit("containerRectUpdate",this.teleBoxManager.containerRect)}))}}moveBox({appId:e,x:t,y:i}){this.teleBoxManager.update(e,{x:t,y:i},!0)}focusBox({appId:e}){this.teleBoxManager.update(e,{focus:!0},!0)}resizeBox({appId:e,width:t,height:i,skipUpdate:s}){this.teleBoxManager.update(e,{width:t,height:i},s)}setBoxMinSize(e){this.teleBoxManager.update(e.appId,{minWidth:e.minWidth,minHeight:e.minHeight},!0)}setBoxTitle(e){this.teleBoxManager.update(e.appId,{title:e.title},!0)}blurAllBox(){this.teleBoxManager.updateAll({focus:!1})}blurFocusBox(){const e=this.teleBoxManager.query({focus:!0});if(e.length){const t=e[0];this.teleBoxManager.update(t.id,{focus:!1})}}updateAll(e){this.teleBoxManager.updateAll(e)}setBoxState(e){this.teleBoxManager.setState(e,!0),Vt.emit("boxStateChange",e)}}class Ue{constructor(){this.cameras=new Map}setCamera(e,t){this.cameras.set(e,t)}getCamera(e){return this.cameras.get(e)}deleteCamera(e){this.cameras.delete(e)}recoverCamera(e,t){const i=this.cameras.get(e);i&&t&&t.moveCamera(h(o({},i),{animationMode:b.Immediately}))}}class ke{constructor(e){this.manager=e,this.store=this.manager.store,this.started=!1,this.mainViewIsAddListener=!1,this.cameraReaction=()=>M((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Le.MainViewCamera]}),(e=>{e&&e.id!==this.observerId&&this.moveCamera(e)}),{fireImmediately:!0}),this.sizeReaction=()=>M((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Le.MainViewSize]}),(e=>{e&&e.id!==this.observerId&&(this.moveCameraToContian(e),this.moveCamera(this.store.getMainViewCamera()))}),{fireImmediately:!0}),this.cameraListener=e=>{var t;this.store.setMainViewCamera(h(o({},e),{id:this.observerId})),(null==(t=this.store.getMainViewSize())?void 0:t.id)!==this.observerId&&this.setMainViewSize(this.view.size)},this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.sizeListener=e=>{this.setMainViewSize(e)},this.setMainViewSize=P((e=>{this.store.setMainViewSize(h(o({},e),{id:this.observerId}))}),50),this.mainViewCameraListener=e=>{this.manager.cameraStore.setCamera("mainView",e)},this.mainView=this.createMainView(),Bt.once("mainViewMounted").then((()=>{this.view.callbacks.on("onCameraUpdated",this.mainViewCameraListener),setTimeout((()=>{this.start()}),300)}))}start(){var e,t;this.started||(this.addCameraListener(),null==(e=this.manager.refresher)||e.add(Le.MainViewCamera,this.cameraReaction),null==(t=this.manager.refresher)||t.add(Le.MainViewSize,this.sizeReaction),this.view.callbacks.on("onSizeUpdated",this.sizeListener),this.started=!0)}get observerId(){return this.manager.displayer.observerId}get view(){return this.mainView}createMainView(){const e=this.manager.displayer.views.createView();this.manager.cameraStore.setCamera("mainView",e.camera),e.callbacks.on("onSizeUpdated",(()=>{this.manager.boxManager.updateManagerRect()}));const t=this.store.getMainViewScenePath();return t&&ae(e,t),this.store.focus||this.switchViewModeToWriter(),e}addMainViewListener(){this.mainViewIsAddListener||this.view.divElement&&(this.view.divElement.addEventListener("click",this.mainViewClickListener),this.view.divElement.addEventListener("touchend",this.mainViewClickListener),this.mainViewIsAddListener=!0)}removeMainViewListener(){this.view.divElement&&(this.view.divElement.removeEventListener("click",this.mainViewClickListener),this.view.divElement.removeEventListener("touchend",this.mainViewClickListener))}async mainViewClickHandler(){this.manager.canOperate&&this.view.mode!==u.Writable&&(this.store.cleanFocus(),this.manager.boxManager.blurFocusBox())}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.cameraListener)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.cameraListener)}switchViewModeToWriter(){if(this.manager.canOperate&&this.view){if(this.view.mode===u.Writable)return;this.view.callbacks.off("onCameraUpdated",this.mainViewCameraListener),oe(Vt,u.Writable),ne(this.view,u.Writable),this.manager.cameraStore.recoverCamera("mainView",this.view),this.view.callbacks.on("onCameraUpdated",this.mainViewCameraListener)}}moveCameraToContian(e){z(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:b.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!z(e)){if(k(e,this.view.camera))return;const{centerX:t,centerY:i,scale:s}=e,a=s*(this.scale||1);this.view.moveCamera({centerX:t,centerY:i,scale:a,animationMode:b.Immediately})}}stop(){var e,t;this.removeCameraListener(),null==(e=this.manager.refresher)||e.remove(Le.MainViewCamera),null==(t=this.manager.refresher)||t.remove(Le.MainViewSize),this.view.callbacks.off("onSizeUpdated",this.sizeListener),this.started=!1}}const Oe=e=>(t,i)=>{if(void 0!==t){if(I){const s=t=>{t.map((e=>e.kind)).includes(e)&&i()};return I(t,s),i(),()=>A(t,s)}return M((()=>t),(()=>{i()}),{fireImmediately:!0})}},Qe=Oe(x.Removed),Ze=Oe(x.Inserted);class Re{constructor(e,t){this.manager=t,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=e=>{e===v.Connected&&this.phase===v.Reconnecting&&this.onReconnected(),this.phase=e},this.onReconnected=()=>{Pe("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach(((e,t)=>{O(e)&&this.disposers.set(t,e())})),this.manager.notifyReconnected()},this.room=e,this.phase=null==e?void 0:e.phase,null==e||e.callbacks.on("onPhaseChanged",this.onPhaseChanged)}releaseDisposers(){this.disposers.forEach((e=>{O(e)&&e()})),this.disposers.clear()}add(e,t){O(t)&&(this.reactors.set(e,t),this.disposers.set(e,t()))}remove(e){this.reactors.has(e)&&this.reactors.delete(e);const t=this.disposers.get(e);t&&(O(t)&&t(),this.disposers.delete(e))}destroy(){var e;null==(e=this.room)||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),this.releaseDisposers()}}class We extends Be{constructor(e,t,i){super(t),this.displayer=e,this.cameraStore=i,this.views=new Map,this.mainViewProxy=this.manager.mainViewProxy,setTimeout((()=>{var e;null==(e=this.manager.refresher)||e.add("focus",(()=>M((()=>this.store.focus),(e=>{e?this.switchAppToWriter(e):(this.switchMainViewToWriter(),this.manager.boxManager.blurFocusBox())}),{fireImmediately:!0})))}),100)}get currentScenePath(){return this.displayer.state.sceneState.scenePath}get mainView(){return this.mainViewProxy.view}createView(e){const t=this.displayer.views.createView();return this.cameraStore.setCamera(e,t.camera),ne(t,u.Freedom),this.views.set(e,t),t}destroyView(e){const t=this.views.get(e);t&&(this.releaseView(t),this.views.delete(e))}releaseView(e){e.didRelease||e.release()}getView(e){return this.views.get(e)}switchMainViewToWriter(){if(this.timer&&clearTimeout(this.timer),this.mainView.mode!==u.Writable)return this.freedomAllViews(),new Promise(((e,t)=>{this.timer=window.setTimeout((()=>{try{const t=this.store.getMainViewScenePath();t&&(this.freedomAllViews(),re(this.manager.room,t),this.mainViewProxy.switchViewModeToWriter()),e(!0)}catch(i){t(i)}}),100)}))}refreshViews(){const e=this.store.focus;if(this.setMainViewFocusScenePath(),e){const t=this.manager.appProxies.get(e);null==t||t.switchToWritable()}else this.switchMainViewToWriter()}setMainViewFocusScenePath(){const e=this.store.getMainViewScenePath();e&&ae(this.manager.mainView,e)}freedomAllViews(){this.manager.appProxies.forEach((e=>{e.setViewFocusScenePath(),e.view&&ne(e.view,u.Freedom)})),this.mainView.mode===u.Writable&&(oe(Vt,u.Freedom),this.mainView.mode=u.Freedom),this.mainView.focusScenePath||this.store.setMainViewFocusPath()}switchAppToWriter(e){this.freedomAllViews(),setTimeout((()=>{const t=this.manager.appProxies.get(e);if(t){const e=this.store.getBoxState();if(e&&e===F.Minimized)return;t.setScenePath(),t.switchToWritable(),t.focusBox()}}),100)}destroy(){var e;this.mainViewProxy.removeMainViewListener(),Ut.wrapper&&(null==(e=Ut.wrapper.parentNode)||e.removeChild(Ut.wrapper),Ut.wrapper=void 0),this.releaseView(this.mainView)}}class Ge{constructor(e,t){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.store=new Ee(this),this.onAppDelete=e=>{const t=Object.keys(e);this.appProxies.forEach(((e,i)=>{t.includes(i)||e.destroy(!0,!1)}))},this.displayerStateListener=e=>{var t,i;const s=e.sceneState;if(s){const e=s.scenePath;this.appProxies.forEach((t=>{t.scenePath&&e.startsWith(t.scenePath)&&(t.emitAppSceneStateChange(s),t.setFullPath(e))}))}e.roomMembers&&(null==(t=this.windowManger.cursorManager)||t.setRoomMembers(e.roomMembers),null==(i=this.windowManger.cursorManager)||i.cleanMemberAttributes(e.roomMembers)),this.appProxies.forEach((t=>{t.appEmitter.emit("roomStateChange",e)}))},this.displayerWritableListener=e=>{const t=!e,i=void 0===this.windowManger.readonly||!1===this.windowManger.readonly;void 0===this.windowManger.readonly?this.boxManager.teleBoxManager.setReadonly(e):this.boxManager.teleBoxManager.setReadonly(!(t&&i)),this.appProxies.forEach((e=>{e.emitAppIsWritableChange()})),!0===t?(this.store.focus||this.mainViewProxy.switchViewModeToWriter(),this.mainView.disableCameraTransform=!1):this.mainView.disableCameraTransform=!0},this.boxEventListener=(e,t)=>{switch(e){case"move":this.dispatchInternalEvent(pe.AppMove,t),this.store.updateAppState(t.appId,ge.Position,{x:t.x,y:t.y});break;case"focus":this.windowManger.safeSetAttributes({focus:t.appId});break;case"blur":this.dispatchInternalEvent(pe.AppBlur,t);break;case"resize":t.width&&t.height&&(this.dispatchInternalEvent(pe.AppResize,t),this.store.updateAppState(t.appId,ge.Size,{width:t.width,height:t.height}));break;case F.Minimized:this.safeDispatchMagixEvent("__WindowManger",{eventName:pe.AppBoxStateChange,payload:h(o({},t),{state:e})}),this.safeSetAttributes({boxState:e}),this.store.cleanFocus(),this.boxManager.blurFocusBox();break;case F.Maximized:{this.safeDispatchMagixEvent("__WindowManger",{eventName:pe.AppBoxStateChange,payload:h(o({},t),{state:e})});const i=this.boxManager.getTopBox();i&&Bt.emit("focus",{appId:i.id}),this.safeSetAttributes({boxState:e});break}case F.Normal:this.safeDispatchMagixEvent("__WindowManger",{eventName:pe.AppBoxStateChange,payload:h(o({},t),{state:e})}),this.safeSetAttributes({boxState:e});break;case"snapshot":this.safeDispatchMagixEvent("__WindowManger",{eventName:pe.AppSnapshot,payload:t}),this.store.updateAppState(t.appId,ge.SnapshotRect,o({},t.rect));break;case"close":{const e=this.appProxies.get(t.appId);e&&e.destroy(!1,!0,t.error);break}}},this.displayer=e.displayer,this.cameraStore=new Ue,this.mainViewProxy=new ke(this),this.viewManager=new We(this.displayer,this,this.cameraStore),this.boxManager=new ze(this,this.mainViewProxy.view,this.appProxies,t),this.appListeners=new be(this,this.appProxies),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=new Re(this.room,this),Bt.once("onCreated").then((()=>this.onCreated())),S(this.displayer)&&Bt.on("seek",(e=>{this.appProxies.forEach((t=>{t.onSeek(e)})),this.attributesUpdateCallback(this.attributes.apps)}))}async onCreated(){var e,t,i,s;if(await this.attributesUpdateCallback(this.attributes.apps),Bt.onAny(this.boxEventListener),null==(e=this.refresher)||e.add("apps",(()=>Ze(this.attributes.apps,(()=>{this.attributesUpdateCallback(this.attributes.apps)})))),null==(t=this.refresher)||t.add("appsClose",(()=>Qe(this.attributes.apps,(()=>{this.onAppDelete(this.attributes.apps)})))),!this.attributes.apps||0===Object.keys(this.attributes.apps).length){const e=this.store.getMainViewScenePath();if(!e)return;this.displayer.state.sceneState.scenePath!==e&&(null==(i=this.room)||i.setScenePath(e))}this.displayerWritableListener(!(null==(s=this.room)?void 0:s.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener)}async attributesUpdateCallback(e){if(e)for(const t in e)if(!this.appProxies.has(t)&&!this.appStatus.has(t)){const i=e[t];await this.baseInsertApp({kind:i.kind,options:i.options,isDynamicPPT:i.isDynamicPPT},t,!1),this.focusByAttributes(e)}}bindMainView(e,t){const i=this.mainViewProxy.view;i.disableCameraTransform=t,i.divElement=e,i.focusScenePath||this.store.setMainViewFocusPath(),void 0===this.store.focus&&i.mode!==u.Writable&&this.viewManager.switchMainViewToWriter(),this.mainViewProxy.addMainViewListener(),Bt.emit("mainViewMounted")}async addApp(e,t){Pe("addApp",e);const{appId:i,needFocus:s}=await this.beforeAddApp(e,t),a=await this.baseInsertApp(e,i,!0,s);return this.afterAddApp(a),null==a?void 0:a.id}async beforeAddApp(e,t){var i;const s=await(async e=>{var t,i;const s=await(null==(t=se.appClasses.get(e))?void 0:t());return s&&(null==(i=s.config)?void 0:i.singleton)?e:`${e}-${J().replace("-","").slice(0,8)}`})(e.kind);this.appStatus.set(s,Me.StartCreate),this.store.setupAppAttributes(e,s,t),this.boxManager.boxState===F.Minimized&&this.boxManager.teleBoxManager.setState(F.Normal);const a=this.boxManager.boxState!==F.Minimized;a&&this.store.setAppFocus(s,!0);const r=null!=(i=e.attributes)?i:{};return this.safeUpdateAttributes([s],r),{appId:s,needFocus:a}}afterAddApp(e){var t,i;e&&e.box&&Bt.emit("move",{appId:e.id,x:null==(t=e.box)?void 0:t.x,y:null==(i=e.box)?void 0:i.y})}async closeApp(e){const t=this.appProxies.get(e);t&&t.destroy(!0,!0)}async baseInsertApp(e,t,i,s){if(this.appStatus.set(t,Me.StartCreate),this.appProxies.has(t))return void console.warn("[WindowManager]: app duplicate exists and cannot be created again");const a=new Ve(e,this,t,i);if(a)return await a.baseInsertApp(s),this.appStatus.delete(t),a;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return N(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return N(this.displayer)?this.displayer:void 0}get mainView(){return this.windowManger.mainView}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}async setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===D.None)throw new Error(`[WindowManager]: ${e} not valid scene`);if(t===D.Page)await this._setMainViewScenePath(e);else if(t===D.Dir){const t=((e,t)=>{const i=e.entireScenes()[t][0].name;return"/"===t?`/${i}`:`${t}/${i}`})(this.displayer,e);await this._setMainViewScenePath(t)}}}async _setMainViewScenePath(e){this.safeSetAttributes({_mainScenePath:e}),await this.viewManager.switchMainViewToWriter(),re(this.room,e),this.store.setMainViewFocusPath()}async setMainViewSceneIndex(e){this.room&&(this.safeSetAttributes({_mainSceneIndex:e}),await this.viewManager.switchMainViewToWriter(),this.room.setSceneIndex(e),this.store.setMainViewScenePath(this.room.state.sceneState.scenePath),this.store.setMainViewFocusPath())}getAppInitPath(e){var t;const i=this.store.getAppAttributes(e);if(i)return null==(t=null==i?void 0:i.options)?void 0:t.scenePath}safeDispatchMagixEvent(e,t){this.canOperate&&this.displayer.dispatchMagixEvent(e,t)}focusByAttributes(e){if(e&&Object.keys(e).length===this.boxManager.appBoxMap.size){const e=this.store.focus;e&&this.boxManager.focusBox({appId:e})}}notifyReconnected(){this.appProxies.forEach((e=>{e.onReconnected()}))}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent("__WindowManger",{eventName:e,payload:t})}destroy(){var e;this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),Bt.offAny(this.boxEventListener),Bt.clearListeners(),this.appProxies.size&&this.appProxies.forEach((e=>{e.destroy(!0,!1)})),this.viewManager.destroy(),null==(e=this.refresher)||e.destroy(),Vt.clearListeners()}}function Fe(){}function Ye(e){return e()}function He(){return Object.create(null)}function Xe(e){e.forEach(Ye)}function Je(e){return"function"==typeof e}function Ke(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}let qe,$e;function _e(e,t){return qe||(qe=document.createElement("a")),qe.href=t,e===qe.href}function et(e,t){e.appendChild(t)}function tt(e,t,i){e.insertBefore(t,i||null)}function it(e){e.parentNode.removeChild(e)}function st(e){return document.createElement(e)}function at(e){return document.createTextNode(e)}function rt(){return at(" ")}function nt(e,t,i){null==i?e.removeAttribute(t):e.getAttribute(t)!==i&&e.setAttribute(t,i)}function ot(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function ht(e,t,i,s){e.style.setProperty(t,i,s?"important":"")}function ct(e){$e=e}const pt=[],dt=[],gt=[],lt=[],ut=Promise.resolve();let mt=!1;function Mt(e){gt.push(e)}let wt=!1;const It=new Set;function At(){if(!wt){wt=!0;do{for(let e=0;e<pt.length;e+=1){const t=pt[e];ct(t),yt(t.$$)}for(ct(null),pt.length=0;dt.length;)dt.pop()();for(let e=0;e<gt.length;e+=1){const t=gt[e];It.has(t)||(It.add(t),t())}gt.length=0}while(pt.length);for(;lt.length;)lt.pop()();mt=!1,wt=!1,It.clear()}}function yt(e){if(null!==e.fragment){e.update(),Xe(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(Mt)}}const Ct=new Set;function bt(e,t){-1===e.$$.dirty[0]&&(pt.push(e),mt||(mt=!0,ut.then(At)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function xt(e,t,i,s,a,r,n,o=[-1]){const h=$e;ct(e);const c=e.$$={fragment:null,ctx:null,props:r,update:Fe,not_equal:a,bound:He(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(h?h.$$.context:t.context||[]),callbacks:He(),dirty:o,skip_bound:!1,root:t.target||h.$$.root};n&&n(c.root);let p=!1;if(c.ctx=i?i(e,t.props||{},((t,i,...s)=>{const r=s.length?s[0]:i;return c.ctx&&a(c.ctx[t],c.ctx[t]=r)&&(!c.skip_bound&&c.bound[t]&&c.bound[t](r),p&&bt(e,t)),i})):[],c.update(),p=!0,Xe(c.before_update),c.fragment=!!s&&s(c.ctx),t.target){if(t.hydrate){const e=(l=t.target,Array.from(l.childNodes));c.fragment&&c.fragment.l(e),e.forEach(it)}else c.fragment&&c.fragment.c();t.intro&&((d=e.$$.fragment)&&d.i&&(Ct.delete(d),d.i(g))),function(e,t,i,s){const{fragment:a,on_mount:r,on_destroy:n,after_update:o}=e.$$;a&&a.m(t,i),s||Mt((()=>{const t=r.map(Ye).filter(Je);n?n.push(...t):Xe(t),e.$$.on_mount=[]})),o.forEach(Mt)}(e,t.target,t.anchor,t.customElement),At()}var d,g,l;ct(h)}function vt(e){let t,i,s;return{c(){t=st("img"),nt(t,"class","netless-window-manager-cursor-selector-avatar"),nt(t,"style",i=e[15]()),_e(t.src,s=e[7])||nt(t,"src",s),nt(t,"alt","avatar")},m(e,i){tt(e,t,i)},p(e,i){128&i&&!_e(t.src,s=e[7])&&nt(t,"src",s)},d(e){e&&it(t)}}}function St(e){let t,i;return{c(){t=st("span"),i=at(e[1]),nt(t,"class","netless-window-manager-cursor-tag-name"),ht(t,"background-color",e[10])},m(e,s){tt(e,t,s),et(t,i)},p(e,s){2&s&&ot(i,e[1]),1024&s&&ht(t,"background-color",e[10])},d(e){e&&it(t)}}}function Nt(e){let t,i,s,a,r,n,o,h,c,p,d,g,l=e[13]&&vt(e),u=e[14]&&St(e);return{c(){t=st("div"),i=st("div"),s=st("div"),l&&l.c(),a=rt(),r=st("span"),n=at(e[0]),o=rt(),u&&u.c(),h=rt(),c=st("div"),p=st("img"),ht(r,"overflow","hidden"),ht(r,"white-space","nowrap"),ht(r,"text-overflow","ellipsis"),ht(r,"max-width","80px"),nt(s,"class",e[8]),ht(s,"background-color",e[2]),ht(s,"color",e[9]),ht(s,"opacity",e[11]),nt(i,"class","netless-window-manager-cursor-name"),nt(p,"class",d="netless-window-manager-cursor-"+e[3]+"-image"),_e(p.src,g=e[6])||nt(p,"src",g),nt(p,"alt",e[3]),nt(c,"class","cursor-image-wrapper"),nt(t,"class","netless-window-manager-cursor-mid"),ht(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),ht(t,"display",e[12])},m(e,d){tt(e,t,d),et(t,i),et(i,s),l&&l.m(s,null),et(s,a),et(s,r),et(r,n),et(s,o),u&&u.m(s,null),et(t,h),et(t,c),et(c,p)},p(e,[i]){e[13]?l?l.p(e,i):(l=vt(e),l.c(),l.m(s,a)):l&&(l.d(1),l=null),1&i&&ot(n,e[0]),e[14]?u?u.p(e,i):(u=St(e),u.c(),u.m(s,null)):u&&(u.d(1),u=null),256&i&&nt(s,"class",e[8]),4&i&&ht(s,"background-color",e[2]),512&i&&ht(s,"color",e[9]),2048&i&&ht(s,"opacity",e[11]),8&i&&d!==(d="netless-window-manager-cursor-"+e[3]+"-image")&&nt(p,"class",d),64&i&&!_e(p.src,g=e[6])&&nt(p,"src",g),8&i&&nt(p,"alt",e[3]),48&i&&ht(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),4096&i&&ht(t,"display",e[12])},i:Fe,o:Fe,d(e){e&&it(t),l&&l.d(),u&&u.d()}}}function Dt(e,t,i){let s,a,r,n,{cursorName:o}=t,{tagName:h}=t,{backgroundColor:c}=t,{appliance:p}=t,{x:d}=t,{y:g}=t,{src:l}=t,{visible:u}=t,{avatar:m}=t,{theme:M}=t,{color:w}=t,{cursorTagBackgroundColor:I}=t,{opacity:A}=t;return e.$$set=e=>{"cursorName"in e&&i(0,o=e.cursorName),"tagName"in e&&i(1,h=e.tagName),"backgroundColor"in e&&i(2,c=e.backgroundColor),"appliance"in e&&i(3,p=e.appliance),"x"in e&&i(4,d=e.x),"y"in e&&i(5,g=e.y),"src"in e&&i(6,l=e.src),"visible"in e&&i(16,u=e.visible),"avatar"in e&&i(7,m=e.avatar),"theme"in e&&i(8,M=e.theme),"color"in e&&i(9,w=e.color),"cursorTagBackgroundColor"in e&&i(10,I=e.cursorTagBackgroundColor),"opacity"in e&&i(11,A=e.opacity)},e.$$.update=()=>{1&e.$$.dirty&&(s=!z(o)),2&e.$$.dirty&&i(14,a=!z(h)),128&e.$$.dirty&&i(13,r=!z(m)),65536&e.$$.dirty&&i(12,n=u?"initial":"none")},[o,h,c,p,d,g,l,m,M,w,I,A,n,r,a,()=>Object.entries({width:(s?19:28)+"px",height:(s?19:28)+"px",position:s?"initial":"absolute","border-color":s?"white":c,"margin-right":(s?4:0)+"px"}).map((([e,t])=>`${e}: ${t}`)).join(";"),u]}class Tt extends class{$destroy(){!function(e,t){const i=e.$$;null!==i.fragment&&(Xe(i.on_destroy),i.fragment&&i.fragment.d(t),i.on_destroy=i.fragment=null,i.ctx=[])}(this,1),this.$destroy=Fe}$on(e,t){const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}$set(e){var t;this.$$set&&(t=e,0!==Object.keys(t).length)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}{constructor(e){super(),xt(this,e,Dt,Nt,Ke,{cursorName:0,tagName:1,backgroundColor:2,appliance:3,x:4,y:5,src:6,visible:16,avatar:7,theme:8,color:9,cursorTagBackgroundColor:10,opacity:11})}}const jt={[T.pencil]:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAYISURBVHgB7ZpNSCtXFIBPEuvz+dMGpYUKD/sWFX+Qti6kK7Hqpm6e9q0rIoIUFUShPLV10VZx4+JZqa9v20LBhdq9fyBUCtKNPH8qYl2IOw3G38Rkek4y15y5uTOZJDOWggcOSSYzN/ebc+45554JwIM8iBCPyTEP+86T4vyMfsRN4b+nQTKIJp0vzuGvlpID7os8EQNEIBD4oKio6Bm9DwaDv/v9/n/076JgbtWUYPchwrW8qD7UnOvr6wFNkpubm+/wu7f0c7y6mrnlvQufxB0Iau7V1dX3BDA/P6/V1dVpzc3N2uLiIofK1c8VYHys/wRKBUN3/hGHqaysNOjc3FwMis6hc0FtLTHuvYLxCCZgci8uLn4wg5Gh6Fy8Jk+/NkcCAlAAuUkoW4g0B+d5tLS05O/r67O8eGxsDNra2uDy8nKsoKCAwCIQDxQa0yTxgrvCYXyTk5Ml+Orf2dlJeeHIyAigFSE/P38ELfUNqNdSkjgF5FF89jL1TU1NlQwODl5gZPujp6cHWltbUw7Koc7Pz8mkZpHPFeFrJuZeqLnoMoPoZqe0JjDP/IZgnyLUG/o8NDRkuo5Ua2pjY6MC4oFCFf1cA0oKzRSOp6enRfTaGh0d/QxBt+1CUVgnOTs7+xrHfQzGyOcKkK3QTJMnQffZ6e/v/xwttmsHqqmpKXbdycnJCxy7ABLh3FEgVZ6hZJhnFZoFFMF0d3c/w7v+dyookXBnZ2c/xvHfhriVcvXfdBRItsxjnOhYqjwjoAimq6vrCysoGofk+Ph4Esd/F/UdiFtJAGUd2DygTpp5dmBUUJ2dnc9VUALm8PDwJY7/BPU9VD8k3M4RC6kskxZMKigKIMLN9vf3p3H8DyWgfEhEOwOQD9IXOTz7EObbwsLC4YWFBRgeHrY9ECXYo6MjaGlpKWlsbPxkYGDgRW1tbSEWquVlZWXBzc3Nl1VVVa8hXiXc6ioqBqGaPDk7AACJTRZ3NS9lcUp86cJwoSQ7Pj4Op6enfxUXF3/V0NCQv7q6GsCvwrqGUG/01xAD4+VQTOxaSF43d5bBOisrGBJRCtXX17+/trb268rKSgASFgmz97KFkmo6OztWuVyPweiWGc4WRkhFRQVEIpHg8vJyQAIQVlLBROVxvBYQHsXnO8tk62ZcyN0wecLBwcEvYHSzEPscBqOLCRhLC4n9uqaA8UAWAcAKhtbQ3t7eTHl5+Y9gtAp3twhT056CDMQ7MRzIFTeTYKb1yYYVQFH9VdzsqNmYKpfTJBDX3Ixgdnd3XyHMT2AMALJlBBSPaMpNngrIsTyTCgaj288YDGakictrxizvKFNOjgSSBLS+vv6UYHDb7DgMVgsChjTEgCIKGG4ZU+EWkgNBzN1qamq+pAMTExPgFMzW1tZrhHkFyWE5KxgSszx0527RaDRmOSpRshEOU11dPQPG8CwHARHJlMnTSrwSRFIlfXt7m3V5ngJGuJtqzaQtZkFBVNJezN5ZAdmwjKo2k9tVtrcI3OXk4tPgcg7ChCDZ1URgMOu72Xa5VFHOkymQhWVU60YVmjN6wiC7k6p+S1syCACOwJBYFaexV+yhBekNPsMBO6KAEeE4BMaCU67RsoYhSbXgaT//ht709vZCaWmp6YkEbLFmVJWzas04+iBL7EKpm0J7duqu0B7+CTUpNJuyvb1NCfMj1CqI9wLKUOlOUMeG+gGFkHii4HizUF4z/KFUrPsJ8WbEIyx7nnZ0dDynME6BAuce09iFHo+GrnmGltltb2//E4wVAN82y7vOjKOZXSBhJdHNiT3TYWD8OY2PTUJkdd7MkJMnT5wZVQF2RFX6yBMUdzPMvvfqxz3sXHF+GNT9ANXit/10O1sgHkZvdQAOKvs9B5L7ARELGAAXLSTvM8QExTE+YbHe+HURhZp1aRyF4CJXClbbWwGketgkW9VsY+YaiBCVhfgE+XvxRwgZSM4jUVCDZFQ9pytmXR8hUTB2gnidx4XffVWydN0yQjwmx/jkAZJBrIBI5J7ZvQGZWUgVSuU/EqmOAzicKNMVu816DdRWUV1/7xAP8n+SfwF3Du3NF2sYhwAAAABJRU5ErkJggg==",[T.selector]:"data:image/png;base64,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",[T.eraser]:"data:image/png;base64,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",[T.shape]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",[T.text]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="};class Lt{constructor(e,t,i,s,a){this.manager=e,this.cursors=t,this.memberId=i,this.cursorManager=s,this.wrapper=a,this.setMember(),this.createCursor(),l((()=>{if(this.disposer&&this.disposer(),!this.cursorPosition)throw new Error;this.startReaction()}),{retries:3}),this.autoHidden()}startReaction(){this.disposer=m((()=>{var e;const t=this.cursorPosition,i=this.cursorState;if(t){if("main"===t.type){const e=this.cursorManager.wrapperRect;this.component&&e&&(this.autoHidden(),this.moveCursor(t,e,this.manager.mainView))}else{const i=this.cursorManager.focusView,s=null==(e=null==i?void 0:i.divElement)?void 0:e.getBoundingClientRect(),a=null==i?void 0:i.camera;i&&s&&a&&this.component&&(this.autoHidden(),this.moveCursor(t,s,i))}i&&i===we.Leave&&this.hide()}}))}moveCursor(e,t,i){var s,a;const{x:r,y:n}=e,o=null==i?void 0:i.screen.convertPointToScreen(r,n);if(o){const e=o.x+t.x-2,i=o.y+t.y-18;o.x<0||o.x>t.width||o.y<0||o.y>t.height?null==(s=this.component)||s.$set({visible:!1}):null==(a=this.component)||a.$set({visible:!0,x:e,y:i})}}get memberApplianceName(){var e,t;return null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.currentApplianceName}get memberColor(){var e,t;return`rgb(${null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.strokeColor.join(",")})`}get payload(){var e;return null==(e=this.member)?void 0:e.payload}get memberCursorName(){var e,t;return(null==(e=this.payload)?void 0:e.nickName)||(null==(t=this.payload)?void 0:t.cursorName)||this.memberId}get memberTheme(){var e;return(null==(e=this.payload)?void 0:e.theme)?"netless-window-manager-cursor-inner-mellow":"netless-window-manager-cursor-inner"}get memberCursorTextColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTextColor)||"#FFFFFF"}get memberCursorTagBackgroundColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTagBackgroundColor)||this.memberColor}get memberAvatar(){var e;return null==(e=this.payload)?void 0:e.avatar}get memberOpacity(){return this.memberCursorName||this.memberAvatar?1:0}get cursorState(){return B(this.cursors,[this.memberId,Le.CursorState])}get cursorPosition(){return B(this.cursors,[this.memberId,Le.Position])}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout((()=>{this.hide()}),1e4)}async createCursor(){this.member&&this.wrapper&&(this.component=new Tt({target:this.wrapper,props:this.initProps()}))}initProps(){return{x:0,y:0,appliance:this.memberApplianceName,avatar:this.memberAvatar,src:this.getIcon(),visible:!1,backgroundColor:this.memberColor,cursorName:this.memberCursorName,theme:this.memberTheme,color:this.memberCursorTextColor,cursorTagBackgroundColor:this.memberCursorTagBackgroundColor,opacity:this.memberOpacity}}getIcon(){if(this.member){return jt[this.memberApplianceName||T.shape]||jt[T.shape]}}setMember(){var e,t;this.member=null==(e=this.cursorManager.roomMembers)?void 0:e.find((e=>e.memberId===Number(this.memberId))),null==(t=this.component)||t.$set(Q(this.initProps(),["x","y","visible"]))}destroy(){this.disposer&&this.disposer(),this.component&&this.component.$destroy(),this.cursorManager.cursorInstances.delete(this.memberId)}hide(){this.component&&this.component.$set({visible:!1})}}class ft{constructor(e,t){var i;this.manager=e,this.appManager=t,this.cursorInstances=new Map,this.store=this.appManager.store,this.mouseMoveListener=P((e=>{this.updateCursor(this.getType(e),e.clientX,e.clientY)}),5),this.touchMoveListener=P((e=>{if(1===e.touches.length){const t=e.touches[0];this.updateCursor(this.getType(t),t.clientX,t.clientY)}}),5),this.getPoint=(e,t,i)=>{var s;const a=null==(s=null==e?void 0:e.divElement)?void 0:s.getBoundingClientRect();if(a){return null==e?void 0:e.convertToPointInWorld({x:t-a.x,y:i-a.y})}},this.getType=e=>{var t;const i=e.target,s=this.appManager.focusApp;switch(i.parentElement){case this.mainViewElement:return{type:"main"};case null==(t=null==s?void 0:s.view)?void 0:t.divElement:return{type:"app"};default:return{type:"main"}}},this.mouseLeaveListener=()=>{this.hideCursor(this.observerId),this.store.updateCursorState(this.observerId,we.Leave)},this.roomMembers=null==(i=this.manager.room)?void 0:i.state.roomMembers;const s=Ut.wrapper;s&&(s.addEventListener("mousemove",this.mouseMoveListener),s.addEventListener("touchmove",this.touchMoveListener),s.addEventListener("mouseleave",this.mouseLeaveListener),s.addEventListener("touchend",this.mouseLeaveListener),this.initCursorAttributes(),this.wrapperRect=s.getBoundingClientRect(),this.startReaction(s))}setMainViewDivElement(e){this.mainViewElement=e}startReaction(e){this.disposer=Ze(this.cursors,(()=>{this.handleRoomMembersChange(e)}))}handleRoomMembersChange(e){var t;const i=null==(t=this.roomMembers)?void 0:t.map((e=>e.memberId));if(null==i?void 0:i.length)for(const s in this.cursors)if(i.includes(Number(s))&&!this.cursorInstances.has(s)&&s!==this.observerId){const t=new Lt(this.manager,this.cursors,s,this,e);this.cursorInstances.set(s,t)}}get observerId(){return String(this.manager.displayer.observerId)}get cursors(){var e;return null==(e=this.manager.attributes)?void 0:e[Le.Cursors]}get boxState(){return this.store.getBoxState()}get focusView(){var e;return null==(e=this.appManager.focusApp)?void 0:e.view}updateCursor(e,t,i){if(this.wrapperRect&&this.manager.canOperate){const s="main"===e.type?this.appManager.mainView:this.focusView,a=this.getPoint(s,t,i);a&&(this.setNormalCursorState(),this.store.updateCursor(this.observerId,o({x:a.x,y:a.y},e)))}}initCursorAttributes(){this.store.updateCursor(this.observerId,{x:0,y:0,type:"main"}),this.store.updateCursorState(this.observerId,we.Leave)}setNormalCursorState(){this.store.getCursorState(this.observerId)!==we.Normal&&this.store.updateCursorState(this.observerId,we.Normal)}updateContainerRect(){var e,t;this.containerRect=null==(e=Ut.container)?void 0:e.getBoundingClientRect(),this.wrapperRect=null==(t=Ut.wrapper)?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach((e=>{e.setMember()})),Ut.wrapper&&this.handleRoomMembersChange(Ut.wrapper)}cleanMemberCursor(e){this.store.cleanCursor(e);const t=this.cursorInstances.get(e);t&&t.destroy()}hideCursor(e){const t=this.cursorInstances.get(e);t&&t.hide()}cleanMemberAttributes(e){const t=e.map((e=>e.memberId)),i=[];for(const s in this.cursors){-1===t.findIndex((e=>e===Number(s)))&&i.push(s)}i.forEach((e=>{const t=this.cursorInstances.get(e);t&&t.destroy(),this.store.cleanCursor(e)}))}destroy(){const e=Ut.wrapper;e&&(e.removeEventListener("mousemove",this.mouseMoveListener),e.removeEventListener("touchmove",this.touchMoveListener),e.removeEventListener("mouseleave",this.mouseLeaveListener),e.removeEventListener("touchend",this.mouseLeaveListener)),this.disposer&&this.disposer(),this.cursorInstances.size&&(this.cursorInstances.forEach((e=>e.destroy())),this.cursorInstances.clear())}}class Et{constructor(e){this.sdk=new j(h(o({},e),{useMobXState:!0}))}async mount(e){const t=e.joinRoomParams.invisiblePlugins||[],i=await this.sdk.joinRoom(h(o({},e.joinRoomParams),{useMultiViews:!0,invisiblePlugins:[...t,Ut],disableMagixEventDispatchLimit:!0})),s=await Ut.mount(o({room:i},e.mountParams));return Z(e.joinRoomParams.disableCameraTransform)&&(s.mainView.disableCameraTransform=e.joinRoomParams.disableCameraTransform),s}}const Pt=window.ResizeObserver||X,Bt=new g,Vt=new g,zt=class extends L{constructor(e){super(e),this.version="0.2.19-canary.0",this.emitter=Vt,this.viewMode=f.Broadcaster}static async mount(e,t,i,s){let a,r,n,o,h,c,p=!0,g=!1;if("room"in e?(a=e.room,t=e.container,i=e.collectorContainer,r=e.containerSizeRatio,n=e.collectorStyles,o=e.debug,null!=e.chessboard&&(p=e.chessboard),h=e.overwriteStyles,c=e.cursor,g=Boolean(null==e?void 0:e.disableCameraTransform)):(a=e,r=null==s?void 0:s.containerSizeRatio,n=null==s?void 0:s.collectorStyles,o=null==s?void 0:s.debug,null!=(null==s?void 0:s.chessboard)&&(p=s.chessboard),h=null==s?void 0:s.overwriteStyles),this.checkVersion(),N(a)&&a.phase!==v.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");if(!t)throw new Error("[WindowManager]: Container must provide");if(zt.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");let u=await this.initManager(a);if(this.debug=Boolean(o),this.debug&&d({verbose:!0}),Pe("Already insert room",u),N(this.displayer)){if(!u)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await l((async e=>{if(u=await this.initManager(a),!u)throw Pe(`manager is empty. retrying ${e}`),new Error}),{retries:10});r&&(zt.containerSizeRatio=r),zt.container=t;const{playground:m,wrapper:M,sizer:w,mainViewElement:I}=(e=>{const t=document.createElement("div");t.className="netless-window-manager-playground";const i=document.createElement("div");i.className="netless-window-manager-sizer";const s=document.createElement("div");s.className="netless-window-manager-wrapper";const a=document.createElement("div");return a.className="netless-window-manager-main-view",t.appendChild(i),i.appendChild(s),s.appendChild(a),e.appendChild(t),Ut.wrapper=s,{playground:t,wrapper:s,sizer:i,mainViewElement:a}})(t);if(zt.playground=m,p&&w.classList.add("netless-window-manager-chess-sizer"),h){const e=document.createElement("style");e.textContent=h,m.appendChild(e)}await u.ensureAttributes(),u.appManager=new Ge(u,{collectorContainer:i,collectorStyles:n}),u.observePlaygroundSize(m,w,M),c&&(u.cursorManager=new ft(u,u.appManager)),u.bindMainView(I,g),((e,t)=>{if(S(e)){const t=e,i=t.seekToProgressTime;t.seekToProgressTime=async function(e){const s=await i.call(t,e);return"success"===s&&Bt.emit("seek",e),s}}else{if(Object.getOwnPropertyDescriptor(e,"disableCameraTransform"))return;Object.defineProperty(e,"disableCameraTransform",{get:()=>t.mainView.disableCameraTransform,set(e){t.mainView.disableCameraTransform=e}}),e.moveCamera=e=>t.mainView.moveCamera(e),e.moveCameraToContain=(...e)=>t.mainView.moveCameraToContain(...e),e.convertToPointInWorld=(...e)=>t.mainView.convertToPointInWorld(...e),e.setCameraBound=(...e)=>t.mainView.setCameraBound(...e)}})(a,u.appManager),Bt.emit("onCreated"),zt.isCreated=!0;try{await $()}catch(A){console.warn("[WindowManager]: indexedDB open failed"),console.log(A)}return u}static async initManager(e){let t=e.getInvisiblePlugin(zt.kind);if(!t&&N(e))if(!1===e.isWritable){try{await e.setWritable(!0)}catch(i){throw new Error("[WindowManger]: room must be switched to be writable")}t=await e.createInvisiblePlugin(zt,{}),t.ensureAttributes(),await ce(500),await e.setWritable(!1)}else t=await e.createInvisiblePlugin(zt,{});return t}static register(e){return se.register(e)}async addApp(e){var t,i,s,a;if(this.appManager){if(!e.kind||"string"!=typeof e.kind)throw new Ne;const r=await(null==(t=se.appClasses.get(e.kind))?void 0:t());if(r&&(null==(i=r.config)?void 0:i.singleton)&&this.appManager.appProxies.has(e.kind))throw new xe;const n=this.setupScenePath(e,this.appManager);if(void 0===n)return;(null==(s=null==e?void 0:e.options)?void 0:s.scenePath)&&(e.options.scenePath=(a=e.options.scenePath).endsWith("/")?a.slice(0,-1):a);return await this.appManager.addApp(e,Boolean(n))}throw new ve}setupScenePath(e,t){var i,s,a;let r=!1;if(e.options){const{scenePath:n,scenes:o}=e.options;if(n){if(!(e=>e.startsWith("/"))(n))throw new Te;for(const e in this.apps){const i=t.store.getAppScenePath(e);if(i&&i===n)return void console.warn(`[WindowManager]: ScenePath ${n} Already opened`)}}n&&o&&o.length>0&&(this.isDynamicPPT(o)?(r=!0,this.displayer.entireScenes()[n]||null==(i=this.room)||i.putScenes(n,o)):this.displayer.entireScenes()[n]||null==(s=this.room)||s.putScenes(n,[{name:o[0].name}])),n&&void 0===o&&(null==(a=this.room)||a.putScenes(n,[{}]))}return r}async setMainViewScenePath(e){this.appManager&&await this.appManager.setMainViewScenePath(e)}async setMainViewSceneIndex(e){this.appManager&&await this.appManager.setMainViewSceneIndex(e)}getMainViewScenePath(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewScenePath()}getMainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewSceneIndex()}setReadonly(e){var t,i;(null==(t=this.room)?void 0:t.isWritable)&&(this.readonly=e,null==(i=this.appManager)||i.boxManager.teleBoxManager.setReadonly(e))}switchMainViewToWriter(){var e;return null==(e=this.appManager)?void 0:e.mainViewProxy.mainViewClickHandler()}onAppDestroy(e,t){((e,t)=>{Bt.once(e).then(t)})(`destroy-${e}`,t)}setViewMode(e){var t,i,s,a;this.canOperate&&(e===f.Broadcaster&&(null==(t=this.appManager)||t.store.setMainViewCamera(h(o({},this.mainView.camera),{id:this.displayer.observerId})),null==(i=this.appManager)||i.store.setMainViewSize(h(o({},this.mainView.size),{id:this.displayer.observerId})),null==(s=this.appManager)||s.mainViewProxy.start()),e===f.Freedom&&(null==(a=this.appManager)||a.mainViewProxy.stop()),this.viewMode=e)}get mainView(){if(this.appManager)return this.appManager.mainViewProxy.view;throw new ve}get camera(){if(this.appManager)return this.appManager.mainViewProxy.view.camera;throw new ve}get apps(){var e;return null==(e=this.appManager)?void 0:e.store.apps()}get boxState(){if(this.appManager)return this.appManager.boxManager.teleBoxManager.state;throw new ve}queryAll(){var e;return Array.from((null==(e=this.appManager)?void 0:e.appProxies.values())||[])}queryOne(e){var t;return null==(t=this.appManager)?void 0:t.appProxies.get(e)}async closeApp(e){var t;return null==(t=this.appManager)?void 0:t.closeApp(e)}moveCamera(e){this.mainView.moveCamera(e)}moveCameraToContain(e){this.mainView.moveCameraToContain(e)}convertToPointInWorld(e){return this.mainView.convertToPointInWorld(e)}setCameraBound(e){this.mainView.setCameraBound(e)}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var e,t,i,s;null==(e=this.containerResizeObserver)||e.disconnect(),null==(t=this.appManager)||t.destroy(),null==(i=this.cursorManager)||i.destroy(),zt.container=void 0,zt.wrapper=void 0,zt.isCreated=!1,zt.playground&&(null==(s=zt.playground.parentNode)||s.removeChild(zt.playground)),Pe("Destroyed")}bindMainView(e,t){var i;this.appManager&&(this.appManager.bindMainView(e,t),null==(i=this.cursorManager)||i.setMainViewDivElement(e))}get canOperate(){return!!N(this.displayer)&&(this.displayer.isWritable&&this.displayer.phase===v.Connected)}get room(){return this.displayer}safeSetAttributes(e){this.canOperate&&this.setAttributes(e)}safeUpdateAttributes(e,t){this.canOperate&&this.updateAttributes(e,t)}isDynamicPPT(e){var t,i;const s=null==(i=null==(t=e[0])?void 0:t.ppt)?void 0:i.src;return null==s?void 0:s.startsWith("pptx://")}static checkVersion(){if(he(E)<he("2.13.16"))throw new Se("2.13.16")}async ensureAttributes(){if(R(this.attributes)&&await ce(50),W(this.attributes)){this.attributes[Le.Apps]||this.safeSetAttributes({[Le.Apps]:{}}),this.attributes[Le.Cursors]||this.safeSetAttributes({[Le.Cursors]:{}});const e=this.displayer.state.sceneState;this.attributes._mainScenePath||this.safeSetAttributes({_mainScenePath:e.scenePath}),this.attributes._mainSceneIndex||this.safeSetAttributes({_mainSceneIndex:e.index})}}observePlaygroundSize(e,t,i){this.updateSizer(e.getBoundingClientRect(),t,i),this.containerResizeObserver=new Pt((e=>{var s,a;const r=null==(s=e[0])?void 0:s.contentRect;r&&(this.updateSizer(r,t,i),null==(a=this.cursorManager)||a.updateContainerRect())})),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},i,s){e&&t&&(t/e>zt.containerSizeRatio?(t=e*zt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/zt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!1)),s.style.width=`${e}px`,s.style.height=`${t}px`)}};let Ut=zt;Ut.kind="WindowManager",Ut.debug=!1,Ut.containerSizeRatio=9/16,Ut.isCreated=!1,Ut.register({kind:c.kind,src:c}),Ut.register({kind:p.kind,src:p});const kt={DocsViewer:c.kind,MediaPlayer:p.kind};export{kt as BuiltinApps,Et as WhiteWindowSDK,Ut as WindowManager,Vt as callbacks,Bt as emitter};
|
2
2
|
//# sourceMappingURL=index.es.js.map
|