@netless/window-manager 0.4.0-canary.15 → 0.4.0-canary.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__spreadValues=(e,t)=>{for(var i in t||(t={}))__hasOwnProp.call(t,i)&&__defNormalProp(e,i,t[i]);if(__getOwnPropSymbols)for(var i of __getOwnPropSymbols(t))__propIsEnum.call(t,i)&&__defNormalProp(e,i,t[i]);return e},__spreadProps=(e,t)=>__defProps(e,__getOwnPropDescs(t));!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("emittery"),require("p-retry"),require("@juggle/resize-observer"),require("lodash"),require("@netless/telebox-insider"),require("white-web-sdk"),require("uuid"),require("side-effect-manager"),require("@netless/app-docs-viewer"),require("@netless/app-media-player")):"function"==typeof define&&define.amd?define(["exports","emittery","p-retry","@juggle/resize-observer","lodash","@netless/telebox-insider","white-web-sdk","uuid","side-effect-manager","@netless/app-docs-viewer","@netless/app-media-player"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WindowManager={},e.Emittery,e.pRetry,e.resizeObserver,e.lodash,e.teleboxInsider,e.whiteWebSdk,e.uuid,e.sideEffectManager,e.AppDocsViewer,e.AppMediaPlayer)}(this,(function(e,t,i,s,a,r,n,o,h,c,d){"use strict";function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p,u,g=l(t),m=l(i),M=l(c),w=l(d);(u=p||(p={})).AppMove="AppMove",u.AppFocus="AppFocus",u.AppResize="AppResize",u.AppBoxStateChange="AppBoxStateChange",u.GetAttributes="GetAttributes",u.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",u.InitReplay="InitReplay",u.WindowCreated="WindowCreated",u.SetMainViewScenePath="SetMainViewScenePath",u.SetMainViewSceneIndex="SetMainViewSceneIndex",u.SwitchViewsToFreedom="SwitchViewsToFreedom",u.MoveCameraToContain="MoveCameraToContain";const I="__WindowManger";var A,x,y,C,b,v,S;(x=A||(A={})).Size="size",x.Position="position",x.SceneIndex="SceneIndex",x.ZIndex="zIndex",(C=y||(y={})).setBoxSize="setBoxSize",C.setBoxMinSize="setBoxMinSize",C.destroy="destroy",(b||(b={})).StartCreate="StartCreate",(S=v||(v={})).Leave="leave",S.Normal="normal";const f="2.16.0",N=340/720,D=340/720,j="__WindowManagerAppCache";let T,E;const L=async()=>{T=await new Promise(((e,t)=>{const i=indexedDB.open(j,2);i.onerror=e=>{t(e)},i.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains("apps")||(E=t.createObjectStore("apps",{keyPath:"kind"}),E.createIndex("kind","kind",{unique:!0}))},i.onsuccess=()=>{const t=i.result;e(t)}}))},P=(e,t)=>{var i,s;if(T)return i=T,s={kind:e,sourceCode:t},new Promise(((e,t)=>{const a=i.transaction(["apps"],"readwrite").objectStore("apps").add(s);a.onsuccess=()=>e(),a.onerror=()=>t()}))},z=async e=>{return T?await(t=T,i=e,new Promise(((e,s)=>{const a=t.transaction(["apps"]).objectStore("apps").index("kind").get(i);a.onerror=e=>s(e),a.onsuccess=()=>{a.result?e(a.result):e(null)}}))):null;var t,i};const B=async e=>{const t=await z(e);if(t)return t;{const t=await async function(e,t){const{timeout:i=1e4}=t,s=new AbortController,a=setTimeout((()=>s.abort()),i),r=await fetch(e,__spreadProps(__spreadValues({},t),{signal:s.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(a),r}(e,{timeout:1e4}),i=await t.text();return await P(e,i),i}},V=(e,t)=>{let i=Function(e+`;return ${t}`)();return void 0===i&&(i=window[t]),i};const U=new class{constructor(){this.kindEmitters=new Map,this.registered=new Map,this.appClassesCache=new Map,this.appClasses=new Map}async register(e){this.registered.set(e.kind,e);const t=e.src;let i;if(i="string"==typeof t?async()=>{const i=await(async(e,t,i)=>{const s=i||"NetlessApp"+t,a=await B(e);try{return V(a,s)}catch(r){if(r.message.includes("Can only have one anonymous define call per script file")){const e=window.define;return"function"==typeof e&&e.amd&&delete e.amd,V(a,s)}}})(t,e.kind);if(i)return i;throw new Error(`[WindowManager]: load remote script failed, ${t}`)}:"function"==typeof t?t:async()=>t,this.appClasses.set(e.kind,(async()=>{let t=this.appClassesCache.get(e.kind);return t||(t=i(),this.appClassesCache.set(e.kind,t)),t})),e.addHooks){const t=this.createKindEmitter(e.kind);t&&e.addHooks(t)}}async notifyApp(e,t,i){const s=this.kindEmitters.get(e);await(null==s?void 0:s.emit(t,i))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new g.default;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}},k=(e,t)=>{if(e.focusScenePath!==t)return e.focusScenePath=t,e},O=(e,t)=>{e&&e.isWritable&&e.state.sceneState.scenePath!==t&&e.setScenePath(t)};a.debounce(((e,t)=>{e.emit("mainViewModeChange",t)}),200);const R=(e,t,i=0)=>{const s=Z(e)[t];if(!s)return;const a=s[i];if(!a)return;const r=a.name;return"/"===t?`/${r}`:`${t}/${r}`},Z=e=>e.entireScenes(),Q=e=>{const t=e.split("/");t.pop();let i=t.join("/");return""===i&&(i="/"),i},G=e=>{const t=e.split(".").map((e=>e.padStart(2,"0"))).join("");return parseInt(t)},W=e=>new Promise((t=>setTimeout(t,e)));class Y{constructor(e){this.manager=e,this.displayer=this.manager.displayer,this.mainMagixEventListener=e=>{if(e.authorId!==this.displayer.observerId){const t=e.payload;switch(t.eventName){case p.AppMove:this.appMoveHandler(t.payload);break;case p.AppResize:this.appResizeHandler(t.payload);break;case p.AppBoxStateChange:this.boxStateChangeHandler(t.payload);break;case p.SetMainViewScenePath:this.setMainViewScenePathHandler(t.payload);break;case p.MoveCameraToContain:this.moveCameraToContainHandler(t.payload)}}},this.appMoveHandler=e=>{var t;null==(t=this.boxManager)||t.moveBox(e)},this.appResizeHandler=e=>{var t,i;null==(t=this.boxManager)||t.resizeBox(Object.assign(e,{skipUpdate:!0})),null==(i=this.manager.room)||i.refreshViewSize()},this.boxStateChangeHandler=e=>{gt.emit("boxStateChange",e)},this.setMainViewScenePathHandler=({nextScenePath:e})=>{k(this.manager.mainView,e),gt.emit("mainViewScenePathChange",e)},this.moveCameraToContainHandler=e=>{this.manager.mainView.moveCameraToContain(e)}}get boxManager(){return this.manager.boxManager}addListeners(){this.displayer.addMagixEventListener(I,this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener(I,this.mainMagixEventListener)}}class F extends Error{constructor(){super(...arguments),this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class _ extends Error{constructor(){super(...arguments),this.message="[WindowManager]: AppManager must be initialized"}}class H extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class X extends Error{constructor(){super(...arguments),this.message="[WindowManager]: kind must be a valid string"}}class J extends Error{constructor(){super(...arguments),this.message="[WindowManager]: box need created"}}class K extends Error{constructor(){super(...arguments),this.message='[WindowManager]: ScenePath should start with "/"'}}class q extends Error{constructor(){super(...arguments),this.message="[WindowManager]: boxManager not found"}}const $=e=>(t,i)=>{if(void 0!==t){if(n.listenUpdated){const s=t=>{t.map((e=>e.kind)).includes(e)&&i()};return n.listenUpdated(t,s),i(),()=>n.unlistenUpdated(t,s)}return n.reaction((()=>t),(()=>{i()}),{fireImmediately:!0})}},ee=(e,t,i)=>{let s=null;const r=n.reaction(e,(()=>{s&&(s(),s=null);const r=e();a.isObject(r)?(s=()=>n.unlistenUpdated(r,t),n.listenUpdated(r,t)):null==i||i(r)}),{fireImmediately:!0});return()=>{null==s||s(),r()}},te=$(n.UpdateEventKind.Removed),ie=$(n.UpdateEventKind.Inserted),se=Object.keys;function ae(e){return Boolean(a.has(e,"__isRef"))}class re{constructor(){this.listeners=new Set}get length(){return this.listeners.size}dispatch(e){this.listeners.forEach((t=>t(e)))}addListener(e){this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}}const ne="_WM-STORAGE_";class oe{constructor(e,t,i){if(this._sideEffect=new h.SideEffectManager,this._destroyed=!1,this._refMap=new WeakMap,this._lastValue=new Map,this.onStateChanged=new re,i&&!a.isObject(i))throw new Error(`Default state for Storage ${t} is not an object.`);this._context=e,this.id=t||null,this._state={};const s=this._getRawState(this._state);null!==this.id&&this._context.getIsWritable()&&(s!==this._state&&a.isObject(s)||(a.get(this._context.getAttributes(),[ne])||this._context.updateAttributes([ne],{}),this._context.updateAttributes([ne,this.id],this._state)),i&&this.setState(i)),se(s).forEach((e=>{if(null!==this.id||e!==ne)try{const t=a.isObject(s[e])?JSON.parse(JSON.stringify(s[e])):s[e];ae(t)?(this._state[e]=t.v,a.isObject(t.v)&&this._refMap.set(t.v,t)):this._state[e]=t}catch(t){console.error(t)}})),this._sideEffect.addDisposer(ee((()=>null===this.id?e.getAttributes():a.get(e.getAttributes(),[ne,this.id])),this._updateProperties.bind(this),this.destroy.bind(this)))}get state(){return this._destroyed&&console.warn(`Accessing state on destroyed Storage "${this.id}"`),this._state}addStateChangedListener(e){return this.onStateChanged.addListener(e),()=>this.onStateChanged.removeListener(e)}ensureState(e){return this.setState(se(e).reduce(((t,i)=>(a.has(this._state,i)||(t[i]=e[i]),t)),{}))}setState(e){if(this._destroyed)return void console.error(new Error(`Cannot call setState on destroyed Storage "${this.id}".`));if(!this._context.getIsWritable())return void console.error(new Error(`Cannot setState on Storage "${this.id}" without writable access`),e);const t=se(e);t.length>0&&t.forEach((t=>{const i=e[t];var s;if(i!==this._state[t])if(void 0===i)this._lastValue.set(t,this._state[t]),delete this._state[t],this._setRawState(t,i);else{this._lastValue.set(t,this._state[t]),this._state[t]=i;let e=i;if(a.isObject(i)){let t=this._refMap.get(i);t||(s=i,t={k:h.genUID(),v:s,__isRef:!0},this._refMap.set(i,t)),e=t}this._setRawState(t,e)}}))}emptyStorage(){a.size(this._state)<=0||(this._destroyed?console.error(new Error(`Cannot empty destroyed Storage "${this.id}".`)):this._context.getIsWritable()?this.setState(a.mapValues(this._state,a.noop)):console.error(new Error(`Cannot empty Storage "${this.id}" without writable access.`)))}deleteStorage(){if(null===this.id)throw new Error("Cannot delete main Storage");this._context.getIsWritable()?(this.destroy(),this._context.updateAttributes([ne,this.id],void 0)):console.error(new Error(`Cannot delete Storage "${this.id}" without writable access.`))}get destroyed(){return this._destroyed}destroy(){this._destroyed=!0,this._sideEffect.flushAll()}_getRawState(e){return null===this.id?a.get(this._context.getAttributes(),[],e):a.get(this._context.getAttributes(),[ne,this.id],e)}_setRawState(e,t){if(null===this.id){if(e===ne)throw new Error('Cannot set attribute internal filed "_WM-STORAGE_"');return this._context.updateAttributes([e],t)}return this._context.updateAttributes([ne,this.id,e],t)}_updateProperties(e){var t;if(this._destroyed)console.error(new Error(`Cannot call _updateProperties on destroyed Storage "${this.id}".`));else if(e.length>0){const s={};for(let r=0;r<e.length;r++)try{const i=e[r],n=i.key;if(null===this.id&&n===ne)continue;const o=a.isObject(i.value)?JSON.parse(JSON.stringify(i.value)):i.value;let h;switch(this._lastValue.has(n)&&(h=this._lastValue.get(n),this._lastValue.delete(n)),i.kind){case 2:a.has(this._state,n)&&(h=this._state[n],delete this._state[n]),s[n]={oldValue:h};break;default:{let e=o;if(ae(o)){const{k:i,v:s}=o,r=this._state[n];a.isObject(r)&&(null==(t=this._refMap.get(r))?void 0:t.k)===i?e=r:(e=s,a.isObject(s)&&this._refMap.set(s,o))}e!==this._state[n]&&(h=this._state[n],this._state[n]=e),s[n]={newValue:e,oldValue:h};break}}}catch(i){console.error(i)}this.onStateChanged.dispatch(s)}}}class he{constructor(e,t,i,s,a){this.manager=e,this.boxManager=t,this.appId=i,this.appProxy=s,this.appOptions=a,this.mobxUtils={autorun:n.autorun,reaction:n.reaction,toJS:n.toJS},this.objectUtils={listenUpdated:n.listenUpdated,unlistenUpdated:n.unlistenUpdated,listenDisposed:n.listenDisposed,unlistenDisposed:n.unlistenDisposed},this.store=this.manager.store,this.isReplay=this.manager.isReplay,this.getDisplayer=()=>this.manager.displayer,this.getAttributes=()=>this.appProxy.attributes,this.getScenes=()=>{const e=this.store.getAppAttributes(this.appId);if(!(null==e?void 0:e.isDynamicPPT))return null==e?void 0:e.options.scenes;{const e=this.manager.appProxies.get(this.appId);if(e)return e.scenes}},this.getView=()=>this.appProxy.view,this.getInitScenePath=()=>this.manager.getAppInitPath(this.appId),this.getIsWritable=()=>this.manager.canOperate,this.getBox=()=>{const e=this.boxManager.getBox(this.appId);if(e)return e;throw new J},this.getRoom=()=>this.manager.room,this.setAttributes=e=>{this.manager.safeSetAttributes({[this.appId]:e})},this.updateAttributes=(e,t)=>{this.manager.attributes[this.appId]&&this.manager.safeUpdateAttributes([this.appId,...e],t)},this.setScenePath=async e=>{var t;this.appProxy.box&&(this.appProxy.setFullPath(e),null==(t=this.getRoom())||t.setScenePath(e))},this.mountView=e=>{const t=this.getView();t&&(t.divElement=e,setTimeout((()=>{var e;null==(e=this.getRoom())||e.refreshViewSize()}),1e3))},this.getAppOptions=()=>"function"==typeof this.appOptions?this.appOptions():this.appOptions,this.createStorage=(e,t)=>{const i=new oe(this,e,t);return this.emitter.on("destroy",(()=>{i.destroy()})),i},this.dispatchMagixEvent=this.manager.displayer.dispatchMagixEvent.bind(this.manager.displayer),this.addMagixEventListener=(e,t,i)=>(this.manager.displayer.addMagixEventListener(e,t,i),()=>this.manager.displayer.removeMagixEventListener(e,t)),this.removeMagixEventListener=this.manager.displayer.removeMagixEventListener.bind(this.manager.displayer),this.emitter=s.appEmitter,this.isAddApp=s.isAddApp}get storage(){return this._storage||(this._storage=new oe(this)),this._storage}}var ce,de;(de=ce||(ce={})).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",de.FullPath="fullPath";const le=new class{constructor(e){this.context=e}setContext(e){this.context=e}get attributes(){return this.context.getAttributes()}apps(){return a.get(this.attributes,[ce.Apps])}get focus(){return a.get(this.attributes,[ce.Focus])}getAppAttributes(e){return a.get(this.apps(),[e])}getAppState(e){return a.get(this.apps(),[e,ce.State])}getMaximized(){return a.get(this.attributes,["maximized"])}getMinimized(){return a.get(this.attributes,["minimized"])}setupAppAttributes(e,t,i){this.attributes.apps||this.context.safeSetAttributes({apps:{}});const s=["scenePath","title"];i||s.push("scenes");const r=a.pick(e.options,s),n={kind:e.kind,options:r,isDynamicPPT:i};"string"==typeof e.src&&(n.src=e.src),n.createdAt=Date.now(),this.context.safeUpdateAttributes([ce.Apps,t],n),this.context.safeUpdateAttributes([ce.Apps,t,ce.State],{[A.Size]:{},[A.Position]:{},[A.SceneIndex]:0})}updateAppState(e,t,i){a.get(this.attributes,[ce.Apps,e,ce.State])&&this.context.safeUpdateAttributes([ce.Apps,e,ce.State,t],i)}cleanAppAttributes(e){this.context.safeUpdateAttributes([ce.Apps,e],void 0),this.context.safeSetAttributes({[e]:void 0});this.attributes[ce.Focus]===e&&this.cleanFocus()}cleanFocus(){this.context.safeSetAttributes({[ce.Focus]:void 0})}getAppSceneIndex(e){var t;return null==(t=this.getAppState(e))?void 0:t[A.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.attributes._mainScenePath}getMainViewSceneIndex(){return this.attributes._mainSceneIndex}getBoxState(){return this.attributes[ce.BoxState]}setMainViewScenePath(e){this.context.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.context.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return a.get(this.attributes,[ce.MainViewCamera])}getMainViewSize(){return a.get(this.attributes,[ce.MainViewSize])}setMainViewCamera(e){this.context.safeSetAttributes({[ce.MainViewCamera]:__spreadValues({},e)})}setMainViewSize(e){this.context.safeSetAttributes({[ce.MainViewSize]:__spreadValues({},e)})}setAppFocus(e,t){t?this.context.safeSetAttributes({[ce.Focus]:e}):this.context.safeSetAttributes({[ce.Focus]:void 0})}updateCursor(e,t){a.get(this.attributes,[ce.Cursors])||this.context.safeUpdateAttributes([ce.Cursors],{}),a.get(this.attributes,[ce.Cursors,e])||this.context.safeUpdateAttributes([ce.Cursors,e],{}),this.context.safeUpdateAttributes([ce.Cursors,e,ce.Position],t)}updateCursorState(e,t){a.get(this.attributes,[ce.Cursors,e])||this.context.safeUpdateAttributes([ce.Cursors,e],{}),this.context.safeUpdateAttributes([ce.Cursors,e,ce.CursorState],t)}getCursorState(e){return a.get(this.attributes,[ce.Cursors,e,ce.CursorState])}cleanCursor(e){this.context.safeUpdateAttributes([ce.Cursors,e],void 0)}setMainViewFocusPath(e){const t=this.getMainViewScenePath();t&&k(e,t)}}({getAttributes:()=>{throw new Error("getAttributes not implemented")},safeSetAttributes:()=>{throw new Error("safeSetAttributes not implemented")},safeUpdateAttributes:()=>{throw new Error("safeUpdateAttributes not implemented")}}),pe=(...e)=>{wt.debug&&console.log("[WindowManager]:",...e)};class ue{constructor(e){this.manager=e,this.findMember=e=>{var t;const i=null==(t=this.manager.room)?void 0:t.state.roomMembers;return null==i?void 0:i.find((t=>t.memberId===e))},this.findMemberByUid=e=>{var t;const i=null==(t=this.manager.room)?void 0:t.state.roomMembers;return null==i?void 0:i.find((t=>{var i;return(null==(i=t.payload)?void 0:i.uid)===e}))},this.observerId=e.displayer.observerId,ut.on("observerIdChange",(e=>{this.observerId=e}))}get uid(){var e;return(null==(e=this.manager.room)?void 0:e.uid)||""}updateManagerRect(){var e;null==(e=this.manager.boxManager)||e.updateManagerRect()}blurFocusBox(){var e;null==(e=this.manager.boxManager)||e.blurAllBox()}}let ge;class me{constructor(e){this.manager=e,this.store=le,this.context=(e=>(ge||(ge=new ue(e)),ge))(this.manager)}}class Me extends me{constructor(e,t,i,s){var r;super(t),this.params=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=e=>{var t,i;const s=this.store.getAppState(e);if(!s)return;const a=null==s?void 0:s[A.Position],r=this.store.focus,n=null==s?void 0:s[A.Size],o=null==s?void 0:s[A.SceneIndex];let h={maximized:null==(t=this.attributes)?void 0:t.maximized,minimized:null==(i=this.attributes)?void 0:i.minimized,zIndex:null==s?void 0:s.zIndex};return a&&(h=__spreadProps(__spreadValues({},h),{id:e,x:a.x,y:a.y})),r===e&&(h=__spreadProps(__spreadValues({},h),{focus:!0})),n&&(h=__spreadProps(__spreadValues({},h),{width:n.width,height:n.height})),o&&(h=__spreadProps(__spreadValues({},h),{sceneIndex:o})),h},this.appAttributesUpdateListener=e=>{var t,i,s;null==(t=this.manager.refresher)||t.add(e,(()=>n.autorun((()=>{const t=this.manager.attributes[e];t&&this.appEmitter.emit("attributesUpdate",t)})))),null==(i=this.manager.refresher)||i.add(this.stateKey,(()=>n.autorun((()=>{var t,i,s;const a=null==(t=this.appAttributes)?void 0:t.state;(null==a?void 0:a.zIndex)>0&&a.zIndex!==(null==(i=this.box)?void 0:i.zIndex)&&(null==(s=this.boxManager)||s.setZIndex(e,a.zIndex))})))),null==(s=this.manager.refresher)||s.add(`${e}-fullPath`,(()=>n.autorun((()=>{var e;const t=null==(e=this.appAttributes)?void 0:e.fullPath;this.setFocusScenePathHandler(t)}))))},this.setFocusScenePathHandler=a.debounce((e=>{var t;this.view&&e&&e!==(null==(t=this.view)?void 0:t.focusScenePath)&&k(this.view,e)}),50),this.kind=e.kind,this.id=i,this.stateKey=`${this.id}_state`,this.appProxies.set(this.id,this),this.appEmitter=new g.default,this.appListener=this.makeAppEventListener(this.id),this.isAddApp=s,this.initScenes(),(null==(r=this.params.options)?void 0:r.scenePath)&&this.createView()}initScenes(){var e;const t=this.params.options;t&&(this.scenePath=t.scenePath,(null==(e=this.appAttributes)?void 0:e.isDynamicPPT)&&this.scenePath?this.scenes=this.manager.displayer.entireScenes()[this.scenePath]:this.scenes=t.scenes)}get view(){return this.manager.viewManager.getView(this.id)}get isWritable(){var e;return this.manager.canOperate&&!(null==(e=this.box)?void 0:e.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}getFullScenePath(){if(this.scenePath)return a.get(this.appAttributes,[ce.FullPath],this.getFullScenePathFromScenes())}getFullScenePathFromScenes(){const e=a.get(this.appAttributes,["state","SceneIndex"],0),t=((e,t,i)=>{var s;if(e&&t){const a=null==(s=Z(e)[t])?void 0:s[i];if(a)return`${t}/${a.name}`}})(this.manager.room,this.scenePath,e);return t&&this.setFullPath(t),t}setFullPath(e){this.manager.safeUpdateAttributes(["apps",this.id,ce.FullPath],e)}async baseInsertApp(e=!1){var t;const i=this.params;if(!i.kind)throw new Error("[WindowManager]: kind require");const s=await(null==(t=U.appClasses.get(i.kind))?void 0:t()),a=U.registered.get(i.kind);if(!s)throw new Error(`[WindowManager]: app load failed ${i.kind} ${i.src}`);return await this.setupApp(this.id,e,s,i.options,null==a?void 0:a.appOptions),this.context.updateManagerRect(),{appId:this.id,app:s}}focusApp(){this.focusBox(),this.store.setMainViewFocusPath(this.manager.mainView)}get box(){var e;return null==(e=this.boxManager)?void 0:e.getBox(this.id)}focusBox(){var e;null==(e=this.boxManager)||e.focusBox({appId:this.id})}async setupApp(e,t,i,s,a){var r;if(pe("setupApp",e,i,s),!this.boxManager)throw new q;const n=new he(this.manager,this.boxManager,e,this,a);this.appContext=n;try{ut.once(`${e}${p.WindowCreated}`).then((async()=>{var s;let a;t||(a=this.getAppInitState(e),null==(s=this.boxManager)||s.updateBoxState(a)),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(e),this.setViewFocusScenePath(),setTimeout((async()=>{const t=await i.setup(n);this.appResult=t,U.notifyApp(i.kind,"created",{appId:e,result:t}),this.afterSetupApp(a),this.fixMobileSize()}),50)})),null==(r=this.boxManager)||r.createBox({appId:e,app:i,options:s,canOperate:this.manager.canOperate,smartPosition:this.isAddApp})}catch(o){throw console.error(o),new Error(`[WindowManager]: app setup error: ${o.message}`)}}fixMobileSize(){var e,t;const i=null==(e=this.boxManager)?void 0:e.getBox(this.id);i&&(null==(t=this.boxManager)||t.resizeBox({appId:this.id,width:i.intrinsicWidth+.001,height:i.intrinsicHeight+.001,skipUpdate:!0}))}afterSetupApp(e){var t;e&&((null==e?void 0:e.x)&&e.y||null==(t=this.boxManager)||t.setBoxInitState(this.id))}onSeek(e){var t;this.appEmitter.emit("seek",e);const i=this.getAppInitState(this.id);null==(t=this.boxManager)||t.updateBoxState(i)}async onReconnected(){var e;this.appEmitter.emit("reconnected",void 0);const t=this.getAppInitState(this.id);await this.destroy(!0,!1,!0);const i=this.params,s=new Me(i,this.manager,this.id,this.isAddApp);await s.baseInsertApp(!0),null==(e=this.boxManager)||e.updateBoxState(t)}emitAppSceneStateChange(e){this.appEmitter.emit("sceneStateChange",e)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(e){return(t,i)=>{var s,a,r,n;if(this.manager.canOperate)switch(t){case"setBoxSize":null==(s=this.boxManager)||s.resizeBox({appId:e,width:i.width,height:i.height,skipUpdate:!1});break;case"setBoxMinSize":null==(a=this.boxManager)||a.setBoxMinSize({appId:e,minWidth:i.minwidth,minHeight:i.minheight});break;case"setBoxTitle":null==(r=this.boxManager)||r.setBoxTitle({appId:e,title:i.title});break;case y.destroy:if("destroyed"===this.status)return;this.destroy(!0,!1,!0,null==i?void 0:i.error),(null==i?void 0:i.error)&&console.error(null==i?void 0:i.error);break;case"focus":null==(n=this.boxManager)||n.focusBox({appId:this.id}),ut.emit("focus",{appId:this.id})}}}setScenePath(){if(!this.manager.canOperate)return;const e=this.getFullScenePath();this.manager.room&&e&&this.view&&O(this.manager.room,e)}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&k(this.view,e)}async createView(){const e=await this.viewManager.createView(this.id);return this.setViewFocusScenePath(),e}async destroy(e,t,i,s){var a,r,n,o;"destroyed"!==this.status&&(this.status="destroyed",await U.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:s}),this.appEmitter.clearListeners(),ut.emit(`destroy-${this.id}`,{error:s}),e&&(null==(a=this.boxManager)||a.closeBox(this.id,i)),t&&this.store.cleanAppAttributes(this.id),this.appProxies.delete(this.id),this.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),null==(r=this.manager.refresher)||r.remove(this.id),null==(n=this.manager.refresher)||n.remove(this.stateKey),null==(o=this.manager.refresher)||o.remove(`${this.id}-fullPath`))}close(){return this.destroy(!0,!0,!1)}}class we{constructor(e){this.displayer=e,this.views=new Map}createView(e){const t=Ie(this.displayer);return this.views.set(e,t),t}getView(e){return this.views.get(e)}destroyView(e){const t=this.views.get(e);t&&(t.release(),this.views.delete(e))}setViewScenePath(e,t){const i=this.views.get(e);i&&(i.focusScenePath=t)}destroy(){this.views.forEach((e=>{e.release()})),this.views.clear()}}const Ie=e=>{const t=e.views.createView();return Ae(t),t},Ae=e=>{e.setCameraBound({maxContentMode:()=>10,minContentMode:()=>.1})};class xe extends me{constructor(e){super(e),this.started=!1,this.mainViewIsAddListener=!1,this.viewId="mainView",this.sideEffectManager=new h.SideEffectManager,this.cameraReaction=()=>n.reaction((()=>this.mainViewCamera),(e=>{e&&e.id!==this.context.uid&&(this.moveCameraToContian(this.mainViewSize),this.moveCamera(e))}),{fireImmediately:!0}),this.sizeChangeHandler=a.debounce((e=>{e&&(this.moveCameraToContian(e),this.moveCamera(this.mainViewCamera))}),30),this.onCameraUpdatedByDevice=e=>{this.store.setMainViewCamera(__spreadProps(__spreadValues({},e),{id:this.context.uid})),a.isEqual(this.mainViewSize,__spreadProps(__spreadValues({},this.mainView.size),{id:this.context.uid}))||this.setMainViewSize(this.view.size)},this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.setMainViewSize=a.debounce((e=>{this.store.setMainViewSize(__spreadProps(__spreadValues({},e),{id:this.context.uid}))}),50),this.onCameraOrSizeUpdated=()=>{gt.emit("cameraStateChange",this.cameraState)},this.mainView=this.createMainView(),this.moveCameraSizeByAttributes(),ut.once("mainViewMounted").then((()=>{this.addMainViewListener(),setTimeout((()=>{this.start(),this.mainViewCamera&&this.mainViewSize||this.setCameraAndSize()}),200)}));const t=()=>{this.sizeChangeHandler(this.mainViewSize)};this.sideEffectManager.add((()=>(ut.on("playgroundSizeChange",t),()=>ut.off("playgroundSizeChange",t))))}get mainViewCamera(){return this.store.getMainViewCamera()}get mainViewSize(){return this.store.getMainViewSize()}moveCameraSizeByAttributes(){this.moveCameraToContian(this.mainViewSize),this.moveCamera(this.mainViewCamera)}start(){var e;this.started||(this.sizeChangeHandler(this.mainViewSize),this.addCameraListener(),null==(e=this.manager.refresher)||e.add(ce.MainViewCamera,this.cameraReaction),this.started=!0)}setCameraAndSize(){this.store.setMainViewCamera(__spreadProps(__spreadValues({},this.mainView.camera),{id:this.context.uid})),this.store.setMainViewSize(__spreadProps(__spreadValues({},this.mainView.size),{id:this.context.uid}))}get view(){return this.mainView}get cameraState(){return __spreadValues(__spreadValues({},this.view.camera),this.view.size)}createMainView(){const e=Ie(this.manager.displayer),t=this.store.getMainViewScenePath();return t&&k(e,t),e}addMainViewListener(){this.mainViewIsAddListener||this.view.divElement&&(this.view.divElement.addEventListener("click",this.mainViewClickListener),this.view.divElement.addEventListener("touchend",this.mainViewClickListener),this.mainViewIsAddListener=!0)}removeMainViewListener(){this.view.divElement&&(this.view.divElement.removeEventListener("click",this.mainViewClickListener),this.view.divElement.removeEventListener("touchend",this.mainViewClickListener))}async mainViewClickHandler(){this.manager.canOperate&&(this.store.cleanFocus(),this.context.blurFocusBox())}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.on("onCameraUpdated",this.onCameraOrSizeUpdated),this.view.callbacks.on("onSizeUpdated",this.onCameraOrSizeUpdated)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.off("onCameraUpdated",this.onCameraOrSizeUpdated),this.view.callbacks.off("onSizeUpdated",this.onCameraOrSizeUpdated)}moveCameraToContian(e){a.isEmpty(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:n.AnimationMode.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!a.isEmpty(e)){if(a.isEqual(e,this.view.camera))return;const{centerX:t,centerY:i,scale:s}=e,r=s*(this.scale||1);this.view.moveCamera({centerX:t,centerY:i,scale:r,animationMode:n.AnimationMode.Immediately})}}stop(){var e,t;this.removeMainViewListener(),this.removeCameraListener(),null==(e=this.manager.refresher)||e.remove(ce.MainViewCamera),null==(t=this.manager.refresher)||t.remove(ce.MainViewSize),this.started=!1}destroy(){this.stop(),this.sideEffectManager.flushAll()}}class ye{constructor(e){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.store=le,this.isReplay=this.windowManger.isReplay,this.onAppDelete=e=>{const t=Object.keys(e);this.appProxies.forEach(((e,i)=>{t.includes(i)||e.destroy(!0,!1,!0)}))},this.displayerStateListener=e=>{var t,i;const s=e.sceneState;if(s){const e=s.scenePath;this.appProxies.forEach((t=>{t.scenePath&&e.startsWith(t.scenePath)&&(t.emitAppSceneStateChange(s),t.setFullPath(e))}))}e.roomMembers&&(null==(t=this.windowManger.cursorManager)||t.setRoomMembers(e.roomMembers),null==(i=this.windowManger.cursorManager)||i.cleanMemberAttributes(e.roomMembers)),this.appProxies.forEach((t=>{t.appEmitter.emit("roomStateChange",e)})),ut.emit("observerIdChange",this.displayer.observerId)},this.displayerWritableListener=e=>{var t,i;const s=!e,a=void 0===this.windowManger.readonly||!1===this.windowManger.readonly;void 0===this.windowManger.readonly?null==(t=this.boxManager)||t.setReadonly(e):null==(i=this.boxManager)||i.setReadonly(!(s&&a)),this.appProxies.forEach((e=>{e.emitAppIsWritableChange()})),!0===s?(this.mainView.disableCameraTransform=!1,this.room&&!0===this.room.disableSerialization&&(this.room.disableSerialization=!1)):this.mainView.disableCameraTransform=!0},this.updateSceneIndex=()=>{const e=this.store.getMainViewScenePath(),t=Q(e),i=Z(this.displayer)[t];if(i.length){const s=e.replace(t,"").replace("/",""),r=i.findIndex((e=>e.name===s));console.log("updateSceneIndex",t,s,r),a.isInteger(r)&&r>=0&&this.safeSetAttributes({_mainSceneIndex:r})}},this.boxEventListener=(e,t)=>{switch(e){case"move":this.dispatchInternalEvent(p.AppMove,t),this.store.updateAppState(t.appId,A.Position,{x:t.x,y:t.y});break;case"focus":this.windowManger.safeSetAttributes({focus:t.appId});break;case"resize":t.width&&t.height&&(this.dispatchInternalEvent(p.AppResize,t),this.store.updateAppState(t.appId,A.Size,{width:t.width,height:t.height}));break;case"close":{const e=this.appProxies.get(t.appId);e&&e.destroy(!1,!0,t.error);break}case"boxStateChange":this.dispatchInternalEvent(p.AppBoxStateChange,t)}},this.displayer=e.displayer,this.store.setContext({getAttributes:()=>this.attributes,safeSetAttributes:e=>this.safeSetAttributes(e),safeUpdateAttributes:(e,t)=>this.safeUpdateAttributes(e,t)}),this.mainViewProxy=new xe(this),this.viewManager=new we(this.displayer),this.appListeners=new Y(this),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=mt,this.refresher.setRoom(this.room),this.refresher.setContext({emitter:ut}),ut.once("onCreated").then((()=>this.onCreated())),ut.on("onReconnected",(()=>this.onReconnected())),n.isPlayer(this.displayer)&&ut.on("seek",(e=>{this.appProxies.forEach((t=>{t.onSeek(e)})),this.attributesUpdateCallback(this.attributes.apps),this.onAppDelete(this.attributes.apps)}))}async onCreated(){var e,t,i,s,r,o,h,c;if(await this.attributesUpdateCallback(this.attributes.apps),null==(e=this.boxManager)||e.updateManagerRect(),ut.onAny(this.boxEventListener),null==(t=this.refresher)||t.add("apps",(()=>ee((()=>this.attributes.apps),(()=>{this.attributesUpdateCallback(this.attributes.apps)})))),null==(i=this.refresher)||i.add("appsClose",(()=>te(this.attributes.apps,(()=>{this.onAppDelete(this.attributes.apps)})))),null==(s=this.refresher)||s.add("maximized",(()=>n.autorun((()=>{var e;const t=this.attributes.maximized;null==(e=this.boxManager)||e.setMaximized(Boolean(t))})))),null==(r=this.refresher)||r.add("minimized",(()=>n.autorun((()=>{var e,t;const i=this.attributes.minimized;(null==(e=this.boxManager)?void 0:e.minimized)!==i&&(!0===i&&(null==(t=this.boxManager)||t.blurAllBox()),setTimeout((()=>{var e;null==(e=this.boxManager)||e.setMinimized(Boolean(i))}),0))})))),null==(o=this.refresher)||o.add("mainViewIndex",(()=>n.autorun((()=>{const e=a.get(this.attributes,"_mainSceneIndex");void 0!==e&&this._prevSceneIndex!==e&&(gt.emit("mainViewSceneIndexChange",e),this._prevSceneIndex=e)})))),null==(h=this.refresher)||h.add("focusedChange",(()=>n.autorun((()=>{const e=a.get(this.attributes,"focus");this._prevFocused!==e&&(gt.emit("focusedChange",e),this._prevFocused=e)})))),!this.attributes.apps||0===Object.keys(this.attributes.apps).length){const e=this.store.getMainViewScenePath();if(!e)return;this.displayer.state.sceneState.scenePath!==e&&O(this.room,e)}this.displayerWritableListener(!(null==(c=this.room)?void 0:c.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this._prevFocused=this.attributes.focus}async attributesUpdateCallback(e){if(e&&wt.container){const t=Object.keys(e).map((t=>({id:t,createdAt:e[t].createdAt})));for(const{id:i}of a.sortBy(t,"createdAt"))if(!this.appProxies.has(i)&&!this.appStatus.has(i)){const t=e[i];m.default((async()=>{this.appStatus.set(i,b.StartCreate);if(!this.attributes[i])throw new Error("appAttributes is undefined");await this.baseInsertApp({kind:t.kind,options:t.options,isDynamicPPT:t.isDynamicPPT},i,!1),this.focusByAttributes(e)}),{retries:3}).catch((e=>{console.warn("[WindowManager]: Insert App Error",e),this.appStatus.delete(i)}))}}}refresh(){this.attributesUpdateCallback(this.attributes.apps)}setBoxManager(e){this.boxManager=e}resetMaximized(){var e;null==(e=this.boxManager)||e.setMaximized(Boolean(this.store.getMaximized()))}resetMinimized(){var e;null==(e=this.boxManager)||e.setMinimized(Boolean(this.store.getMinimized()))}bindMainView(e,t){const i=this.mainViewProxy.view;i.disableCameraTransform=t,i.divElement=e,i.focusScenePath||this.setMainViewFocusPath(),ut.emit("mainViewMounted")}setMainViewFocusPath(e){const t=e||this.store.getMainViewScenePath();if(t){const e=k(this.mainView,t);return(null==e?void 0:e.focusScenePath)===t}}async addApp(e,t){pe("addApp",e);const{appId:i,needFocus:s}=await this.beforeAddApp(e,t),a=await this.baseInsertApp(e,i,!0,s);return this.afterAddApp(a),null==a?void 0:a.id}async beforeAddApp(e,t){var i,s;const a=await(async e=>{var t,i;const s=await(null==(t=U.appClasses.get(e))?void 0:t());return s&&(null==(i=s.config)?void 0:i.singleton)?e:`${e}-${o.v4().replace("-","").slice(0,8)}`})(e.kind);this.appStatus.set(a,b.StartCreate);const r=null!=(i=e.attributes)?i:{};this.safeUpdateAttributes([a],r),this.store.setupAppAttributes(e,a,t);const n=!(null==(s=this.boxManager)?void 0:s.minimized);return n&&this.store.setAppFocus(a,!0),{appId:a,needFocus:n}}afterAddApp(e){var t,i;if(e&&e.box){const t=e.box;ut.emit("move",{appId:e.id,x:null==t?void 0:t.intrinsicX,y:null==t?void 0:t.intrinsicY}),this.store.updateAppState(e.id,A.ZIndex,t.zIndex)}(null==(t=this.boxManager)?void 0:t.minimized)&&(null==(i=this.boxManager)||i.setMinimized(!1,!1))}async closeApp(e){const t=this.appProxies.get(e);t&&t.destroy(!0,!0,!1)}async baseInsertApp(e,t,i,s){if(this.appProxies.has(t))return void console.warn("[WindowManager]: app duplicate exists and cannot be created again");const a=new Me(e,this,t,i);if(a)return await a.baseInsertApp(s),this.appStatus.delete(t),a;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return n.isRoom(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return n.isRoom(this.displayer)?this.displayer:void 0}get mainView(){return this.mainViewProxy.view}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}async setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===n.ScenePathType.None)throw new Error(`[WindowManager]: ${e} not valid scene`);if(t===n.ScenePathType.Page)await this._setMainViewScenePath(e);else if(t===n.ScenePathType.Dir){const t=R(this.displayer,e);t&&await this._setMainViewScenePath(t)}}}async _setMainViewScenePath(e){this.setMainViewFocusPath(e)&&(this.safeSetAttributes({_mainScenePath:e}),this.store.setMainViewFocusPath(this.mainView),this.updateSceneIndex(),this.dispatchInternalEvent(p.SetMainViewScenePath,{nextScenePath:e}))}async setMainViewSceneIndex(e){if(this.room){if(this.store.getMainViewSceneIndex()===e)return;const t=this.store.getMainViewScenePath();if(t){const i=Q(t),s=R(this.displayer,i,e);if(!s)throw new Error(`[WindowManager]: ${i}: ${e} not valid index`);this.setMainViewFocusPath(s)&&(this.store.setMainViewScenePath(s),this.safeSetAttributes({_mainSceneIndex:e}))}}}getAppInitPath(e){var t;const i=this.store.getAppAttributes(e);if(i)return null==(t=null==i?void 0:i.options)?void 0:t.scenePath}safeDispatchMagixEvent(e,t){this.canOperate&&this.displayer.dispatchMagixEvent(e,t)}focusByAttributes(e){var t;if(e&&Object.keys(e).length===(null==(t=this.boxManager)?void 0:t.boxSize)){const e=this.store.focus;e&&this.boxManager.focusBox({appId:e})}}async onReconnected(){const e=Array.from(this.appProxies.values()).map((e=>e.onReconnected()));await Promise.all(e)}notifyContainerRectUpdate(e){this.appProxies.forEach((t=>{t.appEmitter.emit("containerRectUpdate",e)}))}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent(I,{eventName:e,payload:t})}destroy(){var e,t;this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),ut.offAny(this.boxEventListener),ut.clearListeners(),this.appProxies.size&&this.appProxies.forEach((e=>{e.destroy(!0,!1,!0)})),this.viewManager.destroy(),null==(e=this.boxManager)||e.destroy(),null==(t=this.refresher)||t.destroy(),this.mainViewProxy.destroy(),gt.clearListeners(),this._prevSceneIndex=void 0}}const Ce=window.ResizeObserver||s.ResizeObserver;class be{constructor(e){this.emitter=e}static create(e,t,i,s){const a=new be(s);return a.observePlaygroundSize(e,t,i),a}observePlaygroundSize(e,t,i){this.updateSizer(e.getBoundingClientRect(),t,i),this.containerResizeObserver=new Ce((e=>{var s;const a=null==(s=e[0])?void 0:s.contentRect;a&&(this.updateSizer(a,t,i),this.emitter.emit("playgroundSizeChange",a))})),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},i,s){e&&t&&(t/e>wt.containerSizeRatio?(t=e*wt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/wt.containerSizeRatio,i.classList.toggle("netless-window-manager-sizer-horizontal",!1)),s.style.width=`${e}px`,s.style.height=`${t}px`)}disconnect(){var e;null==(e=this.containerResizeObserver)||e.disconnect()}}class ve{constructor(e,t){this.context=e,this.createTeleBoxManagerConfig=t,this.playgroundSizeChangeListener=()=>{this.updateManagerRect()};const{emitter:i,callbacks:s}=e;this.teleBoxManager=this.setupBoxManager(t),this.teleBoxManager.events.on(r.TELE_BOX_MANAGER_EVENT.State,(e=>{e&&(this.context.callbacks.emit("boxStateChange",e),this.context.emitter.emit("boxStateChange",e))})),this.teleBoxManager.events.on("minimized",(e=>{this.context.safeSetAttributes({minimized:e}),e&&(this.context.cleanFocus(),this.blurAllBox())})),this.teleBoxManager.events.on("maximized",(e=>{this.context.safeSetAttributes({maximized:e})})),this.teleBoxManager.events.on("removed",(e=>{e.forEach((e=>{i.emit("close",{appId:e.id})}))})),this.teleBoxManager.events.on("intrinsic_move",a.debounce((e=>{i.emit("move",{appId:e.id,x:e.intrinsicX,y:e.intrinsicY})}),50)),this.teleBoxManager.events.on("intrinsic_resize",a.debounce((e=>{i.emit("resize",{appId:e.id,width:e.intrinsicWidth,height:e.intrinsicHeight})}),200)),this.teleBoxManager.events.on("focused",(e=>{e&&(this.canOperate?i.emit("focus",{appId:e.id}):this.teleBoxManager.blurBox(e.id))})),this.teleBoxManager.events.on("dark_mode",(e=>{s.emit("darkModeChange",e)})),this.teleBoxManager.events.on("prefers_color_scheme",(e=>{s.emit("prefersColorSchemeChange",e)})),this.teleBoxManager.events.on("z_index",(e=>{this.context.updateAppState(e.id,A.ZIndex,e.zIndex)})),i.on("playgroundSizeChange",this.playgroundSizeChangeListener)}get mainView(){return this.context.getMainView()}get canOperate(){return this.context.canOperate()}get boxState(){return this.teleBoxManager.state}get maximized(){return this.teleBoxManager.maximized}get minimized(){return this.teleBoxManager.minimized}get darkMode(){return this.teleBoxManager.darkMode}get prefersColorScheme(){return this.teleBoxManager.prefersColorScheme}get boxSize(){return this.teleBoxManager.boxes.length}createBox(e){var t,i,s;if(!this.teleBoxManager)return;let{minwidth:a=N,minheight:r=D}=null!=(t=e.app.config)?t:{};const{width:n,height:o}=null!=(i=e.app.config)?i:{},h=(null==(s=e.options)?void 0:s.title)||e.appId,c=this.teleBoxManager.containerRect;a>1&&(a/=c.width),r>1&&(r/=c.height);const d={title:h,minWidth:a,minHeight:r,width:n,height:o,id:e.appId};this.teleBoxManager.create(d,e.smartPosition),this.context.emitter.emit(`${e.appId}${p.WindowCreated}`)}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&t.state===r.TELE_BOX_STATE.Maximized&&this.context.emitter.emit("resize",{appId:e,x:t.x,y:t.y,width:t.intrinsicWidth,height:t.intrinsicHeight})}setupBoxManager(e){const t=wt.wrapper?wt.wrapper:document.body,i=t.getBoundingClientRect(),s={root:t,containerRect:{x:0,y:0,width:i.width,height:i.height},fence:!1,prefersColorScheme:null==e?void 0:e.prefersColorScheme},a=new r.TeleBoxManager(s);this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=a;const n=(null==e?void 0:e.collectorContainer)||wt.wrapper;return n&&this.setCollectorContainer(n),a}setCollectorContainer(e){var t;const i=new r.TeleBoxCollector({styles:null==(t=this.createTeleBoxManagerConfig)?void 0:t.collectorStyles}).mount(e);this.teleBoxManager.setCollector(i)}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e,t=!1){return this.teleBoxManager.remove(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.maxBy(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,zIndex:e.zIndex},!0),setTimeout((()=>{e.focus&&this.teleBoxManager.focusBox(t.id,!0),null!=e.maximized&&this.teleBoxManager.setMaximized(Boolean(e.maximized),!0),null!=e.minimized&&this.teleBoxManager.setMinimized(Boolean(e.minimized),!0)}),50),this.context.callbacks.emit("boxStateChange",this.teleBoxManager.state))}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.context.notifyContainerRectUpdate(this.teleBoxManager.containerRect)}}moveBox({appId:e,x:t,y:i}){this.teleBoxManager.update(e,{x:t,y:i},!0)}focusBox({appId:e},t=!0){this.teleBoxManager.focusBox(e,t)}resizeBox({appId:e,width:t,height:i,skipUpdate:s}){this.teleBoxManager.update(e,{width:t,height:i},s)}setBoxMinSize(e){this.teleBoxManager.update(e.appId,{minWidth:e.minWidth,minHeight:e.minHeight},!0)}setBoxTitle(e){this.teleBoxManager.update(e.appId,{title:e.title},!0)}blurAllBox(){this.teleBoxManager.blurAll()}updateAll(e){this.teleBoxManager.updateAll(e)}setMaximized(e){e!==this.maximized&&this.teleBoxManager.setMaximized(e,!0)}setMinimized(e,t=!0){this.teleBoxManager.setMinimized(e,t)}focusTopBox(){if(this.teleBoxManager.query().length>=1){const e=this.getTopBox();e&&this.focusBox({appId:e.id},!1)}}setReadonly(e){this.teleBoxManager.setReadonly(e)}setPrefersColorScheme(e){this.teleBoxManager.setPrefersColorScheme(e)}setZIndex(e,t,i=!0){this.teleBoxManager.update(e,{zIndex:t},i)}destroy(){ut.off("playgroundSizeChange",this.playgroundSizeChangeListener),this.teleBoxManager.destroy()}}function Se(){}function fe(e){return e()}function Ne(){return Object.create(null)}function De(e){e.forEach(fe)}function je(e){return"function"==typeof e}function Te(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}let Ee,Le;function Pe(e,t){return Ee||(Ee=document.createElement("a")),Ee.href=t,e===Ee.href}function ze(e,t){e.appendChild(t)}function Be(e,t,i){e.insertBefore(t,i||null)}function Ve(e){e.parentNode.removeChild(e)}function Ue(e){return document.createElement(e)}function ke(e){return document.createTextNode(e)}function Oe(){return ke(" ")}function Re(e,t,i){null==i?e.removeAttribute(t):e.getAttribute(t)!==i&&e.setAttribute(t,i)}function Ze(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function Qe(e,t,i,s){e.style.setProperty(t,i,s?"important":"")}function Ge(e){Le=e}const We=[],Ye=[],Fe=[],_e=[],He=Promise.resolve();let Xe=!1;function Je(e){Fe.push(e)}let Ke=!1;const qe=new Set;function $e(){if(!Ke){Ke=!0;do{for(let e=0;e<We.length;e+=1){const t=We[e];Ge(t),et(t.$$)}for(Ge(null),We.length=0;Ye.length;)Ye.pop()();for(let e=0;e<Fe.length;e+=1){const t=Fe[e];qe.has(t)||(qe.add(t),t())}Fe.length=0}while(We.length);for(;_e.length;)_e.pop()();Xe=!1,Ke=!1,qe.clear()}}function et(e){if(null!==e.fragment){e.update(),De(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(Je)}}const tt=new Set;function it(e,t){-1===e.$$.dirty[0]&&(We.push(e),Xe||(Xe=!0,He.then($e)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function st(e,t,i,s,a,r,n,o=[-1]){const h=Le;Ge(e);const c=e.$$={fragment:null,ctx:null,props:r,update:Se,not_equal:a,bound:Ne(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(h?h.$$.context:t.context||[]),callbacks:Ne(),dirty:o,skip_bound:!1,root:t.target||h.$$.root};n&&n(c.root);let d=!1;if(c.ctx=i?i(e,t.props||{},((t,i,...s)=>{const r=s.length?s[0]:i;return c.ctx&&a(c.ctx[t],c.ctx[t]=r)&&(!c.skip_bound&&c.bound[t]&&c.bound[t](r),d&&it(e,t)),i})):[],c.update(),d=!0,De(c.before_update),c.fragment=!!s&&s(c.ctx),t.target){if(t.hydrate){const e=(u=t.target,Array.from(u.childNodes));c.fragment&&c.fragment.l(e),e.forEach(Ve)}else c.fragment&&c.fragment.c();t.intro&&((l=e.$$.fragment)&&l.i&&(tt.delete(l),l.i(p))),function(e,t,i,s){const{fragment:a,on_mount:r,on_destroy:n,after_update:o}=e.$$;a&&a.m(t,i),s||Je((()=>{const t=r.map(fe).filter(je);n?n.push(...t):De(t),e.$$.on_mount=[]})),o.forEach(Je)}(e,t.target,t.anchor,t.customElement),$e()}var l,p,u;Ge(h)}function at(e){let t,i,s;return{c(){t=Ue("img"),Re(t,"class","netless-window-manager-cursor-selector-avatar"),Re(t,"style",i=e[15]()),Pe(t.src,s=e[7])||Re(t,"src",s),Re(t,"alt","avatar")},m(e,i){Be(e,t,i)},p(e,i){128&i&&!Pe(t.src,s=e[7])&&Re(t,"src",s)},d(e){e&&Ve(t)}}}function rt(e){let t,i;return{c(){t=Ue("span"),i=ke(e[1]),Re(t,"class","netless-window-manager-cursor-tag-name"),Qe(t,"background-color",e[10])},m(e,s){Be(e,t,s),ze(t,i)},p(e,s){2&s&&Ze(i,e[1]),1024&s&&Qe(t,"background-color",e[10])},d(e){e&&Ve(t)}}}function nt(e){let t,i,s,a,r,n,o,h,c,d,l,p,u=e[13]&&at(e),g=e[14]&&rt(e);return{c(){t=Ue("div"),i=Ue("div"),s=Ue("div"),u&&u.c(),a=Oe(),r=Ue("span"),n=ke(e[0]),o=Oe(),g&&g.c(),h=Oe(),c=Ue("div"),d=Ue("img"),Qe(r,"overflow","hidden"),Qe(r,"white-space","nowrap"),Qe(r,"text-overflow","ellipsis"),Qe(r,"max-width","80px"),Re(s,"class",e[8]),Qe(s,"background-color",e[2]),Qe(s,"color",e[9]),Qe(s,"opacity",e[11]),Re(i,"class","netless-window-manager-cursor-name"),Re(d,"class",l="netless-window-manager-cursor-"+e[3]+"-image"),Pe(d.src,p=e[6])||Re(d,"src",p),Re(d,"alt",e[3]),Re(c,"class","cursor-image-wrapper"),Re(t,"class","netless-window-manager-cursor-mid"),Qe(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),Qe(t,"display",e[12])},m(e,l){Be(e,t,l),ze(t,i),ze(i,s),u&&u.m(s,null),ze(s,a),ze(s,r),ze(r,n),ze(s,o),g&&g.m(s,null),ze(t,h),ze(t,c),ze(c,d)},p(e,[i]){e[13]?u?u.p(e,i):(u=at(e),u.c(),u.m(s,a)):u&&(u.d(1),u=null),1&i&&Ze(n,e[0]),e[14]?g?g.p(e,i):(g=rt(e),g.c(),g.m(s,null)):g&&(g.d(1),g=null),256&i&&Re(s,"class",e[8]),4&i&&Qe(s,"background-color",e[2]),512&i&&Qe(s,"color",e[9]),2048&i&&Qe(s,"opacity",e[11]),8&i&&l!==(l="netless-window-manager-cursor-"+e[3]+"-image")&&Re(d,"class",l),64&i&&!Pe(d.src,p=e[6])&&Re(d,"src",p),8&i&&Re(d,"alt",e[3]),48&i&&Qe(t,"transform","translateX("+e[4]+"px) translateY("+e[5]+"px)"),4096&i&&Qe(t,"display",e[12])},i:Se,o:Se,d(e){e&&Ve(t),u&&u.d(),g&&g.d()}}}function ot(e,t,i){let s,r,n,o,{cursorName:h}=t,{tagName:c}=t,{backgroundColor:d}=t,{appliance:l}=t,{x:p}=t,{y:u}=t,{src:g}=t,{visible:m}=t,{avatar:M}=t,{theme:w}=t,{color:I}=t,{cursorTagBackgroundColor:A}=t,{opacity:x}=t;return e.$$set=e=>{"cursorName"in e&&i(0,h=e.cursorName),"tagName"in e&&i(1,c=e.tagName),"backgroundColor"in e&&i(2,d=e.backgroundColor),"appliance"in e&&i(3,l=e.appliance),"x"in e&&i(4,p=e.x),"y"in e&&i(5,u=e.y),"src"in e&&i(6,g=e.src),"visible"in e&&i(16,m=e.visible),"avatar"in e&&i(7,M=e.avatar),"theme"in e&&i(8,w=e.theme),"color"in e&&i(9,I=e.color),"cursorTagBackgroundColor"in e&&i(10,A=e.cursorTagBackgroundColor),"opacity"in e&&i(11,x=e.opacity)},e.$$.update=()=>{1&e.$$.dirty&&(s=!a.isEmpty(h)),2&e.$$.dirty&&i(14,r=!a.isEmpty(c)),128&e.$$.dirty&&i(13,n=!a.isEmpty(M)),65536&e.$$.dirty&&i(12,o=m?"initial":"none")},[h,c,d,l,p,u,g,M,w,I,A,x,o,n,r,()=>Object.entries({width:(s?19:28)+"px",height:(s?19:28)+"px",position:s?"initial":"absolute","border-color":s?"white":d,"margin-right":(s?4:0)+"px"}).map((([e,t])=>`${e}: ${t}`)).join(";"),m]}class ht extends class{$destroy(){!function(e,t){const i=e.$$;null!==i.fragment&&(De(i.on_destroy),i.fragment&&i.fragment.d(t),i.on_destroy=i.fragment=null,i.ctx=[])}(this,1),this.$destroy=Se}$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(),st(this,e,ot,nt,Te,{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 ct={[n.ApplianceNames.pencil]:"data:image/png;base64,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",[n.ApplianceNames.selector]:"data:image/png;base64,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",[n.ApplianceNames.eraser]:"data:image/png;base64,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",[n.ApplianceNames.shape]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",[n.ApplianceNames.text]:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="};class dt extends me{constructor(e,t,i,s,a,r){super(e),this.cursors=i,this.memberId=s,this.cursorManager=a,this.wrapper=r,this.onCursorChange=(e,t)=>{var i;if("main"===e.type){const t=this.cursorManager.wrapperRect;this.component&&t&&(this.autoHidden(),this.moveCursor(e,t,this.manager.mainView))}else{const t=this.cursorManager.focusView,s=null==(i=null==t?void 0:t.divElement)?void 0:i.getBoundingClientRect(),a=null==t?void 0:t.camera;t&&s&&a&&this.component&&(this.autoHidden(),this.moveCursor(e,s,t))}t&&t===v.Leave&&this.hide()},this.setMember(),this.createCursor(),t(this.memberId,this.onCursorChange),this.autoHidden()}moveCursor(e,t,i){var s,a;const{x:r,y:n,type:o}=e,h=null==i?void 0:i.screen.convertPointToScreen(r,n);if(h){let e=h.x-2,i=h.y-18;if("app"===o){const s=this.cursorManager.wrapperRect;s&&(e=e+t.x-s.x,i=i+t.y-s.y)}h.x<0||h.x>t.width||h.y<0||h.y>t.height?null==(s=this.component)||s.$set({visible:!1,x:e,y:i}):null==(a=this.component)||a.$set({visible:!0,x:e,y:i})}}get memberApplianceName(){var e,t;return null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.currentApplianceName}get memberColor(){var e,t;return`rgb(${null==(t=null==(e=this.member)?void 0:e.memberState)?void 0:t.strokeColor.join(",")})`}get payload(){var e;return null==(e=this.member)?void 0:e.payload}get memberCursorName(){var e,t;return(null==(e=this.payload)?void 0:e.nickName)||(null==(t=this.payload)?void 0:t.cursorName)||this.memberId}get memberTheme(){var e;return(null==(e=this.payload)?void 0:e.theme)?"netless-window-manager-cursor-inner-mellow":"netless-window-manager-cursor-inner"}get memberCursorTextColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTextColor)||"#FFFFFF"}get memberCursorTagBackgroundColor(){var e;return(null==(e=this.payload)?void 0:e.cursorTagBackgroundColor)||this.memberColor}get memberAvatar(){var e;return null==(e=this.payload)?void 0:e.avatar}get memberOpacity(){return this.memberCursorName||this.memberAvatar?1:0}get cursorState(){return a.get(this.cursors,[this.memberId,ce.CursorState])}get cursorPosition(){return a.get(this.cursors,[this.memberId,ce.Position])}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout((()=>{this.hide(),this.store.updateCursorState(this.memberId,v.Leave)}),1e4)}async createCursor(){this.member&&this.wrapper&&(this.component=new ht({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 ct[this.memberApplianceName||n.ApplianceNames.shape]||ct[n.ApplianceNames.shape]}}setMember(){this.member=this.context.findMemberByUid(this.memberId),this.updateComponent()}updateComponent(){var e;null==(e=this.component)||e.$set(a.omit(this.initProps(),["x","y"]))}destroy(){var e;this.component&&this.component.$destroy(),null==(e=this.manager.refresher)||e.remove(this.memberId),this.cursorManager.cursorInstances.delete(this.memberId)}hide(){this.component&&this.component.$set({visible:!1})}}class lt extends me{constructor(e){var t;super(e),this.appManager=e,this.cursorInstances=new Map,this.sideEffectManager=new h.SideEffectManager,this.getUids=e=>a.compact(a.uniq(null==e?void 0:e.map((e=>{var t;return null==(t=e.payload)?void 0:t.uid})))),this.handleRoomMembersChange=a.debounce((e=>{const t=this.getUids(this.roomMembers),i=Object.keys(this.cursors);(null==t?void 0:t.length)&&i.map((i=>{if(t.includes(i)&&!this.cursorInstances.has(i)){if(i===this.context.uid)return;const t=new dt(this.appManager,this.addCursorChangeListener,this.cursors,i,this,e);this.cursorInstances.set(i,t)}}))}),100),this.mouseMoveListener=a.debounce((e=>{this.updateCursor(this.getType(e),e.clientX,e.clientY)}),5),this.getPoint=(e,t,i)=>{var s;const a=null==(s=null==e?void 0:e.divElement)?void 0:s.getBoundingClientRect();if(a){return null==e?void 0:e.convertToPointInWorld({x:t-a.x,y:i-a.y})}},this.getType=e=>{var t;const i=e.target,s=this.appManager.focusApp;switch(i.parentElement){case this.mainViewElement:return{type:"main"};case null==(t=null==s?void 0:s.view)?void 0:t.divElement:return{type:"app"};default:return{type:"main"}}},this.mouseLeaveListener=()=>{this.hideCursor(this.context.uid),this.store.updateCursorState(this.context.uid,v.Leave)},this.addCursorChangeListener=(e,t)=>{var i;null==(i=this.manager.refresher)||i.add(e,(()=>n.autorun((()=>{const i=a.get(this.cursors,[e,ce.Position]),s=a.get(this.cursors,[e,ce.CursorState]);i&&t(i,s)}))))},this.roomMembers=null==(t=this.appManager.room)?void 0:t.state.roomMembers;const i=wt.wrapper;i&&this.setupWrapper(i),ut.on("onReconnected",(()=>{this.onReconnect()}))}setupWrapper(e){var t;(null==(t=this.manager.refresher)?void 0:t.hasReactor("cursors"))&&this.destroy(),this.sideEffectManager.add((()=>(e.addEventListener("pointerenter",this.mouseMoveListener),e.addEventListener("pointermove",this.mouseMoveListener),e.addEventListener("pointerleave",this.mouseLeaveListener),()=>{e.removeEventListener("pointerenter",this.mouseMoveListener),e.removeEventListener("pointermove",this.mouseMoveListener),e.removeEventListener("pointerleave",this.mouseLeaveListener)}))),this.initCursorAttributes(),this.wrapperRect=e.getBoundingClientRect(),this.startReaction(e)}setMainViewDivElement(e){this.mainViewElement=e}startReaction(e){var t;null==(t=this.manager.refresher)||t.add("cursors",(()=>ie(this.cursors,(()=>{this.handleRoomMembersChange(e)}))))}get cursors(){var e;return null==(e=this.manager.attributes)?void 0:e[ce.Cursors]}get boxState(){return this.store.getBoxState()}get focusView(){var e;return null==(e=this.appManager.focusApp)?void 0:e.view}updateCursor(e,t,i){if(this.wrapperRect&&this.manager.canOperate){const s="main"===e.type?this.appManager.mainView:this.focusView,a=this.getPoint(s,t,i);a&&(this.setNormalCursorState(),this.store.updateCursor(this.context.uid,__spreadValues({x:a.x,y:a.y},e)))}}initCursorAttributes(){this.store.updateCursor(this.context.uid,{x:0,y:0,type:"main"}),this.store.updateCursorState(this.context.uid,v.Leave)}setNormalCursorState(){this.store.getCursorState(this.context.uid)!==v.Normal&&this.store.updateCursorState(this.context.uid,v.Normal)}updateContainerRect(){var e,t;this.containerRect=null==(e=wt.container)?void 0:e.getBoundingClientRect(),this.wrapperRect=null==(t=wt.wrapper)?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach((e=>{e.setMember()})),wt.wrapper&&this.handleRoomMembersChange(wt.wrapper)}deleteCursor(e){this.store.cleanCursor(e);const t=this.cursorInstances.get(e);t&&t.destroy()}hideCursor(e){const t=this.cursorInstances.get(e);t&&t.hide()}cleanMemberAttributes(e){const t=this.getUids(e),i=[];Object.keys(this.cursors).map((e=>{-1===t.findIndex((t=>t===e))&&i.push(e)})),i.forEach((e=>{this.deleteCursor(e)}))}onReconnect(){var e;this.cursorInstances.size&&(this.cursorInstances.forEach((e=>e.destroy())),this.cursorInstances.clear()),this.roomMembers=null==(e=this.appManager.room)?void 0:e.state.roomMembers,wt.wrapper&&this.handleRoomMembersChange(wt.wrapper)}destroy(){var e;this.sideEffectManager.flushAll(),this.cursorInstances.size&&(this.cursorInstances.forEach((e=>{e.destroy()})),this.cursorInstances.clear()),null==(e=this.manager.refresher)||e.remove("cursors")}}const pt={DocsViewer:M.default.kind,MediaPlayer:w.default.kind};const ut=new g.default,gt=new g.default,mt=new class{constructor(e){this.ctx=e,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=e=>{e===n.RoomPhase.Connected&&this.phase===n.RoomPhase.Reconnecting&&this.onReconnected(),this.phase=e},this.onReconnected=a.debounce((()=>{pe("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach(((e,t)=>{a.isFunction(e)&&this.disposers.set(t,e())})),this.ctx.emitter.emit("onReconnected",void 0)}),3e3)}setRoom(e){this.room=e,this.phase=null==e?void 0:e.phase,null==e||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),null==e||e.callbacks.on("onPhaseChanged",this.onPhaseChanged)}setContext(e){this.ctx=e}releaseDisposers(){this.disposers.forEach((e=>{a.isFunction(e)&&e()})),this.disposers.clear()}add(e,t){a.isFunction(t)&&(this.reactors.set(e,t),this.disposers.set(e,t()))}remove(e){this.reactors.has(e)&&this.reactors.delete(e);const t=this.disposers.get(e);t&&(a.isFunction(t)&&t(),this.disposers.delete(e))}hasReactor(e){return this.reactors.has(e)}destroy(){var e;null==(e=this.room)||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),this.releaseDisposers()}}({emitter:ut}),Mt=class extends n.InvisiblePlugin{constructor(e){super(e),this.version="0.4.0-canary.14",this.emitter=gt,this.viewMode=n.ViewMode.Broadcaster,this.isReplay=n.isPlayer(this.displayer),Mt.displayer=e.displayer}static async mount(e){const t=e.room;Mt.container=e.container;const i=e.containerSizeRatio,s=e.debug,a=e.cursor;if(Mt.params=e,this.checkVersion(),n.isRoom(t)){if(t.phase!==n.RoomPhase.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");t.phase===n.RoomPhase.Connected&&t.isWritable&&(t.disableSerialization=!1)}if(Mt.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");let r=await this.initManager(t);if(this.debug=Boolean(s),pe("Already insert room",r),n.isRoom(this.displayer)){if(!r)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await m.default((async e=>{if(r=await this.initManager(t),!r)throw pe(`manager is empty. retrying ${e}`),new Error}),{retries:10});i&&(Mt.containerSizeRatio=i),await r.ensureAttributes(),r.appManager=new ye(r),a&&(r.cursorManager=new lt(r.appManager)),e.container&&r.bindContainer(e.container),((e,t)=>{if(n.isPlayer(e)){const t=e,i=t.seekToProgressTime;async function s(e){const s=await i.call(t,e);return"success"===s&&ut.emit("seek",e),s}t.seekToProgressTime=s}else{if(Object.getOwnPropertyDescriptor(e,"disableCameraTransform"))return;Object.defineProperty(e,"disableCameraTransform",{get:()=>t.mainView.disableCameraTransform,set(e){t.mainView.disableCameraTransform=e}}),Object.defineProperty(e,"canUndoSteps",{get:()=>t.mainView.canUndoSteps}),Object.defineProperty(e,"canRedoSteps",{get:()=>t.mainView.canRedoSteps}),e.moveCamera=e=>t.mainView.moveCamera(e),e.moveCameraToContain=(...e)=>t.moveCameraToContain(...e),e.convertToPointInWorld=(...e)=>t.mainView.convertToPointInWorld(...e),e.setCameraBound=(...e)=>t.mainView.setCameraBound(...e),e.scenePreview=(...e)=>t.mainView.scenePreview(...e),e.fillSceneSnapshot=(...e)=>t.mainView.fillSceneSnapshot(...e),e.generateScreenshot=(...e)=>t.mainView.generateScreenshot(...e),e.setMemberState=(...e)=>t.mainView.setMemberState(...e),e.redo=()=>t.mainView.redo(),e.undo=()=>t.mainView.undo(),e.cleanCurrentScene=()=>t.mainView.cleanCurrentScene()}})(t,r),ut.emit("onCreated"),Mt.isCreated=!0;try{await L()}catch(o){console.warn("[WindowManager]: indexedDB open failed"),console.log(o)}return r}static async initManager(e){let t=e.getInvisiblePlugin(Mt.kind);if(!t&&n.isRoom(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(Mt,{}),t.ensureAttributes(),await W(500),await e.setWritable(!1)}else t=await e.createInvisiblePlugin(Mt,{});return t}static initContainer(e,t,i,s){Mt.container||(Mt.container=t);const{playground:a,wrapper:r,sizer:n,mainViewElement:o}=(e=>{const t=document.createElement("div");t.className="netless-window-manager-playground";const i=document.createElement("div");i.className="netless-window-manager-sizer";const s=document.createElement("div");s.className="netless-window-manager-wrapper";const a=document.createElement("div");return a.className="netless-window-manager-main-view",t.appendChild(i),i.appendChild(s),s.appendChild(a),e.appendChild(t),wt.wrapper=s,{playground:t,wrapper:s,sizer:i,mainViewElement:a}})(t);if(Mt.playground=a,i&&n.classList.add("netless-window-manager-chess-sizer"),s){const e=document.createElement("style");e.textContent=s,a.appendChild(e)}return e.containerResizeObserver=be.create(a,n,r,ut),Mt.wrapper=r,o}bindContainer(e){var t,i,s,a,r,n,o,h,c,d;if(Mt.isCreated&&Mt.container)Mt.container.firstChild&&e.appendChild(Mt.container.firstChild);else if(Mt.params){const s=Mt.params,a=Mt.initContainer(this,e,s.chessboard,s.overwriteStyles),r=(o=this,h=gt,c=ut,d={collectorContainer:s.collectorContainer,collectorStyles:s.collectorStyles,prefersColorScheme:s.prefersColorScheme},new ve({safeSetAttributes:e=>o.safeSetAttributes(e),getMainView:()=>o.mainView,updateAppState:(...e)=>{var t;return null==(t=o.appManager)?void 0:t.store.updateAppState(...e)},canOperate:()=>o.canOperate,notifyContainerRectUpdate:e=>{var t;return null==(t=o.appManager)?void 0:t.notifyContainerRectUpdate(e)},cleanFocus:()=>{var e;return null==(e=o.appManager)?void 0:e.store.cleanFocus()},callbacks:h,emitter:c},d));this.boxManager=r,null==(t=this.appManager)||t.setBoxManager(r),this.bindMainView(a,s.disableCameraTransform),Mt.wrapper&&(null==(i=this.cursorManager)||i.setupWrapper(Mt.wrapper))}null==(s=this.boxManager)||s.updateManagerRect(),null==(a=this.appManager)||a.refresh(),null==(r=this.appManager)||r.resetMaximized(),null==(n=this.appManager)||n.resetMinimized(),Mt.container=e}bindCollectorContainer(e){Mt.isCreated&&this.boxManager?this.boxManager.setCollectorContainer(e):Mt.params&&(Mt.params.collectorContainer=e)}static register(e){return U.register(e)}async addApp(e){var t,i,s,a;if(this.appManager){if(!e.kind||"string"!=typeof e.kind)throw new X;const r=await(null==(t=U.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 F;const n=this.setupScenePath(e,this.appManager);if(void 0===n)return;(null==(s=null==e?void 0:e.options)?void 0:s.scenePath)&&(e.options.scenePath=(a=e.options.scenePath).endsWith("/")?a.slice(0,-1):a);return await this.appManager.addApp(e,Boolean(n))}throw new _}setupScenePath(e,t){var i,s,a;let r=!1;if(e.options){const{scenePath:n,scenes:o}=e.options;if(n){if(!(e=>e.startsWith("/"))(n))throw new K;const e=Object.keys(this.apps||{});for(const i of e){const e=t.store.getAppScenePath(i);if(e&&e===n)return void console.warn(`[WindowManager]: ScenePath ${n} Already opened`)}}n&&o&&o.length>0&&(this.isDynamicPPT(o)?(r=!0,this.displayer.entireScenes()[n]||null==(i=this.room)||i.putScenes(n,o)):this.displayer.entireScenes()[n]||null==(s=this.room)||s.putScenes(n,[{name:o[0].name}])),n&&void 0===o&&(null==(a=this.room)||a.putScenes(n,[{}]))}return r}async setMainViewScenePath(e){this.appManager&&await this.appManager.setMainViewScenePath(e)}async setMainViewSceneIndex(e){this.appManager&&await this.appManager.setMainViewSceneIndex(e)}getMainViewScenePath(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewScenePath()}getMainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewSceneIndex()}setReadonly(e){var t;this.readonly=e,null==(t=this.boxManager)||t.setReadonly(e)}switchMainViewToWriter(){var e;return null==(e=this.appManager)?void 0:e.mainViewProxy.mainViewClickHandler()}onAppDestroy(e,t){((e,t)=>{ut.once(e).then(t)})(`destroy-${e}`,t)}setViewMode(e){var t,i,s;this.canOperate&&(e===n.ViewMode.Broadcaster&&(null==(t=this.appManager)||t.mainViewProxy.setCameraAndSize(),null==(i=this.appManager)||i.mainViewProxy.start()),e===n.ViewMode.Freedom&&(null==(s=this.appManager)||s.mainViewProxy.stop()),this.viewMode=e)}get mainView(){if(this.appManager)return this.appManager.mainViewProxy.view;throw new _}get camera(){if(this.appManager)return this.appManager.mainViewProxy.view.camera;throw new _}get cameraState(){if(this.appManager)return this.appManager.mainViewProxy.cameraState;throw new _}get apps(){var e;return null==(e=this.appManager)?void 0:e.store.apps()}get boxState(){var e;if(this.appManager)return null==(e=this.appManager.boxManager)?void 0:e.boxState;throw new _}get darkMode(){var e,t;return Boolean(null==(t=null==(e=this.appManager)?void 0:e.boxManager)?void 0:t.darkMode)}get prefersColorScheme(){var e;if(this.appManager)return null==(e=this.appManager.boxManager)?void 0:e.prefersColorScheme;throw new _}get focused(){return this.attributes.focus}get mainViewSceneIndex(){var e;return null==(e=this.appManager)?void 0:e.store.getMainViewSceneIndex()}get mainViewSceneDir(){var e;const t=null==(e=this.appManager)?void 0:e.store.getMainViewScenePath();if(t)return Q(t);throw new Error("[WindowManager]: mainViewSceneDir not found")}queryAll(){var e;return Array.from((null==(e=this.appManager)?void 0:e.appProxies.values())||[])}queryOne(e){var t;return null==(t=this.appManager)?void 0:t.appProxies.get(e)}async closeApp(e){var t;return null==(t=this.appManager)?void 0:t.closeApp(e)}moveCamera(e){this.mainView.moveCamera(e)}moveCameraToContain(e){var t;this.mainView.moveCameraToContain(e),null==(t=this.appManager)||t.dispatchInternalEvent(p.MoveCameraToContain,e),setTimeout((()=>{var e;null==(e=this.appManager)||e.mainViewProxy.setCameraAndSize()}),1e3)}convertToPointInWorld(e){return this.mainView.convertToPointInWorld(e)}setCameraBound(e){this.mainView.setCameraBound(e)}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var e,t,i,s;null==(e=this.containerResizeObserver)||e.disconnect(),null==(t=this.appManager)||t.destroy(),null==(i=this.cursorManager)||i.destroy(),Mt.container=void 0,Mt.wrapper=void 0,Mt.isCreated=!1,Mt.playground&&(null==(s=Mt.playground.parentNode)||s.removeChild(Mt.playground)),Mt.params=void 0,pe("Destroyed")}bindMainView(e,t){var i;this.appManager&&(this.appManager.bindMainView(e,Boolean(t)),null==(i=this.cursorManager)||i.setMainViewDivElement(e))}get canOperate(){return!!n.isRoom(this.displayer)&&(this.displayer.isWritable&&this.displayer.phase===n.RoomPhase.Connected)}get room(){return this.displayer}safeSetAttributes(e){this.canOperate&&this.setAttributes(e)}safeUpdateAttributes(e,t){this.canOperate&&this.updateAttributes(e,t)}setPrefersColorScheme(e){var t,i;null==(i=null==(t=this.appManager)?void 0:t.boxManager)||i.setPrefersColorScheme(e)}isDynamicPPT(e){var t,i;const s=null==(i=null==(t=e[0])?void 0:t.ppt)?void 0:i.src;return null==s?void 0:s.startsWith("pptx://")}static checkVersion(){if(G(n.WhiteVersion)<G(f))throw new H(f)}async ensureAttributes(){if(a.isNull(this.attributes)&&await W(50),a.isObject(this.attributes)){this.attributes[ce.Apps]||this.safeSetAttributes({[ce.Apps]:{}}),this.attributes[ce.Cursors]||this.safeSetAttributes({[ce.Cursors]:{}});const e=this.displayer.state.sceneState;this.attributes._mainScenePath||this.safeSetAttributes({_mainScenePath:e.scenePath}),this.attributes._mainSceneIndex||this.safeSetAttributes({_mainSceneIndex:e.index})}}};let wt=Mt;wt.kind="WindowManager",wt.debug=!1,wt.containerSizeRatio=9/16,wt.isCreated=!1,wt.debug&&d.setOptions({verbose:!0}),wt.register({kind:M.default.kind,src:M.default}),wt.register({kind:w.default.kind,src:w.default}),e.BuiltinApps=pt,e.WindowManager=wt,e.callbacks=gt,e.emitter=ut,e.reconnectRefresher=mt,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));
1
+ var Ci=Object.defineProperty,xi=Object.defineProperties;var yi=Object.getOwnPropertyDescriptors;var Xe=Object.getOwnPropertySymbols;var Si=Object.prototype.hasOwnProperty,bi=Object.prototype.propertyIsEnumerable;var Je=(I,b,v)=>b in I?Ci(I,b,{enumerable:!0,configurable:!0,writable:!0,value:v}):I[b]=v,T=(I,b)=>{for(var v in b||(b={}))Si.call(b,v)&&Je(I,v,b[v]);if(Xe)for(var v of Xe(b))bi.call(b,v)&&Je(I,v,b[v]);return I},z=(I,b)=>xi(I,yi(b));(function(I,b){typeof exports=="object"&&typeof module!="undefined"?b(exports,require("emittery"),require("p-retry"),require("@juggle/resize-observer"),require("lodash"),require("@netless/telebox-insider"),require("white-web-sdk"),require("uuid"),require("side-effect-manager"),require("@netless/app-docs-viewer"),require("@netless/app-media-player")):typeof define=="function"&&define.amd?define(["exports","emittery","p-retry","@juggle/resize-observer","lodash","@netless/telebox-insider","white-web-sdk","uuid","side-effect-manager","@netless/app-docs-viewer","@netless/app-media-player"],b):(I=typeof globalThis!="undefined"?globalThis:I||self,b(I.WindowManager={},I.Emittery,I.pRetry,I.resizeObserver,I.lodash,I.teleboxInsider,I.whiteWebSdk,I.uuid,I.sideEffectManager,I.AppDocsViewer,I.AppMediaPlayer))})(this,function(I,b,v,Ke,u,W,d,qe,H,$e,xe){"use strict";function _(i){return i&&typeof i=="object"&&"default"in i?i:{default:i}}var X=_(b),ye=_(v),re=_($e),ae=_(xe),j;(function(i){i.AppMove="AppMove",i.AppFocus="AppFocus",i.AppResize="AppResize",i.AppBoxStateChange="AppBoxStateChange",i.GetAttributes="GetAttributes",i.UpdateWindowManagerWrapper="UpdateWindowManagerWrapper",i.InitReplay="InitReplay",i.WindowCreated="WindowCreated",i.SetMainViewScenePath="SetMainViewScenePath",i.SetMainViewSceneIndex="SetMainViewSceneIndex",i.SwitchViewsToFreedom="SwitchViewsToFreedom",i.MoveCameraToContain="MoveCameraToContain"})(j||(j={}));const oe="__WindowManger";var E;(function(i){i.Size="size",i.Position="position",i.SceneIndex="SceneIndex",i.ZIndex="zIndex"})(E||(E={}));var ce;(function(i){i.setBoxSize="setBoxSize",i.setBoxMinSize="setBoxMinSize",i.destroy="destroy"})(ce||(ce={}));var J;(function(i){i.StartCreate="StartCreate"})(J||(J={}));var V;(function(i){i.Leave="leave",i.Normal="normal"})(V||(V={}));const Se="2.16.0",et=340/720,tt=340/720,it=9/16,st="__WindowManagerAppCache";let Q,be;const nt=async()=>{Q=await ot()},rt=(i,e)=>{if(!!Q)return ht(Q,{kind:i,sourceCode:e})},at=async i=>Q?await ct(Q,i):null;function ot(){return new Promise((i,e)=>{const t=indexedDB.open(st,2);t.onerror=s=>{e(s)},t.onupgradeneeded=s=>{const n=s.target.result;n.objectStoreNames.contains("apps")||(be=n.createObjectStore("apps",{keyPath:"kind"}),be.createIndex("kind","kind",{unique:!0}))},t.onsuccess=()=>{const s=t.result;i(s)}})}function ct(i,e){return new Promise((t,s)=>{const r=i.transaction(["apps"]).objectStore("apps").index("kind").get(e);r.onerror=a=>s(a),r.onsuccess=()=>{r.result?t(r.result):t(null)}})}function ht(i,e){return new Promise((t,s)=>{const n=i.transaction(["apps"],"readwrite").objectStore("apps").add(e);n.onsuccess=()=>t(),n.onerror=()=>s()})}const ut="NetlessApp",gt=1e4,dt=async i=>{const e=await at(i);if(e)return e.sourceCode;{const s=await(await lt(i,{timeout:gt})).text();return await rt(i,s),s}},Ne=(i,e)=>{let t=Function(i+`;return ${e}`)();return typeof t=="undefined"&&(t=window[e]),t},pt=async(i,e,t)=>{const s=t||ut+e,n=await dt(i);try{return Ne(n,s)}catch(r){if(r.message.includes("Can only have one anonymous define call per script file")){const a=window.define;return typeof a=="function"&&a.amd&&delete a.amd,Ne(n,s)}}};async function lt(i,e){const{timeout:t=1e4}=e,s=new AbortController,n=setTimeout(()=>s.abort(),t),r=await fetch(i,z(T({},e),{signal:s.signal,headers:{"content-type":"text/plain"}}));return clearTimeout(n),r}class Mt{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 s;if(typeof t=="string"?s=async()=>{let n=await pt(t,e.kind);if(n)return n.__esModule&&(n=n.default),n;throw new Error(`[WindowManager]: load remote script failed, ${t}`)}:typeof t=="function"?s=t:s=async()=>t,this.appClasses.set(e.kind,async()=>{let n=this.appClassesCache.get(e.kind);return n||(n=s(),this.appClassesCache.set(e.kind,n)),n}),e.addHooks){const n=this.createKindEmitter(e.kind);n&&e.addHooks(n)}}async notifyApp(e,t,s){const n=this.kindEmitters.get(e);await(n==null?void 0:n.emit(t,s))}createKindEmitter(e){if(!this.kindEmitters.has(e)){const t=new X.default;this.kindEmitters.set(e,t)}return this.kindEmitters.get(e)}}const O=new Mt,mt=async i=>{var t,s;const e=await((t=O.appClasses.get(i))==null?void 0:t());return e&&((s=e.config)==null?void 0:s.singleton)?i:`${i}-${qe.v4().replace("-","").slice(0,8)}`},R=(i,e)=>{if(i.focusScenePath!==e)return i.focusScenePath=e,i},De=(i,e)=>{i&&i.isWritable&&i.state.sceneState.scenePath!==e&&i.setScenePath(e)},It=(i,e,t)=>{var s;if(i&&e){const r=(s=he(i)[e])==null?void 0:s[t];if(r)return`${e}/${r.name}`}},wt=(i,e)=>{i&&i.scenePathType(e)!==d.ScenePathType.None&&i.removeScenes(e)},ft=(i,e)=>{A.once(i).then(e)};u.debounce((i,e)=>{i.emit("mainViewModeChange",e)},200);const Te=(i,e,t=0)=>{const s=he(i)[e];if(!s)return;const n=s[t];if(!n)return;const r=n.name;return e==="/"?`/${r}`:`${e}/${r}`},he=i=>i.entireScenes(),At=i=>i.startsWith("/"),ue=i=>{const e=i.split("/");e.pop();let t=e.join("/");return t===""&&(t="/"),t},Ct=i=>i.endsWith("/")?i.slice(0,-1):i,je=i=>{const e=i.split(".").map(t=>t.padStart(2,"0")).join("");return parseInt(e)},Ee=i=>new Promise(e=>setTimeout(e,i));class xt{constructor(e){this.manager=e,this.displayer=this.manager.displayer,this.mainMagixEventListener=t=>{if(t.authorId!==this.displayer.observerId){const s=t.payload;switch(s.eventName){case j.AppMove:{this.appMoveHandler(s.payload);break}case j.AppResize:{this.appResizeHandler(s.payload);break}case j.AppBoxStateChange:{this.boxStateChangeHandler(s.payload);break}case j.SetMainViewScenePath:{this.setMainViewScenePathHandler(s.payload);break}case j.MoveCameraToContain:{this.moveCameraToContainHandler(s.payload);break}}}},this.appMoveHandler=t=>{var s;(s=this.boxManager)==null||s.moveBox(t)},this.appResizeHandler=t=>{var s,n;(s=this.boxManager)==null||s.resizeBox(Object.assign(t,{skipUpdate:!0})),(n=this.manager.room)==null||n.refreshViewSize()},this.boxStateChangeHandler=t=>{B.emit("boxStateChange",t)},this.setMainViewScenePathHandler=({nextScenePath:t})=>{R(this.manager.mainView,t),B.emit("mainViewScenePathChange",t)},this.moveCameraToContainHandler=t=>{this.manager.mainView.moveCameraToContain(t)}}get boxManager(){return this.manager.boxManager}addListeners(){this.displayer.addMagixEventListener(oe,this.mainMagixEventListener)}removeListeners(){this.displayer.removeMagixEventListener(oe,this.mainMagixEventListener)}}class yt extends Error{constructor(){super(...arguments);this.message="[WindowManager]: app duplicate exists and cannot be created again"}}class k extends Error{constructor(){super(...arguments);this.message="[WindowManager]: AppManager must be initialized"}}class St extends Error{constructor(e){super(`[WindowManager]: white-web-sdk version must large than ${e}`)}}class bt extends Error{constructor(){super(...arguments);this.message="[WindowManager]: kind must be a valid string"}}class Nt extends Error{constructor(){super(...arguments);this.message="[WindowManager]: box need created"}}class Dt extends Error{constructor(){super(...arguments);this.message='[WindowManager]: ScenePath should start with "/"'}}class Tt extends Error{constructor(){super(...arguments);this.message="[WindowManager]: boxManager not found"}}const ve=i=>(e,t)=>{if(e!==void 0)if(d.listenUpdated){const s=n=>{n.map(a=>a.kind).includes(i)&&t()};return d.listenUpdated(e,s),t(),()=>d.unlistenUpdated(e,s)}else return d.reaction(()=>e,()=>{t()},{fireImmediately:!0})},Le=(i,e,t)=>{let s=null;const n=d.reaction(i,()=>{s&&(s(),s=null);const r=i();u.isObject(r)?(s=()=>d.unlistenUpdated(r,e),d.listenUpdated(r,e)):t==null||t(r)},{fireImmediately:!0});return()=>{s==null||s(),n()}},jt=ve(d.UpdateEventKind.Removed),Et=ve(d.UpdateEventKind.Inserted),ge=Object.keys;function ze(i){return Boolean(u.has(i,"__isRef"))}function vt(i){return{k:H.genUID(),v:i,__isRef:!0}}class Lt{constructor(){this.listeners=new Set}get length(){return this.listeners.size}dispatch(e){this.listeners.forEach(t=>t(e))}addListener(e){this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}}const L="_WM-STORAGE_";class Pe{constructor(e,t,s){if(this._sideEffect=new H.SideEffectManager,this._destroyed=!1,this._refMap=new WeakMap,this._lastValue=new Map,this.onStateChanged=new Lt,s&&!u.isObject(s))throw new Error(`Default state for Storage ${t} is not an object.`);this._context=e,this.id=t||null,this._state={};const n=this._getRawState(this._state);this.id!==null&&this._context.getIsWritable()&&((n===this._state||!u.isObject(n))&&(u.get(this._context.getAttributes(),[L])||this._context.updateAttributes([L],{}),this._context.updateAttributes([L,this.id],this._state)),s&&this.setState(s)),ge(n).forEach(r=>{if(!(this.id===null&&r===L))try{const a=u.isObject(n[r])?JSON.parse(JSON.stringify(n[r])):n[r];ze(a)?(this._state[r]=a.v,u.isObject(a.v)&&this._refMap.set(a.v,a)):this._state[r]=a}catch(a){console.error(a)}}),this._sideEffect.addDisposer(Le(()=>this.id===null?e.getAttributes():u.get(e.getAttributes(),[L,this.id]),this._updateProperties.bind(this),this.destroy.bind(this)))}get state(){return this._destroyed&&console.warn(`Accessing state on destroyed Storage "${this.id}"`),this._state}addStateChangedListener(e){return this.onStateChanged.addListener(e),()=>this.onStateChanged.removeListener(e)}ensureState(e){return this.setState(ge(e).reduce((t,s)=>(u.has(this._state,s)||(t[s]=e[s]),t),{}))}setState(e){if(this._destroyed){console.error(new Error(`Cannot call setState on destroyed Storage "${this.id}".`));return}if(!this._context.getIsWritable()){console.error(new Error(`Cannot setState on Storage "${this.id}" without writable access`),e);return}const t=ge(e);t.length>0&&t.forEach(s=>{const n=e[s];if(n!==this._state[s])if(n===void 0)this._lastValue.set(s,this._state[s]),delete this._state[s],this._setRawState(s,n);else{this._lastValue.set(s,this._state[s]),this._state[s]=n;let r=n;if(u.isObject(n)){let a=this._refMap.get(n);a||(a=vt(n),this._refMap.set(n,a)),r=a}this._setRawState(s,r)}})}emptyStorage(){if(!(u.size(this._state)<=0)){if(this._destroyed){console.error(new Error(`Cannot empty destroyed Storage "${this.id}".`));return}if(!this._context.getIsWritable()){console.error(new Error(`Cannot empty Storage "${this.id}" without writable access.`));return}this.setState(u.mapValues(this._state,u.noop))}}deleteStorage(){if(this.id===null)throw new Error("Cannot delete main Storage");if(!this._context.getIsWritable()){console.error(new Error(`Cannot delete Storage "${this.id}" without writable access.`));return}this.destroy(),this._context.updateAttributes([L,this.id],void 0)}get destroyed(){return this._destroyed}destroy(){this._destroyed=!0,this._sideEffect.flushAll()}_getRawState(e){return this.id===null?u.get(this._context.getAttributes(),[],e):u.get(this._context.getAttributes(),[L,this.id],e)}_setRawState(e,t){if(this.id===null){if(e===L)throw new Error(`Cannot set attribute internal filed "${L}"`);return this._context.updateAttributes([e],t)}else return this._context.updateAttributes([L,this.id,e],t)}_updateProperties(e){var t;if(this._destroyed){console.error(new Error(`Cannot call _updateProperties on destroyed Storage "${this.id}".`));return}if(e.length>0){const s={};for(let n=0;n<e.length;n++)try{const r=e[n],a=r.key;if(this.id===null&&a===L)continue;const o=u.isObject(r.value)?JSON.parse(JSON.stringify(r.value)):r.value;let h;switch(this._lastValue.has(a)&&(h=this._lastValue.get(a),this._lastValue.delete(a)),r.kind){case 2:{u.has(this._state,a)&&(h=this._state[a],delete this._state[a]),s[a]={oldValue:h};break}default:{let c=o;if(ze(o)){const{k:g,v:l}=o,w=this._state[a];u.isObject(w)&&((t=this._refMap.get(w))==null?void 0:t.k)===g?c=w:(c=l,u.isObject(l)&&this._refMap.set(l,o))}c!==this._state[a]&&(h=this._state[a],this._state[a]=c),s[a]={newValue:c,oldValue:h};break}}}catch(r){console.error(r)}this.onStateChanged.dispatch(s)}}}class zt{constructor(e,t,s,n,r){this.manager=e,this.boxManager=t,this.appId=s,this.appProxy=n,this.appOptions=r,this.mobxUtils={autorun:d.autorun,reaction:d.reaction,toJS:d.toJS},this.objectUtils={listenUpdated:d.listenUpdated,unlistenUpdated:d.unlistenUpdated,listenDisposed:d.listenDisposed,unlistenDisposed:d.unlistenDisposed},this.store=this.manager.store,this.isReplay=this.manager.isReplay,this.getDisplayer=()=>this.manager.displayer,this.getAttributes=()=>this.appProxy.attributes,this.getScenes=()=>{const a=this.store.getAppAttributes(this.appId);return(a==null?void 0:a.isDynamicPPT)?this.appProxy.scenes:a==null?void 0:a.options.scenes},this.getView=()=>this.appProxy.view,this.getInitScenePath=()=>this.manager.getAppInitPath(this.appId),this.getIsWritable=()=>this.manager.canOperate,this.getBox=()=>{const a=this.boxManager.getBox(this.appId);if(a)return a;throw new Nt},this.getRoom=()=>this.manager.room,this.setAttributes=a=>{this.manager.safeSetAttributes({[this.appId]:a})},this.updateAttributes=(a,o)=>{this.manager.attributes[this.appId]&&this.manager.safeUpdateAttributes([this.appId,...a],o)},this.setScenePath=async a=>{var o;!this.appProxy.box||(this.appProxy.setFullPath(a),(o=this.getRoom())==null||o.setScenePath(a))},this.mountView=a=>{const o=this.getView();o&&(o.divElement=a,setTimeout(()=>{var h;(h=this.getRoom())==null||h.refreshViewSize()},1e3))},this.getAppOptions=()=>typeof this.appOptions=="function"?this.appOptions():this.appOptions,this.createStorage=(a,o)=>{const h=new Pe(this,a,o);return this.emitter.on("destroy",()=>{h.destroy()}),h},this.dispatchMagixEvent=this.manager.displayer.dispatchMagixEvent.bind(this.manager.displayer),this.addMagixEventListener=(a,o,h)=>(this.manager.displayer.addMagixEventListener(a,o,h),()=>this.manager.displayer.removeMagixEventListener(a,o)),this.removeMagixEventListener=this.manager.displayer.removeMagixEventListener.bind(this.manager.displayer),this.emitter=n.appEmitter,this.isAddApp=n.isAddApp}get storage(){return this._storage||(this._storage=new Pe(this)),this._storage}}var p;(function(i){i.Apps="apps",i.Focus="focus",i.State="state",i.BoxState="boxState",i.MainViewCamera="mainViewCamera",i.MainViewSize="mainViewSize",i.Broadcaster="broadcaster",i.Cursors="cursors",i.Position="position",i.CursorState="cursorState",i.FullPath="fullPath"})(p||(p={}));class Pt{constructor(e){this.context=e}setContext(e){this.context=e}get attributes(){return this.context.getAttributes()}apps(){return u.get(this.attributes,[p.Apps])}get focus(){return u.get(this.attributes,[p.Focus])}getAppAttributes(e){return u.get(this.apps(),[e])}getAppState(e){return u.get(this.apps(),[e,p.State])}getMaximized(){return u.get(this.attributes,["maximized"])}getMinimized(){return u.get(this.attributes,["minimized"])}setupAppAttributes(e,t,s){this.attributes.apps||this.context.safeSetAttributes({apps:{}});const r=["scenePath","title"];s||r.push("scenes");const a=u.pick(e.options,r),o={kind:e.kind,options:a,isDynamicPPT:s};typeof e.src=="string"&&(o.src=e.src),o.createdAt=Date.now(),this.context.safeUpdateAttributes([p.Apps,t],o),this.context.safeUpdateAttributes([p.Apps,t,p.State],{[E.Size]:{},[E.Position]:{},[E.SceneIndex]:0})}updateAppState(e,t,s){u.get(this.attributes,[p.Apps,e,p.State])&&this.context.safeUpdateAttributes([p.Apps,e,p.State,t],s)}cleanAppAttributes(e){this.context.safeUpdateAttributes([p.Apps,e],void 0),this.context.safeSetAttributes({[e]:void 0}),this.attributes[p.Focus]===e&&this.cleanFocus()}cleanFocus(){this.context.safeSetAttributes({[p.Focus]:void 0})}getAppSceneIndex(e){var t;return(t=this.getAppState(e))==null?void 0:t[E.SceneIndex]}getAppScenePath(e){var t,s;return(s=(t=this.getAppAttributes(e))==null?void 0:t.options)==null?void 0:s.scenePath}getMainViewScenePath(){return this.attributes._mainScenePath}getMainViewSceneIndex(){return this.attributes._mainSceneIndex}getBoxState(){return this.attributes[p.BoxState]}setMainViewScenePath(e){this.context.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.context.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return u.get(this.attributes,[p.MainViewCamera])}getMainViewSize(){return u.get(this.attributes,[p.MainViewSize])}setMainViewCamera(e){this.context.safeSetAttributes({[p.MainViewCamera]:T({},e)})}setMainViewSize(e){this.context.safeSetAttributes({[p.MainViewSize]:T({},e)})}setAppFocus(e,t){t?this.context.safeSetAttributes({[p.Focus]:e}):this.context.safeSetAttributes({[p.Focus]:void 0})}updateCursor(e,t){u.get(this.attributes,[p.Cursors])||this.context.safeUpdateAttributes([p.Cursors],{}),u.get(this.attributes,[p.Cursors,e])||this.context.safeUpdateAttributes([p.Cursors,e],{}),this.context.safeUpdateAttributes([p.Cursors,e,p.Position],t)}updateCursorState(e,t){u.get(this.attributes,[p.Cursors,e])||this.context.safeUpdateAttributes([p.Cursors,e],{}),this.context.safeUpdateAttributes([p.Cursors,e,p.CursorState],t)}getCursorState(e){return u.get(this.attributes,[p.Cursors,e,p.CursorState])}cleanCursor(e){this.context.safeUpdateAttributes([p.Cursors,e],void 0)}setMainViewFocusPath(e){const t=this.getMainViewScenePath();t&&R(e,t)}}const Be=new Pt({getAttributes:()=>{throw new Error("getAttributes not implemented")},safeSetAttributes:()=>{throw new Error("safeSetAttributes not implemented")},safeUpdateAttributes:()=>{throw new Error("safeUpdateAttributes not implemented")}}),Z=(...i)=>{x.debug&&console.log("[WindowManager]:",...i)};class Bt{constructor(e){this.manager=e,this.findMember=t=>{var n;const s=(n=this.manager.room)==null?void 0:n.state.roomMembers;return s==null?void 0:s.find(r=>r.memberId===t)},this.findMemberByUid=t=>{var n;const s=(n=this.manager.room)==null?void 0:n.state.roomMembers;return s==null?void 0:s.find(r=>{var a;return((a=r.payload)==null?void 0:a.uid)===t})},this.observerId=e.displayer.observerId,A.on("observerIdChange",t=>{this.observerId=t})}get uid(){var e;return((e=this.manager.room)==null?void 0:e.uid)||""}updateManagerRect(){var e;(e=this.manager.boxManager)==null||e.updateManagerRect()}blurFocusBox(){var e;(e=this.manager.boxManager)==null||e.blurAllBox()}}let de;const Vt=i=>(de||(de=new Bt(i)),de);class K{constructor(e){this.manager=e,this.store=Be,this.context=Vt(this.manager)}}class pe extends K{constructor(e,t,s,n){super(t);var r;this.params=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.status="normal",this.getAppInitState=a=>{var S,F;const o=this.store.getAppState(a);if(!o)return;const h=o==null?void 0:o[E.Position],c=this.store.focus,g=o==null?void 0:o[E.Size],l=o==null?void 0:o[E.SceneIndex],w=(S=this.attributes)==null?void 0:S.maximized,C=(F=this.attributes)==null?void 0:F.minimized,y=o==null?void 0:o.zIndex;let M={maximized:w,minimized:C,zIndex:y};return h&&(M=z(T({},M),{id:a,x:h.x,y:h.y})),c===a&&(M=z(T({},M),{focus:!0})),g&&(M=z(T({},M),{width:g.width,height:g.height})),l&&(M=z(T({},M),{sceneIndex:l})),M},this.appAttributesUpdateListener=a=>{var o,h,c;(o=this.manager.refresher)==null||o.add(a,()=>d.autorun(()=>{const g=this.manager.attributes[a];g&&this.appEmitter.emit("attributesUpdate",g)})),(h=this.manager.refresher)==null||h.add(this.stateKey,()=>d.autorun(()=>{var l,w,C;const g=(l=this.appAttributes)==null?void 0:l.state;(g==null?void 0:g.zIndex)>0&&g.zIndex!==((w=this.box)==null?void 0:w.zIndex)&&((C=this.boxManager)==null||C.setZIndex(a,g.zIndex))})),(c=this.manager.refresher)==null||c.add(`${a}-fullPath`,()=>d.autorun(()=>{var l;const g=(l=this.appAttributes)==null?void 0:l.fullPath;this.setFocusScenePathHandler(g)}))},this.setFocusScenePathHandler=u.debounce(a=>{var o;this.view&&a&&a!==((o=this.view)==null?void 0:o.focusScenePath)&&R(this.view,a)},50),this.kind=e.kind,this.id=s,this.stateKey=`${this.id}_state`,this.appProxies.set(this.id,this),this.appEmitter=new X.default,this.appListener=this.makeAppEventListener(this.id),this.isAddApp=n,this.initScenes(),((r=this.params.options)==null?void 0:r.scenePath)&&this.createView()}initScenes(){var t;const e=this.params.options;e&&(this.scenePath=e.scenePath,((t=this.appAttributes)==null?void 0:t.isDynamicPPT)&&this.scenePath?this.scenes=this.manager.displayer.entireScenes()[this.scenePath]:this.scenes=e.scenes)}get view(){return this.manager.viewManager.getView(this.id)}get isWritable(){var e;return this.manager.canOperate&&!((e=this.box)==null?void 0:e.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}getFullScenePath(){if(this.scenePath)return u.get(this.appAttributes,[p.FullPath],this.getFullScenePathFromScenes())}getFullScenePathFromScenes(){const e=u.get(this.appAttributes,["state","SceneIndex"],0),t=It(this.manager.room,this.scenePath,e);return t&&this.setFullPath(t),t}setFullPath(e){this.manager.safeUpdateAttributes(["apps",this.id,p.FullPath],e)}async baseInsertApp(e=!1){var r;const t=this.params;if(!t.kind)throw new Error("[WindowManager]: kind require");const s=await((r=O.appClasses.get(t.kind))==null?void 0:r()),n=O.registered.get(t.kind);if(s)await this.setupApp(this.id,e,s,t.options,n==null?void 0:n.appOptions);else throw new Error(`[WindowManager]: app load failed ${t.kind} ${t.src}`);return this.context.updateManagerRect(),{appId:this.id,app:s}}focusApp(){this.focusBox(),this.store.setMainViewFocusPath(this.manager.mainView)}get box(){var e;return(e=this.boxManager)==null?void 0:e.getBox(this.id)}focusBox(){var e;(e=this.boxManager)==null||e.focusBox({appId:this.id})}async setupApp(e,t,s,n,r){var o;if(Z("setupApp",e,s,n),!this.boxManager)throw new Tt;const a=new zt(this.manager,this.boxManager,e,this,r);this.appContext=a;try{A.once(`${e}${j.WindowCreated}`).then(async()=>{var c;let h;t||(h=this.getAppInitState(e),(c=this.boxManager)==null||c.updateBoxState(h)),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(e),this.setViewFocusScenePath(),setTimeout(async()=>{const g=await s.setup(a);this.appResult=g,O.notifyApp(s.kind,"created",{appId:e,result:g}),this.afterSetupApp(h),this.fixMobileSize()},50)}),(o=this.boxManager)==null||o.createBox({appId:e,app:s,options:n,canOperate:this.manager.canOperate,smartPosition:this.isAddApp})}catch(h){throw console.error(h),new Error(`[WindowManager]: app setup error: ${h.message}`)}}fixMobileSize(){var t,s;const e=(t=this.boxManager)==null?void 0:t.getBox(this.id);e&&((s=this.boxManager)==null||s.resizeBox({appId:this.id,width:e.intrinsicWidth+.001,height:e.intrinsicHeight+.001,skipUpdate:!0}))}afterSetupApp(e){var t;e&&(!(e==null?void 0:e.x)||!e.y)&&((t=this.boxManager)==null||t.setBoxInitState(this.id))}onSeek(e){var s;this.appEmitter.emit("seek",e);const t=this.getAppInitState(this.id);(s=this.boxManager)==null||s.updateBoxState(t)}async onReconnected(){var n;this.appEmitter.emit("reconnected",void 0);const e=this.getAppInitState(this.id);await this.destroy(!0,!1,!0);const t=this.params;await new pe(t,this.manager,this.id,this.isAddApp).baseInsertApp(!0),(n=this.boxManager)==null||n.updateBoxState(e)}emitAppSceneStateChange(e){this.appEmitter.emit("sceneStateChange",e)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(e){return(t,s)=>{var n,r,a,o;if(!!this.manager.canOperate)switch(t){case"setBoxSize":{(n=this.boxManager)==null||n.resizeBox({appId:e,width:s.width,height:s.height,skipUpdate:!1});break}case"setBoxMinSize":{(r=this.boxManager)==null||r.setBoxMinSize({appId:e,minWidth:s.minwidth,minHeight:s.minheight});break}case"setBoxTitle":{(a=this.boxManager)==null||a.setBoxTitle({appId:e,title:s.title});break}case ce.destroy:{if(this.status==="destroyed")return;this.destroy(!0,!1,!0,s==null?void 0:s.error),(s==null?void 0:s.error)&&console.error(s==null?void 0:s.error);break}case"focus":{(o=this.boxManager)==null||o.focusBox({appId:this.id}),A.emit("focus",{appId:this.id});break}}}}setScenePath(){if(!this.manager.canOperate)return;const e=this.getFullScenePath();this.manager.room&&e&&this.view&&De(this.manager.room,e)}setViewFocusScenePath(){const e=this.getFullScenePath();e&&this.view&&R(this.view,e)}async createView(){const e=await this.viewManager.createView(this.id);return this.setViewFocusScenePath(),e}async destroy(e,t,s,n){var r,a,o,h;this.status!=="destroyed"&&(this.status="destroyed",await O.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:n}),this.appEmitter.clearListeners(),A.emit(`destroy-${this.id}`,{error:n}),e&&((r=this.boxManager)==null||r.closeBox(this.id,s)),t&&(this.store.cleanAppAttributes(this.id),this.scenePath&&wt(this.manager.room,this.scenePath)),this.appProxies.delete(this.id),this.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),(a=this.manager.refresher)==null||a.remove(this.id),(o=this.manager.refresher)==null||o.remove(this.stateKey),(h=this.manager.refresher)==null||h.remove(`${this.id}-fullPath`))}close(){return this.destroy(!0,!0,!1)}}class Ut{constructor(e){this.displayer=e,this.views=new Map}createView(e){const t=Ve(this.displayer);return this.views.set(e,t),t}getView(e){return this.views.get(e)}destroyView(e){const t=this.views.get(e);t&&(t.release(),this.views.delete(e))}setViewScenePath(e,t){const s=this.views.get(e);s&&(s.focusScenePath=t)}destroy(){this.views.forEach(e=>{e.release()}),this.views.clear()}}const Ve=i=>{const e=i.views.createView();return Ot(e),e},Ot=i=>{i.setCameraBound({maxContentMode:()=>10,minContentMode:()=>.1})};class Rt extends K{constructor(e){super(e);this.started=!1,this.mainViewIsAddListener=!1,this.viewId="mainView",this.sideEffectManager=new H.SideEffectManager,this.cameraReaction=()=>d.reaction(()=>this.mainViewCamera,s=>{s&&s.id!==this.context.uid&&(this.moveCameraToContian(this.mainViewSize),this.moveCamera(s))},{fireImmediately:!0}),this.sizeChangeHandler=u.debounce(s=>{s&&(this.moveCameraToContian(s),this.moveCamera(this.mainViewCamera))},30),this.onCameraUpdatedByDevice=s=>{this.store.setMainViewCamera(z(T({},s),{id:this.context.uid})),u.isEqual(this.mainViewSize,z(T({},this.mainView.size),{id:this.context.uid}))||this.setMainViewSize(this.view.size)},this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.setMainViewSize=u.debounce(s=>{this.store.setMainViewSize(z(T({},s),{id:this.context.uid}))},50),this.onCameraOrSizeUpdated=()=>{B.emit("cameraStateChange",this.cameraState)},this.mainView=this.createMainView(),this.moveCameraSizeByAttributes(),A.once("mainViewMounted").then(()=>{this.addMainViewListener(),setTimeout(()=>{this.start(),(!this.mainViewCamera||!this.mainViewSize)&&this.setCameraAndSize()},200)});const t=()=>{this.sizeChangeHandler(this.mainViewSize)};this.sideEffectManager.add(()=>(A.on("playgroundSizeChange",t),()=>A.off("playgroundSizeChange",t)))}get mainViewCamera(){return this.store.getMainViewCamera()}get mainViewSize(){return this.store.getMainViewSize()}moveCameraSizeByAttributes(){this.moveCameraToContian(this.mainViewSize),this.moveCamera(this.mainViewCamera)}start(){var e;this.started||(this.sizeChangeHandler(this.mainViewSize),this.addCameraListener(),(e=this.manager.refresher)==null||e.add(p.MainViewCamera,this.cameraReaction),this.started=!0)}setCameraAndSize(){this.store.setMainViewCamera(z(T({},this.mainView.camera),{id:this.context.uid})),this.store.setMainViewSize(z(T({},this.mainView.size),{id:this.context.uid}))}get view(){return this.mainView}get cameraState(){return T(T({},this.view.camera),this.view.size)}createMainView(){const e=Ve(this.manager.displayer),t=this.store.getMainViewScenePath();return t&&R(e,t),e}addMainViewListener(){this.mainViewIsAddListener||this.view.divElement&&(this.view.divElement.addEventListener("click",this.mainViewClickListener),this.view.divElement.addEventListener("touchend",this.mainViewClickListener),this.mainViewIsAddListener=!0)}removeMainViewListener(){this.view.divElement&&(this.view.divElement.removeEventListener("click",this.mainViewClickListener),this.view.divElement.removeEventListener("touchend",this.mainViewClickListener))}async mainViewClickHandler(){!this.manager.canOperate||(this.store.cleanFocus(),this.context.blurFocusBox())}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.on("onCameraUpdated",this.onCameraOrSizeUpdated),this.view.callbacks.on("onSizeUpdated",this.onCameraOrSizeUpdated)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.off("onCameraUpdated",this.onCameraOrSizeUpdated),this.view.callbacks.off("onSizeUpdated",this.onCameraOrSizeUpdated)}moveCameraToContian(e){u.isEmpty(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:d.AnimationMode.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!u.isEmpty(e)){if(u.isEqual(e,this.view.camera))return;const{centerX:t,centerY:s,scale:n}=e,r=n*(this.scale||1);this.view.moveCamera({centerX:t,centerY:s,scale:r,animationMode:d.AnimationMode.Immediately})}}stop(){var e,t;this.removeMainViewListener(),this.removeCameraListener(),(e=this.manager.refresher)==null||e.remove(p.MainViewCamera),(t=this.manager.refresher)==null||t.remove(p.MainViewSize),this.started=!1}destroy(){this.stop(),this.sideEffectManager.flushAll()}}class kt{constructor(e){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.store=Be,this.isReplay=this.windowManger.isReplay,this.onAppDelete=t=>{const s=Object.keys(t);this.appProxies.forEach((n,r)=>{s.includes(r)||n.destroy(!0,!1,!0)})},this.displayerStateListener=t=>{var n,r;const s=t.sceneState;if(s){const a=s.scenePath;this.appProxies.forEach(o=>{o.scenePath&&a.startsWith(o.scenePath)&&(o.emitAppSceneStateChange(s),o.setFullPath(a))})}t.roomMembers&&((n=this.windowManger.cursorManager)==null||n.setRoomMembers(t.roomMembers),(r=this.windowManger.cursorManager)==null||r.cleanMemberAttributes(t.roomMembers)),this.appProxies.forEach(a=>{a.appEmitter.emit("roomStateChange",t)}),A.emit("observerIdChange",this.displayer.observerId)},this.displayerWritableListener=t=>{var r,a;const s=!t,n=this.windowManger.readonly===void 0||this.windowManger.readonly===!1;this.windowManger.readonly===void 0?(r=this.boxManager)==null||r.setReadonly(t):(a=this.boxManager)==null||a.setReadonly(!(s&&n)),this.appProxies.forEach(o=>{o.emitAppIsWritableChange()}),s===!0?(this.mainView.disableCameraTransform=!1,this.room&&this.room.disableSerialization===!0&&(this.room.disableSerialization=!1)):this.mainView.disableCameraTransform=!0},this.updateSceneIndex=()=>{const t=this.store.getMainViewScenePath(),s=ue(t),n=he(this.displayer)[s];if(n.length){const r=t.replace(s,"").replace("/",""),a=n.findIndex(o=>o.name===r);u.isInteger(a)&&a>=0&&this.safeSetAttributes({_mainSceneIndex:a})}},this.boxEventListener=(t,s)=>{switch(t){case"move":{this.dispatchInternalEvent(j.AppMove,s),this.store.updateAppState(s.appId,E.Position,{x:s.x,y:s.y});break}case"focus":{this.windowManger.safeSetAttributes({focus:s.appId});break}case"resize":{s.width&&s.height&&(this.dispatchInternalEvent(j.AppResize,s),this.store.updateAppState(s.appId,E.Size,{width:s.width,height:s.height}));break}case"close":{const n=this.appProxies.get(s.appId);n&&n.destroy(!1,!0,s.error);break}case"boxStateChange":{this.dispatchInternalEvent(j.AppBoxStateChange,s);break}}},this.displayer=e.displayer,this.store.setContext({getAttributes:()=>this.attributes,safeSetAttributes:t=>this.safeSetAttributes(t),safeUpdateAttributes:(t,s)=>this.safeUpdateAttributes(t,s)}),this.mainViewProxy=new Rt(this),this.viewManager=new Ut(this.displayer),this.appListeners=new xt(this),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=We,this.refresher.setRoom(this.room),this.refresher.setContext({emitter:A}),A.once("onCreated").then(()=>this.onCreated()),A.on("onReconnected",()=>this.onReconnected()),d.isPlayer(this.displayer)&&A.on("seek",t=>{this.appProxies.forEach(s=>{s.onSeek(t)}),this.attributesUpdateCallback(this.attributes.apps),this.onAppDelete(this.attributes.apps)})}async onCreated(){var e,t,s,n,r,a,o,h;if(await this.attributesUpdateCallback(this.attributes.apps),(e=this.boxManager)==null||e.updateManagerRect(),A.onAny(this.boxEventListener),(t=this.refresher)==null||t.add("apps",()=>Le(()=>this.attributes.apps,()=>{this.attributesUpdateCallback(this.attributes.apps)})),(s=this.refresher)==null||s.add("appsClose",()=>jt(this.attributes.apps,()=>{this.onAppDelete(this.attributes.apps)})),(n=this.refresher)==null||n.add("maximized",()=>d.autorun(()=>{var g;const c=this.attributes.maximized;(g=this.boxManager)==null||g.setMaximized(Boolean(c))})),(r=this.refresher)==null||r.add("minimized",()=>d.autorun(()=>{var g,l;const c=this.attributes.minimized;((g=this.boxManager)==null?void 0:g.minimized)!==c&&(c===!0&&((l=this.boxManager)==null||l.blurAllBox()),setTimeout(()=>{var w;(w=this.boxManager)==null||w.setMinimized(Boolean(c))},0))})),(a=this.refresher)==null||a.add("mainViewIndex",()=>d.autorun(()=>{const c=u.get(this.attributes,"_mainSceneIndex");c!==void 0&&this._prevSceneIndex!==c&&(B.emit("mainViewSceneIndexChange",c),this._prevSceneIndex=c)})),(o=this.refresher)==null||o.add("focusedChange",()=>d.autorun(()=>{const c=u.get(this.attributes,"focus");this._prevFocused!==c&&(B.emit("focusedChange",c),this._prevFocused=c)})),!this.attributes.apps||Object.keys(this.attributes.apps).length===0){const c=this.store.getMainViewScenePath();if(!c)return;this.displayer.state.sceneState.scenePath!==c&&De(this.room,c)}this.displayerWritableListener(!((h=this.room)==null?void 0:h.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this._prevFocused=this.attributes.focus}async attributesUpdateCallback(e){if(e&&x.container){const s=Object.keys(e).map(n=>({id:n,createdAt:e[n].createdAt}));for(const{id:n}of u.sortBy(s,"createdAt"))if(!this.appProxies.has(n)&&!this.appStatus.has(n)){const r=e[n];ye.default(async()=>{if(this.appStatus.set(n,J.StartCreate),!this.attributes[n])throw new Error("appAttributes is undefined");await this.baseInsertApp({kind:r.kind,options:r.options,isDynamicPPT:r.isDynamicPPT},n,!1),this.focusByAttributes(e)},{retries:3}).catch(a=>{console.warn("[WindowManager]: Insert App Error",a),this.appStatus.delete(n)})}}}refresh(){this.attributesUpdateCallback(this.attributes.apps)}setBoxManager(e){this.boxManager=e}resetMaximized(){var e;(e=this.boxManager)==null||e.setMaximized(Boolean(this.store.getMaximized()))}resetMinimized(){var e;(e=this.boxManager)==null||e.setMinimized(Boolean(this.store.getMinimized()))}bindMainView(e,t){const s=this.mainViewProxy.view;s.disableCameraTransform=t,s.divElement=e,s.focusScenePath||this.setMainViewFocusPath(),A.emit("mainViewMounted")}setMainViewFocusPath(e){const t=e||this.store.getMainViewScenePath();if(t){const s=R(this.mainView,t);return(s==null?void 0:s.focusScenePath)===t}}async addApp(e,t){Z("addApp",e);const{appId:s,needFocus:n}=await this.beforeAddApp(e,t),r=await this.baseInsertApp(e,s,!0,n);return this.afterAddApp(r),r==null?void 0:r.id}async beforeAddApp(e,t){var a,o;const s=await mt(e.kind);this.appStatus.set(s,J.StartCreate);const n=(a=e.attributes)!=null?a:{};this.safeUpdateAttributes([s],n),this.store.setupAppAttributes(e,s,t);const r=!((o=this.boxManager)==null?void 0:o.minimized);return r&&this.store.setAppFocus(s,!0),{appId:s,needFocus:r}}afterAddApp(e){var t,s;if(e&&e.box){const n=e.box;A.emit("move",{appId:e.id,x:n==null?void 0:n.intrinsicX,y:n==null?void 0:n.intrinsicY}),this.store.updateAppState(e.id,E.ZIndex,n.zIndex)}((t=this.boxManager)==null?void 0:t.minimized)&&((s=this.boxManager)==null||s.setMinimized(!1,!1))}async closeApp(e){const t=this.appProxies.get(e);t&&t.destroy(!0,!0,!1)}async baseInsertApp(e,t,s,n){if(this.appProxies.has(t)){console.warn("[WindowManager]: app duplicate exists and cannot be created again");return}const r=new pe(e,this,t,s);if(r)return await r.baseInsertApp(n),this.appStatus.delete(t),r;throw this.appStatus.delete(t),new Error("[WindowManger]: initialize AppProxy failed")}get eventName(){return d.isRoom(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return d.isRoom(this.displayer)?this.displayer:void 0}get mainView(){return this.mainViewProxy.view}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}safeSetAttributes(e){this.windowManger.safeSetAttributes(e)}safeUpdateAttributes(e,t){this.windowManger.safeUpdateAttributes(e,t)}async setMainViewScenePath(e){if(this.room){const t=this.displayer.scenePathType(e);if(t===d.ScenePathType.None)throw new Error(`[WindowManager]: ${e} not valid scene`);if(t===d.ScenePathType.Page)await this._setMainViewScenePath(e);else if(t===d.ScenePathType.Dir){const s=Te(this.displayer,e);s&&await this._setMainViewScenePath(s)}}}async _setMainViewScenePath(e){this.setMainViewFocusPath(e)&&(this.safeSetAttributes({_mainScenePath:e}),this.store.setMainViewFocusPath(this.mainView),this.updateSceneIndex(),this.dispatchInternalEvent(j.SetMainViewScenePath,{nextScenePath:e}))}async setMainViewSceneIndex(e){if(this.room){if(this.store.getMainViewSceneIndex()===e)return;const t=this.store.getMainViewScenePath();if(t){const s=ue(t),n=Te(this.displayer,s,e);if(n)this.setMainViewFocusPath(n)&&(this.store.setMainViewScenePath(n),this.safeSetAttributes({_mainSceneIndex:e}));else throw new Error(`[WindowManager]: ${s}: ${e} not valid index`)}}}getAppInitPath(e){var s;const t=this.store.getAppAttributes(e);if(t)return(s=t==null?void 0:t.options)==null?void 0:s.scenePath}safeDispatchMagixEvent(e,t){this.canOperate&&this.displayer.dispatchMagixEvent(e,t)}focusByAttributes(e){var t;if(e&&Object.keys(e).length===((t=this.boxManager)==null?void 0:t.boxSize)){const s=this.store.focus;s&&this.boxManager.focusBox({appId:s})}}async onReconnected(){const t=Array.from(this.appProxies.values()).map(s=>s.onReconnected());await Promise.all(t)}notifyContainerRectUpdate(e){this.appProxies.forEach(t=>{t.appEmitter.emit("containerRectUpdate",e)})}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent(oe,{eventName:e,payload:t})}destroy(){var e,t;this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),A.offAny(this.boxEventListener),A.clearListeners(),this.appProxies.size&&this.appProxies.forEach(s=>{s.destroy(!0,!1,!0)}),this.viewManager.destroy(),(e=this.boxManager)==null||e.destroy(),(t=this.refresher)==null||t.destroy(),this.mainViewProxy.destroy(),B.clearListeners(),this._prevSceneIndex=void 0}}const Zt=window.ResizeObserver||Ke.ResizeObserver;class le{constructor(e){this.emitter=e}static create(e,t,s,n){const r=new le(n);return r.observePlaygroundSize(e,t,s),r}observePlaygroundSize(e,t,s){this.updateSizer(e.getBoundingClientRect(),t,s),this.containerResizeObserver=new Zt(n=>{var a;const r=(a=n[0])==null?void 0:a.contentRect;r&&(this.updateSizer(r,t,s),this.emitter.emit("playgroundSizeChange",r))}),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},s,n){e&&t&&(t/e>x.containerSizeRatio?(t=e*x.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/x.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!1)),n.style.width=`${e}px`,n.style.height=`${t}px`)}disconnect(){var e;(e=this.containerResizeObserver)==null||e.disconnect()}}const Qt=(i,e,t,s)=>new Gt({safeSetAttributes:n=>i.safeSetAttributes(n),getMainView:()=>i.mainView,updateAppState:(...n)=>{var r;return(r=i.appManager)==null?void 0:r.store.updateAppState(...n)},canOperate:()=>i.canOperate,notifyContainerRectUpdate:n=>{var r;return(r=i.appManager)==null?void 0:r.notifyContainerRectUpdate(n)},cleanFocus:()=>{var n;return(n=i.appManager)==null?void 0:n.store.cleanFocus()},callbacks:e,emitter:t},s);class Gt{constructor(e,t){this.context=e,this.createTeleBoxManagerConfig=t,this.playgroundSizeChangeListener=()=>{this.updateManagerRect()};const{emitter:s,callbacks:n}=e;this.teleBoxManager=this.setupBoxManager(t),this.teleBoxManager.events.on(W.TELE_BOX_MANAGER_EVENT.State,r=>{r&&(this.context.callbacks.emit("boxStateChange",r),this.context.emitter.emit("boxStateChange",r))}),this.teleBoxManager.events.on("minimized",r=>{this.context.safeSetAttributes({minimized:r}),r&&(this.context.cleanFocus(),this.blurAllBox())}),this.teleBoxManager.events.on("maximized",r=>{this.context.safeSetAttributes({maximized:r})}),this.teleBoxManager.events.on("removed",r=>{r.forEach(a=>{s.emit("close",{appId:a.id})})}),this.teleBoxManager.events.on("intrinsic_move",u.debounce(r=>{s.emit("move",{appId:r.id,x:r.intrinsicX,y:r.intrinsicY})},50)),this.teleBoxManager.events.on("intrinsic_resize",u.debounce(r=>{s.emit("resize",{appId:r.id,width:r.intrinsicWidth,height:r.intrinsicHeight})},200)),this.teleBoxManager.events.on("focused",r=>{r&&(this.canOperate?s.emit("focus",{appId:r.id}):this.teleBoxManager.blurBox(r.id))}),this.teleBoxManager.events.on("dark_mode",r=>{n.emit("darkModeChange",r)}),this.teleBoxManager.events.on("prefers_color_scheme",r=>{n.emit("prefersColorSchemeChange",r)}),this.teleBoxManager.events.on("z_index",r=>{this.context.updateAppState(r.id,E.ZIndex,r.zIndex)}),s.on("playgroundSizeChange",this.playgroundSizeChangeListener)}get mainView(){return this.context.getMainView()}get canOperate(){return this.context.canOperate()}get boxState(){return this.teleBoxManager.state}get maximized(){return this.teleBoxManager.maximized}get minimized(){return this.teleBoxManager.minimized}get darkMode(){return this.teleBoxManager.darkMode}get prefersColorScheme(){return this.teleBoxManager.prefersColorScheme}get boxSize(){return this.teleBoxManager.boxes.length}createBox(e){var c,g,l;if(!this.teleBoxManager)return;let{minwidth:t=et,minheight:s=tt}=(c=e.app.config)!=null?c:{};const{width:n,height:r}=(g=e.app.config)!=null?g:{},a=((l=e.options)==null?void 0:l.title)||e.appId,o=this.teleBoxManager.containerRect;t>1&&(t=t/o.width),s>1&&(s=s/o.height);const h={title:a,minWidth:t,minHeight:s,width:n,height:r,id:e.appId};this.teleBoxManager.create(h,e.smartPosition),this.context.emitter.emit(`${e.appId}${j.WindowCreated}`)}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&t.state===W.TELE_BOX_STATE.Maximized&&this.context.emitter.emit("resize",{appId:e,x:t.x,y:t.y,width:t.intrinsicWidth,height:t.intrinsicHeight})}setupBoxManager(e){const t=x.wrapper?x.wrapper:document.body,s=t.getBoundingClientRect(),n={root:t,containerRect:{x:0,y:0,width:s.width,height:s.height},fence:!1,prefersColorScheme:e==null?void 0:e.prefersColorScheme},r=new W.TeleBoxManager(n);this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=r;const a=(e==null?void 0:e.collectorContainer)||x.wrapper;return a&&this.setCollectorContainer(a),r}setCollectorContainer(e){var s;const t=new W.TeleBoxCollector({styles:(s=this.createTeleBoxManagerConfig)==null?void 0:s.collectorStyles}).mount(e);this.teleBoxManager.setCollector(t)}getBox(e){return this.teleBoxManager.queryOne({id:e})}closeBox(e,t=!1){return this.teleBoxManager.remove(e,t)}boxIsFocus(e){const t=this.getBox(e);return t==null?void 0:t.focus}getFocusBox(){return this.teleBoxManager.query({focus:!0})[0]}getTopBox(){const e=this.teleBoxManager.query();return u.maxBy(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,zIndex:e.zIndex},!0),setTimeout(()=>{e.focus&&this.teleBoxManager.focusBox(t.id,!0),e.maximized!=null&&this.teleBoxManager.setMaximized(Boolean(e.maximized),!0),e.minimized!=null&&this.teleBoxManager.setMinimized(Boolean(e.minimized),!0)},50),this.context.callbacks.emit("boxStateChange",this.teleBoxManager.state))}updateManagerRect(){var t;const e=(t=this.mainView.divElement)==null?void 0:t.getBoundingClientRect();if(e&&e.width>0&&e.height>0){const s={x:0,y:0,width:e.width,height:e.height};this.teleBoxManager.setContainerRect(s),this.context.notifyContainerRectUpdate(this.teleBoxManager.containerRect)}}moveBox({appId:e,x:t,y:s}){this.teleBoxManager.update(e,{x:t,y:s},!0)}focusBox({appId:e},t=!0){this.teleBoxManager.focusBox(e,t)}resizeBox({appId:e,width:t,height:s,skipUpdate:n}){this.teleBoxManager.update(e,{width:t,height:s},n)}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.blurAll()}updateAll(e){this.teleBoxManager.updateAll(e)}setMaximized(e){e!==this.maximized&&this.teleBoxManager.setMaximized(e,!0)}setMinimized(e,t=!0){this.teleBoxManager.setMinimized(e,t)}focusTopBox(){if(this.teleBoxManager.query().length>=1){const t=this.getTopBox();t&&this.focusBox({appId:t.id},!1)}}updateBox(e,t,s=!0){this.teleBoxManager.update(e,t,s)}setReadonly(e){this.teleBoxManager.setReadonly(e)}setPrefersColorScheme(e){this.teleBoxManager.setPrefersColorScheme(e)}setZIndex(e,t,s=!0){this.teleBoxManager.update(e,{zIndex:t},s)}destroy(){A.off("playgroundSizeChange",this.playgroundSizeChangeListener),this.teleBoxManager.destroy()}}function q(){}function Ue(i){return i()}function Oe(){return Object.create(null)}function $(i){i.forEach(Ue)}function Yt(i){return typeof i=="function"}function Ft(i,e){return i!=i?e==e:i!==e||i&&typeof i=="object"||typeof i=="function"}let ee;function te(i,e){return ee||(ee=document.createElement("a")),ee.href=e,i===ee.href}function Wt(i){return Object.keys(i).length===0}function P(i,e){i.appendChild(e)}function Me(i,e,t){i.insertBefore(e,t||null)}function ie(i){i.parentNode.removeChild(i)}function U(i){return document.createElement(i)}function me(i){return document.createTextNode(i)}function Ie(){return me(" ")}function N(i,e,t){t==null?i.removeAttribute(e):i.getAttribute(e)!==t&&i.setAttribute(e,t)}function Ht(i){return Array.from(i.childNodes)}function Re(i,e){e=""+e,i.wholeText!==e&&(i.data=e)}function D(i,e,t,s){t===null?i.style.removeProperty(e):i.style.setProperty(e,t,s?"important":"")}let we;function G(i){we=i}const Y=[],ke=[],se=[],Ze=[],_t=Promise.resolve();let fe=!1;function Xt(){fe||(fe=!0,_t.then(Qe))}function Ae(i){se.push(i)}const Ce=new Set;let ne=0;function Qe(){const i=we;do{for(;ne<Y.length;){const e=Y[ne];ne++,G(e),Jt(e.$$)}for(G(null),Y.length=0,ne=0;ke.length;)ke.pop()();for(let e=0;e<se.length;e+=1){const t=se[e];Ce.has(t)||(Ce.add(t),t())}se.length=0}while(Y.length);for(;Ze.length;)Ze.pop()();fe=!1,Ce.clear(),G(i)}function Jt(i){if(i.fragment!==null){i.update(),$(i.before_update);const e=i.dirty;i.dirty=[-1],i.fragment&&i.fragment.p(i.ctx,e),i.after_update.forEach(Ae)}}const Kt=new Set;function qt(i,e){i&&i.i&&(Kt.delete(i),i.i(e))}function $t(i,e,t,s){const{fragment:n,on_mount:r,on_destroy:a,after_update:o}=i.$$;n&&n.m(e,t),s||Ae(()=>{const h=r.map(Ue).filter(Yt);a?a.push(...h):$(h),i.$$.on_mount=[]}),o.forEach(Ae)}function ei(i,e){const t=i.$$;t.fragment!==null&&($(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function ti(i,e){i.$$.dirty[0]===-1&&(Y.push(i),Xt(),i.$$.dirty.fill(0)),i.$$.dirty[e/31|0]|=1<<e%31}function ii(i,e,t,s,n,r,a,o=[-1]){const h=we;G(i);const c=i.$$={fragment:null,ctx:null,props:r,update:q,not_equal:n,bound:Oe(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(h?h.$$.context:[])),callbacks:Oe(),dirty:o,skip_bound:!1,root:e.target||h.$$.root};a&&a(c.root);let g=!1;if(c.ctx=t?t(i,e.props||{},(l,w,...C)=>{const y=C.length?C[0]:w;return c.ctx&&n(c.ctx[l],c.ctx[l]=y)&&(!c.skip_bound&&c.bound[l]&&c.bound[l](y),g&&ti(i,l)),w}):[],c.update(),g=!0,$(c.before_update),c.fragment=s?s(c.ctx):!1,e.target){if(e.hydrate){const l=Ht(e.target);c.fragment&&c.fragment.l(l),l.forEach(ie)}else c.fragment&&c.fragment.c();e.intro&&qt(i.$$.fragment),$t(i,e.target,e.anchor,e.customElement),Qe()}G(h)}class si{$destroy(){ei(this,1),this.$destroy=q}$on(e,t){const s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{const n=s.indexOf(t);n!==-1&&s.splice(n,1)}}$set(e){this.$$set&&!Wt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}function Ge(i){let e,t,s;return{c(){e=U("img"),N(e,"class","netless-window-manager-cursor-selector-avatar"),N(e,"style",t=i[15]()),te(e.src,s=i[7])||N(e,"src",s),N(e,"alt","avatar")},m(n,r){Me(n,e,r)},p(n,r){r&128&&!te(e.src,s=n[7])&&N(e,"src",s)},d(n){n&&ie(e)}}}function Ye(i){let e,t;return{c(){e=U("span"),t=me(i[1]),N(e,"class","netless-window-manager-cursor-tag-name"),D(e,"background-color",i[10])},m(s,n){Me(s,e,n),P(e,t)},p(s,n){n&2&&Re(t,s[1]),n&1024&&D(e,"background-color",s[10])},d(s){s&&ie(e)}}}function ni(i){let e,t,s,n,r,a,o,h,c,g,l,w,C=i[13]&&Ge(i),y=i[14]&&Ye(i);return{c(){e=U("div"),t=U("div"),s=U("div"),C&&C.c(),n=Ie(),r=U("span"),a=me(i[0]),o=Ie(),y&&y.c(),h=Ie(),c=U("div"),g=U("img"),D(r,"overflow","hidden"),D(r,"white-space","nowrap"),D(r,"text-overflow","ellipsis"),D(r,"max-width","80px"),N(s,"class",i[8]),D(s,"background-color",i[2]),D(s,"color",i[9]),D(s,"opacity",i[11]),N(t,"class","netless-window-manager-cursor-name"),N(g,"class",l="netless-window-manager-cursor-"+i[3]+"-image"),te(g.src,w=i[6])||N(g,"src",w),N(g,"alt",i[3]),N(c,"class","cursor-image-wrapper"),N(e,"class","netless-window-manager-cursor-mid"),D(e,"transform","translateX("+i[4]+"px) translateY("+i[5]+"px)"),D(e,"display",i[12])},m(M,S){Me(M,e,S),P(e,t),P(t,s),C&&C.m(s,null),P(s,n),P(s,r),P(r,a),P(s,o),y&&y.m(s,null),P(e,h),P(e,c),P(c,g)},p(M,[S]){M[13]?C?C.p(M,S):(C=Ge(M),C.c(),C.m(s,n)):C&&(C.d(1),C=null),S&1&&Re(a,M[0]),M[14]?y?y.p(M,S):(y=Ye(M),y.c(),y.m(s,null)):y&&(y.d(1),y=null),S&256&&N(s,"class",M[8]),S&4&&D(s,"background-color",M[2]),S&512&&D(s,"color",M[9]),S&2048&&D(s,"opacity",M[11]),S&8&&l!==(l="netless-window-manager-cursor-"+M[3]+"-image")&&N(g,"class",l),S&64&&!te(g.src,w=M[6])&&N(g,"src",w),S&8&&N(g,"alt",M[3]),S&48&&D(e,"transform","translateX("+M[4]+"px) translateY("+M[5]+"px)"),S&4096&&D(e,"display",M[12])},i:q,o:q,d(M){M&&ie(e),C&&C.d(),y&&y.d()}}}function ri(i,e,t){let s,n,r,a,{cursorName:o}=e,{tagName:h}=e,{backgroundColor:c}=e,{appliance:g}=e,{x:l}=e,{y:w}=e,{src:C}=e,{visible:y}=e,{avatar:M}=e,{theme:S}=e,{color:F}=e,{cursorTagBackgroundColor:He}=e,{opacity:_e}=e;const fi=()=>Object.entries({width:(s?19:28)+"px",height:(s?19:28)+"px",position:s?"initial":"absolute","border-color":s?"white":c,"margin-right":(s?4:0)+"px"}).map(([f,Ai])=>`${f}: ${Ai}`).join(";");return i.$$set=f=>{"cursorName"in f&&t(0,o=f.cursorName),"tagName"in f&&t(1,h=f.tagName),"backgroundColor"in f&&t(2,c=f.backgroundColor),"appliance"in f&&t(3,g=f.appliance),"x"in f&&t(4,l=f.x),"y"in f&&t(5,w=f.y),"src"in f&&t(6,C=f.src),"visible"in f&&t(16,y=f.visible),"avatar"in f&&t(7,M=f.avatar),"theme"in f&&t(8,S=f.theme),"color"in f&&t(9,F=f.color),"cursorTagBackgroundColor"in f&&t(10,He=f.cursorTagBackgroundColor),"opacity"in f&&t(11,_e=f.opacity)},i.$$.update=()=>{i.$$.dirty&1&&(s=!u.isEmpty(o)),i.$$.dirty&2&&t(14,n=!u.isEmpty(h)),i.$$.dirty&128&&t(13,r=!u.isEmpty(M)),i.$$.dirty&65536&&t(12,a=y?"initial":"none")},[o,h,c,g,l,w,C,M,S,F,He,_e,a,r,n,fi,y]}class ai extends si{constructor(e){super();ii(this,e,ri,ni,Ft,{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})}}var oi="data:image/png;base64,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",ci="data:image/png;base64,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",hi="data:image/png;base64,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",ui="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",gi="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=";const Fe={[d.ApplianceNames.pencil]:oi,[d.ApplianceNames.selector]:ci,[d.ApplianceNames.eraser]:hi,[d.ApplianceNames.shape]:ui,[d.ApplianceNames.text]:gi};class di extends K{constructor(e,t,s,n,r,a){super(e);this.cursors=s,this.memberId=n,this.cursorManager=r,this.wrapper=a,this.onCursorChange=(o,h)=>{var c;if(o.type==="main"){const g=this.cursorManager.wrapperRect;this.component&&g&&(this.autoHidden(),this.moveCursor(o,g,this.manager.mainView))}else{const g=this.cursorManager.focusView,l=(c=g==null?void 0:g.divElement)==null?void 0:c.getBoundingClientRect(),w=g==null?void 0:g.camera;g&&l&&w&&this.component&&(this.autoHidden(),this.moveCursor(o,l,g))}h&&h===V.Leave&&this.hide()},this.setMember(),this.createCursor(),t(this.memberId,this.onCursorChange),this.autoHidden()}moveCursor(e,t,s){var h,c;const{x:n,y:r,type:a}=e,o=s==null?void 0:s.screen.convertPointToScreen(n,r);if(o){let g=o.x-2,l=o.y-18;if(a==="app"){const w=this.cursorManager.wrapperRect;w&&(g=g+t.x-w.x,l=l+t.y-w.y)}o.x<0||o.x>t.width||o.y<0||o.y>t.height?(h=this.component)==null||h.$set({visible:!1,x:g,y:l}):(c=this.component)==null||c.$set({visible:!0,x:g,y:l})}}get memberApplianceName(){var e,t;return(t=(e=this.member)==null?void 0:e.memberState)==null?void 0:t.currentApplianceName}get memberColor(){var t,s;return`rgb(${(s=(t=this.member)==null?void 0:t.memberState)==null?void 0:s.strokeColor.join(",")})`}get payload(){var e;return(e=this.member)==null?void 0:e.payload}get memberCursorName(){var e,t;return((e=this.payload)==null?void 0:e.nickName)||((t=this.payload)==null?void 0:t.cursorName)||this.memberId}get memberTheme(){var e;return((e=this.payload)==null?void 0:e.theme)?"netless-window-manager-cursor-inner-mellow":"netless-window-manager-cursor-inner"}get memberCursorTextColor(){var e;return((e=this.payload)==null?void 0:e.cursorTextColor)||"#FFFFFF"}get memberCursorTagBackgroundColor(){var e;return((e=this.payload)==null?void 0:e.cursorTagBackgroundColor)||this.memberColor}get memberAvatar(){var e;return(e=this.payload)==null?void 0:e.avatar}get memberOpacity(){return!this.memberCursorName&&!this.memberAvatar?0:1}get cursorState(){return u.get(this.cursors,[this.memberId,p.CursorState])}get cursorPosition(){return u.get(this.cursors,[this.memberId,p.Position])}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.hide(),this.store.updateCursorState(this.memberId,V.Leave)},1e3*10)}async createCursor(){this.member&&this.wrapper&&(this.component=new ai({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 Fe[this.memberApplianceName||d.ApplianceNames.shape]||Fe[d.ApplianceNames.shape]}setMember(){this.member=this.context.findMemberByUid(this.memberId),this.updateComponent()}updateComponent(){var e;(e=this.component)==null||e.$set(u.omit(this.initProps(),["x","y"]))}destroy(){var e;this.component&&this.component.$destroy(),(e=this.manager.refresher)==null||e.remove(this.memberId),this.cursorManager.cursorInstances.delete(this.memberId)}hide(){this.component&&this.component.$set({visible:!1})}}class pi extends K{constructor(e){super(e);var s;this.appManager=e,this.cursorInstances=new Map,this.sideEffectManager=new H.SideEffectManager,this.getUids=n=>u.compact(u.uniq(n==null?void 0:n.map(r=>{var a;return(a=r.payload)==null?void 0:a.uid}))),this.handleRoomMembersChange=u.debounce(n=>{const r=this.getUids(this.roomMembers),a=Object.keys(this.cursors);(r==null?void 0:r.length)&&a.map(o=>{if(r.includes(o)&&!this.cursorInstances.has(o)){if(o===this.context.uid)return;const h=new di(this.appManager,this.addCursorChangeListener,this.cursors,o,this,n);this.cursorInstances.set(o,h)}})},100),this.mouseMoveListener=u.debounce(n=>{this.updateCursor(this.getType(n),n.clientX,n.clientY)},5),this.getPoint=(n,r,a)=>{var h;const o=(h=n==null?void 0:n.divElement)==null?void 0:h.getBoundingClientRect();if(o)return n==null?void 0:n.convertToPointInWorld({x:r-o.x,y:a-o.y})},this.getType=n=>{var o;const r=n.target,a=this.appManager.focusApp;switch(r.parentElement){case this.mainViewElement:return{type:"main"};case((o=a==null?void 0:a.view)==null?void 0:o.divElement):return{type:"app"};default:return{type:"main"}}},this.mouseLeaveListener=()=>{this.hideCursor(this.context.uid),this.store.updateCursorState(this.context.uid,V.Leave)},this.addCursorChangeListener=(n,r)=>{var a;(a=this.manager.refresher)==null||a.add(n,()=>d.autorun(()=>{const h=u.get(this.cursors,[n,p.Position]),c=u.get(this.cursors,[n,p.CursorState]);h&&r(h,c)}))},this.roomMembers=(s=this.appManager.room)==null?void 0:s.state.roomMembers;const t=x.wrapper;t&&this.setupWrapper(t),A.on("onReconnected",()=>{this.onReconnect()})}setupWrapper(e){var t;((t=this.manager.refresher)==null?void 0:t.hasReactor("cursors"))&&this.destroy(),this.sideEffectManager.add(()=>(e.addEventListener("pointerenter",this.mouseMoveListener),e.addEventListener("pointermove",this.mouseMoveListener),e.addEventListener("pointerleave",this.mouseLeaveListener),()=>{e.removeEventListener("pointerenter",this.mouseMoveListener),e.removeEventListener("pointermove",this.mouseMoveListener),e.removeEventListener("pointerleave",this.mouseLeaveListener)})),this.initCursorAttributes(),this.wrapperRect=e.getBoundingClientRect(),this.startReaction(e)}setMainViewDivElement(e){this.mainViewElement=e}startReaction(e){var t;(t=this.manager.refresher)==null||t.add("cursors",()=>Et(this.cursors,()=>{this.handleRoomMembersChange(e)}))}get cursors(){var e;return(e=this.manager.attributes)==null?void 0:e[p.Cursors]}get boxState(){return this.store.getBoxState()}get focusView(){var e;return(e=this.appManager.focusApp)==null?void 0:e.view}updateCursor(e,t,s){if(this.wrapperRect&&this.manager.canOperate){const n=e.type==="main"?this.appManager.mainView:this.focusView,r=this.getPoint(n,t,s);r&&(this.setNormalCursorState(),this.store.updateCursor(this.context.uid,T({x:r.x,y:r.y},e)))}}initCursorAttributes(){this.store.updateCursor(this.context.uid,{x:0,y:0,type:"main"}),this.store.updateCursorState(this.context.uid,V.Leave)}setNormalCursorState(){this.store.getCursorState(this.context.uid)!==V.Normal&&this.store.updateCursorState(this.context.uid,V.Normal)}updateContainerRect(){var e,t;this.containerRect=(e=x.container)==null?void 0:e.getBoundingClientRect(),this.wrapperRect=(t=x.wrapper)==null?void 0:t.getBoundingClientRect()}setRoomMembers(e){this.roomMembers=e,this.cursorInstances.forEach(t=>{t.setMember()}),x.wrapper&&this.handleRoomMembersChange(x.wrapper)}deleteCursor(e){this.store.cleanCursor(e);const t=this.cursorInstances.get(e);t&&t.destroy()}hideCursor(e){const t=this.cursorInstances.get(e);t&&t.hide()}cleanMemberAttributes(e){const t=this.getUids(e),s=[];Object.keys(this.cursors).map(r=>{t.findIndex(o=>o===r)===-1&&s.push(r)}),s.forEach(r=>{this.deleteCursor(r)})}onReconnect(){var e;this.cursorInstances.size&&(this.cursorInstances.forEach(t=>t.destroy()),this.cursorInstances.clear()),this.roomMembers=(e=this.appManager.room)==null?void 0:e.state.roomMembers,x.wrapper&&this.handleRoomMembersChange(x.wrapper)}destroy(){var e;this.sideEffectManager.flushAll(),this.cursorInstances.size&&(this.cursorInstances.forEach(t=>{t.destroy()}),this.cursorInstances.clear()),(e=this.manager.refresher)==null||e.remove("cursors")}}class li{constructor(e){this.ctx=e,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=t=>{t===d.RoomPhase.Connected&&this.phase===d.RoomPhase.Reconnecting&&this.onReconnected(),this.phase=t},this.onReconnected=u.debounce(()=>{Z("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach((t,s)=>{u.isFunction(t)&&this.disposers.set(s,t())}),this.ctx.emitter.emit("onReconnected",void 0)},3e3)}setRoom(e){this.room=e,this.phase=e==null?void 0:e.phase,e==null||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),e==null||e.callbacks.on("onPhaseChanged",this.onPhaseChanged)}setContext(e){this.ctx=e}releaseDisposers(){this.disposers.forEach(e=>{u.isFunction(e)&&e()}),this.disposers.clear()}add(e,t){u.isFunction(t)&&(this.reactors.set(e,t),this.disposers.set(e,t()))}remove(e){this.reactors.has(e)&&this.reactors.delete(e);const t=this.disposers.get(e);t&&(u.isFunction(t)&&t(),this.disposers.delete(e))}hasReactor(e){return this.reactors.has(e)}destroy(){var e;(e=this.room)==null||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),this.releaseDisposers()}}const Mi=(i,e)=>{if(d.isPlayer(i)){const t=i,s=t.seekToProgressTime;async function n(r){const a=await s.call(t,r);return a==="success"&&A.emit("seek",r),a}t.seekToProgressTime=n}else{if(Object.getOwnPropertyDescriptor(i,"disableCameraTransform"))return;Object.defineProperty(i,"disableCameraTransform",{get(){return e.mainView.disableCameraTransform},set(s){e.mainView.disableCameraTransform=s}}),Object.defineProperty(i,"canUndoSteps",{get(){return e.mainView.canUndoSteps}}),Object.defineProperty(i,"canRedoSteps",{get(){return e.mainView.canRedoSteps}}),i.moveCamera=s=>e.mainView.moveCamera(s),i.moveCameraToContain=(...s)=>e.moveCameraToContain(...s),i.convertToPointInWorld=(...s)=>e.mainView.convertToPointInWorld(...s),i.setCameraBound=(...s)=>e.mainView.setCameraBound(...s),i.scenePreview=(...s)=>e.mainView.scenePreview(...s),i.fillSceneSnapshot=(...s)=>e.mainView.fillSceneSnapshot(...s),i.generateScreenshot=(...s)=>e.mainView.generateScreenshot(...s),i.setMemberState=(...s)=>e.mainView.setMemberState(...s),i.redo=()=>e.mainView.redo(),i.undo=()=>e.mainView.undo(),i.cleanCurrentScene=()=>e.mainView.cleanCurrentScene()}};var Ni="";const mi=()=>{x.debug&&xe.setOptions({verbose:!0}),x.register({kind:re.default.kind,src:re.default}),x.register({kind:ae.default.kind,src:ae.default})},Ii={DocsViewer:re.default.kind,MediaPlayer:ae.default.kind},wi=i=>{const e=document.createElement("div");e.className="netless-window-manager-playground";const t=document.createElement("div");t.className="netless-window-manager-sizer";const s=document.createElement("div");s.className="netless-window-manager-wrapper";const n=document.createElement("div");return n.className="netless-window-manager-main-view",e.appendChild(t),t.appendChild(s),s.appendChild(n),i.appendChild(e),x.wrapper=s,{playground:e,wrapper:s,sizer:t,mainViewElement:n}};var Di="",Ti="";const A=new X.default,B=new X.default,We=new li({emitter:A}),m=class extends d.InvisiblePlugin{constructor(i){super(i);this.version="0.4.0-canary.16",this.emitter=B,this.viewMode=d.ViewMode.Broadcaster,this.isReplay=d.isPlayer(this.displayer),m.displayer=i.displayer}static async mount(i){const e=i.room;m.container=i.container;const t=i.containerSizeRatio,s=i.debug,n=i.cursor;if(m.params=i,this.checkVersion(),d.isRoom(e)){if(e.phase!==d.RoomPhase.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");e.phase===d.RoomPhase.Connected&&e.isWritable&&(e.disableSerialization=!1)}if(m.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");let r=await this.initManager(e);if(this.debug=Boolean(s),Z("Already insert room",r),d.isRoom(this.displayer)){if(!r)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await ye.default(async a=>{if(r=await this.initManager(e),!r)throw Z(`manager is empty. retrying ${a}`),new Error},{retries:10});t&&(m.containerSizeRatio=t),await r.ensureAttributes(),r.appManager=new kt(r),n&&(r.cursorManager=new pi(r.appManager)),i.container&&r.bindContainer(i.container),Mi(e,r),A.emit("onCreated"),m.isCreated=!0;try{await nt()}catch(a){console.warn("[WindowManager]: indexedDB open failed"),console.log(a)}return r}static async initManager(i){let e=i.getInvisiblePlugin(m.kind);if(!e&&d.isRoom(i))if(i.isWritable===!1){try{await i.setWritable(!0)}catch{throw new Error("[WindowManger]: room must be switched to be writable")}e=await i.createInvisiblePlugin(m,{}),e.ensureAttributes(),await Ee(500),await i.setWritable(!1)}else e=await i.createInvisiblePlugin(m,{});return e}static initContainer(i,e,t,s){m.container||(m.container=e);const{playground:n,wrapper:r,sizer:a,mainViewElement:o}=wi(e);if(m.playground=n,t&&a.classList.add("netless-window-manager-chess-sizer"),s){const h=document.createElement("style");h.textContent=s,n.appendChild(h)}return i.containerResizeObserver=le.create(n,a,r,A),m.wrapper=r,o}bindContainer(i){var e,t,s,n,r,a;if(m.isCreated&&m.container)m.container.firstChild&&i.appendChild(m.container.firstChild);else if(m.params){const o=m.params,h=m.initContainer(this,i,o.chessboard,o.overwriteStyles),c=Qt(this,B,A,{collectorContainer:o.collectorContainer,collectorStyles:o.collectorStyles,prefersColorScheme:o.prefersColorScheme});this.boxManager=c,(e=this.appManager)==null||e.setBoxManager(c),this.bindMainView(h,o.disableCameraTransform),m.wrapper&&((t=this.cursorManager)==null||t.setupWrapper(m.wrapper))}(s=this.boxManager)==null||s.updateManagerRect(),(n=this.appManager)==null||n.refresh(),(r=this.appManager)==null||r.resetMaximized(),(a=this.appManager)==null||a.resetMinimized(),m.container=i}bindCollectorContainer(i){m.isCreated&&this.boxManager?this.boxManager.setCollectorContainer(i):m.params&&(m.params.collectorContainer=i)}static register(i){return O.register(i)}async addApp(i){var e,t,s;if(this.appManager){if(!i.kind||typeof i.kind!="string")throw new bt;const n=await((e=O.appClasses.get(i.kind))==null?void 0:e());if(n&&((t=n.config)==null?void 0:t.singleton)&&this.appManager.appProxies.has(i.kind))throw new yt;const r=this.setupScenePath(i,this.appManager);return r===void 0?void 0:(((s=i==null?void 0:i.options)==null?void 0:s.scenePath)&&(i.options.scenePath=Ct(i.options.scenePath)),await this.appManager.addApp(i,Boolean(r)))}else throw new k}setupScenePath(i,e){var s,n,r;let t=!1;if(i.options){const{scenePath:a,scenes:o}=i.options;if(a){if(!At(a))throw new Dt;const h=Object.keys(this.apps||{});for(const c of h){const g=e.store.getAppScenePath(c);if(g&&g===a){if(console.warn(`[WindowManager]: ScenePath ${a} Already opened`),this.boxManager){const l=this.boxManager.getTopBox();l&&this.boxManager.setZIndex(c,l.zIndex+1,!1)}return}}}a&&o&&o.length>0&&(this.isDynamicPPT(o)?(t=!0,this.displayer.entireScenes()[a]||(s=this.room)==null||s.putScenes(a,o)):this.displayer.entireScenes()[a]||(n=this.room)==null||n.putScenes(a,[{name:o[0].name}])),a&&o===void 0&&((r=this.room)==null||r.putScenes(a,[{}]))}return t}async setMainViewScenePath(i){this.appManager&&await this.appManager.setMainViewScenePath(i)}async setMainViewSceneIndex(i){this.appManager&&await this.appManager.setMainViewSceneIndex(i)}getMainViewScenePath(){var i;return(i=this.appManager)==null?void 0:i.store.getMainViewScenePath()}getMainViewSceneIndex(){var i;return(i=this.appManager)==null?void 0:i.store.getMainViewSceneIndex()}setReadonly(i){var e;this.readonly=i,(e=this.boxManager)==null||e.setReadonly(i)}switchMainViewToWriter(){var i;return(i=this.appManager)==null?void 0:i.mainViewProxy.mainViewClickHandler()}onAppDestroy(i,e){ft(`destroy-${i}`,e)}setViewMode(i){var e,t,s;!this.canOperate||(i===d.ViewMode.Broadcaster&&((e=this.appManager)==null||e.mainViewProxy.setCameraAndSize(),(t=this.appManager)==null||t.mainViewProxy.start()),i===d.ViewMode.Freedom&&((s=this.appManager)==null||s.mainViewProxy.stop()),this.viewMode=i)}get mainView(){if(this.appManager)return this.appManager.mainViewProxy.view;throw new k}get camera(){if(this.appManager)return this.appManager.mainViewProxy.view.camera;throw new k}get cameraState(){if(this.appManager)return this.appManager.mainViewProxy.cameraState;throw new k}get apps(){var i;return(i=this.appManager)==null?void 0:i.store.apps()}get boxState(){var i;if(this.appManager)return(i=this.appManager.boxManager)==null?void 0:i.boxState;throw new k}get darkMode(){var i,e;return Boolean((e=(i=this.appManager)==null?void 0:i.boxManager)==null?void 0:e.darkMode)}get prefersColorScheme(){var i;if(this.appManager)return(i=this.appManager.boxManager)==null?void 0:i.prefersColorScheme;throw new k}get focused(){return this.attributes.focus}get mainViewSceneIndex(){var i;return(i=this.appManager)==null?void 0:i.store.getMainViewSceneIndex()}get mainViewSceneDir(){var e;const i=(e=this.appManager)==null?void 0:e.store.getMainViewScenePath();if(i)return ue(i);throw new Error("[WindowManager]: mainViewSceneDir not found")}queryAll(){var i;return Array.from(((i=this.appManager)==null?void 0:i.appProxies.values())||[])}queryOne(i){var e;return(e=this.appManager)==null?void 0:e.appProxies.get(i)}async closeApp(i){var e;return(e=this.appManager)==null?void 0:e.closeApp(i)}moveCamera(i){this.mainView.moveCamera(i)}moveCameraToContain(i){var e;this.mainView.moveCameraToContain(i),(e=this.appManager)==null||e.dispatchInternalEvent(j.MoveCameraToContain,i),setTimeout(()=>{var t;(t=this.appManager)==null||t.mainViewProxy.setCameraAndSize()},1e3)}convertToPointInWorld(i){return this.mainView.convertToPointInWorld(i)}setCameraBound(i){this.mainView.setCameraBound(i)}onDestroy(){this._destroy()}destroy(){this._destroy()}_destroy(){var i,e,t,s;(i=this.containerResizeObserver)==null||i.disconnect(),(e=this.appManager)==null||e.destroy(),(t=this.cursorManager)==null||t.destroy(),m.container=void 0,m.wrapper=void 0,m.isCreated=!1,m.playground&&((s=m.playground.parentNode)==null||s.removeChild(m.playground)),m.params=void 0,Z("Destroyed")}bindMainView(i,e){var t;this.appManager&&(this.appManager.bindMainView(i,Boolean(e)),(t=this.cursorManager)==null||t.setMainViewDivElement(i))}get canOperate(){return d.isRoom(this.displayer)?this.displayer.isWritable&&this.displayer.phase===d.RoomPhase.Connected:!1}get room(){return this.displayer}safeSetAttributes(i){this.canOperate&&this.setAttributes(i)}safeUpdateAttributes(i,e){this.canOperate&&this.updateAttributes(i,e)}setPrefersColorScheme(i){var e,t;(t=(e=this.appManager)==null?void 0:e.boxManager)==null||t.setPrefersColorScheme(i)}isDynamicPPT(i){var t,s;const e=(s=(t=i[0])==null?void 0:t.ppt)==null?void 0:s.src;return e==null?void 0:e.startsWith("pptx://")}static checkVersion(){if(je(d.WhiteVersion)<je(Se))throw new St(Se)}async ensureAttributes(){if(u.isNull(this.attributes)&&await Ee(50),u.isObject(this.attributes)){this.attributes[p.Apps]||this.safeSetAttributes({[p.Apps]:{}}),this.attributes[p.Cursors]||this.safeSetAttributes({[p.Cursors]:{}});const i=this.displayer.state.sceneState;this.attributes._mainScenePath||this.safeSetAttributes({_mainScenePath:i.scenePath}),this.attributes._mainSceneIndex||this.safeSetAttributes({_mainSceneIndex:i.index})}}};let x=m;x.kind="WindowManager",x.debug=!1,x.containerSizeRatio=it,x.isCreated=!1,mi(),I.BuiltinApps=Ii,I.WindowManager=x,I.callbacks=B,I.emitter=A,I.reconnectRefresher=We,Object.defineProperty(I,"__esModule",{value:!0}),I[Symbol.toStringTag]="Module"});
2
2
  //# sourceMappingURL=index.umd.js.map