@netless/window-manager 0.2.2 → 0.2.3-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/README.md +10 -0
- package/dist/AppContext.d.ts +1 -2
- package/dist/AppProxy.d.ts +3 -6
- package/dist/AttributesDelegate.d.ts +2 -1
- package/dist/Utils/Common.d.ts +2 -0
- package/dist/Utils/error.d.ts +3 -0
- package/dist/index.d.ts +1 -0
- 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 +2 -2
- package/src/AppContext.ts +0 -1
- package/src/AppManager.ts +1 -3
- package/src/AppProxy.ts +15 -27
- package/src/AttributesDelegate.ts +1 -0
- package/src/Utils/Common.ts +12 -0
- package/src/Utils/error.ts +4 -0
- package/src/index.ts +18 -5
package/README.md
CHANGED
@@ -130,6 +130,8 @@ WindowManager.mount({
|
|
130
130
|
|
131
131
|
`App` 或会在页面刷新时自动创建出来, 不需要重复插入
|
132
132
|
|
133
|
+
如果 `App` 需要 `scenePath` 时,那么一个 `scenePath` 只能同时打开一个,要求为 `App` 实例唯一
|
134
|
+
|
133
135
|
### 添加静态/动态 PPT 到白板上
|
134
136
|
|
135
137
|
```javascript
|
@@ -238,6 +240,14 @@ manager.emitter.on("boxStateChange", state => {
|
|
238
240
|
});
|
239
241
|
```
|
240
242
|
|
243
|
+
### 监听 `broadcaster` 变化
|
244
|
+
```javascript
|
245
|
+
manager.emitter.on("broadcastChange", id => {
|
246
|
+
// broadcast id 进行了改变
|
247
|
+
})
|
248
|
+
|
249
|
+
```
|
250
|
+
|
241
251
|
### 关闭 `App`
|
242
252
|
|
243
253
|
```javascript
|
package/dist/AppContext.d.ts
CHANGED
@@ -9,7 +9,6 @@ export declare class AppContext<TAttrs extends Record<string, any>, AppOptions =
|
|
9
9
|
private manager;
|
10
10
|
appId: string;
|
11
11
|
private appProxy;
|
12
|
-
setScenes: (scenes: SceneDefinition[]) => void;
|
13
12
|
private appOptions?;
|
14
13
|
readonly emitter: Emittery<AppEmitterEvent<TAttrs>>;
|
15
14
|
readonly mobxUtils: {
|
@@ -25,7 +24,7 @@ export declare class AppContext<TAttrs extends Record<string, any>, AppOptions =
|
|
25
24
|
private boxManager;
|
26
25
|
private delegate;
|
27
26
|
readonly isAddApp: boolean;
|
28
|
-
constructor(manager: AppManager, appId: string, appProxy: AppProxy,
|
27
|
+
constructor(manager: AppManager, appId: string, appProxy: AppProxy, appOptions?: AppOptions | (() => AppOptions) | undefined);
|
29
28
|
getDisplayer(): import("white-web-sdk").Displayer<import("white-web-sdk").DisplayerCallbacks>;
|
30
29
|
getAttributes(): TAttrs | undefined;
|
31
30
|
getScenes(): SceneDefinition[] | undefined;
|
package/dist/AppProxy.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import Emittery from
|
1
|
+
import Emittery from 'emittery';
|
2
2
|
import type { AppEmitterEvent, AppInitState, BaseInsertParams } from "./index";
|
3
|
-
import type {
|
3
|
+
import type { SceneState, View, SceneDefinition } from "white-web-sdk";
|
4
4
|
import type { AppManager } from "./AppManager";
|
5
5
|
import type { NetlessApp } from "./typings";
|
6
6
|
import type { ReadonlyTeleBox } from "@netless/telebox-insider";
|
@@ -20,14 +20,11 @@ export declare class AppProxy {
|
|
20
20
|
isAddApp: boolean;
|
21
21
|
private status;
|
22
22
|
constructor(params: BaseInsertParams, manager: AppManager, appId: string, isAddApp: boolean);
|
23
|
-
get sceneIndex(): number;
|
24
|
-
setSceneIndex(index: number): void;
|
25
23
|
get view(): View | undefined;
|
26
24
|
get isWritable(): boolean;
|
27
25
|
get attributes(): any;
|
28
|
-
getSceneName(): string | undefined;
|
29
26
|
getFullScenePath(): string | undefined;
|
30
|
-
|
27
|
+
setFullPath(path: string): void;
|
31
28
|
baseInsertApp(focus?: boolean): Promise<{
|
32
29
|
appId: string;
|
33
30
|
app: NetlessApp;
|
@@ -12,7 +12,8 @@ export declare enum Fields {
|
|
12
12
|
Broadcaster = "broadcaster",
|
13
13
|
Cursors = "cursors",
|
14
14
|
Position = "position",
|
15
|
-
CursorState = "cursorState"
|
15
|
+
CursorState = "cursorState",
|
16
|
+
FullPath = "fullPath"
|
16
17
|
}
|
17
18
|
export declare type Apps = {
|
18
19
|
[key: string]: AppSyncAttributes;
|
package/dist/Utils/Common.d.ts
CHANGED
@@ -8,5 +8,7 @@ export declare const setViewMode: (view: View, mode: ViewVisionMode) => void;
|
|
8
8
|
export declare const emitError: (error: Error) => void;
|
9
9
|
export declare const notifyMainViewModeChange: import("lodash").DebouncedFunc<(callbacks: Emittery<PublicEvent>, mode: ViewVisionMode) => void>;
|
10
10
|
export declare const makeValidScenePath: (displayer: Displayer, scenePath: string) => string;
|
11
|
+
export declare const isValidScenePath: (scenePath: string) => boolean;
|
12
|
+
export declare const ensureValidScenePath: (scenePath: string) => string;
|
11
13
|
export declare const getVersionNumber: (version: string) => number;
|
12
14
|
export declare const wait: (time: number) => Promise<unknown>;
|
package/dist/Utils/error.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.es.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
var e,t,i=Object.defineProperty,a=Object.defineProperties,s=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,c=(e,t,a)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,h=(e,t)=>{for(var i in t||(t={}))n.call(t,i)&&c(e,i,t[i]);if(r)for(var i of r(t))o.call(t,i)&&c(e,i,t[i]);return e},g=(e,t)=>a(e,s(t));import d from"@netless/app-docs-viewer";import p,{setOptions as l}from"@netless/app-media-player";import u from"emittery";import{debounce as M,get as m,pick as w,isEmpty as I,maxBy as A,isEqual as y,omit as C,isNull as x,isObject as b}from"lodash";import{TELE_BOX_STATE as S,TELE_BOX_MANAGER_EVENT as v,TeleBoxCollector as N,TeleBoxManager as D}from"@netless/telebox-insider";import{ViewVisionMode as T,autorun as j,reaction as L,listenUpdated as E,unlistenUpdated as f,listenDisposed as B,unlistenDisposed as V,AnimationMode as P,UpdateEventKind as z,isRoom as U,ScenePathType as k,ApplianceNames as O,InvisiblePlugin as Q,RoomPhase as Z,ViewMode as W,WhiteVersion as R}from"white-web-sdk";import G from"p-retry";import{ResizeObserver as F}from"@juggle/resize-observer";import{v4 as Y}from"uuid";class H extends Error{constructor(){super(...arguments),this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class X extends Error{constructor(){super(...arguments),this.message="[WindowManager]: AppManager must be initialized"}}class J extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class K extends Error{constructor(){super(...arguments),this.message="[WindowManager]: kind must be a valid string"}}class q extends Error{constructor(){super(...arguments),this.message="[WindowManager]: box need created"}}(t=e||(e={})).AppMove="AppMove",t.AppFocus="AppFocus",t.AppResize="AppResize",t.AppBlur="AppBlur",t.AppBoxStateChange="AppBoxStateChange",t.AppSnapshot="AppSnapshot",t.AppClose="AppClose",t.GetAttributes="GetAttributes",t.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",t.InitReplay="InitReplay",t.WindowCreated="WindowCreated",t.SetMainViewScenePath="SetMainViewScenePath",t.SetMainViewSceneIndex="SetMainViewSceneIndex",t.MainViewFocus="MainViewFocus",t.SwitchViewsToFreedom="SwitchViewsToFreedom";var $,_,ee,te,ie,ae,se;(_=$||($={})).Size="size",_.Position="position",_.SnapshotRect="SnapshotRect",_.SceneIndex="SceneIndex",(te=ee||(ee={})).setBoxSize="setBoxSize",te.setBoxMinSize="setBoxMinSize",te.destroy="destroy",(ie||(ie={})).StartCreate="StartCreate",(se=ae||(ae={})).Leave="leave",se.Normal="normal";const re=340/720,ne=340/720,oe={right:"10px",bottom:"15px",position:"absolute"};class ce{constructor(t,i,a,s){this.manager=t,this.windowManager=i,this.viewManager=a,this.appProxies=s,this.displayer=this.manager.displayer,this.boxManager=this.manager.boxManager,this.mainMagixEventListener=t=>{if(t.authorId!==this.displayer.observerId){const i=t.payload;switch(i.eventName){case e.AppMove:this.appMoveHandler(i.payload);break;case e.AppFocus:this.appFocusHandler(i.payload);break;case e.AppResize:this.appResizeHandler(i.payload);break;case e.AppBlur:this.appBlurHandler(i.payload);break;case e.AppBoxStateChange:this.appBoxStateHandler(i.payload);break;case e.AppSnapshot:this.appSnapshotHandler(i.payload);break;case e.AppClose:this.appCloseHandler(i.payload);break;case e.MainViewFocus:this.mainViewFocusHandler();break;case e.SwitchViewsToFreedom:this.switchViewsToFreedomHandler()}}},this.appMoveHandler=e=>{this.boxManager.moveBox(e)},this.appFocusHandler=e=>{this.boxManager.focusBox(e),this.manager.viewManager.refreshViews()},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)===T.Writable&&this.manager.viewManager.refreshViews())},this.appBoxStateHandler=e=>{this.boxManager.setBoxState(e.state),e.state===S.Minimized&&(this.manager.viewManager.refreshViews(),this.viewManager.switchMainViewToWriter())},this.appSnapshotHandler=e=>{const t=this.boxManager.getBox(e.appId);t&&t.setSnapshot(e.rect)},this.appCloseHandler=e=>{this.boxManager.closeBox(e.appId);const t=this.manager.appProxies.get(e.appId);t&&t.destroy(!0,!0)},this.mainViewFocusHandler=()=>{this.manager.boxManager.blurFocusBox(),this.manager.viewManager.freedomAllViews()},this.switchViewsToFreedomHandler=()=>{this.manager.viewManager.freedomAllViews()}}addListeners(){this.displayer.addMagixEventListener("__WindowManger",this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener("__WindowManger",this.mainMagixEventListener)}}let he,ge;const de=async()=>{he=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")||(ge=t.createObjectStore("apps",{keyPath:"kind"}),ge.createIndex("kind","kind",{unique:!0}))},i.onsuccess=()=>{const t=i.result;e(t)}}))},pe=(e,t)=>{var i,a;if(he)return i=he,a={kind:e,sourceCode:t},new Promise(((e,t)=>{const s=i.transaction(["apps"],"readwrite").objectStore("apps").add(a);s.onsuccess=()=>e(),s.onerror=()=>t()}))},le=async e=>{return he?await(t=he,i=e,new Promise(((e,a)=>{const s=t.transaction(["apps"]).objectStore("apps").index("kind").get(i);s.onerror=e=>a(e),s.onsuccess=()=>{s.result?e(s.result):e(null)}}))):null;var t,i};const ue=async e=>{const t=await le(e);if(t)return t;{const t=await async function(e,t){const{timeout:i=1e4}=t,a=new AbortController,s=setTimeout((()=>a.abort()),i),r=await fetch(e,g(h({},t),{signal:a.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(s),r}(e,{timeout:1e4}),i=await t.text();return await pe(e,i),i}},Me=(e,t)=>{let i=Function(e+`;return ${t}`)();return void 0===i&&(i=window[t]),i};const me=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 a=i||"NetlessApp"+t,s=await ue(e);try{return Me(s,a)}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,Me(s,a)}}})(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 a=this.kindEmitters.get(e);await(null==a?void 0:a.emit(t,i))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new u;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}},we=(e,t)=>{e.focusScenePath!==t&&(e.focusScenePath=t)},Ie=(e,t)=>{e&&e.state.sceneState.scenePath!==t&&e.setScenePath(t)},Ae=(e,t)=>{e.mode!==t&&(e.mode=t)},ye=M(((e,t)=>{e.emit("mainViewModeChange",t)}),200),Ce=e=>{const t=e.split(".").map((e=>e.padStart(2,"0"))).join("");return parseInt(t)},xe=e=>new Promise((t=>setTimeout(t,e)));class be{constructor(e,t,i,a,s){this.manager=e,this.appId=t,this.appProxy=i,this.setScenes=a,this.appOptions=s,this.mobxUtils={autorun:j,reaction:L},this.objectUtils={listenUpdated:E,unlistenUpdated:f,listenDisposed:B,unlistenDisposed:V},this.delegate=this.manager.delegate,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.delegate.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 q}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){var t,i;this.appProxy.box&&(this.appProxy.box.focus?null==(t=this.getRoom())||t.setScenePath(e):(this.emitter.emit("focus",!0),await xe(50),null==(i=this.getRoom())||i.setScenePath(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}}const Se=(...e)=>{Nt.debug&&console.log("[WindowManager]:",...e)};class ve{constructor(t,i,a,s){var r;this.params=t,this.manager=i,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=t=>{const i=this.manager.delegate.getAppState(t);if(!i)return;const a=null==i?void 0:i[$.Position],s=this.manager.attributes.focus,r=null==i?void 0:i[$.Size],n=null==i?void 0:i[$.SnapshotRect],o=null==i?void 0:i[$.SceneIndex];let c={boxState:this.manager.attributes.boxState};return a&&(c=g(h({},c),{id:t,x:a.x,y:a.y})),s===t&&(c=g(h({},c),{focus:!0})),r&&(c=g(h({},c),{width:r.width,height:r.height})),n&&(c=g(h({},c),{snapshotRect:n})),o&&(c=g(h({},c),{sceneIndex:o})),bt.emit(e.InitReplay,c),c},this.appAttributesUpdateListener=e=>{const t=j((()=>{const t=this.manager.windowManger.attributes[e];t&&this.appEmitter.emit("attributesUpdate",t)}));this.disposer=t},this.cameraListener=e=>{this.manager.cameraStore.setCamera(this.id,e)},this.kind=t.kind,this.id=a,this.appProxies.set(this.id,this),this.appEmitter=new u,this.appListener=this.makeAppEventListener(this.id);const n=this.params.options;if(n){this.scenePath=n.scenePath;const e=this.manager.delegate.getAppAttributes(this.id);(null==e?void 0:e.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 sceneIndex(){return this.manager.delegate.getAppSceneIndex(this.id)}setSceneIndex(e){return this.manager.delegate.updateAppState(this.id,$.SceneIndex,e)}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]}getSceneName(){var e,t;if(void 0!==this.sceneIndex)return null==(t=null==(e=this.scenes)?void 0:e[this.sceneIndex])?void 0:t.name}getFullScenePath(){if(this.scenePath&&this.getSceneName())return`${this.scenePath}/${this.getSceneName()}`}setScenes(e){this.scenes=e}async baseInsertApp(e){var t;const i=this.params;if(i.kind){const a=await(null==(t=me.appClasses.get(i.kind))?void 0:t()),s=me.registered.get(i.kind);if(!a)throw new Error(`[WindowManager]: app load failed ${i.kind} ${i.src}`);return await this.setupApp(this.id,a,i.options,null==s?void 0:s.appOptions),this.boxManager.updateManagerRect(),e&&(this.focusBox(),this.manager.viewManager.switchAppToWriter(this.id),this.manager.delegate.setMainViewFocusPath()),{appId:this.id,app:a}}throw new Error("[WindowManager]: kind require")}get box(){return this.boxManager.getBox(this.id)}focusBox(){this.boxManager.focusBox({appId:this.id})}async setupApp(t,i,a,s){Se("setupApp",t,i,a);const r=new be(this.manager,t,this,this.setScenes,s);try{bt.once(`${t}${e.WindowCreated}`).then((async()=>{const e=this.getAppInitState(t);this.boxManager.updateBoxState(e),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(t),this.setViewFocusScenePath(),setTimeout((async()=>{const a=await i.setup(r);me.notifyApp(i.kind,"created",{appId:t,result:a}),e&&(e.focus&&this.scenePath&&this.manager.viewManager.switchAppToWriter(this.id),(null==e?void 0:e.x)&&e.y&&e.snapshotRect||this.boxManager.setBoxInitState(t));const s=this.boxManager.getBox(t);s&&this.boxManager.resizeBox({appId:t,width:s.width+.001,height:s.height+.001,skipUpdate:!0})}),50)})),this.boxManager.createBox({appId:t,app:i,options:a,canOperate:this.manager.canOperate})}catch(n){throw console.error(n),new Error(`[WindowManager]: app setup error: ${n.message}`)}}switchToWritable(){if(this.view)try{if(this.view.mode===T.Writable)return;this.manager.mainView.mode===T.Writable&&(this.manager.delegate.setMainViewFocusPath(),ye(St,T.Freedom),Ae(this.manager.mainView,T.Freedom)),Ae(this.view,T.Writable)}catch(e){Se("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 ee.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(){const e=this.getFullScenePath();this.manager.room&&e&&this.view&&Ie(this.manager.room,e)}switchToFreedom(){if(this.view&&this.view.mode===T.Writable){const e=this.getFullScenePath();e&&(we(this.view,e),Ae(this.view,T.Freedom))}}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&we(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){this.status="destroyed",await me.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),this.disposer&&this.disposer(),t&&this.manager.delegate.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)}}var Ne,De;(De=Ne||(Ne={})).Apps="apps",De.Focus="focus",De.State="state",De.BoxState="boxState",De.MainViewCamera="mainViewCamera",De.MainViewSize="mainViewSize",De.Broadcaster="broadcaster",De.Cursors="cursors",De.Position="position",De.CursorState="cursorState";class Te{constructor(e){this.manager=e}apps(){return m(this.manager.attributes,[Ne.Apps])}get focus(){return m(this.manager.attributes,[Ne.Focus])}get broadcaster(){return m(this.manager.attributes,[Ne.Broadcaster])}getAppAttributes(e){return m(this.apps(),[e])}getAppState(e){return m(this.apps(),[e,Ne.State])}setupAppAttributes(e,t,i){this.manager.attributes.apps||this.manager.safeSetAttributes({apps:{}});const a=["scenePath","title"];i||a.push("scenes");const s=w(e.options,a),r={kind:e.kind,options:s,isDynamicPPT:i};"string"==typeof e.src&&(r.src=e.src),this.manager.safeUpdateAttributes([Ne.Apps,t],r),this.manager.safeUpdateAttributes([Ne.Apps,t,Ne.State],{[$.Size]:{},[$.Position]:{},[$.SnapshotRect]:{},[$.SceneIndex]:0})}updateAppState(e,t,i){m(this.manager.attributes,[Ne.Apps,e,Ne.State])&&this.manager.safeUpdateAttributes([Ne.Apps,e,Ne.State,t],i)}cleanAppAttributes(e){this.manager.safeUpdateAttributes([Ne.Apps,e],void 0),this.manager.safeSetAttributes({[e]:void 0});this.manager.attributes[Ne.Focus]===e&&this.cleanFocus()}cleanFocus(){this.manager.safeSetAttributes({[Ne.Focus]:void 0})}cleanAttributes(){this.manager.safeSetAttributes({[Ne.Apps]:void 0,[Ne.BoxState]:void 0,[Ne.Focus]:void 0,_mainScenePath:void 0,_mainSceneIndex:void 0})}getAppSceneIndex(e){var t;return null==(t=this.getAppState(e))?void 0:t[$.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[Ne.BoxState]}setMainViewScenePath(e){this.manager.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.manager.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return m(this.manager.attributes,[Ne.MainViewCamera])}getMainViewSize(){return m(this.manager.attributes,[Ne.MainViewSize])}setMainViewCamera(e){this.manager.safeSetAttributes({[Ne.MainViewCamera]:h({},e)})}setMainViewSize(e){this.manager.safeSetAttributes({[Ne.MainViewSize]:h({},e)})}setBroadcaster(e){this.manager.safeSetAttributes({[Ne.Broadcaster]:e})}setAppFocus(e,t){t?this.manager.safeSetAttributes({[Ne.Focus]:e}):this.manager.safeSetAttributes({[Ne.Focus]:void 0})}updateCursor(e,t){m(this.manager.attributes,[Ne.Cursors,e])||this.manager.safeUpdateAttributes([Ne.Cursors,e],{}),this.manager.safeUpdateAttributes([Ne.Cursors,e,Ne.Position],t)}updateCursorState(e,t){m(this.manager.attributes,[Ne.Cursors,e])||this.manager.safeUpdateAttributes([Ne.Cursors,e],{}),this.manager.safeUpdateAttributes([Ne.Cursors,e,Ne.CursorState],t)}getCursorState(e){return m(this.manager.attributes,[Ne.Cursors,e,Ne.CursorState])}cleanCursor(e){this.manager.safeUpdateAttributes([Ne.Cursors,e],void 0)}setMainViewFocusPath(){const e=this.getMainViewScenePath();e&&we(this.manager.mainView,e)}}class je{constructor(e,t,i,a){this.manager=e,this.mainView=t,this.appProxies=i,this.appBoxMap=new Map,this.mainView=t,this.teleBoxManager=this.setupBoxManager(a),this.teleBoxManager.events.on(v.State,(e=>{e&&(St.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",M((e=>{bt.emit("move",{appId:e.id,x:e.x,y:e.y})}),50)),this.teleBoxManager.events.on("resize",M((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.updateBox(e.id,{focus:!1}):this.blurFocusBox()})),this.teleBoxManager.events.on("snapshot",(e=>{bt.emit("snapshot",{appId:e.id,rect:h({},e.rectSnapshot)})}))}get boxState(){return this.teleBoxManager.state}createBox(t){var i,a,s;if(!this.teleBoxManager)return;let{minwidth:r=re,minheight:n=ne}=null!=(i=t.app.config)?i:{};const{width:o,height:c}=null!=(a=t.app.config)?a:{},h=(null==(s=t.options)?void 0:s.title)||t.appId,g=this.teleBoxManager.containerRect;r>1&&(r/=g.width),n>1&&(n/=g.height);const d={title:h,minWidth:r,minHeight:n,width:o,height:c,id:t.appId};this.teleBoxManager.create(d),bt.emit(`${t.appId}${e.WindowCreated}`);const p=this.manager.delegate.getAppState(t.appId);if(p){const e=m(p,[$.SnapshotRect]);I(e)&&this.setBoxInitState(t.appId)}}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&(bt.emit("snapshot",{appId:e,rect:h({},t.rectSnapshot)}),t.state===S.Maximized&&bt.emit("resize",{appId:e,x:t.x,y:t.y,width:t.width,height:t.height}))}setupBoxManager(e){const t=Nt.wrapper?Nt.wrapper:document.body,i=t.getBoundingClientRect(),a={root:t,containerRect:{x:0,y:0,width:i.width,height:i.height},fence:!1},s=(null==e?void 0:e.collectorContainer)||Nt.wrapper,r=h(h({},oe),null==e?void 0:e.collectorStyles),n=new N({styles:r}).mount(s);a.collector=n;const o=new D(a);return this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=o,o}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e){return this.teleBoxManager.remove(e)}updateBox(e,t){return this.teleBoxManager.update(e,t)}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 A(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}),e.focus&&this.teleBoxManager.update(t.id,{focus:!0}),e.boxState&&this.teleBoxManager.setState(e.boxState),e.snapshotRect&&t.setSnapshot(e.snapshotRect))}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:a}){this.teleBoxManager.update(e,{width:t,height:i},a)}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),St.emit("boxStateChange",e)}}class Le{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(g(h({},i),{animationMode:P.Immediately}))}}class Ee{constructor(e){this.manager=e,this.disposers=[];const t=this.manager.delegate,i=this.manager.displayer;this.disposers.push(L((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Ne.MainViewCamera]}),(e=>{t.broadcaster!==i.observerId&&e&&this.moveCamera(e)}),{fireImmediately:!0})),this.disposers.push(L((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Ne.MainViewSize]}),(e=>{t.broadcaster!==i.observerId&&e&&(this.moveCameraToContian(e),this.moveCamera(t.getMainViewCamera()))}),{fireImmediately:!0}))}get view(){return this.manager.viewManager.mainView}moveCameraToContian(e){I(e)||y(e,this.size)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:P.Immediately}),this.size=e,this.scale=this.view.camera.scale)}moveCamera(e){if(!I(e)){if(y(e,this.view.camera))return;const{centerX:t,centerY:i,scale:a}=e,s=a*(this.scale||1);this.view.moveCamera({centerX:t,centerY:i,scale:s,animationMode:P.Immediately})}}destroy(){this.disposers.forEach((e=>e()))}}class fe{constructor(e,t,i){this.displayer=e,this.manager=t,this.cameraStore=i,this.views=new Map,this.mainViewIsAddListener=!1,this.delegate=this.manager.delegate,this.setMainViewSize=M((e=>{this.manager.delegate.setMainViewSize(h({},e))}),200),this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.mainViewCameraListener=e=>{this.cameraStore.setCamera("mainView",e),this.delegate.broadcaster===this.displayer.observerId&&this.delegate.setMainViewCamera(h({},e))},this.mainView=this.createMainView(),this.addMainViewCameraListener()}get currentScenePath(){return this.displayer.state.sceneState.scenePath}createMainView(){const e=this.displayer.views.createView();return this.cameraStore.setCamera("mainView",e.camera),e.callbacks.on("onSizeUpdated",(e=>{this.manager.boxManager.updateManagerRect(),this.delegate.broadcaster===this.displayer.observerId&&this.setMainViewSize(e)})),this.switchMainViewModeToWriter(),e}createView(e){const t=this.displayer.views.createView();return this.cameraStore.setCamera(e,t.camera),Ae(t,T.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.manager.delegate.setMainViewFocusPath(),ye(St,T.Freedom),Ae(this.mainView,T.Freedom)}switchMainViewModeToWriter(){if(this.manager.canOperate&&this.mainView){if(this.mainView.mode===T.Writable)return;ye(St,T.Writable),Ae(this.mainView,T.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!==T.Writable&&(this.manager.delegate.cleanFocus(),this.freedomAllViews(),this.manager.dispatchInternalEvent(e.SwitchViewsToFreedom,{}),this.manager.dispatchInternalEvent(e.MainViewFocus,{}),this.manager.boxManager.blurFocusBox(),await this.manager.viewManager.switchMainViewToWriter())}switchMainViewToWriter(){return this.timer&&clearTimeout(this.timer),new Promise(((e,t)=>{this.timer=window.setTimeout((()=>{try{const t=this.manager.delegate.getMainViewScenePath();t&&(this.freedomAllViews(),this.removeMainViewCameraListener(),Ie(this.manager.room,t),this.switchMainViewModeToWriter(),this.manager.cameraStore.recoverCamera("mainView",this.mainView),this.addMainViewCameraListener()),e(!0)}catch(i){t(i)}}),100)}))}refreshViews(){var e;const t=this.manager.delegate.focus;if(this.setMainViewFocusScenePath(),t){const i=this.manager.appProxies.get(t);if(i){if((null==(e=i.view)?void 0:e.mode)===T.Writable)return;i.removeCameraListener(),i.switchToWritable(),i.recoverCamera(),i.addCameraListener()}}else{if(this.manager.mainView.mode===T.Writable)return;this.freedomAllViews(),this.switchMainViewToWriter()}}setMainViewFocusScenePath(){const e=this.manager.delegate.getMainViewScenePath();e&&we(this.manager.mainView,e)}freedomAllViews(){this.manager.appProxies.forEach((e=>{e.setViewFocusScenePath(),e.view&&(e.view.mode=T.Freedom)})),this.mainView.mode===T.Writable&&(ye(St,T.Freedom),this.mainView.mode=T.Freedom),this.manager.viewManager.mainView.focusScenePath||this.manager.delegate.setMainViewFocusPath()}switchAppToWriter(e){this.freedomAllViews(),setTimeout((()=>{const t=this.manager.appProxies.get(e);if(t){const e=this.manager.delegate.getBoxState();if(e&&e===S.Minimized)return;t.removeCameraListener(),t.setScenePath(),t.switchToWritable(),t.recoverCamera(),t.addCameraListener()}}),100)}destroy(){var e;this.removeMainViewListener(),Nt.wrapper&&(null==(e=Nt.wrapper.parentNode)||e.removeChild(Nt.wrapper),Nt.wrapper=void 0),this.releaseView(this.mainView)}}const Be=(e,t)=>{if(E){const i=e=>{e.map((e=>e.kind)).includes(z.Inserted)&&t()};return E(e,i),t(),()=>f(e,i)}return L((()=>e),(()=>{t()}),{fireImmediately:!0})};class Ve{constructor(t,i){var a;this.windowManger=t,this.appProxies=new Map,this.appStatus=new Map,this.delegate=new Te(this),this.reactionDisposers=[],this.displayerStateListener=e=>{var t,i;const a=e.sceneState;if(a){const e=a.scenePath;this.appProxies.forEach((t=>{t.scenePath&&e.startsWith(t.scenePath)&&(t.emitAppSceneStateChange(a),a.index!==t.sceneIndex&&t.setSceneIndex(a.index))})),this.viewManager.refreshViews()}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()}))},this.boxEventListener=(t,i)=>{var a;switch(t){case"move":this.dispatchInternalEvent(e.AppMove,i),this.delegate.updateAppState(i.appId,$.Position,{x:i.x,y:i.y});break;case"focus":{this.windowManger.safeSetAttributes({focus:i.appId});const t=this.appProxies.get(i.appId);(null==t?void 0:t.scenePath)&&(this.dispatchInternalEvent(e.SwitchViewsToFreedom,{}),this.viewManager.switchAppToWriter(i.appId)),this.dispatchInternalEvent(e.AppFocus,i);break}case"blur":this.dispatchInternalEvent(e.AppBlur,i);break;case"resize":i.width&&i.height&&(this.dispatchInternalEvent(e.AppResize,i),this.delegate.updateAppState(i.appId,$.Size,{width:i.width,height:i.height}),null==(a=this.room)||a.refreshViewSize());break;case S.Minimized:this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(h({},i),{state:t})}),this.safeSetAttributes({boxState:t}),this.delegate.cleanFocus(),this.boxManager.blurFocusBox(),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter();break;case S.Maximized:{this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(h({},i),{state:t})});const a=this.boxManager.getTopBox();a&&bt.emit("focus",{appId:a.id}),this.safeSetAttributes({boxState:t});break}case S.Normal:this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(h({},i),{state:t})}),this.safeSetAttributes({boxState:t});break;case"snapshot":this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppSnapshot,payload:i}),this.delegate.updateAppState(i.appId,$.SnapshotRect,h({},i.rect));break;case"close":{this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppClose,payload:i});const t=this.appProxies.get(i.appId);t&&t.destroy(!1,!0,i.error),setTimeout((()=>{this.viewManager.refreshViews()}),100);break}}},this.displayer=t.displayer,this.cameraStore=new Le,this.viewManager=new fe(this.displayer,this,this.cameraStore),this.boxManager=new je(this,this.viewManager.mainView,this.appProxies,i),this.appListeners=new ce(this,this.windowManger,this.viewManager,this.appProxies),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.displayerWritableListener(!(null==(a=this.room)?void 0:a.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.addListeners(),this.mainViewProxy=new Ee(this),bt.once("onCreated").then((async()=>{var e;await this.attributesUpdateCallback(this.attributes.apps),bt.onAny(this.boxEventListener);const t=Be(this.attributes.apps,(()=>{this.attributesUpdateCallback(this.attributes.apps)}));if(this.reactionDisposers.push(t),this.reactionDisposers.push(L((()=>this.attributes[Ne.Broadcaster]),(e=>{St.emit("broadcastChange",e)}))),!this.attributes.apps||0===Object.keys(this.attributes.apps).length){const t=this.delegate.getMainViewScenePath();if(!t)return;this.displayer.state.sceneState.scenePath!==t&&(null==(e=this.room)||e.setScenePath(t))}}))}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){Se("addApp",e);const{appId:i,needFocus:a}=await this.beforeAddApp(e,t),s=await this.baseInsertApp(e,i,!0,a);return this.afterAddApp(s),null==s?void 0:s.id}async beforeAddApp(e,t){var i;const a=await(async e=>{var t,i;const a=await(null==(t=me.appClasses.get(e))?void 0:t());return a&&(null==(i=a.config)?void 0:i.singleton)?e:`${e}-${Y().replace("-","").slice(0,8)}`})(e.kind);this.appStatus.set(a,ie.StartCreate),this.delegate.setupAppAttributes(e,a,t),this.boxManager.boxState===S.Minimized&&this.boxManager.teleBoxManager.setState(S.Normal);const s=this.boxManager.boxState!==S.Minimized;s&&this.delegate.setAppFocus(a,!0);const r=null!=(i=e.attributes)?i:{};return this.safeUpdateAttributes([a],r),{appId:a,needFocus:s}}afterAddApp(e){var t,i;e&&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,a){if(this.appStatus.set(t,ie.StartCreate),this.appProxies.has(t))return void console.warn("[WindowManager]: app duplicate exists and cannot be created again");const s=new ve(e,this,t,i);if(s)return await s.baseInsertApp(a),this.appStatus.delete(t),s;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return U(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return U(this.displayer)?this.displayer:void 0}get mainView(){return this.windowManger.mainView}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===k.None)throw new Error(`${e} not valid scene`);if(t===k.Page)this._setMainViewScenePath(e);else if(t===k.Dir){const t=((e,t)=>{const i=e.entireScenes()[t][0].name;return"/"===t?`/${i}`:`${t}/${i}`})(this.displayer,e);this._setMainViewScenePath(t)}}}_setMainViewScenePath(e){this.safeSetAttributes({_mainScenePath:e}),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter(),this.delegate.setMainViewFocusPath()}setMainViewSceneIndex(e){this.room&&(this.safeSetAttributes({_mainSceneIndex:e}),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter(),this.room.setSceneIndex(e),this.delegate.setMainViewScenePath(this.room.state.sceneState.scenePath),this.delegate.setMainViewFocusPath())}getAppInitPath(e){var t;const i=this.delegate.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.delegate.focus;e&&this.boxManager.focusBox({appId:e})}}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent("__WindowManger",{eventName:e,payload:t})}destroy(){this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),bt.offAny(this.boxEventListener),this.reactionDisposers.length&&(this.reactionDisposers.map((e=>e())),this.reactionDisposers=[]),this.appProxies.size&&this.appProxies.forEach((e=>{e.destroy(!0,!1)})),this.viewManager.destroy(),this.mainViewProxy.destroy(),St.clearListeners()}}function Pe(){}function ze(e){return e()}function Ue(){return Object.create(null)}function ke(e){e.forEach(ze)}function Oe(e){return"function"==typeof e}function Qe(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}let Ze,We;function Re(e,t){return Ze||(Ze=document.createElement("a")),Ze.href=t,e===Ze.href}function Ge(e,t){e.appendChild(t)}function Fe(e,t,i){e.insertBefore(t,i||null)}function Ye(e){e.parentNode.removeChild(e)}function He(e){return document.createElement(e)}function Xe(e){return document.createTextNode(e)}function Je(){return Xe(" ")}function Ke(e,t,i){null==i?e.removeAttribute(t):e.getAttribute(t)!==i&&e.setAttribute(t,i)}function qe(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function $e(e,t,i,a){e.style.setProperty(t,i,a?"important":"")}function _e(e){We=e}const et=[],tt=[],it=[],at=[],st=Promise.resolve();let rt=!1;function nt(e){it.push(e)}let ot=!1;const ct=new Set;function ht(){if(!ot){ot=!0;do{for(let e=0;e<et.length;e+=1){const t=et[e];_e(t),gt(t.$$)}for(_e(null),et.length=0;tt.length;)tt.pop()();for(let e=0;e<it.length;e+=1){const t=it[e];ct.has(t)||(ct.add(t),t())}it.length=0}while(et.length);for(;at.length;)at.pop()();rt=!1,ot=!1,ct.clear()}}function gt(e){if(null!==e.fragment){e.update(),ke(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(nt)}}const dt=new Set;function pt(e,t){-1===e.$$.dirty[0]&&(et.push(e),rt||(rt=!0,st.then(ht)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function lt(e,t,i,a,s,r,n,o=[-1]){const c=We;_e(e);const h=e.$$={fragment:null,ctx:null,props:r,update:Pe,not_equal:s,bound:Ue(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(c?c.$$.context:t.context||[]),callbacks:Ue(),dirty:o,skip_bound:!1,root:t.target||c.$$.root};n&&n(h.root);let g=!1;if(h.ctx=i?i(e,t.props||{},((t,i,...a)=>{const r=a.length?a[0]:i;return h.ctx&&s(h.ctx[t],h.ctx[t]=r)&&(!h.skip_bound&&h.bound[t]&&h.bound[t](r),g&&pt(e,t)),i})):[],h.update(),g=!0,ke(h.before_update),h.fragment=!!a&&a(h.ctx),t.target){if(t.hydrate){const e=(l=t.target,Array.from(l.childNodes));h.fragment&&h.fragment.l(e),e.forEach(Ye)}else h.fragment&&h.fragment.c();t.intro&&((d=e.$$.fragment)&&d.i&&(dt.delete(d),d.i(p))),function(e,t,i,a){const{fragment:s,on_mount:r,on_destroy:n,after_update:o}=e.$$;s&&s.m(t,i),a||nt((()=>{const t=r.map(ze).filter(Oe);n?n.push(...t):ke(t),e.$$.on_mount=[]})),o.forEach(nt)}(e,t.target,t.anchor,t.customElement),ht()}var d,p,l;_e(c)}function ut(e){let t,i,a;return{c(){t=He("img"),Ke(t,"class","netless-window-manager-cursor-selector-avatar"),Ke(t,"style",i=e[15]()),Re(t.src,a=e[7])||Ke(t,"src",a),Ke(t,"alt","avatar")},m(e,i){Fe(e,t,i)},p(e,i){128&i&&!Re(t.src,a=e[7])&&Ke(t,"src",a)},d(e){e&&Ye(t)}}}function Mt(e){let t,i;return{c(){t=He("span"),i=Xe(e[1]),Ke(t,"class","netless-window-manager-cursor-tag-name"),$e(t,"background-color",e[10])},m(e,a){Fe(e,t,a),Ge(t,i)},p(e,a){2&a&&qe(i,e[1]),1024&a&&$e(t,"background-color",e[10])},d(e){e&&Ye(t)}}}function mt(e){let t,i,a,s,r,n,o,c,h,g,d,p,l=e[13]&&ut(e),u=e[14]&&Mt(e);return{c(){t=He("div"),i=He("div"),a=He("div"),l&&l.c(),s=Je(),r=He("span"),n=Xe(e[0]),o=Je(),u&&u.c(),c=Je(),h=He("div"),g=He("img"),$e(r,"overflow","hidden"),$e(r,"white-space","nowrap"),$e(r,"text-overflow","ellipsis"),$e(r,"max-width","80px"),Ke(a,"class",e[8]),$e(a,"background-color",e[2]),$e(a,"color",e[9]),$e(a,"opacity",e[11]),Ke(i,"class","netless-window-manager-cursor-name"),Ke(g,"class",d="netless-window-manager-cursor-"+e[3]+"-image"),Re(g.src,p=e[6])||Ke(g,"src",p),Ke(g,"alt",e[3]),Ke(h,"class","cursor-image-wrapper"),Ke(t,"class","netless-window-manager-cursor-mid"),$e(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),$e(t,"display",e[12])},m(e,d){Fe(e,t,d),Ge(t,i),Ge(i,a),l&&l.m(a,null),Ge(a,s),Ge(a,r),Ge(r,n),Ge(a,o),u&&u.m(a,null),Ge(t,c),Ge(t,h),Ge(h,g)},p(e,[i]){e[13]?l?l.p(e,i):(l=ut(e),l.c(),l.m(a,s)):l&&(l.d(1),l=null),1&i&&qe(n,e[0]),e[14]?u?u.p(e,i):(u=Mt(e),u.c(),u.m(a,null)):u&&(u.d(1),u=null),256&i&&Ke(a,"class",e[8]),4&i&&$e(a,"background-color",e[2]),512&i&&$e(a,"color",e[9]),2048&i&&$e(a,"opacity",e[11]),8&i&&d!==(d="netless-window-manager-cursor-"+e[3]+"-image")&&Ke(g,"class",d),64&i&&!Re(g.src,p=e[6])&&Ke(g,"src",p),8&i&&Ke(g,"alt",e[3]),48&i&&$e(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),4096&i&&$e(t,"display",e[12])},i:Pe,o:Pe,d(e){e&&Ye(t),l&&l.d(),u&&u.d()}}}function wt(e,t,i){let a,s,r,n,{cursorName:o}=t,{tagName:c}=t,{backgroundColor:h}=t,{appliance:g}=t,{x:d}=t,{y:p}=t,{src:l}=t,{visible:u}=t,{avatar:M}=t,{theme:m}=t,{color:w}=t,{cursorTagBackgroundColor:A}=t,{opacity:y}=t;return e.$$set=e=>{"cursorName"in e&&i(0,o=e.cursorName),"tagName"in e&&i(1,c=e.tagName),"backgroundColor"in e&&i(2,h=e.backgroundColor),"appliance"in e&&i(3,g=e.appliance),"x"in e&&i(4,d=e.x),"y"in e&&i(5,p=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,A=e.cursorTagBackgroundColor),"opacity"in e&&i(11,y=e.opacity)},e.$$.update=()=>{1&e.$$.dirty&&(a=!I(o)),2&e.$$.dirty&&i(14,s=!I(c)),128&e.$$.dirty&&i(13,r=!I(M)),65536&e.$$.dirty&&i(12,n=u?"initial":"none")},[o,c,h,g,d,p,l,M,m,w,A,y,n,r,s,()=>Object.entries({width:(a?19:28)+"px",height:(a?19:28)+"px",position:a?"initial":"absolute","border-color":a?"white":h,"margin-right":(a?4:0)+"px"}).map((([e,t])=>`${e}: ${t}`)).join(";"),u]}class It extends class{$destroy(){!function(e,t){const i=e.$$;null!==i.fragment&&(ke(i.on_destroy),i.fragment&&i.fragment.d(t),i.on_destroy=i.fragment=null,i.ctx=[])}(this,1),this.$destroy=Pe}$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(),lt(this,e,wt,mt,Qe,{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 At={[O.pencil]:"data:image/png;base64,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",[O.selector]:"data:image/png;base64,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",[O.eraser]:"data:image/png;base64,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",[O.shape]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",[O.text]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="};class yt{constructor(e,t,i,a,s){this.manager=e,this.cursors=t,this.memberId=i,this.cursorManager=a,this.wrapper=s,this.setMember(),this.createCursor(),G((()=>{if(this.disposer&&this.disposer(),!this.cursorPosition)throw new Error;this.startReaction()}),{retries:3}),this.autoHidden()}startReaction(){this.disposer=j((()=>{const e=this.cursorPosition,t=this.cursorState;if(e){const t=e.x,i=e.y,a=this.cursorManager.wrapperRect,s=this.cursorManager.containerRect;if(this.component&&a&&s){this.autoHidden();const e=t*a.width,s=i*a.height-15;this.component.$set({visible:!0,x:e,y:s})}}t&&t===ae.Leave&&this.hide()}))}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;return(null==(e=this.payload)?void 0:e.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 m(this.cursors,[this.memberId,Ne.CursorState])}get cursorPosition(){return m(this.cursors,[this.memberId,Ne.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 It({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 At[this.memberApplianceName||O.shape]||At[O.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(C(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 Ct{constructor(e,t){var i;this.manager=e,this.appManager=t,this.cursorInstances=new Map,this.mouseMoveListener=M((e=>{this.updateCursor(e.clientX,e.clientY)}),5),this.touchMoveListener=M((e=>{if(1===e.touches.length){const t=e.touches[0];this.updateCursor(t.clientX,t.clientY)}}),5),this.mouseLeaveListener=()=>{this.hideCursor(this.observerId),this.appManager.delegate.updateCursorState(this.observerId,ae.Leave)},this.roomMembers=null==(i=this.manager.room)?void 0:i.state.roomMembers;const a=Nt.wrapper;a&&(a.addEventListener("mousemove",this.mouseMoveListener),a.addEventListener("touchmove",this.touchMoveListener),a.addEventListener("mouseleave",this.mouseLeaveListener),a.addEventListener("touchend",this.mouseLeaveListener),this.initCursorAttributes(),this.wrapperRect=a.getBoundingClientRect(),this.startReaction(a))}startReaction(e){this.disposer=Be(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 a in this.cursors)if(i.includes(Number(a))&&!this.cursorInstances.has(a)&&a!==this.observerId){const t=new yt(this.manager,this.cursors,a,this,e);this.cursorInstances.set(a,t)}}get observerId(){return String(this.manager.displayer.observerId)}get cursors(){var e;return null==(e=this.manager.attributes)?void 0:e[Ne.Cursors]}get boxState(){return this.appManager.delegate.getBoxState()}initCursorAttributes(){this.appManager.delegate.updateCursor(this.observerId,{x:0,y:0}),this.appManager.delegate.updateCursorState(this.observerId,ae.Leave)}getBoxTitleHeight(){var e;if(this.boxState===S.Maximized){const t=this.appManager.boxManager.getTopBox();if(t)return null==(e=t.$titleBar)?void 0:e.clientHeight}}getFocusBox(){return this.appManager.boxManager.getFocusBox()}updateCursor(e,t){if(this.wrapperRect&&this.manager.canOperate){const i=(e-this.wrapperRect.x)/this.wrapperRect.width,a=(t-this.wrapperRect.y)/this.wrapperRect.height;this.appManager.delegate.getCursorState(this.observerId)&&this.appManager.delegate.updateCursorState(this.observerId,ae.Normal),this.appManager.delegate.updateCursor(this.observerId,{x:i,y:a})}}updateContainerRect(){var e,t;this.containerRect=null==(e=Nt.container)?void 0:e.getBoundingClientRect(),this.wrapperRect=null==(t=Nt.wrapper)?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach((e=>{e.setMember()})),Nt.wrapper&&this.handleRoomMembersChange(Nt.wrapper)}cleanMemberCursor(e){this.appManager.delegate.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 a in this.cursors){-1===t.findIndex((e=>e===Number(a)))&&i.push(a)}i.forEach((e=>{const t=this.cursorInstances.get(e);t&&t.destroy(),this.appManager.delegate.cleanCursor(e)}))}destroy(){const e=Nt.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())}}const xt=window.ResizeObserver||F,bt=new u,St=new u,vt=class extends Q{constructor(e){super(e),this.emitter=St}static async mount(e,t,i,a){let s,r,n,o,c,h,g=!0;if("room"in e?(s=e.room,t=e.container,i=e.collectorContainer,r=e.containerSizeRatio,n=e.collectorStyles,o=e.debug,null!=e.chessboard&&(g=e.chessboard),c=e.overwriteStyles,h=e.cursor):(s=e,r=null==a?void 0:a.containerSizeRatio,n=null==a?void 0:a.collectorStyles,o=null==a?void 0:a.debug,null!=(null==a?void 0:a.chessboard)&&(g=a.chessboard),c=null==a?void 0:a.overwriteStyles),this.checkVersion(),s.phase!==Z.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");if(!t)throw new Error("[WindowManager]: Container must provide");if(vt.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");const d=await this.initManager(s);this.debug=Boolean(o),this.debug&&l({verbose:!0}),Se("[WindowManager]: Already insert room",d),r&&(vt.containerSizeRatio=r),vt.container=t;const{playground:p,wrapper:u,sizer:M,mainViewElement:m}=(e=>{const t=document.createElement("div");t.className="netless-window-manager-playground";const i=document.createElement("div");i.className="netless-window-manager-sizer";const a=document.createElement("div");a.className="netless-window-manager-wrapper";const s=document.createElement("div");return s.className="netless-window-manager-main-view",t.appendChild(i),i.appendChild(a),a.appendChild(s),e.appendChild(t),Nt.wrapper=a,{playground:t,wrapper:a,sizer:i,mainViewElement:s}})(t);if(vt.playground=p,g&&M.classList.add("netless-window-manager-chess-sizer"),c){const e=document.createElement("style");e.textContent=c,p.appendChild(e)}await d.ensureAttributes(),d.appManager=new Ve(d,{collectorContainer:i,collectorStyles:n}),d.observePlaygroundSize(p,M,u),h&&(d.cursorManager=new Ct(d,d.appManager)),d.bindMainView(m),((e,t)=>{Object.getOwnPropertyDescriptor(e,"disableCameraTransform")||(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))})(s,d.appManager),bt.emit("onCreated"),vt.isCreated=!0;try{await de()}catch(w){console.warn("[WindowManager]: indexedDB open failed"),console.log(w)}return d}static async initManager(e){let t=e.getInvisiblePlugin(vt.kind);if(!t&&U(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(vt,{}),await e.setWritable(!1)}else t=await e.createInvisiblePlugin(vt,{});return t}static register(e){return me.register(e)}createMainView(){if(this.appManager)return this.appManager.viewManager.mainView;throw new X}async addApp(e){var t,i;if(this.appManager){if(!e.kind||"string"!=typeof e.kind)throw new K;const a=await(null==(t=me.appClasses.get(e.kind))?void 0:t());if(a&&(null==(i=a.config)?void 0:i.singleton)&&this.appManager.appProxies.has(e.kind))throw new H;const s=this.setupScenePath(e,this.appManager);if(void 0===s)return;return await this.appManager.addApp(e,Boolean(s))}throw new X}setupScenePath(e,t){var i,a;let s=!1;if(e.options){const{scenePath:r,scenes:n}=e.options;if(r)for(const e in this.apps){const i=t.delegate.getAppScenePath(e);if(i&&i===r)return void console.warn(`ScenePath ${r} Already opened`)}r&&n&&n.length>0&&(this.isDynamicPPT(n)?(s=!0,this.displayer.entireScenes()[r]||null==(i=this.room)||i.putScenes(r,n)):this.displayer.entireScenes()[r]||null==(a=this.room)||a.putScenes(r,[{name:n[0].name}]))}return s}async closeApp(e){var t;return null==(t=this.appManager)?void 0:t.closeApp(e)}setMainViewScenePath(e){this.appManager&&this.appManager.setMainViewScenePath(e)}setMainViewSceneIndex(e){this.appManager&&this.appManager.setMainViewSceneIndex(e)}getMainViewScenePath(){var e;return null==(e=this.appManager)?void 0:e.delegate.getMainViewScenePath()}getMainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.delegate.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){bt.once(`destroy-${e}`).then(t)}setViewMode(e){var t,i,a,s,r,n;e===W.Broadcaster&&(null==(t=this.appManager)||t.delegate.setBroadcaster(this.displayer.observerId),null==(i=this.appManager)||i.delegate.setMainViewCamera(this.mainView.camera),null==(a=this.appManager)||a.delegate.setMainViewSize(this.mainView.size)),e===W.Freedom&&(null==(s=this.appManager)||s.delegate.setMainViewCamera(void 0),null==(r=this.appManager)||r.delegate.setMainViewSize(void 0),null==(n=this.appManager)||n.delegate.setBroadcaster(void 0))}get mainView(){if(this.appManager)return this.appManager.viewManager.mainView;throw new X}get camera(){if(this.appManager)return this.appManager.viewManager.mainView.camera;throw new X}get apps(){var e;return null==(e=this.appManager)?void 0:e.delegate.apps()}get boxState(){if(this.appManager)return this.appManager.boxManager.teleBoxManager.state;throw new X}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var e,t,i,a;null==(e=this.containerResizeObserver)||e.disconnect(),null==(t=this.appManager)||t.destroy(),null==(i=this.cursorManager)||i.destroy(),vt.container=void 0,vt.wrapper=void 0,vt.isCreated=!1,vt.playground&&(null==(a=vt.playground.parentNode)||a.removeChild(vt.playground)),Se("Destroyed")}bindMainView(e){if(this.appManager){const t=this.appManager.viewManager.mainView;if(t.divElement=e,t.mode=T.Writable,t.focusScenePath||this.appManager.delegate.setMainViewFocusPath(),!this.appManager.delegate.getMainViewScenePath()){const e=this.displayer.state.sceneState;this.appManager.delegate.setMainViewScenePath(e.scenePath),this.appManager.delegate.setMainViewSceneIndex(e.index)}void 0===this.appManager.delegate.focus&&t.mode!==T.Writable&&(this.appManager.viewManager.freedomAllViews(),this.appManager.viewManager.switchMainViewToWriter()),this.appManager.viewManager.addMainViewListener()}}get canOperate(){return!!U(this.displayer)&&(this.displayer.isWritable&&this.displayer.phase===Z.Connected)}get room(){return this.canOperate?this.displayer:void 0}get broadcaster(){var e;return null==(e=this.appManager)?void 0:e.delegate.broadcaster}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)}getSceneName(e,t){var i;const a=this.displayer.entireScenes()[e];if(a&&void 0!==t)return null==(i=a[t])?void 0:i.name}isDynamicPPT(e){var t,i;const a=null==(i=null==(t=e[0])?void 0:t.ppt)?void 0:i.src;return null==a?void 0:a.startsWith("pptx://")}static checkVersion(){if(Ce(R)<Ce("2.13.16"))throw new J("2.13.16")}async ensureAttributes(){x(this.attributes)&&await xe(50),b(this.attributes)&&(this.attributes[Ne.Apps]||this.safeSetAttributes({[Ne.Apps]:{}}),this.attributes[Ne.Cursors]||this.safeSetAttributes({[Ne.Cursors]:{}}))}observePlaygroundSize(e,t,i){this.updateSizer(e.getBoundingClientRect(),t,i),this.containerResizeObserver=new xt((e=>{var a,s;const r=null==(a=e[0])?void 0:a.contentRect;r&&(this.updateSizer(r,t,i),null==(s=this.cursorManager)||s.updateContainerRect())})),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},i,a){e&&t&&(t/e>vt.containerSizeRatio?(t=e*vt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/vt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!1)),a.style.width=`${e}px`,a.style.height=`${t}px`)}};let Nt=vt;Nt.kind="WindowManager",Nt.debug=!1,Nt.containerSizeRatio=9/16,Nt.isCreated=!1,Nt.register({kind:d.kind,src:d}),Nt.register({kind:p.kind,src:p});const Dt={DocsViewer:d.kind,MediaPlayer:p.kind};export{Dt as BuiltinApps,Nt as WindowManager,St as callbacks,bt as emitter};
|
1
|
+
var e,t,i=Object.defineProperty,a=Object.defineProperties,s=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,h=(e,t,a)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,c=(e,t)=>{for(var i in t||(t={}))n.call(t,i)&&h(e,i,t[i]);if(r)for(var i of r(t))o.call(t,i)&&h(e,i,t[i]);return e},g=(e,t)=>a(e,s(t));import p from"@netless/app-docs-viewer";import d,{setOptions as l}from"@netless/app-media-player";import u from"emittery";import{debounce as M,get as m,pick as w,isEmpty as I,maxBy as A,isEqual as y,omit as C,isNull as x,isObject as b}from"lodash";import{TELE_BOX_STATE as v,TELE_BOX_MANAGER_EVENT as S,TeleBoxCollector as N,TeleBoxManager as D}from"@netless/telebox-insider";import{ViewVisionMode as T,autorun as j,reaction as L,listenUpdated as E,unlistenUpdated as f,listenDisposed as B,unlistenDisposed as V,AnimationMode as P,UpdateEventKind as z,isRoom as U,ScenePathType as k,ApplianceNames as O,InvisiblePlugin as Q,RoomPhase as Z,ViewMode as W,WhiteVersion as R}from"white-web-sdk";import G from"p-retry";import{ResizeObserver as F}from"@juggle/resize-observer";import{v4 as Y}from"uuid";class H extends Error{constructor(){super(...arguments),this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class X extends Error{constructor(){super(...arguments),this.message="[WindowManager]: AppManager must be initialized"}}class J extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class K extends Error{constructor(){super(...arguments),this.message="[WindowManager]: kind must be a valid string"}}class q extends Error{constructor(){super(...arguments),this.message="[WindowManager]: box need created"}}class $ extends Error{constructor(){super(...arguments),this.message='[WindowManager]: ScenePath should start with "/"'}}(t=e||(e={})).AppMove="AppMove",t.AppFocus="AppFocus",t.AppResize="AppResize",t.AppBlur="AppBlur",t.AppBoxStateChange="AppBoxStateChange",t.AppSnapshot="AppSnapshot",t.AppClose="AppClose",t.GetAttributes="GetAttributes",t.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",t.InitReplay="InitReplay",t.WindowCreated="WindowCreated",t.SetMainViewScenePath="SetMainViewScenePath",t.SetMainViewSceneIndex="SetMainViewSceneIndex",t.MainViewFocus="MainViewFocus",t.SwitchViewsToFreedom="SwitchViewsToFreedom";var _,ee,te,ie,ae,se,re;(ee=_||(_={})).Size="size",ee.Position="position",ee.SnapshotRect="SnapshotRect",ee.SceneIndex="SceneIndex",(ie=te||(te={})).setBoxSize="setBoxSize",ie.setBoxMinSize="setBoxMinSize",ie.destroy="destroy",(ae||(ae={})).StartCreate="StartCreate",(re=se||(se={})).Leave="leave",re.Normal="normal";const ne=340/720,oe=340/720,he={right:"10px",bottom:"15px",position:"absolute"};class ce{constructor(t,i,a,s){this.manager=t,this.windowManager=i,this.viewManager=a,this.appProxies=s,this.displayer=this.manager.displayer,this.boxManager=this.manager.boxManager,this.mainMagixEventListener=t=>{if(t.authorId!==this.displayer.observerId){const i=t.payload;switch(i.eventName){case e.AppMove:this.appMoveHandler(i.payload);break;case e.AppFocus:this.appFocusHandler(i.payload);break;case e.AppResize:this.appResizeHandler(i.payload);break;case e.AppBlur:this.appBlurHandler(i.payload);break;case e.AppBoxStateChange:this.appBoxStateHandler(i.payload);break;case e.AppSnapshot:this.appSnapshotHandler(i.payload);break;case e.AppClose:this.appCloseHandler(i.payload);break;case e.MainViewFocus:this.mainViewFocusHandler();break;case e.SwitchViewsToFreedom:this.switchViewsToFreedomHandler()}}},this.appMoveHandler=e=>{this.boxManager.moveBox(e)},this.appFocusHandler=e=>{this.boxManager.focusBox(e),this.manager.viewManager.refreshViews()},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)===T.Writable&&this.manager.viewManager.refreshViews())},this.appBoxStateHandler=e=>{this.boxManager.setBoxState(e.state),e.state===v.Minimized&&(this.manager.viewManager.refreshViews(),this.viewManager.switchMainViewToWriter())},this.appSnapshotHandler=e=>{const t=this.boxManager.getBox(e.appId);t&&t.setSnapshot(e.rect)},this.appCloseHandler=e=>{this.boxManager.closeBox(e.appId);const t=this.manager.appProxies.get(e.appId);t&&t.destroy(!0,!0)},this.mainViewFocusHandler=()=>{this.manager.boxManager.blurFocusBox(),this.manager.viewManager.freedomAllViews()},this.switchViewsToFreedomHandler=()=>{this.manager.viewManager.freedomAllViews()}}addListeners(){this.displayer.addMagixEventListener("__WindowManger",this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener("__WindowManger",this.mainMagixEventListener)}}let ge,pe;const de=async()=>{ge=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")||(pe=t.createObjectStore("apps",{keyPath:"kind"}),pe.createIndex("kind","kind",{unique:!0}))},i.onsuccess=()=>{const t=i.result;e(t)}}))},le=(e,t)=>{var i,a;if(ge)return i=ge,a={kind:e,sourceCode:t},new Promise(((e,t)=>{const s=i.transaction(["apps"],"readwrite").objectStore("apps").add(a);s.onsuccess=()=>e(),s.onerror=()=>t()}))},ue=async e=>{return ge?await(t=ge,i=e,new Promise(((e,a)=>{const s=t.transaction(["apps"]).objectStore("apps").index("kind").get(i);s.onerror=e=>a(e),s.onsuccess=()=>{s.result?e(s.result):e(null)}}))):null;var t,i};const Me=async e=>{const t=await ue(e);if(t)return t;{const t=await async function(e,t){const{timeout:i=1e4}=t,a=new AbortController,s=setTimeout((()=>a.abort()),i),r=await fetch(e,g(c({},t),{signal:a.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(s),r}(e,{timeout:1e4}),i=await t.text();return await le(e,i),i}},me=(e,t)=>{let i=Function(e+`;return ${t}`)();return void 0===i&&(i=window[t]),i};const we=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 a=i||"NetlessApp"+t,s=await Me(e);try{return me(s,a)}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,me(s,a)}}})(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 a=this.kindEmitters.get(e);await(null==a?void 0:a.emit(t,i))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new u;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}},Ie=(e,t)=>{e.focusScenePath!==t&&(e.focusScenePath=t)},Ae=(e,t)=>{e&&e.state.sceneState.scenePath!==t&&e.setScenePath(t)},ye=(e,t)=>{e.mode!==t&&(e.mode=t)},Ce=M(((e,t)=>{e.emit("mainViewModeChange",t)}),200),xe=e=>{const t=e.split(".").map((e=>e.padStart(2,"0"))).join("");return parseInt(t)},be=e=>new Promise((t=>setTimeout(t,e)));class ve{constructor(e,t,i,a){this.manager=e,this.appId=t,this.appProxy=i,this.appOptions=a,this.mobxUtils={autorun:j,reaction:L},this.objectUtils={listenUpdated:E,unlistenUpdated:f,listenDisposed:B,unlistenDisposed:V},this.delegate=this.manager.delegate,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.delegate.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 q}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){var t,i;this.appProxy.box&&(this.appProxy.box.focus?null==(t=this.getRoom())||t.setScenePath(e):(this.emitter.emit("focus",!0),await be(50),null==(i=this.getRoom())||i.setScenePath(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 Se,Ne;(Ne=Se||(Se={})).Apps="apps",Ne.Focus="focus",Ne.State="state",Ne.BoxState="boxState",Ne.MainViewCamera="mainViewCamera",Ne.MainViewSize="mainViewSize",Ne.Broadcaster="broadcaster",Ne.Cursors="cursors",Ne.Position="position",Ne.CursorState="cursorState",Ne.FullPath="fullPath";class De{constructor(e){this.manager=e}apps(){return m(this.manager.attributes,[Se.Apps])}get focus(){return m(this.manager.attributes,[Se.Focus])}get broadcaster(){return m(this.manager.attributes,[Se.Broadcaster])}getAppAttributes(e){return m(this.apps(),[e])}getAppState(e){return m(this.apps(),[e,Se.State])}setupAppAttributes(e,t,i){this.manager.attributes.apps||this.manager.safeSetAttributes({apps:{}});const a=["scenePath","title"];i||a.push("scenes");const s=w(e.options,a),r={kind:e.kind,options:s,isDynamicPPT:i};"string"==typeof e.src&&(r.src=e.src),this.manager.safeUpdateAttributes([Se.Apps,t],r),this.manager.safeUpdateAttributes([Se.Apps,t,Se.State],{[_.Size]:{},[_.Position]:{},[_.SnapshotRect]:{},[_.SceneIndex]:0})}updateAppState(e,t,i){m(this.manager.attributes,[Se.Apps,e,Se.State])&&this.manager.safeUpdateAttributes([Se.Apps,e,Se.State,t],i)}cleanAppAttributes(e){this.manager.safeUpdateAttributes([Se.Apps,e],void 0),this.manager.safeSetAttributes({[e]:void 0});this.manager.attributes[Se.Focus]===e&&this.cleanFocus()}cleanFocus(){this.manager.safeSetAttributes({[Se.Focus]:void 0})}cleanAttributes(){this.manager.safeSetAttributes({[Se.Apps]:void 0,[Se.BoxState]:void 0,[Se.Focus]:void 0,_mainScenePath:void 0,_mainSceneIndex:void 0})}getAppSceneIndex(e){var t;return null==(t=this.getAppState(e))?void 0:t[_.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[Se.BoxState]}setMainViewScenePath(e){this.manager.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.manager.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return m(this.manager.attributes,[Se.MainViewCamera])}getMainViewSize(){return m(this.manager.attributes,[Se.MainViewSize])}setMainViewCamera(e){this.manager.safeSetAttributes({[Se.MainViewCamera]:c({},e)})}setMainViewSize(e){this.manager.safeSetAttributes({[Se.MainViewSize]:c({},e)})}setBroadcaster(e){this.manager.safeSetAttributes({[Se.Broadcaster]:e})}setAppFocus(e,t){t?this.manager.safeSetAttributes({[Se.Focus]:e}):this.manager.safeSetAttributes({[Se.Focus]:void 0})}updateCursor(e,t){m(this.manager.attributes,[Se.Cursors,e])||this.manager.safeUpdateAttributes([Se.Cursors,e],{}),this.manager.safeUpdateAttributes([Se.Cursors,e,Se.Position],t)}updateCursorState(e,t){m(this.manager.attributes,[Se.Cursors,e])||this.manager.safeUpdateAttributes([Se.Cursors,e],{}),this.manager.safeUpdateAttributes([Se.Cursors,e,Se.CursorState],t)}getCursorState(e){return m(this.manager.attributes,[Se.Cursors,e,Se.CursorState])}cleanCursor(e){this.manager.safeUpdateAttributes([Se.Cursors,e],void 0)}setMainViewFocusPath(){const e=this.getMainViewScenePath();e&&Ie(this.manager.mainView,e)}}const Te=(...e)=>{Dt.debug&&console.log("[WindowManager]:",...e)};class je{constructor(t,i,a,s){var r;this.params=t,this.manager=i,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=t=>{const i=this.manager.delegate.getAppState(t);if(!i)return;const a=null==i?void 0:i[_.Position],s=this.manager.attributes.focus,r=null==i?void 0:i[_.Size],n=null==i?void 0:i[_.SnapshotRect],o=null==i?void 0:i[_.SceneIndex];let h={boxState:this.manager.attributes.boxState};return a&&(h=g(c({},h),{id:t,x:a.x,y:a.y})),s===t&&(h=g(c({},h),{focus:!0})),r&&(h=g(c({},h),{width:r.width,height:r.height})),n&&(h=g(c({},h),{snapshotRect:n})),o&&(h=g(c({},h),{sceneIndex:o})),vt.emit(e.InitReplay,h),h},this.appAttributesUpdateListener=e=>{const t=j((()=>{const t=this.manager.windowManger.attributes[e];t&&this.appEmitter.emit("attributesUpdate",t)}));this.disposer=t},this.cameraListener=e=>{this.manager.cameraStore.setCamera(this.id,e)},this.kind=t.kind,this.id=a,this.appProxies.set(this.id,this),this.appEmitter=new u,this.appListener=this.makeAppEventListener(this.id);const n=this.params.options;if(n){this.scenePath=n.scenePath;const e=this.manager.delegate.getAppAttributes(this.id);(null==e?void 0:e.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]}getFullScenePath(){if(this.scenePath)return this.manager.delegate.getAppAttributes(this.id)[Se.FullPath]||this.scenePath}setFullPath(e){this.manager.safeUpdateAttributes(["apps",this.id,Se.FullPath],e)}async baseInsertApp(e){var t;const i=this.params;if(i.kind){const a=await(null==(t=we.appClasses.get(i.kind))?void 0:t()),s=we.registered.get(i.kind);if(!a)throw new Error(`[WindowManager]: app load failed ${i.kind} ${i.src}`);return await this.setupApp(this.id,a,i.options,null==s?void 0:s.appOptions),this.boxManager.updateManagerRect(),e&&(this.focusBox(),this.manager.viewManager.switchAppToWriter(this.id),this.manager.delegate.setMainViewFocusPath()),{appId:this.id,app:a}}throw new Error("[WindowManager]: kind require")}get box(){return this.boxManager.getBox(this.id)}focusBox(){this.boxManager.focusBox({appId:this.id})}async setupApp(t,i,a,s){Te("setupApp",t,i,a);const r=new ve(this.manager,t,this,s);try{vt.once(`${t}${e.WindowCreated}`).then((async()=>{const e=this.getAppInitState(t);this.boxManager.updateBoxState(e),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(t),this.setViewFocusScenePath(),setTimeout((async()=>{const a=await i.setup(r);we.notifyApp(i.kind,"created",{appId:t,result:a}),e&&(e.focus&&this.scenePath&&this.manager.viewManager.switchAppToWriter(this.id),(null==e?void 0:e.x)&&e.y&&e.snapshotRect||this.boxManager.setBoxInitState(t));const s=this.boxManager.getBox(t);s&&this.boxManager.resizeBox({appId:t,width:s.width+.001,height:s.height+.001,skipUpdate:!0})}),50)})),this.boxManager.createBox({appId:t,app:i,options:a,canOperate:this.manager.canOperate})}catch(n){throw console.error(n),new Error(`[WindowManager]: app setup error: ${n.message}`)}}switchToWritable(){if(this.view)try{if(this.view.mode===T.Writable)return;this.manager.mainView.mode===T.Writable&&(this.manager.delegate.setMainViewFocusPath(),Ce(St,T.Freedom),ye(this.manager.mainView,T.Freedom)),ye(this.view,T.Writable)}catch(e){Te("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 te.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(){const e=this.getFullScenePath();this.manager.room&&e&&this.view&&Ae(this.manager.room,e)}switchToFreedom(){if(this.view&&this.view.mode===T.Writable){const e=this.getFullScenePath();e&&(Ie(this.view,e),ye(this.view,T.Freedom))}}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&Ie(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){this.status="destroyed",await we.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),this.disposer&&this.disposer(),t&&this.manager.delegate.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)}}class Le{constructor(e,t,i,a){this.manager=e,this.mainView=t,this.appProxies=i,this.appBoxMap=new Map,this.mainView=t,this.teleBoxManager=this.setupBoxManager(a),this.teleBoxManager.events.on(S.State,(e=>{e&&(St.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",M((e=>{vt.emit("move",{appId:e.id,x:e.x,y:e.y})}),50)),this.teleBoxManager.events.on("resize",M((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.updateBox(e.id,{focus:!1}):this.blurFocusBox()})),this.teleBoxManager.events.on("snapshot",(e=>{vt.emit("snapshot",{appId:e.id,rect:c({},e.rectSnapshot)})}))}get boxState(){return this.teleBoxManager.state}createBox(t){var i,a,s;if(!this.teleBoxManager)return;let{minwidth:r=ne,minheight:n=oe}=null!=(i=t.app.config)?i:{};const{width:o,height:h}=null!=(a=t.app.config)?a:{},c=(null==(s=t.options)?void 0:s.title)||t.appId,g=this.teleBoxManager.containerRect;r>1&&(r/=g.width),n>1&&(n/=g.height);const p={title:c,minWidth:r,minHeight:n,width:o,height:h,id:t.appId};this.teleBoxManager.create(p),vt.emit(`${t.appId}${e.WindowCreated}`);const d=this.manager.delegate.getAppState(t.appId);if(d){const e=m(d,[_.SnapshotRect]);I(e)&&this.setBoxInitState(t.appId)}}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&(vt.emit("snapshot",{appId:e,rect:c({},t.rectSnapshot)}),t.state===v.Maximized&&vt.emit("resize",{appId:e,x:t.x,y:t.y,width:t.width,height:t.height}))}setupBoxManager(e){const t=Dt.wrapper?Dt.wrapper:document.body,i=t.getBoundingClientRect(),a={root:t,containerRect:{x:0,y:0,width:i.width,height:i.height},fence:!1},s=(null==e?void 0:e.collectorContainer)||Dt.wrapper,r=c(c({},he),null==e?void 0:e.collectorStyles),n=new N({styles:r}).mount(s);a.collector=n;const o=new D(a);return this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=o,o}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e){return this.teleBoxManager.remove(e)}updateBox(e,t){return this.teleBoxManager.update(e,t)}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 A(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}),e.focus&&this.teleBoxManager.update(t.id,{focus:!0}),e.boxState&&this.teleBoxManager.setState(e.boxState),e.snapshotRect&&t.setSnapshot(e.snapshotRect))}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:a}){this.teleBoxManager.update(e,{width:t,height:i},a)}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),St.emit("boxStateChange",e)}}class Ee{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(g(c({},i),{animationMode:P.Immediately}))}}class fe{constructor(e){this.manager=e,this.disposers=[];const t=this.manager.delegate,i=this.manager.displayer;this.disposers.push(L((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Se.MainViewCamera]}),(e=>{t.broadcaster!==i.observerId&&e&&this.moveCamera(e)}),{fireImmediately:!0})),this.disposers.push(L((()=>{var e;return null==(e=this.manager.attributes)?void 0:e[Se.MainViewSize]}),(e=>{t.broadcaster!==i.observerId&&e&&(this.moveCameraToContian(e),this.moveCamera(t.getMainViewCamera()))}),{fireImmediately:!0}))}get view(){return this.manager.viewManager.mainView}moveCameraToContian(e){I(e)||y(e,this.size)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:P.Immediately}),this.size=e,this.scale=this.view.camera.scale)}moveCamera(e){if(!I(e)){if(y(e,this.view.camera))return;const{centerX:t,centerY:i,scale:a}=e,s=a*(this.scale||1);this.view.moveCamera({centerX:t,centerY:i,scale:s,animationMode:P.Immediately})}}destroy(){this.disposers.forEach((e=>e()))}}class Be{constructor(e,t,i){this.displayer=e,this.manager=t,this.cameraStore=i,this.views=new Map,this.mainViewIsAddListener=!1,this.delegate=this.manager.delegate,this.setMainViewSize=M((e=>{this.manager.delegate.setMainViewSize(c({},e))}),200),this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.mainViewCameraListener=e=>{this.cameraStore.setCamera("mainView",e),this.delegate.broadcaster===this.displayer.observerId&&this.delegate.setMainViewCamera(c({},e))},this.mainView=this.createMainView(),this.addMainViewCameraListener()}get currentScenePath(){return this.displayer.state.sceneState.scenePath}createMainView(){const e=this.displayer.views.createView();return this.cameraStore.setCamera("mainView",e.camera),e.callbacks.on("onSizeUpdated",(e=>{this.manager.boxManager.updateManagerRect(),this.delegate.broadcaster===this.displayer.observerId&&this.setMainViewSize(e)})),this.switchMainViewModeToWriter(),e}createView(e){const t=this.displayer.views.createView();return this.cameraStore.setCamera(e,t.camera),ye(t,T.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.manager.delegate.setMainViewFocusPath(),Ce(St,T.Freedom),ye(this.mainView,T.Freedom)}switchMainViewModeToWriter(){if(this.manager.canOperate&&this.mainView){if(this.mainView.mode===T.Writable)return;Ce(St,T.Writable),ye(this.mainView,T.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!==T.Writable&&(this.manager.delegate.cleanFocus(),this.freedomAllViews(),this.manager.dispatchInternalEvent(e.SwitchViewsToFreedom,{}),this.manager.dispatchInternalEvent(e.MainViewFocus,{}),this.manager.boxManager.blurFocusBox(),await this.manager.viewManager.switchMainViewToWriter())}switchMainViewToWriter(){return this.timer&&clearTimeout(this.timer),new Promise(((e,t)=>{this.timer=window.setTimeout((()=>{try{const t=this.manager.delegate.getMainViewScenePath();t&&(this.freedomAllViews(),this.removeMainViewCameraListener(),Ae(this.manager.room,t),this.switchMainViewModeToWriter(),this.manager.cameraStore.recoverCamera("mainView",this.mainView),this.addMainViewCameraListener()),e(!0)}catch(i){t(i)}}),100)}))}refreshViews(){var e;const t=this.manager.delegate.focus;if(this.setMainViewFocusScenePath(),t){const i=this.manager.appProxies.get(t);if(i){if((null==(e=i.view)?void 0:e.mode)===T.Writable)return;i.removeCameraListener(),i.switchToWritable(),i.recoverCamera(),i.addCameraListener()}}else{if(this.manager.mainView.mode===T.Writable)return;this.freedomAllViews(),this.switchMainViewToWriter()}}setMainViewFocusScenePath(){const e=this.manager.delegate.getMainViewScenePath();e&&Ie(this.manager.mainView,e)}freedomAllViews(){this.manager.appProxies.forEach((e=>{e.setViewFocusScenePath(),e.view&&(e.view.mode=T.Freedom)})),this.mainView.mode===T.Writable&&(Ce(St,T.Freedom),this.mainView.mode=T.Freedom),this.manager.viewManager.mainView.focusScenePath||this.manager.delegate.setMainViewFocusPath()}switchAppToWriter(e){this.freedomAllViews(),setTimeout((()=>{const t=this.manager.appProxies.get(e);if(t){const e=this.manager.delegate.getBoxState();if(e&&e===v.Minimized)return;t.removeCameraListener(),t.setScenePath(),t.switchToWritable(),t.recoverCamera(),t.addCameraListener()}}),100)}destroy(){var e;this.removeMainViewListener(),Dt.wrapper&&(null==(e=Dt.wrapper.parentNode)||e.removeChild(Dt.wrapper),Dt.wrapper=void 0),this.releaseView(this.mainView)}}const Ve=(e,t)=>{if(E){const i=e=>{e.map((e=>e.kind)).includes(z.Inserted)&&t()};return E(e,i),t(),()=>f(e,i)}return L((()=>e),(()=>{t()}),{fireImmediately:!0})};class Pe{constructor(t,i){var a;this.windowManger=t,this.appProxies=new Map,this.appStatus=new Map,this.delegate=new De(this),this.reactionDisposers=[],this.displayerStateListener=e=>{var t,i;const a=e.sceneState;if(a){const e=a.scenePath;this.appProxies.forEach((t=>{t.scenePath&&e.startsWith(t.scenePath)&&(t.emitAppSceneStateChange(a),t.setFullPath(e))})),this.viewManager.refreshViews()}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()}))},this.boxEventListener=(t,i)=>{var a;switch(t){case"move":this.dispatchInternalEvent(e.AppMove,i),this.delegate.updateAppState(i.appId,_.Position,{x:i.x,y:i.y});break;case"focus":{this.windowManger.safeSetAttributes({focus:i.appId});const t=this.appProxies.get(i.appId);(null==t?void 0:t.scenePath)&&(this.dispatchInternalEvent(e.SwitchViewsToFreedom,{}),this.viewManager.switchAppToWriter(i.appId)),this.dispatchInternalEvent(e.AppFocus,i);break}case"blur":this.dispatchInternalEvent(e.AppBlur,i);break;case"resize":i.width&&i.height&&(this.dispatchInternalEvent(e.AppResize,i),this.delegate.updateAppState(i.appId,_.Size,{width:i.width,height:i.height}),null==(a=this.room)||a.refreshViewSize());break;case v.Minimized:this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(c({},i),{state:t})}),this.safeSetAttributes({boxState:t}),this.delegate.cleanFocus(),this.boxManager.blurFocusBox(),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter();break;case v.Maximized:{this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(c({},i),{state:t})});const a=this.boxManager.getTopBox();a&&vt.emit("focus",{appId:a.id}),this.safeSetAttributes({boxState:t});break}case v.Normal:this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppBoxStateChange,payload:g(c({},i),{state:t})}),this.safeSetAttributes({boxState:t});break;case"snapshot":this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppSnapshot,payload:i}),this.delegate.updateAppState(i.appId,_.SnapshotRect,c({},i.rect));break;case"close":{this.safeDispatchMagixEvent("__WindowManger",{eventName:e.AppClose,payload:i});const t=this.appProxies.get(i.appId);t&&t.destroy(!1,!0,i.error),setTimeout((()=>{this.viewManager.refreshViews()}),100);break}}},this.displayer=t.displayer,this.cameraStore=new Ee,this.viewManager=new Be(this.displayer,this,this.cameraStore),this.boxManager=new Le(this,this.viewManager.mainView,this.appProxies,i),this.appListeners=new ce(this,this.windowManger,this.viewManager,this.appProxies),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.displayerWritableListener(!(null==(a=this.room)?void 0:a.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.addListeners(),this.mainViewProxy=new fe(this),vt.once("onCreated").then((async()=>{var e;await this.attributesUpdateCallback(this.attributes.apps),vt.onAny(this.boxEventListener);const t=Ve(this.attributes.apps,(()=>{this.attributesUpdateCallback(this.attributes.apps)}));if(this.reactionDisposers.push(t),this.reactionDisposers.push(L((()=>this.attributes[Se.Broadcaster]),(e=>{St.emit("broadcastChange",e)}))),!this.attributes.apps||0===Object.keys(this.attributes.apps).length){const t=this.delegate.getMainViewScenePath();if(!t)return;this.displayer.state.sceneState.scenePath!==t&&(null==(e=this.room)||e.setScenePath(t))}}))}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){Te("addApp",e);const{appId:i,needFocus:a}=await this.beforeAddApp(e,t),s=await this.baseInsertApp(e,i,!0,a);return this.afterAddApp(s),null==s?void 0:s.id}async beforeAddApp(e,t){var i;const a=await(async e=>{var t,i;const a=await(null==(t=we.appClasses.get(e))?void 0:t());return a&&(null==(i=a.config)?void 0:i.singleton)?e:`${e}-${Y().replace("-","").slice(0,8)}`})(e.kind);this.appStatus.set(a,ae.StartCreate),this.delegate.setupAppAttributes(e,a,t),this.boxManager.boxState===v.Minimized&&this.boxManager.teleBoxManager.setState(v.Normal);const s=this.boxManager.boxState!==v.Minimized;s&&this.delegate.setAppFocus(a,!0);const r=null!=(i=e.attributes)?i:{};return this.safeUpdateAttributes([a],r),{appId:a,needFocus:s}}afterAddApp(e){var t,i;e&&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,a){if(this.appStatus.set(t,ae.StartCreate),this.appProxies.has(t))return void console.warn("[WindowManager]: app duplicate exists and cannot be created again");const s=new je(e,this,t,i);if(s)return await s.baseInsertApp(a),this.appStatus.delete(t),s;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return U(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return U(this.displayer)?this.displayer:void 0}get mainView(){return this.windowManger.mainView}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===k.None)throw new Error(`${e} not valid scene`);if(t===k.Page)this._setMainViewScenePath(e);else if(t===k.Dir){const t=((e,t)=>{const i=e.entireScenes()[t][0].name;return"/"===t?`/${i}`:`${t}/${i}`})(this.displayer,e);this._setMainViewScenePath(t)}}}_setMainViewScenePath(e){this.safeSetAttributes({_mainScenePath:e}),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter(),this.delegate.setMainViewFocusPath()}setMainViewSceneIndex(e){this.room&&(this.safeSetAttributes({_mainSceneIndex:e}),this.viewManager.freedomAllViews(),this.viewManager.switchMainViewToWriter(),this.room.setSceneIndex(e),this.delegate.setMainViewScenePath(this.room.state.sceneState.scenePath),this.delegate.setMainViewFocusPath())}getAppInitPath(e){var t;const i=this.delegate.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.delegate.focus;e&&this.boxManager.focusBox({appId:e})}}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent("__WindowManger",{eventName:e,payload:t})}destroy(){this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),vt.offAny(this.boxEventListener),this.reactionDisposers.length&&(this.reactionDisposers.map((e=>e())),this.reactionDisposers=[]),this.appProxies.size&&this.appProxies.forEach((e=>{e.destroy(!0,!1)})),this.viewManager.destroy(),this.mainViewProxy.destroy(),St.clearListeners()}}function ze(){}function Ue(e){return e()}function ke(){return Object.create(null)}function Oe(e){e.forEach(Ue)}function Qe(e){return"function"==typeof e}function Ze(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}let We,Re;function Ge(e,t){return We||(We=document.createElement("a")),We.href=t,e===We.href}function Fe(e,t){e.appendChild(t)}function Ye(e,t,i){e.insertBefore(t,i||null)}function He(e){e.parentNode.removeChild(e)}function Xe(e){return document.createElement(e)}function Je(e){return document.createTextNode(e)}function Ke(){return Je(" ")}function qe(e,t,i){null==i?e.removeAttribute(t):e.getAttribute(t)!==i&&e.setAttribute(t,i)}function $e(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function _e(e,t,i,a){e.style.setProperty(t,i,a?"important":"")}function et(e){Re=e}const tt=[],it=[],at=[],st=[],rt=Promise.resolve();let nt=!1;function ot(e){at.push(e)}let ht=!1;const ct=new Set;function gt(){if(!ht){ht=!0;do{for(let e=0;e<tt.length;e+=1){const t=tt[e];et(t),pt(t.$$)}for(et(null),tt.length=0;it.length;)it.pop()();for(let e=0;e<at.length;e+=1){const t=at[e];ct.has(t)||(ct.add(t),t())}at.length=0}while(tt.length);for(;st.length;)st.pop()();nt=!1,ht=!1,ct.clear()}}function pt(e){if(null!==e.fragment){e.update(),Oe(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(ot)}}const dt=new Set;function lt(e,t){-1===e.$$.dirty[0]&&(tt.push(e),nt||(nt=!0,rt.then(gt)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function ut(e,t,i,a,s,r,n,o=[-1]){const h=Re;et(e);const c=e.$$={fragment:null,ctx:null,props:r,update:ze,not_equal:s,bound:ke(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(h?h.$$.context:t.context||[]),callbacks:ke(),dirty:o,skip_bound:!1,root:t.target||h.$$.root};n&&n(c.root);let g=!1;if(c.ctx=i?i(e,t.props||{},((t,i,...a)=>{const r=a.length?a[0]:i;return c.ctx&&s(c.ctx[t],c.ctx[t]=r)&&(!c.skip_bound&&c.bound[t]&&c.bound[t](r),g&<(e,t)),i})):[],c.update(),g=!0,Oe(c.before_update),c.fragment=!!a&&a(c.ctx),t.target){if(t.hydrate){const e=(l=t.target,Array.from(l.childNodes));c.fragment&&c.fragment.l(e),e.forEach(He)}else c.fragment&&c.fragment.c();t.intro&&((p=e.$$.fragment)&&p.i&&(dt.delete(p),p.i(d))),function(e,t,i,a){const{fragment:s,on_mount:r,on_destroy:n,after_update:o}=e.$$;s&&s.m(t,i),a||ot((()=>{const t=r.map(Ue).filter(Qe);n?n.push(...t):Oe(t),e.$$.on_mount=[]})),o.forEach(ot)}(e,t.target,t.anchor,t.customElement),gt()}var p,d,l;et(h)}function Mt(e){let t,i,a;return{c(){t=Xe("img"),qe(t,"class","netless-window-manager-cursor-selector-avatar"),qe(t,"style",i=e[15]()),Ge(t.src,a=e[7])||qe(t,"src",a),qe(t,"alt","avatar")},m(e,i){Ye(e,t,i)},p(e,i){128&i&&!Ge(t.src,a=e[7])&&qe(t,"src",a)},d(e){e&&He(t)}}}function mt(e){let t,i;return{c(){t=Xe("span"),i=Je(e[1]),qe(t,"class","netless-window-manager-cursor-tag-name"),_e(t,"background-color",e[10])},m(e,a){Ye(e,t,a),Fe(t,i)},p(e,a){2&a&&$e(i,e[1]),1024&a&&_e(t,"background-color",e[10])},d(e){e&&He(t)}}}function wt(e){let t,i,a,s,r,n,o,h,c,g,p,d,l=e[13]&&Mt(e),u=e[14]&&mt(e);return{c(){t=Xe("div"),i=Xe("div"),a=Xe("div"),l&&l.c(),s=Ke(),r=Xe("span"),n=Je(e[0]),o=Ke(),u&&u.c(),h=Ke(),c=Xe("div"),g=Xe("img"),_e(r,"overflow","hidden"),_e(r,"white-space","nowrap"),_e(r,"text-overflow","ellipsis"),_e(r,"max-width","80px"),qe(a,"class",e[8]),_e(a,"background-color",e[2]),_e(a,"color",e[9]),_e(a,"opacity",e[11]),qe(i,"class","netless-window-manager-cursor-name"),qe(g,"class",p="netless-window-manager-cursor-"+e[3]+"-image"),Ge(g.src,d=e[6])||qe(g,"src",d),qe(g,"alt",e[3]),qe(c,"class","cursor-image-wrapper"),qe(t,"class","netless-window-manager-cursor-mid"),_e(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),_e(t,"display",e[12])},m(e,p){Ye(e,t,p),Fe(t,i),Fe(i,a),l&&l.m(a,null),Fe(a,s),Fe(a,r),Fe(r,n),Fe(a,o),u&&u.m(a,null),Fe(t,h),Fe(t,c),Fe(c,g)},p(e,[i]){e[13]?l?l.p(e,i):(l=Mt(e),l.c(),l.m(a,s)):l&&(l.d(1),l=null),1&i&&$e(n,e[0]),e[14]?u?u.p(e,i):(u=mt(e),u.c(),u.m(a,null)):u&&(u.d(1),u=null),256&i&&qe(a,"class",e[8]),4&i&&_e(a,"background-color",e[2]),512&i&&_e(a,"color",e[9]),2048&i&&_e(a,"opacity",e[11]),8&i&&p!==(p="netless-window-manager-cursor-"+e[3]+"-image")&&qe(g,"class",p),64&i&&!Ge(g.src,d=e[6])&&qe(g,"src",d),8&i&&qe(g,"alt",e[3]),48&i&&_e(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),4096&i&&_e(t,"display",e[12])},i:ze,o:ze,d(e){e&&He(t),l&&l.d(),u&&u.d()}}}function It(e,t,i){let a,s,r,n,{cursorName:o}=t,{tagName:h}=t,{backgroundColor:c}=t,{appliance:g}=t,{x:p}=t,{y:d}=t,{src:l}=t,{visible:u}=t,{avatar:M}=t,{theme:m}=t,{color:w}=t,{cursorTagBackgroundColor:A}=t,{opacity:y}=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,g=e.appliance),"x"in e&&i(4,p=e.x),"y"in e&&i(5,d=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,A=e.cursorTagBackgroundColor),"opacity"in e&&i(11,y=e.opacity)},e.$$.update=()=>{1&e.$$.dirty&&(a=!I(o)),2&e.$$.dirty&&i(14,s=!I(h)),128&e.$$.dirty&&i(13,r=!I(M)),65536&e.$$.dirty&&i(12,n=u?"initial":"none")},[o,h,c,g,p,d,l,M,m,w,A,y,n,r,s,()=>Object.entries({width:(a?19:28)+"px",height:(a?19:28)+"px",position:a?"initial":"absolute","border-color":a?"white":c,"margin-right":(a?4:0)+"px"}).map((([e,t])=>`${e}: ${t}`)).join(";"),u]}class At extends class{$destroy(){!function(e,t){const i=e.$$;null!==i.fragment&&(Oe(i.on_destroy),i.fragment&&i.fragment.d(t),i.on_destroy=i.fragment=null,i.ctx=[])}(this,1),this.$destroy=ze}$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(),ut(this,e,It,wt,Ze,{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 yt={[O.pencil]:"data:image/png;base64,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",[O.selector]:"data:image/png;base64,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",[O.eraser]:"data:image/png;base64,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",[O.shape]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",[O.text]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="};class Ct{constructor(e,t,i,a,s){this.manager=e,this.cursors=t,this.memberId=i,this.cursorManager=a,this.wrapper=s,this.setMember(),this.createCursor(),G((()=>{if(this.disposer&&this.disposer(),!this.cursorPosition)throw new Error;this.startReaction()}),{retries:3}),this.autoHidden()}startReaction(){this.disposer=j((()=>{const e=this.cursorPosition,t=this.cursorState;if(e){const t=e.x,i=e.y,a=this.cursorManager.wrapperRect,s=this.cursorManager.containerRect;if(this.component&&a&&s){this.autoHidden();const e=t*a.width,s=i*a.height-15;this.component.$set({visible:!0,x:e,y:s})}}t&&t===se.Leave&&this.hide()}))}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;return(null==(e=this.payload)?void 0:e.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 m(this.cursors,[this.memberId,Se.CursorState])}get cursorPosition(){return m(this.cursors,[this.memberId,Se.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 At({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 yt[this.memberApplianceName||O.shape]||yt[O.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(C(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 xt{constructor(e,t){var i;this.manager=e,this.appManager=t,this.cursorInstances=new Map,this.mouseMoveListener=M((e=>{this.updateCursor(e.clientX,e.clientY)}),5),this.touchMoveListener=M((e=>{if(1===e.touches.length){const t=e.touches[0];this.updateCursor(t.clientX,t.clientY)}}),5),this.mouseLeaveListener=()=>{this.hideCursor(this.observerId),this.appManager.delegate.updateCursorState(this.observerId,se.Leave)},this.roomMembers=null==(i=this.manager.room)?void 0:i.state.roomMembers;const a=Dt.wrapper;a&&(a.addEventListener("mousemove",this.mouseMoveListener),a.addEventListener("touchmove",this.touchMoveListener),a.addEventListener("mouseleave",this.mouseLeaveListener),a.addEventListener("touchend",this.mouseLeaveListener),this.initCursorAttributes(),this.wrapperRect=a.getBoundingClientRect(),this.startReaction(a))}startReaction(e){this.disposer=Ve(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 a in this.cursors)if(i.includes(Number(a))&&!this.cursorInstances.has(a)&&a!==this.observerId){const t=new Ct(this.manager,this.cursors,a,this,e);this.cursorInstances.set(a,t)}}get observerId(){return String(this.manager.displayer.observerId)}get cursors(){var e;return null==(e=this.manager.attributes)?void 0:e[Se.Cursors]}get boxState(){return this.appManager.delegate.getBoxState()}initCursorAttributes(){this.appManager.delegate.updateCursor(this.observerId,{x:0,y:0}),this.appManager.delegate.updateCursorState(this.observerId,se.Leave)}getBoxTitleHeight(){var e;if(this.boxState===v.Maximized){const t=this.appManager.boxManager.getTopBox();if(t)return null==(e=t.$titleBar)?void 0:e.clientHeight}}getFocusBox(){return this.appManager.boxManager.getFocusBox()}updateCursor(e,t){if(this.wrapperRect&&this.manager.canOperate){const i=(e-this.wrapperRect.x)/this.wrapperRect.width,a=(t-this.wrapperRect.y)/this.wrapperRect.height;this.appManager.delegate.getCursorState(this.observerId)&&this.appManager.delegate.updateCursorState(this.observerId,se.Normal),this.appManager.delegate.updateCursor(this.observerId,{x:i,y:a})}}updateContainerRect(){var e,t;this.containerRect=null==(e=Dt.container)?void 0:e.getBoundingClientRect(),this.wrapperRect=null==(t=Dt.wrapper)?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach((e=>{e.setMember()})),Dt.wrapper&&this.handleRoomMembersChange(Dt.wrapper)}cleanMemberCursor(e){this.appManager.delegate.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 a in this.cursors){-1===t.findIndex((e=>e===Number(a)))&&i.push(a)}i.forEach((e=>{const t=this.cursorInstances.get(e);t&&t.destroy(),this.appManager.delegate.cleanCursor(e)}))}destroy(){const e=Dt.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())}}const bt=window.ResizeObserver||F,vt=new u,St=new u,Nt=class extends Q{constructor(e){super(e),this.emitter=St}static async mount(e,t,i,a){let s,r,n,o,h,c,g=!0;if("room"in e?(s=e.room,t=e.container,i=e.collectorContainer,r=e.containerSizeRatio,n=e.collectorStyles,o=e.debug,null!=e.chessboard&&(g=e.chessboard),h=e.overwriteStyles,c=e.cursor):(s=e,r=null==a?void 0:a.containerSizeRatio,n=null==a?void 0:a.collectorStyles,o=null==a?void 0:a.debug,null!=(null==a?void 0:a.chessboard)&&(g=a.chessboard),h=null==a?void 0:a.overwriteStyles),this.checkVersion(),U(s)&&s.phase!==Z.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");if(!t)throw new Error("[WindowManager]: Container must provide");if(Nt.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");const p=await this.initManager(s);this.debug=Boolean(o),this.debug&&l({verbose:!0}),Te("Already insert room",p),r&&(Nt.containerSizeRatio=r),Nt.container=t;const{playground:d,wrapper:u,sizer:M,mainViewElement:m}=(e=>{const t=document.createElement("div");t.className="netless-window-manager-playground";const i=document.createElement("div");i.className="netless-window-manager-sizer";const a=document.createElement("div");a.className="netless-window-manager-wrapper";const s=document.createElement("div");return s.className="netless-window-manager-main-view",t.appendChild(i),i.appendChild(a),a.appendChild(s),e.appendChild(t),Dt.wrapper=a,{playground:t,wrapper:a,sizer:i,mainViewElement:s}})(t);if(Nt.playground=d,g&&M.classList.add("netless-window-manager-chess-sizer"),h){const e=document.createElement("style");e.textContent=h,d.appendChild(e)}await p.ensureAttributes(),p.appManager=new Pe(p,{collectorContainer:i,collectorStyles:n}),p.observePlaygroundSize(d,M,u),c&&(p.cursorManager=new xt(p,p.appManager)),p.bindMainView(m),((e,t)=>{Object.getOwnPropertyDescriptor(e,"disableCameraTransform")||(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))})(s,p.appManager),vt.emit("onCreated"),Nt.isCreated=!0;try{await de()}catch(w){console.warn("[WindowManager]: indexedDB open failed"),console.log(w)}return p}static async initManager(e){let t=e.getInvisiblePlugin(Nt.kind);if(!t&&U(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(Nt,{}),await e.setWritable(!1)}else t=await e.createInvisiblePlugin(Nt,{});return t}static register(e){return we.register(e)}createMainView(){if(this.appManager)return this.appManager.viewManager.mainView;throw new X}async addApp(e){var t,i,a,s;if(this.appManager){if(!e.kind||"string"!=typeof e.kind)throw new K;const r=await(null==(t=we.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 H;const n=this.setupScenePath(e,this.appManager);if(void 0===n)return;(null==(a=null==e?void 0:e.options)?void 0:a.scenePath)&&(e.options.scenePath=(s=e.options.scenePath).endsWith("/")?s.slice(0,-1):s);return await this.appManager.addApp(e,Boolean(n))}throw new X}setupScenePath(e,t){var i,a,s;let r=!1;if(e.options){const{scenePath:n,scenes:o}=e.options;if(n){if(!(e=>e.startsWith("/"))(n))throw new $;for(const e in this.apps){const i=t.delegate.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==(a=this.room)||a.putScenes(n,[{name:o[0].name}])),n&&void 0===o&&(null==(s=this.room)||s.putScenes(n,[{}]))}return r}async closeApp(e){var t;return null==(t=this.appManager)?void 0:t.closeApp(e)}setMainViewScenePath(e){this.appManager&&this.appManager.setMainViewScenePath(e)}setMainViewSceneIndex(e){this.appManager&&this.appManager.setMainViewSceneIndex(e)}getMainViewScenePath(){var e;return null==(e=this.appManager)?void 0:e.delegate.getMainViewScenePath()}getMainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.delegate.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){vt.once(`destroy-${e}`).then(t)}setViewMode(e){var t,i,a,s,r,n;e===W.Broadcaster&&(null==(t=this.appManager)||t.delegate.setBroadcaster(this.displayer.observerId),null==(i=this.appManager)||i.delegate.setMainViewCamera(this.mainView.camera),null==(a=this.appManager)||a.delegate.setMainViewSize(this.mainView.size)),e===W.Freedom&&(null==(s=this.appManager)||s.delegate.setMainViewCamera(void 0),null==(r=this.appManager)||r.delegate.setMainViewSize(void 0),null==(n=this.appManager)||n.delegate.setBroadcaster(void 0))}get mainView(){if(this.appManager)return this.appManager.viewManager.mainView;throw new X}get camera(){if(this.appManager)return this.appManager.viewManager.mainView.camera;throw new X}get apps(){var e;return null==(e=this.appManager)?void 0:e.delegate.apps()}get boxState(){if(this.appManager)return this.appManager.boxManager.teleBoxManager.state;throw new X}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var e,t,i,a;null==(e=this.containerResizeObserver)||e.disconnect(),null==(t=this.appManager)||t.destroy(),null==(i=this.cursorManager)||i.destroy(),Nt.container=void 0,Nt.wrapper=void 0,Nt.isCreated=!1,Nt.playground&&(null==(a=Nt.playground.parentNode)||a.removeChild(Nt.playground)),Te("Destroyed")}bindMainView(e){if(this.appManager){const t=this.appManager.viewManager.mainView;if(t.divElement=e,t.mode=T.Writable,t.focusScenePath||this.appManager.delegate.setMainViewFocusPath(),!this.appManager.delegate.getMainViewScenePath()){const e=this.displayer.state.sceneState;this.appManager.delegate.setMainViewScenePath(e.scenePath),this.appManager.delegate.setMainViewSceneIndex(e.index)}void 0===this.appManager.delegate.focus&&t.mode!==T.Writable&&(this.appManager.viewManager.freedomAllViews(),this.appManager.viewManager.switchMainViewToWriter()),this.appManager.viewManager.addMainViewListener()}}get canOperate(){return!!U(this.displayer)&&(this.displayer.isWritable&&this.displayer.phase===Z.Connected)}get room(){return this.canOperate?this.displayer:void 0}get broadcaster(){var e;return null==(e=this.appManager)?void 0:e.delegate.broadcaster}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)}getSceneName(e,t){var i;const a=this.displayer.entireScenes()[e];if(a&&void 0!==t)return null==(i=a[t])?void 0:i.name}isDynamicPPT(e){var t,i;const a=null==(i=null==(t=e[0])?void 0:t.ppt)?void 0:i.src;return null==a?void 0:a.startsWith("pptx://")}static checkVersion(){if(xe(R)<xe("2.13.16"))throw new J("2.13.16")}async ensureAttributes(){x(this.attributes)&&await be(50),b(this.attributes)&&(this.attributes[Se.Apps]||this.safeSetAttributes({[Se.Apps]:{}}),this.attributes[Se.Cursors]||this.safeSetAttributes({[Se.Cursors]:{}}))}observePlaygroundSize(e,t,i){this.updateSizer(e.getBoundingClientRect(),t,i),this.containerResizeObserver=new bt((e=>{var a,s;const r=null==(a=e[0])?void 0:a.contentRect;r&&(this.updateSizer(r,t,i),null==(s=this.cursorManager)||s.updateContainerRect())})),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},i,a){e&&t&&(t/e>Nt.containerSizeRatio?(t=e*Nt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/Nt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!1)),a.style.width=`${e}px`,a.style.height=`${t}px`)}};let Dt=Nt;Dt.kind="WindowManager",Dt.debug=!1,Dt.containerSizeRatio=9/16,Dt.isCreated=!1,Dt.register({kind:p.kind,src:p}),Dt.register({kind:d.kind,src:d});const Tt={DocsViewer:p.kind,MediaPlayer:d.kind};export{Tt as BuiltinApps,Dt as WindowManager,St as callbacks,vt as emitter};
|
2
2
|
//# sourceMappingURL=index.es.js.map
|