@netless/window-manager 1.0.17-beta.1 → 1.0.17-beta.2
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/app-presentation.js +1 -20
- package/dist/app-presentation.js.map +1 -1
- package/dist/app-presentation.mjs +254 -5421
- package/dist/app-presentation.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/BuiltinApps.ts +1 -2
package/dist/index.js
CHANGED
|
@@ -13,6 +13,6 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */var X=function(){return X=Object.assign||function(e){for(var t,s=1,r=arguments.length;s<r;s++){t=arguments[s];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},X.apply(this,arguments)};function oi(i,e){var t={};for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&e.indexOf(s)<0&&(t[s]=i[s]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,s=Object.getOwnPropertySymbols(i);r<s.length;r++)e.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(i,s[r])&&(t[s[r]]=i[s[r]]);return t}var jt=0,fs=typeof window!="undefined"&&window.requestAnimationFrame!==void 0?function(i){return window.requestAnimationFrame(i)}:function(i){var e=Date.now(),t=Math.max(0,16.7-(e-jt));jt=e+t,setTimeout(function(){return i(jt)},t)},Vr=function(i){var e=[],t=[],s=0,r=!1,n=0,a=new WeakSet,o=new WeakSet,h={cancel:function(c){var l=t.indexOf(c);a.add(c),l!==-1&&t.splice(l,1)},process:function(c){var l;if(r=!0,l=[t,e],e=l[0],t=l[1],t.length=0,s=e.length,s){var u;for(n=0;n<s;n++)u=e[n],u(c),o.has(u)===!0&&!a.has(u)&&(h.schedule(u),i(!0))}r=!1},schedule:function(c,l,u){l===void 0&&(l=!1),u===void 0&&(u=!1);var d=u&&r,m=d?e:t;a.delete(c),l&&o.add(c),m.indexOf(c)===-1&&(m.push(c),d&&(s=e.length))}};return h},jr=40,Ei=1/60*1e3,ft=!0,Je=!1,Kt=!1,Oe={delta:0,timestamp:0},hi=["read","update","preRender","render","postRender"],Rr=function(i){return Je=i},Ms=hi.reduce(function(i,e){return i[e]=Vr(Rr),i},{}),kr=hi.reduce(function(i,e){var t=Ms[e];return i[e]=function(s,r,n){return r===void 0&&(r=!1),n===void 0&&(n=!1),Je||_r(),t.schedule(s,r,n),s},i},{}),Ur=function(i){return Ms[i].process(Oe)},ws=function(i){Je=!1,Oe.delta=ft?Ei:Math.max(Math.min(i-Oe.timestamp,jr),1),ft||(Ei=Oe.delta),Oe.timestamp=i,Kt=!0,hi.forEach(Ur),Kt=!1,Je&&(ft=!1,fs(ws))},_r=function(){Je=!0,ft=!0,Kt||fs(ws)},xs=function(i,e){return function(t){return Math.max(Math.min(t,e),i)}},Mt=function(i){return i%1?Number(i.toFixed(5)):i},Ss=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i,bt={test:function(i){return typeof i=="number"},parse:parseFloat,transform:function(i){return i}},Ze=X(X({},bt),{transform:xs(0,1)}),dt=X(X({},bt),{default:1}),ci=function(i){return{test:function(e){return typeof e=="string"&&e.endsWith(i)&&e.split(" ").length===1},parse:parseFloat,transform:function(e){return""+e+i}}},we=ci("deg"),Fe=ci("%"),T=ci("px"),Vi=X(X({},Fe),{parse:function(i){return Fe.parse(i)/100},transform:function(i){return Fe.transform(i*100)}}),Or=function(i){return i.substring(i.indexOf("(")+1,i.lastIndexOf(")"))},Wr=xs(0,255),qt=function(i){return i.red!==void 0},ei=function(i){return i.hue!==void 0};function $r(i){return Or(i).replace(/(,|\/)/g," ").split(/ \s*/)}var bs=function(i){return function(e){if(typeof e!="string")return e;for(var t={},s=$r(e),r=0;r<4;r++)t[i[r]]=s[r]!==void 0?parseFloat(s[r]):1;return t}},Zr=function(i){var e=i.red,t=i.green,s=i.blue,r=i.alpha,n=r===void 0?1:r;return"rgba("+e+", "+t+", "+s+", "+n+")"},Fr=function(i){var e=i.hue,t=i.saturation,s=i.lightness,r=i.alpha,n=r===void 0?1:r;return"hsla("+e+", "+t+", "+s+", "+n+")"},Rt=X(X({},bt),{transform:function(i){return Math.round(Wr(i))}});function li(i,e){return i.startsWith(e)&&Ss.test(i)}var wt={test:function(i){return typeof i=="string"?li(i,"rgb"):qt(i)},parse:bs(["red","green","blue","alpha"]),transform:function(i){var e=i.red,t=i.green,s=i.blue,r=i.alpha,n=r===void 0?1:r;return Zr({red:Rt.transform(e),green:Rt.transform(t),blue:Rt.transform(s),alpha:Mt(Ze.transform(n))})}},kt={test:function(i){return typeof i=="string"?li(i,"hsl"):ei(i)},parse:bs(["hue","saturation","lightness","alpha"]),transform:function(i){var e=i.hue,t=i.saturation,s=i.lightness,r=i.alpha,n=r===void 0?1:r;return Fr({hue:Math.round(e),saturation:Fe.transform(Mt(t)),lightness:Fe.transform(Mt(s)),alpha:Mt(Ze.transform(n))})}},ji=X(X({},wt),{test:function(i){return typeof i=="string"&&li(i,"#")},parse:function(i){var e="",t="",s="";return i.length>4?(e=i.substr(1,2),t=i.substr(3,2),s=i.substr(5,2)):(e=i.substr(1,1),t=i.substr(2,1),s=i.substr(3,1),e+=e,t+=t,s+=s),{red:parseInt(e,16),green:parseInt(t,16),blue:parseInt(s,16),alpha:1}}}),ne={test:function(i){return typeof i=="string"&&Ss.test(i)||qt(i)||ei(i)},parse:function(i){return wt.test(i)?wt.parse(i):kt.test(i)?kt.parse(i):ji.test(i)?ji.parse(i):i},transform:function(i){return qt(i)?wt.transform(i):ei(i)?kt.transform(i):i}},ui=function(i){var e=i.onRead,t=i.onRender,s=i.uncachedValues,r=s===void 0?new Set:s,n=i.useCache,a=n===void 0?!0:n;return function(o){o===void 0&&(o={});var h=oi(o,[]),c={},l=[],u=!1;function d(g,b){g.startsWith("--")&&(h.hasCSSVariable=!0);var M=c[g];c[g]=b,c[g]!==M&&(l.indexOf(g)===-1&&l.push(g),u||(u=!0,kr.render(m.render)))}var m={get:function(g,b){b===void 0&&(b=!1);var M=!b&&a&&!r.has(g)&&c[g]!==void 0;return M?c[g]:e(g,h)},set:function(g,b){if(typeof g=="string")d(g,b);else for(var M in g)d(M,g[M]);return this},render:function(g){return g===void 0&&(g=!1),(u||g===!0)&&(t(c,h,l),u=!1,l.length=0),this}};return m}},Gr=/([a-z])([A-Z])/g,Qr="$1-$2",vt=function(i){return i.replace(Gr,Qr).toLowerCase()},vs=new Map,di=new Map,Is=["Webkit","Moz","O","ms",""],Yr=Is.length,Hr=typeof document!="undefined",Ut,ys=function(i,e){return di.set(i,vt(e))},Jr=function(i){Ut=Ut||document.createElement("div");for(var e=0;e<Yr;e++){var t=Is[e],s=t==="",r=s?i:t+i.charAt(0).toUpperCase()+i.slice(1);if(r in Ut.style||s){if(s&&i==="clipPath"&&di.has(i))return;vs.set(i,r),ys(i,(s?"":"-")+vt(r))}}},Xr=function(i){return ys(i,i)},Cs=function(i,e){e===void 0&&(e=!1);var t=e?di:vs;return t.has(i)||(Hr?Jr(i):Xr(i)),t.get(i)||i},Kr=["","X","Y","Z"],qr=["translate","scale","rotate","skew","transformPerspective"],ti=qr.reduce(function(i,e){return Kr.reduce(function(t,s){return t.push(e+s),t},i)},["x","y","z"]),ea=ti.reduce(function(i,e){return i[e]=!0,i},{});function gi(i){return ea[i]===!0}function ta(i,e){return ti.indexOf(i)-ti.indexOf(e)}var ia=new Set(["originX","originY","originZ"]);function sa(i){return ia.has(i)}var Ri=X(X({},bt),{transform:Math.round}),ra={color:ne,backgroundColor:ne,outlineColor:ne,fill:ne,stroke:ne,borderColor:ne,borderTopColor:ne,borderRightColor:ne,borderBottomColor:ne,borderLeftColor:ne,borderWidth:T,borderTopWidth:T,borderRightWidth:T,borderBottomWidth:T,borderLeftWidth:T,borderRadius:T,radius:T,borderTopLeftRadius:T,borderTopRightRadius:T,borderBottomRightRadius:T,borderBottomLeftRadius:T,width:T,maxWidth:T,height:T,maxHeight:T,size:T,top:T,right:T,bottom:T,left:T,padding:T,paddingTop:T,paddingRight:T,paddingBottom:T,paddingLeft:T,margin:T,marginTop:T,marginRight:T,marginBottom:T,marginLeft:T,rotate:we,rotateX:we,rotateY:we,rotateZ:we,scale:dt,scaleX:dt,scaleY:dt,scaleZ:dt,skew:we,skewX:we,skewY:we,distance:T,translateX:T,translateY:T,translateZ:T,x:T,y:T,z:T,perspective:T,opacity:Ze,originX:Vi,originY:Vi,originZ:T,zIndex:Ri,fillOpacity:Ze,strokeOpacity:Ze,numOctaves:Ri},pi=function(i){return ra[i]},aa=function(i,e){return e&&typeof i=="number"?e.transform(i):i},Ge="scrollLeft",Qe="scrollTop",As=new Set([Ge,Qe]),na=new Set([Ge,Qe,"transform"]),oa={x:"translateX",y:"translateY",z:"translateZ"};function Bs(i){return typeof i=="function"}function ha(i,e,t,s,r,n){n===void 0&&(n=!0);var a="",o=!1;t.sort(ta);for(var h=t.length,c=0;c<h;c++){var l=t[c];a+=(oa[l]||l)+"("+e[l]+") ",o=l==="z"?!0:o}return!o&&r?a+="translateZ(0)":a=a.trim(),Bs(i.transform)?a=i.transform(e,s?"":a):n&&s&&(a="none"),a}function ca(i,e,t,s,r,n,a,o){e===void 0&&(e=!0),t===void 0&&(t={}),s===void 0&&(s={}),r===void 0&&(r={}),n===void 0&&(n=[]),a===void 0&&(a=!1),o===void 0&&(o=!0);var h=!0,c=!1,l=!1;for(var u in i){var d=i[u],m=pi(u),g=aa(d,m);gi(u)?(c=!0,s[u]=g,n.push(u),h&&(m.default&&d!==m.default||!m.default&&d!==0)&&(h=!1)):sa(u)?(r[u]=g,l=!0):(!na.has(u)||!Bs(g))&&(t[Cs(u,a)]=g)}return(c||typeof i.transform=="function")&&(t.transform=ha(i,s,n,h,e,o)),l&&(t.transformOrigin=(r.originX||"50%")+" "+(r.originY||"50%")+" "+(r.originZ||0)),t}function mi(i){var e=i===void 0?{}:i,t=e.enableHardwareAcceleration,s=t===void 0?!0:t,r=e.isDashCase,n=r===void 0?!0:r,a=e.allowTransformNone,o=a===void 0?!0:a,h={},c={},l={},u=[];return function(d){return u.length=0,ca(d,s,h,c,l,u,n,o),h}}function la(i,e){var t=e.element,s=e.preparseOutput,r=pi(i);if(gi(i))return r&&r.default||0;if(As.has(i))return t[i];var n=window.getComputedStyle(t,null).getPropertyValue(Cs(i,!0))||0;return s&&r&&r.test(n)&&r.parse?r.parse(n):n}function ua(i,e,t){var s=e.element,r=e.buildStyles,n=e.hasCSSVariable;if(Object.assign(s.style,r(i)),n)for(var a=t.length,o=0;o<a;o++){var h=t[o];h.startsWith("--")&&s.style.setProperty(h,i[h])}t.indexOf(Ge)!==-1&&(s[Ge]=i[Ge]),t.indexOf(Qe)!==-1&&(s[Qe]=i[Qe])}var da=ui({onRead:la,onRender:ua,uncachedValues:As});function ga(i,e){e===void 0&&(e={});var t=e.enableHardwareAcceleration,s=e.allowTransformNone,r=oi(e,["enableHardwareAcceleration","allowTransformNone"]);return da(X({element:i,buildStyles:mi({enableHardwareAcceleration:t,allowTransformNone:s}),preparseOutput:!0},r))}var Ns=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues"]),ki=.5,zs=function(){return{style:{}}},_t=function(i,e){return T.transform(i*e)},pa={x:0,y:0,width:0,height:0};function Ui(i,e,t){return typeof i=="string"?i:T.transform(e+t*i)}function ma(i,e,t){return Ui(e,i.x,i.width)+" "+Ui(t,i.y,i.height)}var Ds={enableHardwareAcceleration:!1,isDashCase:!1};function fa(i,e,t,s,r,n){e===void 0&&(e=pa),s===void 0&&(s=mi(Ds)),r===void 0&&(r=zs()),n===void 0&&(n=!0);var a=i.attrX,o=i.attrY,h=i.originX,c=i.originY,l=i.pathLength,u=i.pathSpacing,d=u===void 0?1:u,m=i.pathOffset,g=m===void 0?0:m,b=oi(i,["attrX","attrY","originX","originY","pathLength","pathSpacing","pathOffset"]),M=s(b);for(var N in M)if(N==="transform")r.style.transform=M[N];else{var z=n&&!Ns.has(N)?vt(N):N;r[z]=M[N]}return(h!==void 0||c!==void 0||M.transform)&&(r.style.transformOrigin=ma(e,h!==void 0?h:ki,c!==void 0?c:ki)),a!==void 0&&(r.x=a),o!==void 0&&(r.y=o),t!==void 0&&l!==void 0&&(r[n?"stroke-dashoffset":"strokeDashoffset"]=_t(-g,t),r[n?"stroke-dasharray":"strokeDasharray"]=_t(l,t)+" "+_t(d,t)),r}function Ma(i,e,t){t===void 0&&(t=!0);var s=zs(),r=mi(Ds);return function(n){return fa(n,i,e,r,s,t)}}var wa=function(i){return typeof i.getBBox=="function"?i.getBBox():i.getBoundingClientRect()},xa=function(i){try{return wa(i)}catch{return{x:0,y:0,width:0,height:0}}},Sa=function(i){return i.tagName==="path"},ba=ui({onRead:function(i,e){var t=e.element;if(i=Ns.has(i)?i:vt(i),gi(i)){var s=pi(i);return s&&s.default||0}else return t.getAttribute(i)},onRender:function(i,e){var t=e.element,s=e.buildAttrs,r=s(i);for(var n in r)n==="style"?Object.assign(t.style,r.style):t.setAttribute(n,r[n])}}),va=function(i){var e=xa(i),t=Sa(i)&&i.getTotalLength?i.getTotalLength():void 0;return ba({element:i,buildAttrs:Ma(e,t)})},Ia=ui({useCache:!1,onRead:function(i){return i==="scrollTop"?window.pageYOffset:window.pageXOffset},onRender:function(i){var e=i.scrollTop,t=e===void 0?0:e,s=i.scrollLeft,r=s===void 0?0:s;return window.scrollTo(r,t)}}),ii=new WeakMap,ya=function(i){return i instanceof HTMLElement||typeof i.click=="function"},Ca=function(i){return i instanceof SVGElement||"ownerSVGElement"in i},Aa=function(i,e){var t;return i===window?t=Ia(i):ya(i)?t=ga(i,e):Ca(i)&&(t=va(i)),ii.set(i,t),t},Ba=function(i,e){return ii.has(i)?ii.get(i):Aa(i,e)};function Na(i,e){var t=typeof i=="string"?document.querySelector(i):i;return Ba(t,e)}var oe=function(e,t,s,r){var n=s?s.call(r,e,t):void 0;if(n!==void 0)return!!n;if(e===t)return!0;if(typeof e!="object"||!e||typeof t!="object"||!t)return!1;var a=Object.keys(e),o=Object.keys(t);if(a.length!==o.length)return!1;for(var h=Object.prototype.hasOwnProperty.bind(t),c=0;c<a.length;c++){var l=a[c];if(!h(l))return!1;var u=e[l],d=t[l];if(n=s?s.call(r,u,d,l):void 0,n===!1||n===void 0&&u!==d)return!1}return!0};const Ts="!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",za=Ts.length,_i=Array(20),Ue=()=>{for(let i=0;i<20;i++)_i[i]=Ts.charAt(Math.random()*za);return _i.join("")};class xt{constructor(){this.disposers=new Map}add(e,t=Ue()){return this.flush(t),this.disposers.set(t,e()),t}addDisposer(e,t=Ue()){return this.flush(t),this.disposers.set(t,e),t}addEventListener(e,t,s,r,n=Ue()){return this.add(()=>(e.addEventListener(t,s,r),()=>e.removeEventListener(t,s,r)),n),n}setTimeout(e,t,s=Ue()){return this.add(()=>{const r=window.setTimeout(()=>{this.remove(s),e()},t);return()=>window.clearTimeout(r)},s)}setInterval(e,t,s=Ue()){return this.add(()=>{const r=window.setInterval(e,t);return()=>window.clearInterval(r)},s)}remove(e){const t=this.disposers.get(e);return this.disposers.delete(e),t}flush(e){const t=this.remove(e);if(t)try{t()}catch(s){console.error(s)}}flushAll(){this.disposers.forEach(e=>{try{e()}catch(t){console.error(t)}}),this.disposers.clear()}}var Da=Object.defineProperty,Ot=(typeof require!="undefined"&&require,(i,e,t)=>(((s,r,n)=>{r in s?Da(s,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[r]=n})(i,typeof e!="symbol"?e+"":e,t),t));class et{constructor(e,t){Ot(this,"_value"),Ot(this,"_beforeDestroys"),Ot(this,"_subscribers"),this._value=e,t&&(this.compare=t)}get value(){return this._value}setValue(e,t){if(!this.compare(e,this._value)){const s=this._value;this._value=e,this._subscribers&&this._subscribers.forEach(r=>r(e,s,t))}}reaction(e){return this._subscribers||(this._subscribers=new Set),this._subscribers.add(e),()=>{this._subscribers&&this._subscribers.delete(e)}}subscribe(e,t){const s=this.reaction(e);return e(this._value,void 0,t),s}derive(e,t,s){const r=new et(e(this.value,void 0,s),t),n=this.reaction((a,o,h)=>{r.setValue(e(a,o,h))});return r.addBeforeDestroy(n),r}destroy(){this._beforeDestroys&&(this._beforeDestroys.forEach(e=>e()),this._beforeDestroys.clear()),this._subscribers&&this._subscribers.clear()}addBeforeDestroy(e){return this._beforeDestroys||(this._beforeDestroys=new Set),this._beforeDestroys.add(e),()=>{this._beforeDestroys&&this._beforeDestroys.delete(e)}}compare(e,t){return e===t}}function Ta(i,e,t,s){let r=i.map(a=>a.value);const n=new et(e(r,void 0,s),t);return i.forEach((a,o)=>{const h=a.reaction((c,l,u)=>{const d=r.slice();d[o]=c;const m=r;r=d,n.setValue(e(d,m,u),u)});n.addBeforeDestroy(h)}),n}function Ps(i,e){Object.keys(e).forEach(t=>{Pa(i,t,e[t])})}function Pa(i,e,t){var s;return Object.defineProperties(i,{[e]:{get:()=>t.value},[`_${e}$`]:{value:t},[`set${s=e,s[0].toUpperCase()+s.slice(1)}`]:{value:(r,n)=>t.setValue(r,n)}}),i}function Ls(i){const e=t=>{const s=i.addDisposer(()=>{t.destroy()});return t.addBeforeDestroy(()=>{i.remove(s)}),t};return{bindSideEffect:e,combine:(t,s,r,n)=>e(Ta(t,s,r,n)),createVal:(t,s)=>e(new et(t,s))}}var fi=(i=>(i.Light="light",i.Dark="dark",i.Auto="auto",i))(fi||{}),x=(i=>(i.Normal="normal",i.Minimized="minimized",i.Maximized="maximized",i))(x||{}),k=(i=>(i.DarkMode="dark_mode",i.PrefersColorScheme="prefers_color_scheme",i.Close="close",i.Focus="focus",i.Blur="blur",i.Move="move",i.Resize="resize",i.IntrinsicMove="intrinsic_move",i.IntrinsicResize="intrinsic_resize",i.VisualResize="visual_resize",i.ZIndex="z_index",i.State="state",i.Minimized="minimized",i.Maximized="maximized",i.Readonly="readonly",i.Destroyed="destroyed",i.BoxStatus="box_status",i.LastNotMinimizedBoxStatus="last_not_minimized_box_status",i.ForceTop="force_top",i.ForceNormal="force_normal",i))(k||{}),H=(i=>(i.Close="close",i.Maximize="maximize",i.Minimize="minimize",i))(H||{}),he=(i=>(i.North="n",i.South="s",i.West="w",i.East="e",i.NorthWest="nw",i.NorthEast="ne",i.SouthEast="se",i.SouthWest="sw",i))(he||{});const Wt="dh";function K(i,e,t){return Math.min(Math.max(i,e),t)}function De(i){i.stopPropagation(),i.cancelable&&i.preventDefault()}function Oi(i){return i.touches?i.touches[0]:i}function La(){return Date.now().toString().slice(6)+Math.random().toString().slice(2,8)}let Ea=1;function Va(){return`New Box ${Ea++}`}function ja(i){return Boolean(i)}function gt(i){return!i}class Es{constructor({readonly:e=!1,title:t,buttons:s,onEvent:r,onDragStart:n,namespace:a="telebox",state:o=x.Normal,boxStatus:h,forceTop:c=!1,forceNormal:l=!1}={}){this.$btns=[],this.sideEffect=new xt,this.lastTitleBarClick={timestamp:0,clientX:-100,clientY:-100},this.handleTitleBarClick=u=>{var d;if(this.readonly||u.button!==0||(d=u.target.dataset)!=null&&d.teleTitleBarNoDblClick)return;De(u);const m=Date.now();m-this.lastTitleBarClick.timestamp<=500?Math.abs(u.clientX-this.lastTitleBarClick.clientX)<=5&&Math.abs(u.clientY-this.lastTitleBarClick.clientY)<=5&&this.onEvent&&this.onEvent({type:H.Maximize}):this.onDragStart&&this.onDragStart(u),this.lastTitleBarClick.timestamp=m,this.lastTitleBarClick.clientX=u.clientX,this.lastTitleBarClick.clientY=u.clientY},this.lastTitleBarTouch={timestamp:0,clientX:-100,clientY:-100},this.handleTitleBarTouch=u=>{var d;if(this.readonly||(d=u.target.dataset)!=null&&d.teleTitleBarNoDblClick)return;De(u);const m=Date.now(),{clientX:g=this.lastTitleBarTouch.clientX+100,clientY:b=this.lastTitleBarTouch.clientY+100}=u.touches[0]||{};m-this.lastTitleBarTouch.timestamp<=500?Math.abs(g-this.lastTitleBarTouch.clientX)<=10&&Math.abs(b-this.lastTitleBarTouch.clientY)<=10&&this.onEvent&&this.onEvent({type:H.Maximize}):this.onDragStart&&this.onDragStart(u),this.lastTitleBarTouch.timestamp=m,this.lastTitleBarTouch.clientX=g,this.lastTitleBarTouch.clientY=b},this.readonly=e,this.onEvent=r,this.onDragStart=n,this.namespace=a,this.title=t,this.state=o,this.boxStatus=h,this.forceTop=c,this.forceNormal=l,this.buttons=s||(l?[{type:H.Close,iconClassName:this.wrapClassName("titlebar-icon-close")}]:[{type:H.Minimize,iconClassName:this.wrapClassName("titlebar-icon-minimize")},{type:H.Maximize,iconClassName:this.wrapClassName("titlebar-icon-maximize"),isActive:u=>u===x.Maximized},{type:H.Close,iconClassName:this.wrapClassName("titlebar-icon-close")}]),this.$dragArea=this.renderDragArea()}setTitle(e){this.title=e,this.$title&&(this.$title.textContent=e,this.$title.title=e)}setState(e){this.state!==e&&(this.state=e,this.buttons.forEach((t,s)=>{t.isActive&&this.$btns[s].classList.toggle("is-active",t.isActive(e))}))}setBoxStatus(e){this.boxStatus!==e&&(this.boxStatus=e,e&&this.buttons.forEach((t,s)=>{t.isActive&&this.$btns[s].classList.toggle("is-active",t.isActive(e))}))}setReadonly(e){this.readonly!==e&&(this.readonly=e)}render(){if(!this.$titleBar){this.$titleBar=document.createElement("div"),this.$titleBar.className=this.wrapClassName("titlebar");const e=document.createElement("div");e.className=this.wrapClassName("title-area"),e.dataset.teleBoxHandle=Wt,this.$title=document.createElement("h1"),this.$title.className=this.wrapClassName("title"),this.$title.dataset.teleBoxHandle=Wt,this.title&&(this.$title.textContent=this.title,this.$title.title=this.title),e.appendChild(this.$title),e.appendChild(this.$dragArea);const t=document.createElement("div");t.className=this.wrapClassName("titlebar-btns"),this.buttons.forEach(({iconClassName:s,isActive:r},n)=>{const a=String(n),o=document.createElement("button");o.className=`${this.wrapClassName("titlebar-btn")} ${s}`,o.dataset.teleTitleBarBtnIndex=a,o.dataset.teleTitleBarNoDblClick="true",r&&o.classList.toggle("is-active",r(this.boxStatus||this.state)),this.$btns.push(o),t.appendChild(o)}),this.sideEffect.addEventListener(t,"click",s=>{var r;if(this.readonly)return;const n=s.target,a=Number((r=n.dataset)==null?void 0:r.teleTitleBarBtnIndex);if(!Number.isNaN(a)&&a<this.buttons.length){De(s);const o=this.buttons[a];this.onEvent&&this.onEvent({type:o.type,value:o.value})}}),this.$titleBar.appendChild(e),this.$titleBar.appendChild(t)}return this.$titleBar}renderDragArea(){const e=document.createElement("div");return e.className=this.wrapClassName("drag-area"),e.dataset.teleBoxHandle=Wt,this.sideEffect.addEventListener(e,"mousedown",this.handleTitleBarClick),this.sideEffect.addEventListener(e,"touchstart",this.handleTitleBarTouch,{passive:!0}),e}dragHandle(){return this.$titleBar}wrapClassName(e){return`${this.namespace}-${e}`}destroy(){this.sideEffect.flushAll(),this.$titleBar&&(this.$titleBar=void 0,this.$title=void 0,this.$btns.length=0,this.onDragStart=void 0,this.onEvent=void 0)}}class Ra{constructor({id:e=La(),title:t=Va(),prefersColorScheme:s=fi.Light,darkMode:r,visible:n=!0,width:a=.5,height:o=.5,minWidth:h=0,minHeight:c=0,x:l=.1,y:u=.1,minimized:d=!1,maximized:m=!1,readonly:g=!1,resizable:b=!0,draggable:M=!0,fence:N=!0,fixRatio:z=!1,focus:v=!1,zIndex:Z=100,namespace:_="telebox",titleBar:W,content:ie,footer:Ie,styles:pe,containerRect:Ve={x:0,y:0,width:window.innerWidth,height:window.innerHeight},collectorRect:S,boxStatus:p,lastNotMinimizedBoxStatus:B,forceTop:D=!1,forceNormal:Y=!1,isDragContent:F=!1}={}){this._renderSideEffect=new xt,this.handleTrackStart=I=>{var E;return(E=this._handleTrackStart)==null?void 0:E.call(this,I)},this._sideEffect=new xt,this._valSideEffectBinder=Ls(this._sideEffect);const{combine:ae,createVal:V}=this._valSideEffectBinder;this.id=e,this.namespace=_,this.events=new Xt,this._delegateEvents=new Xt;const le=V(p),bi=V(B),Ct=V(s);Ct.reaction((I,E,y)=>{y||this.events.emit(k.PrefersColorScheme,I)});const je=V(Boolean(r));r==null&&Ct.subscribe((I,E,y)=>{this._sideEffect.add(()=>{if(I==="auto"){const $=window.matchMedia("(prefers-color-scheme: dark)");if($){je.setValue($.matches,y);const Ce=ut=>{je.setValue(ut.matches,y)};return $.addListener(Ce),()=>$.removeListener(Ce)}else return Wi}else return je.setValue(I==="dark",y),Wi},"prefers-color-scheme")}),je.reaction((I,E,y)=>{y||this.events.emit(k.DarkMode,I)});const At=V(Ve,oe),Bt=V(S,oe),Nt=V(D);Nt.reaction((I,E,y)=>{y||this.events.emit(k.ForceTop,I||!1)});const zt=V(Y);zt.reaction((I,E,y)=>{y||this.events.emit(k.ForceNormal,I||!1)});const Fs=V(F),Dt=V(t);Dt.reaction((I,E,y)=>{y||this.titleBar.setTitle(I)});const Tt=V(n);Tt.reaction((I,E,y)=>{!y&&!I&&this.events.emit(k.Close)});const ht=V(g);ht.reaction((I,E,y)=>{y||this.events.emit(k.Readonly,I)});const Gs=V(b),Qs=V(M),Ys=V(N),Hs=V(z),vi=V(Z);vi.reaction((I,E,y)=>{y||this.events.emit(k.ZIndex,I)});const Ii=V(v);Ii.reaction((I,E,y)=>{y||this.events.emit(I?k.Focus:k.Blur)});const ye=V(d);ye.reaction((I,E,y)=>{y||this.events.emit(k.Minimized,I)});const Me=V(m);Me.reaction((I,E,y)=>{y||this.events.emit(k.Maximized,I)});const yi=ae([ye,Me,le],([I,E,y])=>I?x.Minimized:E?x.Maximized:y||x.Normal);yi.reaction((I,E,y)=>{y||this.events.emit(k.State,I)});const ct=V({width:K(h,0,1),height:K(c,0,1)},oe),Re=V({width:K(a,ct.value.width,1),height:K(o,ct.value.height,1)},oe);ct.reaction((I,E,y)=>{Re.setValue({width:K(a,I.width,1),height:K(o,I.height,1)},y)}),Re.reaction((I,E,y)=>{y||this.events.emit(k.IntrinsicResize,I)});const ke=ae([Re,Me,le],([I,E,y])=>E||y===x.Maximized?{width:1,height:1}:I,oe);ke.reaction((I,E,y)=>{y||this.events.emit(k.Resize,I)});const Ci=ae([ke,ye,At,Bt,le],([I,E,y,$,Ce])=>(E||Ce===x.Minimized)&&$?{width:$.width/I.width/y.width,height:$.height/I.height/y.height}:I,oe);Ci.reaction((I,E,y)=>{y||this.events.emit(k.VisualResize,I)});const Pt=V({x:K(l,0,1),y:K(u,0,1)},oe);Pt.reaction((I,E,y)=>{y||this.events.emit(k.IntrinsicMove,I)});const lt=ae([Pt,Re,At,Bt,ye,Me,le,bi],([I,E,y,$,Ce,ut,Ai,qs])=>(Ce||Ai===x.Minimized)&&$?ut||qs===x.Maximized?{x:($.x+$.width/2)/y.width-1/2,y:($.y+$.height/2)/y.height-1/2}:{x:($.x+$.width/2)/y.width-E.width/2,y:($.y+$.height/2)/y.height-E.height/2}:ut||Ai===x.Maximized?{x:0,y:0}:I,oe);lt.reaction((I,E,y)=>{y||this.events.emit(k.Move,I)}),this.titleBar=W||new Es({readonly:ht.value,title:Dt.value,namespace:this.namespace,boxStatus:le.value,forceTop:Nt.value,forceNormal:zt.value,onDragStart:I=>{var E;return(E=this._handleTrackStart)==null?void 0:E.call(this,I)},onEvent:I=>{if(this._delegateEvents.listeners.length>0)this._delegateEvents.emit(I.type);else switch(I.type){case H.Maximize:{le.value||Me.setValue(!Me.value);break}case H.Minimize:{le.value||ye.setValue(!0);break}case H.Close:{Tt.setValue(!1);break}default:{console.error("Unsupported titleBar event:",I);break}}}}),ht.reaction(I=>{this.titleBar.setReadonly(I)}),le.reaction(I=>{this.titleBar.setBoxStatus(I)});const Js=V(ie),Xs=V(Ie),Ks=V(pe);Ps(this,{prefersColorScheme:Ct,darkMode:je,containerRect:At,collectorRect:Bt,title:Dt,visible:Tt,readonly:ht,resizable:Gs,draggable:Qs,fence:Ys,fixRatio:Hs,focus:Ii,zIndex:vi,minimized:ye,maximized:Me,$userContent:Js,$userFooter:Xs,$userStyles:Ks,forceTop:Nt,forceNormal:zt,isDragContent:Fs}),this._state$=yi,this._minSize$=ct,this._size$=ke,this._intrinsicSize$=Re,this._visualSize$=Ci,this._coord$=lt,this._intrinsicCoord$=Pt,this._boxStatus$=le,this._lastNotMinimizedBoxStatus$=bi,this.fixRatio&&this.transform(lt.value.x,lt.value.y,ke.value.width,ke.value.height,!0),this.$box=this.render()}get boxStatus(){return this._boxStatus$.value}set boxStatus(e){this._boxStatus$.setValue(e)}get lastNotMinimizedBoxStatus(){return this._lastNotMinimizedBoxStatus$.value}get darkMode(){return this._darkMode$.value}get state(){return this._state$.value}setState(e,t=!1){switch(e){case x.Maximized:{this.setMinimized(!1,t),this.setMaximized(!0,t);break}case x.Minimized:{this.setMinimized(!0,t),this.setMaximized(!1,t);break}default:{this.setMinimized(!1,t),this.setMaximized(!1,t);break}}return this}setBoxStatus(e,t=!1){return e===x.Minimized?this._boxStatus$.value&&this._boxStatus$.value!==x.Minimized&&this.setLastNotMinimizedBoxStatus(this._boxStatus$.value,t):this.setLastNotMinimizedBoxStatus(void 0,t),this._boxStatus$.setValue(e,t),t||this.events.emit(k.BoxStatus,{id:this.id,boxStatus:e}),this}setLastNotMinimizedBoxStatus(e,t=!1){return this._lastNotMinimizedBoxStatus$.setValue(e,t),t||this.events.emit(k.LastNotMinimizedBoxStatus,{id:this.id,lastNotMinimizedBoxStatus:e}),this}get minWidth(){return this._minSize$.value.width}get minHeight(){return this._minSize$.value.height}setMinWidth(e,t=!1){return this._minSize$.setValue({width:e,height:this.minHeight},t),this}setMinHeight(e,t=!1){return this._minSize$.setValue({width:this.minWidth,height:e},t),this}get intrinsicWidth(){return this._intrinsicSize$.value.width}get intrinsicHeight(){return this._intrinsicSize$.value.height}resize(e,t,s=!1){return this._intrinsicSize$.setValue({width:e,height:t},s),this}get width(){return this._size$.value.width}get height(){return this._size$.value.height}get absoluteWidth(){return this.width*this.containerRect.width}get absoluteHeight(){return this.height*this.containerRect.height}get visualWidth(){return this._visualSize$.value.width}get visualHeight(){return this._visualSize$.value.height}get intrinsicX(){return this._intrinsicCoord$.value.x}get intrinsicY(){return this._intrinsicCoord$.value.y}move(e,t,s=!1){return this._intrinsicCoord$.setValue({x:e,y:t},s),this}get x(){return this._coord$.value.x}get y(){return this._coord$.value.y}transform(e,t,s,r,n=!1){if(this.fixRatio){const a=this.intrinsicHeight/this.intrinsicWidth*s;t!==this.intrinsicY&&(t-=a-r),r=a}return t<0&&(t=0,r>this.intrinsicHeight&&(r=this.intrinsicHeight)),this._intrinsicCoord$.setValue({x:s>=this.minWidth?e:this.intrinsicX,y:r>=this.minHeight?t:this.intrinsicY},n),this._intrinsicSize$.setValue({width:K(s,this.minWidth,1),height:K(r,this.minHeight,1)},n),this}mount(e){return e.appendChild(this.render()),this}unmount(){return this.$box&&this.$box.remove(),this}mountContent(e){return this.set$userContent(e),this}unmountContent(){return this.set$userContent(void 0),this}mountFooter(e){return this.set$userFooter(e),this}unmountFooter(){return this.set$userFooter(void 0),this}getUserStyles(){return this.$userStyles}mountStyles(e){let t;return typeof e=="string"?(t=document.createElement("style"),t.textContent=e):t=e,this.set$userStyles(t),this}unmountStyles(){return this.set$userStyles(void 0),this}render(e){if(e){if(e===this.$box)return this.$box;this.$box=e}else{if(this.$box)return this.$box;this.$box=document.createElement("div")}this._renderSideEffect.flushAll(),this.$box.classList.add(this.wrapClassName("box"));const t=(u,d,m,g=ja)=>this._renderSideEffect.add(()=>{const b=this.wrapClassName(m);return d.subscribe(M=>{u.classList.toggle(b,g(M))})});t(this.$box,this._readonly$,"readonly"),t(this.$box,this._draggable$,"no-drag",gt),t(this.$box,this._resizable$,"no-resize",gt),t(this.$box,this._focus$,"blur",gt),t(this.$box,this._darkMode$,"color-scheme-dark"),t(this.$box,this._darkMode$,"color-scheme-light",gt),this._renderSideEffect.add(()=>{const u=this.wrapClassName("minimized"),d=this.wrapClassName("maximized"),m="box-maximized-timer";return this._state$.subscribe(g=>{this.$box.classList.toggle(u,g===x.Minimized),g===x.Maximized?(this._renderSideEffect.flush(m),this.$box.classList.toggle(d,!0)):this._renderSideEffect.setTimeout(()=>{this.$box.classList.toggle(d,!1)},0,m)})}),this._renderSideEffect.add(()=>this._visible$.subscribe(u=>{u?this.$box.style.removeProperty("display"):this.$box.style.display="none"})),this._renderSideEffect.add(()=>this._zIndex$.subscribe(u=>{this.$box.style.zIndex=String(u)}));const s=Na(this.$box);this.$box.dataset.teleBoxID=this.id,this.$box.style.width=this.absoluteWidth+"px",this.$box.style.height=this.absoluteHeight+"px";const r=this.x*this.containerRect.width+this.containerRect.x,n=this.y*this.containerRect.height+this.containerRect.y;this.$box.style.transform=`translate(${r-10}px,${n-10}px)`,this._valSideEffectBinder.combine([this._coord$,this._size$,this._minimized$,this._containerRect$,this._collectorRect$,this._boxStatus$],([u,d,m,g,b,M])=>{const N=d.width*g.width,z=d.height*g.height;return{width:N+((m||M===x.Minimized)&&b?1:0),height:z+((m||M===x.Minimized)&&b?1:0),x:u.x*g.width,y:u.y*g.height,scaleX:(m||M===x.Minimized)&&b?b.width/N:1,scaleY:(m||M===x.Minimized)&&b?b.height/z:1}},oe).subscribe(u=>{s.set(u)}),s.set({x:r,y:n});const a=document.createElement("div");a.className=this.wrapClassName("box-main"),this.$box.appendChild(a);const o=document.createElement("div");o.className=this.wrapClassName("titlebar-wrap"),o.appendChild(this.titleBar.render()),this.$titleBar=o;const h=document.createElement("div");h.className=this.wrapClassName("content-wrap");const c=document.createElement("div");c.className=this.wrapClassName("content")+" tele-fancy-scrollbar",this.$content=c,this.isDragContent&&this.$content.appendChild(this.titleBar.$dragArea),this._renderSideEffect.add(()=>{let u;return this._$userStyles$.subscribe(d=>{u&&u.remove(),u=d,d&&h.appendChild(d)})}),this._renderSideEffect.add(()=>{let u;return this._$userContent$.subscribe(d=>{u&&u.remove(),u=d,d&&c.appendChild(d)})}),h.appendChild(c);const l=document.createElement("div");return l.className=this.wrapClassName("footer-wrap"),this.$footer=l,this._renderSideEffect.add(()=>{let u;return this._$userFooter$.subscribe(d=>{u&&u.remove(),u=d,d&&l.appendChild(d)})}),a.appendChild(o),a.appendChild(h),a.appendChild(l),this._renderResizeHandlers(),this.$box}_renderResizeHandlers(){const e=document.createElement("div");e.className=this.wrapClassName("resize-handles"),Object.values(he).forEach(b=>{const M=document.createElement("div");M.className=this.wrapClassName(b)+" "+this.wrapClassName("resize-handle"),M.dataset.teleBoxHandle=b,e.appendChild(M)}),this.$box.appendChild(e);const t="handle-tracking-listener",s=this.wrapClassName("transforming");let r,n=0,a=0,o=0,h=0,c=0,l=0,u;const d=b=>{if(this.state!==x.Normal)return;De(b);let{pageX:M,pageY:N}=Oi(b);N<0&&(N=0);const z=(M-c)/this.containerRect.width,v=(N-l)/this.containerRect.height;switch(u){case he.North:{this.transform(this.x,a+v,this.width,h-v);break}case he.South:{this.transform(this.x,this.y,this.width,h+v);break}case he.West:{this.transform(n+z,this.y,o-z,this.height);break}case he.East:{this.transform(this.x,this.y,o+z,this.height);break}case he.NorthWest:{this.transform(n+z,a+v,o-z,h-v);break}case he.NorthEast:{this.transform(this.x,a+v,o+z,h-v);break}case he.SouthEast:{this.transform(this.x,this.y,o+z,h+v);break}case he.SouthWest:{this.transform(n+z,this.y,o-z,h+v);break}default:{if(this.fence)this.move(K(n+z,0,1-this.width),K(a+v,0,1-this.height));else{const Z=20/this.containerRect.width,_=20/this.containerRect.height;this.move(K(n+z,Z-this.width,1-Z),K(a+v,0,1-_))}break}}},m=b=>{u=void 0,r&&(De(b),this.$box.classList.toggle(s,!1),this._sideEffect.flush(t),r.remove())},g=b=>{var M;if(this.readonly||b.button!=null&&b.button!==0||!this.draggable||u||this.state!==x.Normal)return;const N=b.target;if((M=N.dataset)!=null&&M.teleBoxHandle){De(b),n=this.x,a=this.y,o=this.width,h=this.height,{pageX:c,pageY:l}=Oi(b),u=N.dataset.teleBoxHandle,r||(r=document.createElement("div"));const z=u?this.wrapClassName(`cursor-${u}`):"";r.className=this.wrapClassName(`track-mask${z?` ${z}`:""}`),this.$box.appendChild(r),this.$box.classList.add(s),this._sideEffect.add(()=>(window.addEventListener("mousemove",d),window.addEventListener("touchmove",d,{passive:!1}),window.addEventListener("mouseup",m),window.addEventListener("touchend",m,{passive:!1}),window.addEventListener("touchcancel",m,{passive:!1}),()=>{window.removeEventListener("mousemove",d),window.removeEventListener("touchmove",d),window.removeEventListener("mouseup",m),window.removeEventListener("touchend",m),window.removeEventListener("touchcancel",m)}),t)}};this._handleTrackStart=g,this._sideEffect.addEventListener(e,"mousedown",g,{},"box-resizeHandles-mousedown"),this._sideEffect.addEventListener(e,"touchstart",g,{passive:!1},"box-resizeHandles-touchstart")}destroy(){this.$box.remove(),this.events.emit(k.Destroyed),this._sideEffect.flushAll(),this._renderSideEffect.flushAll(),this.events.removeAllListeners(),this._delegateEvents.removeAllListeners()}wrapClassName(e){return`${this.namespace}-${e}`}}function Wi(){}var ka="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxNiI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxwYXRoIHN0cm9rZT0iIzdCODhBMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIGQ9Ik0uNyAxLjJoMTYuNnYxMy42SC43eiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSIjN0I4OEEwIiBkPSJNNCA1LjVoNnYxLjRINHpNNCA5LjVoMTB2MS40SDR6IiAvPgogICAgPC9nPgo8L3N2Zz4K";class Le{constructor({visible:e=!0,readonly:t=!1,darkMode:s=!1,namespace:r="telebox",styles:n={},onClick:a,getBoxesStatus:o}){this.$appMenuContainer=document.createElement("div"),this.handleCollectorClick=()=>{!this._readonly&&this.onClick&&this.onClick()},this._visible=e,this._readonly=t,this._darkMode=s,this.namespace=r,this.styles=n,this.onClick=a,this.getBoxesStatus=o}get boxesStatus(){var e;return(e=this.getBoxesStatus)==null?void 0:e.call(this)}get visible(){return this._visible}get readonly(){return this._readonly}get darkMode(){return this._darkMode}mount(e){return e.appendChild(this.render()),this}unmount(){return this.$collector&&this.$collector.remove(),this}hasMinimizedBox(){const e=this.boxesStatus;if(e){for(const t of e.values())if(t===x.Minimized)return!0}return!1}updateBoxesStatus(){const e=this.hasMinimizedBox();this.setVisible(e)}setVisible(e){return this._visible!==e&&(this._visible=e,this.$collector&&this.$collector.classList.toggle(this.wrapClassName("collector-visible"),e)),this}setReadonly(e){return this._readonly!==e&&(this._readonly=e,this.$collector&&this.$collector.classList.toggle(this.wrapClassName("collector-readonly"),e)),this}setDarkMode(e){return this._darkMode!==e&&(this._darkMode=e,this.$collector&&(this.$collector.classList.toggle(this.wrapClassName("color-scheme-dark"),e),this.$collector.classList.toggle(this.wrapClassName("color-scheme-light"),!e))),this}setStyles(e){if(Object.assign(this.styles,e),this.$collector){const t=this.$collector;Object.keys(e).forEach(s=>{const r=e[s];r!=null&&(t.style[s]=r)})}return this}render(){return this.$collector||(this.$collector=document.createElement("button"),this.$collector.className=this.wrapClassName("collector"),this.$collector.style.backgroundImage=`url('${ka}')`,this.$collector.addEventListener("click",this.handleCollectorClick),this._visible&&this.$collector.classList.add(this.wrapClassName("collector-visible")),this._readonly&&this.$collector.classList.add(this.wrapClassName("collector-readonly")),this.$collector.classList.add(this.wrapClassName(this._darkMode?"color-scheme-dark":"color-scheme-light")),this.$appMenuContainer.classList.add(this.wrapClassName("collector-shadow")),this.$collector.append(this.$appMenuContainer),this.setStyles(this.styles)),this.$collector}destroy(){this.$collector&&(this.$collector.removeEventListener("click",this.handleCollectorClick),this.$collector.remove(),this.$collector=void 0),this.onClick=void 0}wrapClassName(e){return`${this.namespace}-${e}`}}Le.kind="TeleBoxCollector";var O=(i=>(i.Focused="focused",i.Blurred="blurred",i.Created="created",i.Removed="removed",i.State="state",i.Maximized="maximized",i.Minimized="minimized",i.Move="move",i.Resize="resize",i.IntrinsicMove="intrinsic_move",i.IntrinsicResize="intrinsic_resize",i.VisualResize="visual_resize",i.ZIndex="z_index",i.PrefersColorScheme="prefers_color_scheme",i.DarkMode="dark_mode",i.BoxStatus="box_status",i.LastNotMinimizedBoxStatus="last_not_minimized_box_status",i))(O||{});class Ua extends Es{constructor(e){super(e),this.boxes=e.boxes,this.focusedBox=e.focusedBox,this.containerRect=e.containerRect,this.darkMode=e.darkMode,this.getBoxesStatus=e.getBoxesStatus}get boxesStatus(){var e;return(e=this.getBoxesStatus)==null?void 0:e.call(this)}hasMaximizedBoxInStatus(){if(this.getBoxesStatus){const e=this.getBoxesStatus();if(e.size)return!![...e.values()].find(s=>s===x.Maximized)}return!1}get MaximizedBoxes(){if(this.getBoxesStatus){const e=this.getBoxesStatus();if(e)return this.boxes.filter(t=>e&&e.get(t.id)===x.Maximized&&!t.forceTop)}return[]}focusBox(e){var t,s;if(!(this.focusedBox&&this.focusedBox===e)){if(this.$titles){const{children:r}=this.$titles.firstElementChild;if(this.state===x.Maximized&&!this.hasMaximizedBoxInStatus())for(let n=r.length-1;n>=0;n-=1){const a=r[n],o=(t=a.dataset)==null?void 0:t.teleBoxID;o&&(e&&o===e.id?a.classList.toggle(this.wrapClassName("titles-tab-focus"),!0):this.focusedBox&&o===this.focusedBox.id&&a.classList.toggle(this.wrapClassName("titles-tab-focus"),!1))}else if(this.hasMaximizedBoxInStatus())for(let n=r.length-1;n>=0;n-=1){const a=r[n],o=(s=a.dataset)==null?void 0:s.teleBoxID;o&&(e&&o===e.id?a.classList.toggle(this.wrapClassName("titles-tab-focus"),!0):this.focusedBox&&o===this.focusedBox.id&&a.classList.toggle(this.wrapClassName("titles-tab-focus"),!1))}}this.focusedBox=e}}setContainerRect(e){if(this.containerRect=e,this.$titleBar){const{x:t,y:s,width:r}=e;this.$titleBar.style.transform=`translate(${t}px, ${s}px)`,this.$titleBar.style.width=r+"px"}}updateBoxesStatus(){this.hasMaximizedBoxInStatus()&&this.setBoxStatus(x.Maximized),this.$titleBar&&this.$titleBar.classList.toggle(this.wrapClassName("max-titlebar-maximized"),this.state===x.Maximized&&this.boxes.length>0||this.hasMaximizedBoxInStatus()),this.updateTitles()}setBoxes(e){this.boxes=e,this.$titleBar&&this.$titleBar.classList.toggle(this.wrapClassName("max-titlebar-maximized"),this.state===x.Maximized&&e.length>0||this.hasMaximizedBoxInStatus()),this.updateTitles()}setState(e){super.setState(e),this.$titleBar&&this.$titleBar.classList.toggle(this.wrapClassName("max-titlebar-maximized"),e===x.Maximized&&this.boxes.length>0||this.hasMaximizedBoxInStatus()),this.updateTitles()}setReadonly(e){super.setReadonly(e),this.$titleBar&&this.$titleBar.classList.toggle(this.wrapClassName("readonly"),this.readonly)}setDarkMode(e){e!==this.darkMode&&(this.darkMode=e,this.$titleBar&&(this.$titleBar.classList.toggle(this.wrapClassName("color-scheme-dark"),e),this.$titleBar.classList.toggle(this.wrapClassName("color-scheme-light"),!e)))}render(){const e=super.render(),{x:t,y:s,width:r}=this.containerRect;e.style.transform=`translate(${t}px, ${s}px)`,e.style.width=r+"px",e.classList.add(this.wrapClassName("max-titlebar")),e.classList.toggle(this.wrapClassName("max-titlebar-maximized"),this.state===x.Maximized&&this.boxes.length>0),e.classList.toggle(this.wrapClassName("readonly"),this.readonly),e.classList.add(this.wrapClassName(this.darkMode?"color-scheme-dark":"color-scheme-light"));const n=document.createElement("div");return n.classList.add(this.wrapClassName("titles-area")),e.insertBefore(n,e.firstElementChild),this.updateTitles(),e}destroy(){super.destroy(),this.$titles=void 0,this.boxes.length=0,this.focusedBox=void 0}updateTitles(){this.$titleBar&&(this.state===x.Maximized||this.hasMaximizedBoxInStatus())&&(this.$titleBar.classList.toggle(this.wrapClassName("max-titlebar-single-title"),this.boxes.length===1||this.hasMaximizedBoxInStatus()&&this.MaximizedBoxes.length===1),this.boxes.length===1||this.hasMaximizedBoxInStatus()&&this.MaximizedBoxes.length===1?this.setTitle(this.boxes[0].title):this.$titleBar.replaceChild(this.renderTitles(),this.$titleBar.firstElementChild))}renderTitles(){this.$titles=document.createElement("div"),this.$titles.className=this.wrapClassName("titles"),this.$titles.addEventListener("wheel",t=>{t.currentTarget.scrollBy({left:t.deltaY>0?250:-250,behavior:"smooth"})},{passive:!1});const e=document.createElement("div");return e.className=this.wrapClassName("titles-content"),this.$titles.appendChild(e),(this.hasMaximizedBoxInStatus()?this.MaximizedBoxes:this.boxes).forEach(t=>{const s=document.createElement("button");s.className=this.wrapClassName("titles-tab"),s.textContent=t.title,s.dataset.teleBoxID=t.id,s.dataset.teleTitleBarNoDblClick="true",this.focusedBox&&t.id===this.focusedBox.id&&s.classList.add(this.wrapClassName("titles-tab-focus")),e.appendChild(s)}),this.$titles}}class _a{constructor(e){this.namespace="telebox-app-menu",this.badge=document.createElement("div"),this.menuView=document.createElement("div"),this.containerClickHandler=()=>{if(this.manager.readonly)return;getComputedStyle(this.menuView).display==="flex"?this.menuView.style.display="none":this.menuView.style.display="flex"},this.menuViewClickHandler=t=>{t.stopPropagation(),t.stopImmediatePropagation();const r=t.target.getAttribute(`data-${this.c("app-id")}`);if(r){const n=this.manager.getLastNotMinimizedBoxStatus(r)||x.Normal,a=(n===x.Maximized?this.manager.getMaxMaximizedBoxZIndex():this.manager.getMaxNormalBoxZIndex())+1;this.manager.setBox(r,{status:n,zIndex:a},!1,()=>{this.manager.focusBox(r)});return}},this.updatePrefersColorSchemeHandler=()=>{this.container.classList.remove(this.theme),this.theme=this.manager.prefersColorScheme,this.container.classList.add(this.theme)},this.appMenuChange=()=>{const t=this.manager.getMinimizedBoxesStatus();this.render(t)},this.container=e.container,this.manager=e.manager,this.theme=e.theme,this.getBoxesStatus=e.getBoxesStatus,this.init()}get boxesStatus(){var e;return((e=this.getBoxesStatus)==null?void 0:e.call(this))||new Map}get minimizedBoxesStatus(){const e=[];return this.boxesStatus.forEach(t=>{t===x.Minimized&&e.push(t)}),e}c(e){return`${this.namespace}-${e}`}setContainer(e){this.container&&this.container.remove(),this.container=e,this.init()}createDefaultAppMenu(){this.badge.classList.add(this.c("app-menu-badge")),this.menuView.classList.add(this.c("app-menu-tooltip")),this.container.classList.add(this.c("app-menu-container"),this.theme),this.menuView.addEventListener("click",this.menuViewClickHandler),this.container.append(this.badge,this.menuView)}async init(){this.createDefaultAppMenu(),this.appMenuChange()}createMinimizedItem(e){const t=document.createElement("div");t.classList.add(this.c("app-menu-item")),t.setAttribute(`data-${this.c("app-id")}`,e);const s=document.createElement("div");s.classList.add(this.c("app-menu-item-title"));const r=this.manager.getBox(e);return s.innerText=(r==null?void 0:r.title)||e,t.appendChild(s),t}renderMenuView(e){const t=[];e.forEach((s,r)=>{t.push(this.createMinimizedItem(r))}),this.menuView.append(...t)}render(e){this.menuView.style.display="none",this.badge.innerText="",this.menuView.innerHTML="",e.size===0?this.container.style.display="none":(this.badge.innerText=e.size.toString(),this.renderMenuView(e),this.container.style.display="block")}destroy(){this.badge.remove(),this.menuView.removeEventListener("click",this.menuViewClickHandler),this.menuView.remove(),this.container.remove()}}class tt{constructor({root:e=document.body,prefersColorScheme:t=fi.Light,minimized:s=!1,maximized:r=!1,fence:n=!0,containerRect:a={x:0,y:0,width:window.innerWidth,height:window.innerHeight},collector:o,namespace:h="telebox",readonly:c=!1,useBoxesStatus:l=!1}={}){this.events=new Xt,this._sideEffect=new xt,this.useBoxesStatus=l;const{combine:u,createVal:d}=Ls(this._sideEffect);this.root=e,this.namespace=h,this.boxes$=d([]),this.topBox$=this.boxes$.derive(S=>{if(S.length>0){let p;return S.reduce((D,Y)=>Y.forceTop||Y.boxStatus&&Y.boxStatus===x.Minimized?D:D?D.zIndex>Y.zIndex?D:Y:(D=Y,D),p)}}),this.boxesStatus$=new Map,this.lastNotMinimizedBoxesStatus$=new Map;const m=window.matchMedia("(prefers-color-scheme: dark)"),g=d(!1);m&&(g.setValue(m.matches),this._sideEffect.add(()=>{const S=p=>{g.setValue(p.matches)};return m.addListener(S),()=>m.removeListener(S)}));const b=d(t);b.reaction((S,p,B)=>{this.boxes.forEach(D=>D.setPrefersColorScheme(S,B)),B||this.events.emit(O.PrefersColorScheme,S)}),this._darkMode$=u([g,b],([S,p])=>p==="auto"?S:p==="dark"),this._darkMode$.reaction((S,p,B)=>{this.boxes.forEach(D=>D.setDarkMode(S,B)),B||this.events.emit(O.DarkMode,S)});const M=d(c);M.reaction((S,p,B)=>{this.boxes.forEach(D=>D.setReadonly(S,B))});const N=d(s),z=d(r);z.reaction((S,p,B)=>{this.boxes.forEach(D=>D.setMaximized(S,B)),B||this.events.emit(O.Maximized,S)});const v=u([N,z],([S,p])=>S?x.Minimized:p?x.Maximized:x.Normal);v.reaction((S,p,B)=>{this.maxTitleBar.setState(S),B||this.events.emit(O.State,S)});const Z=d(n);Z.subscribe((S,p,B)=>{this.boxes.forEach(D=>D.setFence(S,B))});const _=d(a,oe);_.reaction((S,p,B)=>{this.boxes.forEach(D=>D.setContainerRect(S,B)),this.maxTitleBar.setContainerRect(S)});const W=d(o===null?null:o||new Le({visible:s,readonly:c,namespace:h}).mount(e));W.subscribe(S=>{S&&(S.setVisible(N.value),S.setReadonly(M.value),S.setDarkMode(this._darkMode$.value),this.useBoxesStatus&&this.appMenu&&this.appMenu.setContainer(S.$appMenuContainer),this._sideEffect.add(()=>(S.getBoxesStatus=()=>this.boxesStatus$,S.onClick=()=>{M.value||(this.useBoxesStatus?this.useBoxesStatus&&this.appMenu&&this.appMenu.containerClickHandler():N.setValue(!1))},()=>S.destroy()),"collect-onClick"))}),M.subscribe(S=>{var p;return(p=W.value)==null?void 0:p.setReadonly(S)}),this._darkMode$.subscribe(S=>{var p;(p=W.value)==null||p.setDarkMode(S)}),this._calcCollectorRect=()=>{var S;if((S=W.value)!=null&&S.$collector){const{x:p,y:B,width:D,height:Y}=W.value.$collector.getBoundingClientRect(),F=this.root.getBoundingClientRect();return{x:p-F.x,y:B-F.y,width:D,height:Y}}},this._setCollectorRect=S=>{var p;(p=W.value)!=null&&p.$collector&&ie.setValue(S)};const ie=d(N.value?this._calcCollectorRect():void 0);ie.subscribe((S,p,B)=>{this.boxes.forEach(D=>{D.setCollectorRect(S,B)})}),N.subscribe((S,p,B)=>{var D;(D=W.value)==null||D.setVisible(S),S&&this._setCollectorRect(this._calcCollectorRect()),this.boxes.forEach(Y=>Y.setMinimized(S,B)),B||this.events.emit(O.Minimized,S)});const Ie=this.wrapClassName("titlebar-icon-close"),pe=S=>{var p;if(M.value)return;const B=S.target;if(!!B.tagName)for(let D=B;D;D=D.parentElement){if(D.classList&&D.classList.contains(Ie))return;const Y=(p=D.dataset)==null?void 0:p.teleBoxID;if(Y){const F=this.getBox(Y);if(F){if(!this.useBoxesStatus)this.makeBoxTop(F);else if(F.boxStatus&&F.boxStatus===x.Normal){const ae=this.getMaxNormalBoxZIndex();ae>F.zIndex&&this.setBox(F,{zIndex:ae+1},!1)}else if(F.boxStatus&&F.boxStatus===x.Maximized){const ae=this.getMaxMaximizedBoxZIndex();ae>F.zIndex&&this.setBox(F,{zIndex:ae+1},!1),this.makeMaximizedTopBoxFocus()}this.focusBox(F);return}}}};this._sideEffect.addEventListener(window,"mousedown",pe,!0),this._sideEffect.addEventListener(window,"touchstart",pe,!0),this.maxTitleBar=new Ua({darkMode:this.darkMode,readonly:M.value,namespace:this.namespace,state:v.value,boxes:this.boxes$.value,containerRect:_.value,getBoxesStatus:()=>this.boxesStatus$,onEvent:S=>{switch(S.type){case H.Maximize:{if(this.hasBoxesStatus()){let p=this.maxTitleBar.focusedBox;if(p||(p=this.getMaximizedTopBox()),p!=null&&p.id){const B=this.getBox(p.id);B&&this.setBox(B,{status:x.Normal,zIndex:this.getMaxNormalBoxZIndex()+1},!1,()=>{this.makeMaximizedTopBoxFocus()})}}else z.setValue(!z.value);break}case H.Minimize:{if(this.hasBoxesStatus()){let p=this.maxTitleBar.focusedBox;if(p||(p=this.getMaximizedTopBox()),p!=null&&p.id){const B=this.getBox(p.id);if(B){let D=!1;B.focus&&(this.blurBox(B),D=!0),this.setBox(B,{status:x.Minimized,zIndex:-1},!1),D?this.focusTopBox():this.makeMaximizedTopBoxFocus()}}}else N.setValue(!0);break}case k.Close:{if(this.hasBoxesStatus()){let p=this.maxTitleBar.focusedBox;if(p||(p=this.getMaximizedTopBox()),p!=null&&p.id){const B=this.getBox(p.id);if(B){let D=!1;B.focus&&(this.blurBox(B),D=!0),this.remove(B,!1),D?this.focusTopBox():this.makeMaximizedTopBoxFocus()}}}else this.removeTopBox(),this.focusTopBox();break}}}}),M.subscribe(S=>this.maxTitleBar.setReadonly(S)),this._darkMode$.subscribe(S=>{this.maxTitleBar.setDarkMode(S)}),this.boxes$.reaction(S=>{this.maxTitleBar.setBoxes(S)}),Ps(this,{prefersColorScheme:b,containerRect:_,collector:W,collectorRect:ie,readonly:M,fence:Z,minimized:N,maximized:z}),this._state$=v,this.root.appendChild(this.maxTitleBar.render()),l&&(this.appMenu=this.createMinimizedAppMenu())}get boxes(){return this.boxes$.value}get topBox(){return this.topBox$.value}get forceTopBoxes(){return this.boxes.find(e=>e.forceTop)}get maxForceTopBox(){return this.boxes.reduce((e,t)=>{var s;return t.forceTop&&t.zIndex>((s=e==null?void 0:e.zIndex)!=null?s:0)?t:e},void 0)}get forceNormalBoxes(){return this.boxes.find(e=>e.forceNormal)}get darkMode(){return this._darkMode$.value}get state(){return this._state$.value}setState(e,t=!1){switch(e){case x.Maximized:{this.setMinimized(!1,t),this.setMaximized(!0,t);break}case x.Minimized:{this.setMinimized(!0,t),this.setMaximized(!1,t);break}default:{this.setMinimized(!1,t),this.setMaximized(!1,t);break}}return this}setBoxStatus(e,t,s=!1){if(t){const r=this.boxesStatus$.get(e);this.boxesStatus$.set(e,t),t===x.Minimized&&r!==x.Minimized?this.setLastNotMinimizedBoxStatus(e,r,s):r===x.Minimized&&t!==x.Minimized&&this.setLastNotMinimizedBoxStatus(e,void 0,s)}else this.boxesStatus$.delete(e),this.setLastNotMinimizedBoxStatus(e,void 0,s);s||this.events.emit(O.BoxStatus,{id:e,boxStatus:t})}getBoxStatus(e){return this.boxesStatus$.get(e)}get boxesStatus(){return this.boxesStatus$}get lastNotMinimizedBoxesStatus(){return this.lastNotMinimizedBoxesStatus$}setBoxesStatus(e,t=!1){this.boxesStatus$=e,this.effectBoxesStatusChange(t)}getBoxesStatus(){return this.boxesStatus$}effectBoxStatusChange(){!this.useBoxesStatus||(this.collector&&(this.collector.updateBoxesStatus(),this.hasMinimizedBox()&&this._setCollectorRect(this._calcCollectorRect())),this.appMenu&&this.appMenu.appMenuChange(),this.maxTitleBar&&this.maxTitleBar.updateBoxesStatus())}effectBoxesStatusTimerFunc(e){if(!this.useBoxesStatus)return;let t;const s=this.topBox;this.boxes.forEach(r=>{var n;const a=this.boxesStatus$.get(r.id);a&&(a!==x.Minimized&&!this.isForceTop(r)&&r.zIndex>((n=t==null?void 0:t.zIndex)!=null?n:0)&&(t=r),r.setBoxStatus(a,e))}),this.effectBoxStatusChange(),t&&s!==t&&this.topBox$.setValue(t),!t&&s&&this.topBox$.setValue(void 0)}async effectBoxesStatusChange(e=!1){var t,s;if(!this.useBoxesStatus){this.effectBoxesStatusTimer&&this.effectBoxesStatusTimer.timer&&(clearTimeout(this.effectBoxesStatusTimer.timer),this.effectBoxesStatusTimer.resolve&&this.effectBoxesStatusTimer.resolve(!!((t=this.effectBoxesStatusTimer)!=null&&t.skipUpdate))),this.effectBoxesStatusTimer=void 0;return}if(this.effectBoxesStatusTimer&&this.effectBoxesStatusTimer.timer)if(this.effectBoxesStatusTimer.skipUpdate!==e)clearTimeout(this.effectBoxesStatusTimer.timer),this.effectBoxesStatusTimer.resolve&&this.effectBoxesStatusTimer.resolve(!!((s=this.effectBoxesStatusTimer)!=null&&s.skipUpdate)),this.effectBoxesStatusTimer.skipUpdate=e;else return;if(this.effectBoxesStatusTimer||(this.effectBoxesStatusTimer={skipUpdate:e,timer:void 0,resolve:void 0}),this.effectBoxesStatusTimer){const r=await new Promise(n=>{this.effectBoxesStatusTimer.resolve=n,this.effectBoxesStatusTimer.timer=setTimeout(()=>{this.effectBoxesStatusTimer&&this.effectBoxesStatusTimer.resolve&&this.effectBoxesStatusTimer.resolve(this.effectBoxesStatusTimer.skipUpdate)},100)});this.effectBoxesStatusTimerFunc(r),this.effectBoxesStatusTimer=void 0}}hasBoxesStatus(){return this.useBoxesStatus?this.boxesStatus$.size>0:!1}hasMinimizedBox(){return this.useBoxesStatus?this.boxes.some(e=>e.boxStatus&&e.boxStatus===x.Minimized):!1}getMinimizedBoxesStatus(){const e=new Map;return this.boxesStatus$.forEach((t,s)=>{t===x.Minimized&&e.set(s,t)}),e}getNotMinimizedBoxesStatus(){const e=new Map;return this.boxesStatus$.forEach((t,s)=>{t!==x.Minimized&&e.set(s,t)}),e}getAllMaximizedBoxesStatus(){const e=new Map;return this.boxesStatus$.forEach((t,s)=>{t===x.Maximized&&e.set(s,t)}),e}getAllNormalBoxesStatus(){const e=new Map;return this.boxesStatus$.forEach((t,s)=>{t===x.Normal&&e.set(s,t)}),e}getLastNotMinimizedBoxStatus(e){return this.lastNotMinimizedBoxesStatus$.get(e)}setLastNotMinimizedBoxStatus(e,t,s=!1){t?this.lastNotMinimizedBoxesStatus$.set(e,t):this.lastNotMinimizedBoxesStatus$.delete(e),s||this.events.emit(O.LastNotMinimizedBoxStatus,{id:e,boxStatus:t})}setLastNotMinimizedBoxesStatus(e,t=!1){this.lastNotMinimizedBoxesStatus$=e,this.effectLastNotMinimizedBoxStatusChange(t)}async effectLastNotMinimizedBoxStatusChange(e=!1){var t,s;if(!this.useBoxesStatus){this.effectLastNotMinimizedBoxStatusTimer&&this.effectLastNotMinimizedBoxStatusTimer.timer&&(clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer),this.effectLastNotMinimizedBoxStatusTimer.resolve&&this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((t=this.effectLastNotMinimizedBoxStatusTimer)!=null&&t.skipUpdate))),this.effectLastNotMinimizedBoxStatusTimer=void 0;return}if(this.effectLastNotMinimizedBoxStatusTimer&&this.effectLastNotMinimizedBoxStatusTimer.timer)if(clearTimeout(this.effectLastNotMinimizedBoxStatusTimer.timer),this.effectLastNotMinimizedBoxStatusTimer.skipUpdate!==e)this.effectLastNotMinimizedBoxStatusTimer.resolve&&this.effectLastNotMinimizedBoxStatusTimer.resolve(!!((s=this.effectLastNotMinimizedBoxStatusTimer)!=null&&s.skipUpdate)),this.effectLastNotMinimizedBoxStatusTimer.skipUpdate=e;else return;if(this.effectLastNotMinimizedBoxStatusTimer||(this.effectLastNotMinimizedBoxStatusTimer={skipUpdate:e,timer:void 0,resolve:void 0}),this.effectLastNotMinimizedBoxStatusTimer){const r=await new Promise(n=>{this.effectLastNotMinimizedBoxStatusTimer.resolve=n,this.effectLastNotMinimizedBoxStatusTimer.timer=setTimeout(()=>{this.effectLastNotMinimizedBoxStatusTimer&&this.effectLastNotMinimizedBoxStatusTimer.resolve&&this.effectLastNotMinimizedBoxStatusTimer.resolve(this.effectLastNotMinimizedBoxStatusTimer.skipUpdate)},100)});this.effectLastNotMinimizedBoxStatusFunc(r),this.effectLastNotMinimizedBoxStatusTimer=void 0}}effectLastNotMinimizedBoxStatusFunc(e=!1){!this.useBoxesStatus||this.boxes.forEach(t=>{const s=this.lastNotMinimizedBoxesStatus$.get(t.id);s&&t.setLastNotMinimizedBoxStatus(s,e)})}getUnabledBoxesStatusZIndex(){return this.topBox?this.topBox.zIndex:99}getMaxMaximizedBoxZIndex(){return this.useBoxesStatus?this.boxes.reduce((e,t)=>t.boxStatus&&t.boxStatus===x.Maximized&&!this.isForceTop(t)?Math.max(e,t.zIndex):e,99):this.getUnabledBoxesStatusZIndex()}getMaxNormalBoxZIndex(){return this.useBoxesStatus?this.boxes.reduce((e,t)=>t.boxStatus&&t.boxStatus===x.Normal&&!this.isForceTop(t)?Math.max(e,t.zIndex):e,299):this.getUnabledBoxesStatusZIndex()}getMaxForceTopBoxZIndex(){return this.useBoxesStatus?this.boxes.reduce((e,t)=>t.boxStatus&&this.isForceTop(t)?Math.max(e,t.zIndex):e,699):this.getUnabledBoxesStatusZIndex()}isForceNormal(e){return e._forceNormal$.value}isForceTop(e){return e._forceTop$.value}create(e={},t=!0){const s=new Ra({zIndex:e.forceTop?this.getMaxForceTopBoxZIndex()+1:this.getMaxNormalBoxZIndex()+1,...t?this.smartPosition(e):e,darkMode:this.darkMode,prefersColorScheme:this.prefersColorScheme,maximized:this.maximized,minimized:this.minimized,fence:this.fence,namespace:this.namespace,containerRect:this.containerRect,readonly:this.readonly,collectorRect:this.collectorRect});return s.mount(this.root),this.boxes$.setValue([...this.boxes,s]),s.boxStatus&&this.useBoxesStatus&&this.setBox(s,{status:s.boxStatus,lastNotMinimizedBoxStatus:s._lastNotMinimizedBoxStatus$.value},!0),s.focus&&(this.focusBox(s),t&&this.makeBoxTop(s)),s._delegateEvents.on(H.Maximize,()=>{if(this.useBoxesStatus&&s.boxStatus){if(s._forceNormal$.value)return;s.boxStatus===x.Maximized?this.setBox(s.id,{status:x.Normal,zIndex:this.getMaxNormalBoxZIndex()+1},!1):([...this.boxes].filter(r=>r.boxStatus===x.Normal&&!this.isForceNormal(r)).sort((r,n)=>r.zIndex-n.zIndex).forEach(r=>{r.boxStatus===x.Normal&&this.setBox(r.id,{status:x.Maximized,zIndex:this.getMaxMaximizedBoxZIndex()+1},!1)}),this.makeMaximizedTopBoxFocus())}else this.setMaximized(!this.maximized)}),s._delegateEvents.on(H.Minimize,()=>{if(s.boxStatus&&this.useBoxesStatus){if(s._forceNormal$.value)return;s.focus&&this.blurBox(s),this.setBox(s,{status:x.Minimized,zIndex:-1},!1,()=>{this.focusTopBox()})}else this.setMinimized(!0)}),s._delegateEvents.on(H.Close,()=>{this.useBoxesStatus&&s.focus&&this.blurBox(s),this.remove(s),this.focusTopBox()}),s._coord$.reaction((r,n,a)=>{a||this.events.emit(O.Move,s)}),s._size$.reaction((r,n,a)=>{a||this.events.emit(O.Resize,s)}),s._intrinsicCoord$.reaction((r,n,a)=>{a||this.events.emit(O.IntrinsicMove,s)}),s._intrinsicSize$.reaction((r,n,a)=>{a||this.events.emit(O.IntrinsicResize,s)}),s._visualSize$.reaction((r,n,a)=>{a||this.events.emit(O.VisualResize,s)}),s._zIndex$.reaction((r,n,a)=>{if(this.boxes.length>0){let o;const h=this.boxes.reduce((c,l)=>this.isForceTop(l)||l.boxStatus&&l.boxStatus===x.Minimized?c:c?c.zIndex>l.zIndex?c:l:(c=l,c),o);this.topBox$.setValue(h)}a||this.events.emit(O.ZIndex,s)}),this.events.emit(O.Created,s),s}query(e){return e?this.boxes.filter(this.teleBoxMatcher(e)):[...this.boxes]}queryOne(e){return e?this.boxes.find(this.teleBoxMatcher(e)):this.boxes[0]}update(e,t,s=!1){const r=this.boxes.find(n=>n.id===e);if(r)return this.updateBox(r,t,s)}updateAll(e,t=!1){this.boxes.forEach(s=>{this.updateBox(s,e,t)})}setBox(e,t,s=!1,r){const n=this.getBox(e);if(n){const{status:a,zIndex:o,lastNotMinimizedBoxStatus:h}=t;a&&(this.setBoxStatus(n.id,a,s),n.setBoxStatus(a,s),this.effectBoxStatusChange()),o&&n.setZIndex(o,s),h&&(this.setLastNotMinimizedBoxStatus(n.id,h,s),n.setLastNotMinimizedBoxStatus(h,s)),r&&r()}}remove(e,t=!1,s){const r=this.getBox(e),n=this.getBoxIndex(e);if(n>=0){const a=this.boxes.slice(),o=a.splice(n,1);return this.boxes$.setValue(a),o.forEach(h=>h.destroy()),r&&this.useBoxesStatus&&(this.setBoxStatus(r.id,void 0,t),this.setLastNotMinimizedBoxStatus(r.id,void 0,t),this.effectBoxStatusChange(),s&&s()),t||(this.boxes.length<=0&&(this.setMaximized(!1),this.setMinimized(!1)),this.events.emit(O.Removed,o)),o[0]}}removeTopBox(){if(this.topBox)return this.remove(this.topBox)}removeAll(e=!1){const t=this.boxes$.value;return this.boxes$.setValue([]),t.forEach(s=>s.destroy()),this.boxesStatus$.clear(),this.lastNotMinimizedBoxesStatus$.clear(),e||(this.boxes.length<=0&&(this.setMaximized(!1),this.setMinimized(!1)),this.events.emit(O.Removed,t)),t}destroy(e=!1){this.events.removeAllListeners(),this._sideEffect.flushAll(),this.removeAll(e),Object.keys(this).forEach(t=>{const s=this[t];s instanceof et&&s.destroy()})}wrapClassName(e){return`${this.namespace}-${e}`}focusBox(e,t=!1){const s=this.getBox(e);s&&(this.boxes.forEach(r=>{if(s===r){let n=!1;s.focus||(n=!0,s.setFocus(!0,t)),n&&!t&&this.events.emit(O.Focused,s)}else r.focus&&this.blurBox(r,t)}),this.useBoxesStatus?this.useBoxesStatus&&this.maxTitleBar.hasMaximizedBoxInStatus()&&this.makeMaximizedTopBoxFocus():this.maxTitleBar.focusBox(s))}focusTopBox(){if(this.topBox&&!this.topBox.focus)return this.focusBox(this.topBox)}blurBox(e,t=!1){const s=this.getBox(e);s&&(s.focus&&(s.setFocus(!1,t),t||this.events.emit(O.Blurred,s)),this.maxTitleBar.focusedBox===s&&this.maxTitleBar.focusBox())}blurAll(e=!1){this.boxes.forEach(t=>{t.focus&&(t.setFocus(!1,e),e||this.events.emit(O.Blurred,t))}),this.maxTitleBar.focusedBox&&this.maxTitleBar.focusBox()}teleBoxMatcher(e){const t=Object.keys(e);return s=>t.every(r=>e[r]===s[r])}updateBox(e,t,s=!1){(t.x!=null||t.y!=null)&&e.move(t.x==null?e.intrinsicX:t.x,t.y==null?e.intrinsicY:t.y,s),(t.width!=null||t.height!=null)&&e.resize(t.width==null?e.intrinsicWidth:t.width,t.height==null?e.intrinsicHeight:t.height,s),t.title!=null&&(e.setTitle(t.title),this.maxTitleBar.updateTitles()),t.visible!=null&&e.setVisible(t.visible,s),t.minHeight!=null&&e.setMinHeight(t.minHeight,s),t.minWidth!=null&&e.setMinWidth(t.minWidth,s),t.resizable!=null&&e.setResizable(t.resizable,s),t.draggable!=null&&e.setDraggable(t.draggable,s),t.fixRatio!=null&&e.setFixRatio(t.fixRatio,s),t.zIndex!=null&&e.setZIndex(t.zIndex,s),t.content!=null&&e.mountContent(t.content),t.footer!=null&&e.mountFooter(t.footer),this.useBoxesStatus&&(t.boxStatus||t.lastNotMinimizedBoxStatus)&&this.setBox(e,{status:t.boxStatus,lastNotMinimizedBoxStatus:t.lastNotMinimizedBoxStatus},s),t.forceTop!=null&&e.setForceTop(t.forceTop,s),t.forceNormal!=null&&e.setForceNormal(t.forceNormal,s)}smartPosition(e={}){let{x:t,y:s}=e;const{width:r=.5,height:n=.5}=e;if(t==null){let a=20;if(e.forceTop){const o=this.maxForceTopBox||this.topBox;o&&(a=o.intrinsicX*this.containerRect.width+20,a>this.containerRect.width-r*this.containerRect.width&&(a=20))}else this.topBox?(a=this.topBox.intrinsicX*this.containerRect.width+20,a>this.containerRect.width-r*this.containerRect.width&&(a=20)):this.hasMinimizedBox()&&(a=[...this.boxes].filter(o=>o.boxStatus&&o.boxStatus===x.Minimized&&o.lastNotMinimizedBoxStatus&&o.lastNotMinimizedBoxStatus===x.Normal).reduce((o,h)=>Math.max(o,h.intrinsicX*this.containerRect.width+20),a));t=a/this.containerRect.width}if(s==null){let a=20;if(e.forceTop){const o=this.maxForceTopBox||this.topBox;o&&(a=o.intrinsicY*this.containerRect.height+20,a>this.containerRect.height-n*this.containerRect.height&&(a=20))}else this.topBox?(a=this.topBox.intrinsicY*this.containerRect.height+20,a>this.containerRect.height-n*this.containerRect.height&&(a=20)):this.hasMinimizedBox()&&(a=[...this.boxes].filter(o=>o.boxStatus&&o.boxStatus===x.Minimized&&o.lastNotMinimizedBoxStatus&&o.lastNotMinimizedBoxStatus===x.Normal).reduce((o,h)=>Math.max(o,h.intrinsicY*this.containerRect.height+20),a));s=a/this.containerRect.height}return{...e,x:t,y:s,width:r,height:n}}makeBoxTop(e,t=!1){!this.useBoxesStatus&&this.topBox?e!==this.topBox&&e.setZIndex(this.topBox.zIndex+1,t):this.useBoxesStatus}getMaximizedTopBox(){if(!this.useBoxesStatus)return;let e;return this.maxTitleBar.hasMaximizedBoxInStatus()&&(e=this.maxTitleBar.MaximizedBoxes.reduce((t,s)=>t&&t.zIndex>s.zIndex?t:s)),e}makeMaximizedTopBoxFocus(){if(!this.useBoxesStatus)return;const e=this.getMaximizedTopBox();this.maxTitleBar.focusBox(e)}getBoxIndex(e){return typeof e=="string"?this.boxes.findIndex(t=>t.id===e):this.boxes.findIndex(t=>t===e)}getBox(e){return typeof e=="string"?this.boxes.find(t=>t.id===e):e}createMinimizedAppMenu(){var e,t;if((e=this.collector)!=null&&e.$appMenuContainer)return new _a({manager:this,container:(t=this.collector)==null?void 0:t.$appMenuContainer,theme:this.prefersColorScheme?"dark":"light",getBoxesStatus:()=>this.boxesStatus$})}}tt.kind="TeleBoxManager";const Oa=(i,e,t,s,r)=>{const n=ge(it,P.extendClass);return new n({safeSetAttributes:a=>i.safeSetAttributes(a),getMainView:()=>i.mainView,updateAppState:(...a)=>{var o;return(o=i.appManager)==null?void 0:o.store.updateAppState(...a)},setBoxStatus:(a,o)=>{var h;return(h=i.appManager)==null?void 0:h.store.setBoxStatus(a,o)},setLastNotMinimizedBoxStatus:(a,o)=>{var h;return(h=i.appManager)==null?void 0:h.store.setLastNotMinimizedBoxStatus(a,o)},canOperate:()=>i.canOperate,notifyContainerRectUpdate:a=>{var o;return(o=i.appManager)==null?void 0:o.notifyContainerRectUpdate(a)},cleanFocus:()=>{var a;return(a=i.appManager)==null?void 0:a.store.cleanFocus()},setAppFocus:a=>{var o;return(o=i.appManager)==null?void 0:o.store.setAppFocus(a,!0)},callbacks:e,emitter:t,boxEmitter:s},r)};class it{constructor(e,t){this.context=e,this.createTeleBoxManagerConfig=t;const{emitter:s,callbacks:r,boxEmitter:n}=e;this.teleBoxManager=this.setupBoxManager(t),this.teleBoxManager._state$.reaction(a=>{r.emit("boxStateChange",a),s.emit("boxStateChange",a)}),this.teleBoxManager._darkMode$.reaction(a=>{r.emit("darkModeChange",a)}),this.teleBoxManager._prefersColorScheme$.reaction(a=>{r.emit("prefersColorSchemeChange",a)}),this.teleBoxManager._minimized$.reaction(a=>{a||setTimeout(()=>{const o=.001*(Math.random()>.5?1:-1);this.teleBoxManager.boxes.forEach(h=>{h.resize(h.intrinsicWidth+o,h.intrinsicHeight+o,!0)})},400)}),this.teleBoxManager.events.on("minimized",a=>{if(this.context.safeSetAttributes({minimized:a}),a)this.context.cleanFocus(),this.blurAllBox();else{const o=this.getTopBox();o&&(this.context.setAppFocus(o.id),this.focusBox({appId:o.id},!1))}}),this.teleBoxManager.events.on("maximized",a=>{this.context.safeSetAttributes({maximized:a})}),this.teleBoxManager.events.on("removed",a=>{a.forEach(o=>{n.emit("close",{appId:o.id})})}),this.teleBoxManager.events.on("intrinsic_move",w.debounce(a=>{n.emit("move",{appId:a.id,x:a.intrinsicX,y:a.intrinsicY})},50)),this.teleBoxManager.events.on("intrinsic_resize",w.debounce(a=>{n.emit("resize",{appId:a.id,width:a.intrinsicWidth,height:a.intrinsicHeight})},200)),this.teleBoxManager.events.on("focused",a=>{a&&(this.canOperate?n.emit("focus",{appId:a.id}):this.teleBoxManager.blurBox(a.id))}),this.teleBoxManager.events.on("blurred",a=>{a&&this.canOperate&&n.emit("blurred",{appId:a.id})}),this.teleBoxManager.events.on("z_index",a=>{this.context.updateAppState(a.id,ee.ZIndex,a.zIndex)}),this.teleBoxManager.events.on("box_status",a=>{this.canOperate&&this.context.setBoxStatus(a.id,a.boxStatus)}),this.teleBoxManager.events.on("last_not_minimized_box_status",a=>{this.canOperate&&this.context.setLastNotMinimizedBoxStatus(a.id,a.boxStatus)}),s.on("playgroundSizeChange",()=>this.updateManagerRect()),s.on("updateManagerRect",()=>this.updateManagerRect())}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,l,u;if(!this.teleBoxManager)return;let{minwidth:t=rr,minheight:s=ar}=(c=e.app.config)!=null?c:{};const{width:r,height:n}=(l=e.app.config)!=null?l:{},a=((u=e.options)==null?void 0:u.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:r,height:n,id:e.appId,boxStatus:e.boxStatus,forceTop:e.forceTop,forceNormal:e.forceNormal,isDragContent:e.isDragContent};this.teleBoxManager.create(h,e.smartPosition),this.context.emitter.emit(`${e.appId}${R.WindowCreated}`)}setBoxInitState(e){const t=this.teleBoxManager.queryOne({id:e});t&&t.state===x.Maximized&&this.context.boxEmitter.emit("resize",{appId:e,x:t.x,y:t.y,width:t.intrinsicWidth,height:t.intrinsicHeight})}setBoxesStatus(e){const t=new Map(Object.entries(e!=null?e:{}));this.teleBoxManager.setBoxesStatus(t,!0),this.context.callbacks.emit("onBoxesStatusChange",t),this.context.emitter.emit("boxesStatusChange",t)}setLastNotMinimizedBoxesStatus(e){const t=new Map(Object.entries(e!=null?e:{}));this.teleBoxManager.setLastNotMinimizedBoxesStatus(t,!0),this.context.callbacks.emit("onLastNotMinimizedBoxesStatusChange",t),this.context.emitter.emit("lastNotMinimizedBoxesStatusChange",t)}setupBoxManager(e){const t=P.wrapper?P.wrapper:document.body,s=t.getBoundingClientRect(),r={root:t,containerRect:{x:0,y:0,width:s.width,height:s.height},fence:!1,prefersColorScheme:e==null?void 0:e.prefersColorScheme,useBoxesStatus:(e==null?void 0:e.useBoxesStatus)||!1},n=ge(tt,P.extendClass),a=new n(r);this.teleBoxManager&&this.teleBoxManager.destroy(),this.teleBoxManager=a;const o=(e==null?void 0:e.collectorContainer)||P.wrapper;return o&&this.setCollectorContainer(o),a}setCollectorContainer(e){var r;const t=ge(Le,P.extendClass),s=new t({styles:(r=this.createTeleBoxManagerConfig)==null?void 0:r.collectorStyles}).mount(e);this.teleBoxManager.setCollector(s)}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(){return this.teleBoxManager.topBox}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,boxStatus:e.boxStatus,lastNotMinimizedBoxStatus:e.lastNotMinimizedBoxStatus,forceTop:e.forceTop,forceNormal:e.forceNormal,isDragContent:e.isDragContent},!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),e.boxStatus||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:r}){this.teleBoxManager.update(e,{width:t,height:s},r)}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,t=!0){e!==this.maximized&&this.teleBoxManager.setMaximized(e,t)}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(){this.teleBoxManager.destroy()}}it.kind="BoxManager";function $i(i){return/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(i)?i:JSON.stringify(i)}function Se(i,e){if(i===void 0)return"undefined";if(i===null)return"null";const t=typeof i;if(t==="bigint")return`${i}n`;if(t==="symbol")return String(i);if(t==="function")return`[Function ${i.name||"anonymous"}]`;if(t!=="object")return t==="string"?JSON.stringify(i):String(i);const s=i;if(e!=null&&e.has(s))return"[Circular]";const r=e!=null?e:new WeakSet;r.add(s);try{return Array.isArray(i)?`[${Array.from(i,o=>Se(o,r)).join(",")}]`:i instanceof Date?JSON.stringify(i.toISOString()):i instanceof RegExp?String(i):`{${Object.keys(s).map(o=>{let h;try{h=s[o]}catch{return`${$i(o)}:[Threw]`}return`${$i(o)}:${Se(h,r)}`}).join(",")}}`}catch{return"[Unserializable]"}finally{r.delete(s)}}function Wa(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)&&!(i instanceof Date)&&!(i instanceof RegExp)}const Zi=1500;function $a(i){if(i.length<=Zi)return i;const e="\u2026";return i.slice(0,Zi-e.length)+e}function Za(i,e){if(i.length!==e.length)return!1;for(let t=0;t<i.length;t++)if(i[t]!==e[t])return!1;return!0}const re=(...i)=>{P.debug&&console.log("[WindowManager]:",...i)};class We{constructor(e,t){this.name=e,this.debounceTime=t,this.pendingArgs=null,this.flushTimer=null}flush(){this.flushTimer=null;const e=this.pendingArgs;this.pendingArgs=null,e!==null&&console.log(`[window-manager][${this.name}]: ${e.join(", ")}`)}log(...e){const t=this.debounceTime;if(t!=null&&t>0){this.pendingArgs=e,this.flushTimer!=null&&clearTimeout(this.flushTimer),this.flushTimer=setTimeout(()=>this.flush(),t);return}console.log(`[window-manager][${this.name}]: ${e.join(", ")}`)}destroy(){this.flushTimer!=null&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.pendingArgs=null}}class Fa{constructor(e,t,s){this.logger=e,this.name=t,this.debounceTime=s,this.pendingArgs=null,this.flushTimer=null,this.pendingShallowMerge=null,this.shallowMergeTimer=null,this.pendingUpdateSegments=null,this.updateMergeTimer=null}emitInfo(e){this.logger.info($a(e))}flush(){this.flushTimer=null;const e=this.pendingArgs;this.pendingArgs=null,e!==null&&this.emitInfo(`[WindowManager][${this.name}]: ${e.join(", ")}`)}flushShallowMerge(){this.shallowMergeTimer=null;const e=this.pendingShallowMerge;if(this.pendingShallowMerge=null,e===null)return;const t=e.kind==="record"?Se(e.data):Se(e.value);if(this.emitInfo(`[WindowManager][${this.name}]: ${e.label} ${t}`),e.kind==="record")for(const s of Object.keys(e.data))delete e.data[s]}log(...e){const t=this.debounceTime;if(t!=null&&t>0){this.pendingArgs=e,this.flushTimer!=null&&clearTimeout(this.flushTimer),this.flushTimer=setTimeout(()=>this.flush(),t);return}this.emitInfo(`[WindowManager][${this.name}]: ${e.join(", ")}`)}logDebouncedShallowMerge(e,t){var a;const s=this.debounceTime,r=s!=null&&s>0,n=o=>{this.emitInfo(`[WindowManager][${this.name}]: ${e} ${o}`)};if(!r){n(Se(t));return}this.shallowMergeTimer!=null&&(clearTimeout(this.shallowMergeTimer),this.shallowMergeTimer=null),Wa(t)?((a=this.pendingShallowMerge)==null?void 0:a.kind)==="record"?this.pendingShallowMerge={kind:"record",label:e,data:{...this.pendingShallowMerge.data,...t}}:this.pendingShallowMerge={kind:"record",label:e,data:{...t}}:this.pendingShallowMerge={kind:"atom",label:e,value:t},this.shallowMergeTimer=setTimeout(()=>this.flushShallowMerge(),s)}flushUpdateAttributesMerge(){this.updateMergeTimer=null;const e=this.pendingUpdateSegments;if(this.pendingUpdateSegments=null,e===null||e.length===0)return;const t=e.map(s=>`${s.keys.join(", ")} ${Se(s.value)}`);this.emitInfo(`[WindowManager][${this.name}]: safeUpdateAttributes ${t.join(" | ")}`);for(const s of e)s.keys.length=0,s.value=void 0;e.length=0}logDebouncedUpdateAttributes(e,t){const s=this.debounceTime,r=s!=null&&s>0,n=[...e];if(!r){this.emitInfo(`[WindowManager][${this.name}]: safeUpdateAttributes ${n.join(", ")} ${Se(t)}`);return}if(this.updateMergeTimer!=null&&(clearTimeout(this.updateMergeTimer),this.updateMergeTimer=null),this.pendingUpdateSegments===null||this.pendingUpdateSegments.length===0)this.pendingUpdateSegments=[{keys:n,value:t}];else{const a=this.pendingUpdateSegments[this.pendingUpdateSegments.length-1];Za(a.keys,n)?a.value=t:this.pendingUpdateSegments.push({keys:n,value:t})}this.updateMergeTimer=setTimeout(()=>this.flushUpdateAttributesMerge(),s)}destroy(){this.flushTimer!=null&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.shallowMergeTimer!=null&&(clearTimeout(this.shallowMergeTimer),this.shallowMergeTimer=null),this.updateMergeTimer!=null&&(clearTimeout(this.updateMergeTimer),this.updateMergeTimer=null),this.pendingArgs=null,this.pendingShallowMerge=null,this.pendingUpdateSegments=null}dispose(){this.destroy()}}const Ga=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 r=document.createElement("div");return r.className="netless-window-manager-main-view",e.appendChild(t),t.appendChild(s),s.appendChild(r),i.appendChild(e),P.wrapper=s,{playground:e,wrapper:s,sizer:t,mainViewElement:r}},Qa=()=>{if(Di(f.WhiteVersion)<Di(Bi))throw new os(Bi)},si=(i,e)=>{var n;const t=(i==null?void 0:i.state.roomMembers)||[];let s=-1,r;for(const a of t)((n=a.payload)==null?void 0:n.uid)===e&&s<a.memberId&&(s=a.memberId,r=a);return r},Ya=async i=>{let e=i.getInvisiblePlugin(P.kind);if(e)return e;let t;const s=new Promise(c=>{P._resolve=t=c});let r=!1;const n=Ha(i);!i.isWritable&&n&&(r=!0,await ts.default(async c=>{re(`switching to writable (x${c})`),await i.setWritable(!0)},{retries:10,maxTimeout:5e3})),i.isWritable?(re("creating InvisiblePlugin..."),i.createInvisiblePlugin(P,{}).catch(console.warn)):(n&&console.warn("[WindowManager]: failed to switch to writable"),console.warn("[WindowManager]: waiting for others to create the plugin..."));const a=setTimeout(()=>{console.warn("[WindowManager]: no one called createInvisiblePlugin() after 20 seconds")},2e4),o=setTimeout(()=>{throw new Error("[WindowManager]: no one called createInvisiblePlugin() after 60 seconds")},6e4),h=setInterval(()=>{e=i.getInvisiblePlugin(P.kind),e&&(clearTimeout(o),clearTimeout(a),clearInterval(h),t(e),r&&i.isWritable&&setTimeout(()=>i.setWritable(!1).catch(console.warn),500))},200);return s},Ha=i=>{try{const e=atob(i.roomToken.slice(12)),t=e.indexOf("&role=");return+e[t+6]<2}catch(e){return console.error(e),!1}};function Xe(){}function Vs(i){return i()}function Fi(){return Object.create(null)}function It(i){i.forEach(Vs)}function js(i){return typeof i=="function"}function Ja(i,e){return i!=i?e==e:i!==e||i&&typeof i=="object"||typeof i=="function"}let pt;function St(i,e){return pt||(pt=document.createElement("a")),pt.href=e,i===pt.href}function Xa(i){return Object.keys(i).length===0}function ue(i,e){i.appendChild(e)}function yt(i,e,t){i.insertBefore(e,t||null)}function st(i){i.parentNode&&i.parentNode.removeChild(i)}function fe(i){return document.createElement(i)}function Mi(i){return document.createTextNode(i)}function ri(){return Mi(" ")}function U(i,e,t){t==null?i.removeAttribute(e):i.getAttribute(e)!==t&&i.setAttribute(e,t)}function Ka(i){return Array.from(i.childNodes)}function Rs(i,e){e=""+e,i.data!==e&&(i.data=e)}function G(i,e,t,s){t==null?i.style.removeProperty(e):i.style.setProperty(e,t,s?"important":"")}let wi;function Ye(i){wi=i}const Ne=[],Gi=[];let Te=[];const Qi=[],qa=Promise.resolve();let ai=!1;function en(){ai||(ai=!0,qa.then(ks))}function ni(i){Te.push(i)}const $t=new Set;let Ae=0;function ks(){if(Ae!==0)return;const i=wi;do{try{for(;Ae<Ne.length;){const e=Ne[Ae];Ae++,Ye(e),tn(e.$$)}}catch(e){throw Ne.length=0,Ae=0,e}for(Ye(null),Ne.length=0,Ae=0;Gi.length;)Gi.pop()();for(let e=0;e<Te.length;e+=1){const t=Te[e];$t.has(t)||($t.add(t),t())}Te.length=0}while(Ne.length);for(;Qi.length;)Qi.pop()();ai=!1,$t.clear(),Ye(i)}function tn(i){if(i.fragment!==null){i.update(),It(i.before_update);const e=i.dirty;i.dirty=[-1],i.fragment&&i.fragment.p(i.ctx,e),i.after_update.forEach(ni)}}function sn(i){const e=[],t=[];Te.forEach(s=>i.indexOf(s)===-1?e.push(s):t.push(s)),t.forEach(s=>s()),Te=e}const rn=new Set;function an(i,e){i&&i.i&&(rn.delete(i),i.i(e))}function nn(i,e,t,s){const{fragment:r,after_update:n}=i.$$;r&&r.m(e,t),s||ni(()=>{const a=i.$$.on_mount.map(Vs).filter(js);i.$$.on_destroy?i.$$.on_destroy.push(...a):It(a),i.$$.on_mount=[]}),n.forEach(ni)}function on(i,e){const t=i.$$;t.fragment!==null&&(sn(t.after_update),It(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function hn(i,e){i.$$.dirty[0]===-1&&(Ne.push(i),en(),i.$$.dirty.fill(0)),i.$$.dirty[e/31|0]|=1<<e%31}function cn(i,e,t,s,r,n,a,o=[-1]){const h=wi;Ye(i);const c=i.$$={fragment:null,ctx:[],props:n,update:Xe,not_equal:r,bound:Fi(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(h?h.$$.context:[])),callbacks:Fi(),dirty:o,skip_bound:!1,root:e.target||h.$$.root};a&&a(c.root);let l=!1;if(c.ctx=t?t(i,e.props||{},(u,d,...m)=>{const g=m.length?m[0]:d;return c.ctx&&r(c.ctx[u],c.ctx[u]=g)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](g),l&&hn(i,u)),d}):[],c.update(),l=!0,It(c.before_update),c.fragment=s?s(c.ctx):!1,e.target){if(e.hydrate){const u=Ka(e.target);c.fragment&&c.fragment.l(u),u.forEach(st)}else c.fragment&&c.fragment.c();e.intro&&an(i.$$.fragment),nn(i,e.target,e.anchor,e.customElement),ks()}Ye(h)}class ln{$destroy(){on(this,1),this.$destroy=Xe}$on(e,t){if(!js(t))return Xe;const s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{const r=s.indexOf(t);r!==-1&&s.splice(r,1)}}$set(e){this.$$set&&!Xa(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}function Yi(i){let e,t,s,r,n,a,o,h=i[18]&&Hi(i),c=i[19]&&Ji(i);return{c(){e=fe("div"),t=fe("div"),h&&h.c(),s=ri(),r=fe("span"),n=Mi(i[1]),a=ri(),c&&c.c(),G(r,"overflow","hidden"),G(r,"white-space","nowrap"),G(r,"text-overflow","ellipsis"),G(r,"max-width","80px"),U(t,"class",i[9]),G(t,"background-color",i[3]),G(t,"color",i[10]),G(t,"opacity",i[12]),U(e,"class",o="netless-window-manager-cursor-name "+i[16]+" "+i[15])},m(l,u){yt(l,e,u),ue(e,t),h&&h.m(t,null),ue(t,s),ue(t,r),ue(r,n),ue(t,a),c&&c.m(t,null)},p(l,u){l[18]?h?h.p(l,u):(h=Hi(l),h.c(),h.m(t,s)):h&&(h.d(1),h=null),u&2&&Rs(n,l[1]),l[19]?c?c.p(l,u):(c=Ji(l),c.c(),c.m(t,null)):c&&(c.d(1),c=null),u&512&&U(t,"class",l[9]),u&8&&G(t,"background-color",l[3]),u&1024&&G(t,"color",l[10]),u&4096&&G(t,"opacity",l[12]),u&98304&&o!==(o="netless-window-manager-cursor-name "+l[16]+" "+l[15])&&U(e,"class",o)},d(l){l&&st(e),h&&h.d(),c&&c.d()}}}function Hi(i){let e,t;return{c(){e=fe("img"),U(e,"class","netless-window-manager-cursor-selector-avatar"),U(e,"style",i[20]()),St(e.src,t=i[8])||U(e,"src",t),U(e,"alt","avatar")},m(s,r){yt(s,e,r)},p(s,r){r&256&&!St(e.src,t=s[8])&&U(e,"src",t)},d(s){s&&st(e)}}}function Ji(i){let e,t;return{c(){e=fe("span"),t=Mi(i[2]),U(e,"class","netless-window-manager-cursor-tag-name"),G(e,"background-color",i[11])},m(s,r){yt(s,e,r),ue(e,t)},p(s,r){r&4&&Rs(t,s[2]),r&2048&&G(e,"background-color",s[11])},d(s){s&&st(e)}}}function un(i){let e,t,s,r,n,a,o,h=!i[14]&&Yi(i);return{c(){e=fe("div"),h&&h.c(),t=ri(),s=fe("div"),r=fe("img"),U(r,"class",n="netless-window-manager-cursor-"+i[4]+"-image "+i[15]),St(r.src,a=i[7])||U(r,"src",a),U(r,"alt",i[4]),U(s,"class","cursor-image-wrapper"),U(e,"class",o="netless-window-manager-cursor-mid"+(i[13]?" netless-window-manager-cursor-custom":"")),G(e,"transform","translateX("+i[5]+"px) translateY("+i[6]+"px)"),G(e,"display",i[17]),U(e,"data-cursor-uid",i[0])},m(c,l){yt(c,e,l),h&&h.m(e,null),ue(e,t),ue(e,s),ue(s,r)},p(c,[l]){c[14]?h&&(h.d(1),h=null):h?h.p(c,l):(h=Yi(c),h.c(),h.m(e,t)),l&32784&&n!==(n="netless-window-manager-cursor-"+c[4]+"-image "+c[15])&&U(r,"class",n),l&128&&!St(r.src,a=c[7])&&U(r,"src",a),l&16&&U(r,"alt",c[4]),l&8192&&o!==(o="netless-window-manager-cursor-mid"+(c[13]?" netless-window-manager-cursor-custom":""))&&U(e,"class",o),l&96&&G(e,"transform","translateX("+c[5]+"px) translateY("+c[6]+"px)"),l&131072&&G(e,"display",c[17]),l&1&&U(e,"data-cursor-uid",c[0])},i:Xe,o:Xe,d(c){c&&st(e),h&&h.d()}}}function dn(i,e,t){let s,r,n,a,o,h,c,l,{uid:u}=e,{cursorName:d}=e,{tagName:m}=e,{backgroundColor:g}=e,{appliance:b}=e,{x:M}=e,{y:N}=e,{src:z}=e,{visible:v}=e,{avatar:Z}=e,{theme:_}=e,{color:W}=e,{cursorTagBackgroundColor:ie}=e,{opacity:Ie}=e,{pencilEraserSize:pe}=e,{custom:Ve}=e;const S=()=>Object.entries({width:(s?19:28)+"px",height:(s?19:28)+"px",position:s?"initial":"absolute","border-color":s?"white":g,"margin-right":(s?4:0)+"px"}).map(([p,B])=>`${p}: ${B}`).join(";");return i.$$set=p=>{"uid"in p&&t(0,u=p.uid),"cursorName"in p&&t(1,d=p.cursorName),"tagName"in p&&t(2,m=p.tagName),"backgroundColor"in p&&t(3,g=p.backgroundColor),"appliance"in p&&t(4,b=p.appliance),"x"in p&&t(5,M=p.x),"y"in p&&t(6,N=p.y),"src"in p&&t(7,z=p.src),"visible"in p&&t(21,v=p.visible),"avatar"in p&&t(8,Z=p.avatar),"theme"in p&&t(9,_=p.theme),"color"in p&&t(10,W=p.color),"cursorTagBackgroundColor"in p&&t(11,ie=p.cursorTagBackgroundColor),"opacity"in p&&t(12,Ie=p.opacity),"pencilEraserSize"in p&&t(22,pe=p.pencilEraserSize),"custom"in p&&t(13,Ve=p.custom)},i.$$.update=()=>{i.$$.dirty&2&&(s=!w.isEmpty(d)),i.$$.dirty&4&&t(19,r=!w.isEmpty(m)),i.$$.dirty&256&&t(18,n=!w.isEmpty(Z)),i.$$.dirty&2097152&&t(17,a=v?"":"none"),i.$$.dirty&16&&t(14,o=b===f.ApplianceNames.laserPointer),i.$$.dirty&16400&&t(23,h=o||b===f.ApplianceNames.pencilEraser),i.$$.dirty&8388608&&t(16,c=h?"netless-window-manager-laserPointer-pencilEraser-offset":""),i.$$.dirty&4194304&&t(15,l=pe===3?"netless-window-manager-pencilEraser-3-offset":"")},[u,d,m,g,b,M,N,z,Z,_,W,ie,Ie,Ve,o,l,c,a,n,r,S,v,pe,h]}class gn extends ln{constructor(e){super(),cn(this,e,dn,un,Ja,{uid:0,cursorName:1,tagName:2,backgroundColor:3,appliance:4,x:5,y:6,src:7,visible:21,avatar:8,theme:9,color:10,cursorTagBackgroundColor:11,opacity:12,pencilEraserSize:22,custom:13})}}const Us="data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23000' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23FFF'/%3E%3C/g%3E%3C/svg%3E";function _s(i){return`data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='12' cy='12' r='2.5' stroke='%23${i}' stroke-linejoin='square'/%3E%3Ccircle cx='12' cy='12' r='3.5' stroke='%23${i}'/%3E%3C/g%3E%3C/svg%3E`}function ze(i){return`data:image/svg+xml,%3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' fill='none'%3E%3Cpath d='M5 12H19' stroke='%23${i}' stroke-linejoin='round'/%3E%3Cpath d='M12 5V19' stroke='%23${i}' stroke-linejoin='round'/%3E%3C/svg%3E`}function xe(i){return`url("${i}") 12 12, auto`}function pn(i){let e="";for(const t in i)e+=`.netless-whiteboard.${t} {cursor: ${i[t]}}
|
|
16
|
-
`;return e}const mt=document.createElement("style");function mn(i){const[e,t,s]=i.strokeColor,r=((1<<24)+(e<<16)+(t<<8)+s).toString(16).slice(1);return mt.textContent=pn({"cursor-pencil":xe(_s(r)),"cursor-eraser":xe(Us),"cursor-rectangle":xe(ze(r)),"cursor-ellipse":xe(ze(r)),"cursor-straight":xe(ze(r)),"cursor-arrow":xe(ze(r)),"cursor-shape":xe(ze(r))}),document.head.appendChild(mt),()=>{mt.parentNode!=null&&document.head.removeChild(mt)}}const fn=new Set([f.ApplianceNames.rectangle,f.ApplianceNames.ellipse,f.ApplianceNames.straight,f.ApplianceNames.arrow,f.ApplianceNames.shape]);function Xi(i,e){if(i===f.ApplianceNames.pencil)return _s(e);if(i===f.ApplianceNames.eraser)return Us;if(fn.has(i))return ze(e)}class Mn{constructor(e,t,s,r){this.manager=e,this.memberId=t,this.cursorManager=s,this.wrapper=r,this.style="default",this.move=n=>{var a;if(n.type==="main"){const o=this.cursorManager.wrapperRect;this.component&&o&&(this.autoHidden(),this.moveCursor(n,o,this.manager.mainView))}else{const o=this.cursorManager.focusView,h=(a=o==null?void 0:o.divElement)==null?void 0:a.getBoundingClientRect(),c=o==null?void 0:o.camera;o&&h&&c&&this.component&&(this.autoHidden(),this.moveCursor(n,h,o))}},this.setStyle=n=>{this.style=n,this.component&&this.component.$set({src:this.getIcon(),custom:this.isCustomIcon()})},this.leave=()=>{this.hide()},this.updateMember(),this.createCursor(),this.autoHidden(),this.setStyle(s.style)}moveCursor(e,t,s){var h,c;const{x:r,y:n,type:a}=e,o=s==null?void 0:s.screen.convertPointToScreen(r,n);if(o){let l=o.x-2,u=o.y-18;if(this.isCustomIcon()&&(l-=11,u+=4),a==="app"){const d=this.cursorManager.wrapperRect;d&&(l=l+t.x-d.x,u=u+t.y-d.y)}o.x<0||o.x>t.width||o.y<0||o.y>t.height?(h=this.component)==null||h.$set({visible:!1,x:l,y:u}):(c=this.component)==null||c.$set({visible:!0,x:l,y:u})}}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 memberColorHex(){var r,n;const[e,t,s]=((n=(r=this.member)==null?void 0:r.memberState)==null?void 0:n.strokeColor)||[236,52,85];return((1<<24)+(e<<16)+(t<<8)+s).toString(16).slice(1)}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&&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 memberTagName(){var e;return(e=this.payload)==null?void 0:e.cursorTagName}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.hide()},1e3*10)}async createCursor(){this.member&&this.wrapper&&(this.component=new gn({target:this.wrapper,props:this.initProps()}))}initProps(){var e;return{uid:this.memberId,x:0,y:0,appliance:this.memberApplianceName,avatar:this.memberAvatar,src:this.getIcon(),custom:this.isCustomIcon(),visible:!1,backgroundColor:this.memberColor,cursorName:this.memberCursorName,theme:this.memberTheme,color:this.memberCursorTextColor,cursorTagBackgroundColor:this.memberCursorTagBackgroundColor,opacity:this.memberOpacity,tagName:this.memberTagName,pencilEraserSize:(e=this.member)==null?void 0:e.memberState.pencilEraserSize}}getIcon(){var h;if(!this.member)return;const{memberApplianceName:e,memberColorHex:t}=this,{userApplianceIcons:s,applianceIcons:r}=this.cursorManager;let n=this.memberApplianceName;n===f.ApplianceNames.pencilEraser&&(n=`${n}${((h=this.member)==null?void 0:h.memberState.pencilEraserSize)||1}`);const a=n&&s[n];if(a)return a;if(this.style==="custom"&&e){const c=Xi(e,t);if(c)return c}return r[n||f.ApplianceNames.shape]||r[f.ApplianceNames.shape]}isCustomIcon(){var a;if(!this.member)return!1;const{memberApplianceName:e,memberColorHex:t}=this,{userApplianceIcons:s}=this.cursorManager;let r=this.memberApplianceName;return r===f.ApplianceNames.pencilEraser&&(r=`${r}${((a=this.member)==null?void 0:a.memberState.pencilEraserSize)||1}`),r&&s[r]?!1:!!(this.style==="custom"&&e&&Xi(e,t))}updateMember(){return this.member=si(this.manager.room,this.memberId),this.updateComponent(),this.member}updateComponent(){var e;(e=this.component)==null||e.$set(w.omit(this.initProps(),["x","y"]))}destroy(){this.component&&this.component.$destroy(),this.cursorManager.cursorInstances.delete(this.memberId),this.timer&&clearTimeout(this.timer)}hide(){this.component&&(this.component.$set({visible:!1}),this.destroy())}}var wn="data:image/png;base64,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",xn="data:image/png;base64,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",Sn="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAgrSURBVHgB7ZprTBRXFIDP7gIt8lQppTwE5V0KaAn6o1pqNGkDDTEmTUhsgKRp+gNJw68CFkLbVC2QkDS+gD8KJdWmARvbFBNNWpuIRGPFWBXQRMPDqIki+KLATs+ZnTvcvXtnX8w2beJJToaduTP3fHPOPffcOwC8kP+2WCDwIvahGFxTuN8KmNSZmULPNjLeqF9F8rdPkIEGEn+r+vjx46LQ0NA8/Dsader58+e/h4WFDWntFO7ot6fMFAt3JLWi2lCDpqamCux2+2+KROj82NhYGrXT2lu5Z/DP/deFByElA4Pv3LlTiHY/nJ6eVnbv3q1s2bJFyc7OVrZu3arU1dUp4+PjxPUQoT+g9tp9PkMFgpo9kxljHRoaWp2Xl3duYmIiurKyEvDoclNCQgIcPnxYPc7MzHwcGRnZhaft4Ag7O9fUbRhaITCie4lgcnNzT7qDIaHz27dvh+vXr0NEREQneqoCHKFnAR+8ZCaQGGq2CxcurCGYycnJZHcwTNAzUFFRoUJFRUV1IFQ5OKBsXB9uxSwgl0TQ3d29Yt26dccwoyVXV1d7hGEiQmGi2AzOUHx/hob4K2yuYS9G987s7OwPISEh7xPM6dOnwVfBsIMjR45AZmbmo5s3b76Xnp7+J55egMVxBSAZT0v1ED+76yn66dOnLQSzd+9ev2BIyFP0MjBco1JTU/sxfFeDazp3cYgZHmKqdoaGNISHh9fv378fSJcqlPV6e3sBJ+I/goOD34VFL0k95Y+HxPHCYGxmw5DQ2NuzZw8EBQVtunXr1jvgwUP+hhz/QDXMMCNVE8zx48dNg2FCz6QQjI2N/RA8VBFmANnu3btXihnpG8pM9fX1EAi5du0aeWkVOAMBCF7yN+R0z4yOjq6NiYlpp9CgdBtIwXpPH6vgDKWLt0CygtM6MDCwBuUYZSKaOCksAiVY9wFOBePgDOOytPAGSKzNVCCC2bBhw69YdK7ypgpYimzbtk2dl7CM+hFcveOUHDylbTFO1YdhFbByx44dA1QFUP0VSJj4+Hjo6+sDq9U6iEmHKvFZTedQ50GYbN15SITVlwNlZWUnLRZL8s6dOwMOQ9UCTtKTra2ttdppt9V2kMF5cbmsjxuM43bMNrmUzc6fP6+GQiDGDoOJi4ubwb4qm5ubafyIE6nLxGqTPEsGo1cBOGNX0TyDYafC0CyOaxcVziyh53Z2dkJycvLMvn37PmpoaBgFR4jxYSbWdVIgI89Iq4CjR48CZjlYv369+tssqI6ODsjPz4f+/v668vLycxrEHHfkYdwC8SB6mGEV8Cl64cuuri5oa2tTG+EyGjZu3AiXLl1qefDgwV8lJSUFZkDV1tZCcXExXLx4sbWoqKgPFj0zx8GI9ZwO5W4M6ekZYeqpaqbqmaSqqkpNpcPDw4dwzfM9nrLduHEjEs+X0XV/Sx96LnqE1kLtBQUF3eDwCO8dGQyzV5rl+JyuegfXI29jRotiRlKnpFghHMzKyjqotVXS0tLacKPjF3bdHxjSq1evduAkepAD+ZsDYlC8V5w8ZBVg+PPq2MGMlkInqE4joTf45MmT4YyMjAPcA+ltLSQlJX2BafxnX6HI29QeK44TOTk57mCYZ0QoJ8OBM4yB6dkNkwGlSygsLFQvYtYB3BTMxFL+M+0eFgZqp4mJiU2+QKGX1fGIk/QIrn0aYXGsyDxjmAyMhO2jhaCGoUbX1NSkLSwsPMJqV8Fspu6lIZS6OYhjiOLwdU7fQM1HfRPD7wS1obZ0j0xpb4726Z49ezaJf2/S7s9ATUGNR41BjdJseRnke3WGwhrRTS9pD1mOGoeG15BxOOfoxuCkp0Ih6NeaEaSZGlieJyiCoc1FgsGldokGk8nBvAKOrWIGQ5uPsm0tt0BWDiicAaGuGhkZ+YqMw9StGzU4OKhCnT179hNsswY1FTXdE5QEJhc1S3tGogazXLOBwQSBl3tzIhQPtAL1VQJCTcNx8y1vHIUghSKFZE9PT7H2dlM1b+Wgrr1y5Uq77J75+fnplpaWMg2ch4nlYEI5z7hdensDpI4hrYNErcMMXJ32koG4ztf3pultz83NjWG99Ra2WQ0OL2VjZjwgeufUqVOqV8+cOdPIwdBLSNJeHg8TAh5WqJ6EfSmgt7IMNRJ1JThiOlnrOAMHshprmMKdoGSCpb9s3B3SYLIFGIqICJB7xisYi+RvfiypXw40DWGdlJaWRmMd141hk8V2OWm7ieYTXhBc3+BgaZyqAISjOYxSMVvXsBTNlzdiNQDgRao2AtK3pjggpmrqbGpqSsLPIN/dv38/gaBwUjTshMHcvn27JyUlpRmc5xpPMD599LIYnLNyUKKndKjGxsakXbt2deMCLIE8IVvs0YRM1fjdu3d/wrXN5+BcnzEgvor2uN3rjzAYMp5lPEoQlE5fA0fWo8GfhlCbKVFQ1pKNIfzcOHH58mWqaimVUwJI0+6n59D4pIlzmdZPMPiZzXjDjX47Le5g0Uu8x2zgPqWyKpjVe7x3+AUbq9NYjQbgp2dsBud5o8TP7d5kHAWcQchQfoEmLgn8HjOiBIF7o5hI1x6CEbLNP3bdqYAF44JzyWLzcN1i8DcT/o3awbm8Fz3DAy2A62INwPV/E3wWdx5inmBHuwChCBD6R2JwHge80TIQRQLjt7e8DTkGZgfX8cUMZTDAteFDkveaIlzjX9ySQs8X18r2t2VHUURPKoICmDR+eCO9aSdmOIub3/w9RgpgUpiJhvraXpa6jZKHGEqyusw0GLFzX+5RhN/8kYnMSNMMfyH/V/kHST6OYVElTPAAAAAASUVORK5CYII=",bn="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",vn="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",In="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjhweCIgaGVpZ2h0PSIyOHB4IiB2aWV3Qm94PSIwIDAgMjggMjgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU1LjEgKDc4MTM2KSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT7nvJbnu4QgMjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgeD0iLTEyMC4wJSIgeT0iLTEyMC4wJSIgd2lkdGg9IjM0MC4wJSIgaGVpZ2h0PSIzNDAuMCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0xIj4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hC0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5LjAwMDAwMCwgOS4wMDAwMDApIiBmaWxsPSIjRkYwMTAwIj4KICAgICAgICAgICAgPGNpcmNsZSBpZD0i5qSt5ZyG5b2iIiBmaWx0ZXI9InVybCgjZmlsdGVyLTEpIiBjeD0iNSIgY3k9IjUiIHI9IjUiPjwvY2lyY2xlPgogICAgICAgICAgICA8cGF0aCBkPSJNNSw4IEM2LjY1Njg1NDI1LDggOCw2LjY1Njg1NDI1IDgsNSBDOCwzLjM0MzE0NTc1IDYuNjU2ODU0MjUsMiA1LDIgQzMuMzQzMTQ1NzUsMiAyLDMuMzQzMTQ1NzUgMiw1IEMyLDYuNjU2ODU0MjUgMy4zNDMxNDU3NSw4IDUsOCBaIE01LDYuMjg1NzE0MjkgQzQuMjg5OTE5NjEsNi4yODU3MTQyOSAzLjcxNDI4NTcxLDUuNzEwMDgwMzkgMy43MTQyODU3MSw1IEMzLjcxNDI4NTcxLDQuMjg5OTE5NjEgNC4yODk5MTk2MSwzLjcxNDI4NTcxIDUsMy43MTQyODU3MSBDNS43MTAwODAzOSwzLjcxNDI4NTcxIDYuMjg1NzE0MjksNC4yODk5MTk2MSA2LjI4NTcxNDI5LDUgQzYuMjg1NzE0MjksNS43MTAwODAzOSA1LjcxMDA4MDM5LDYuMjg1NzE0MjkgNSw2LjI4NTcxNDI5IFoiIGlkPSLmpK3lnIblvaIiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",yn="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAxOCAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSIyNSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K",Cn="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAyNiAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIyNSIgaGVpZ2h0PSIzMyIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K",An="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCAzNCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIzMyIgaGVpZ2h0PSI0OSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K";const Bn={[f.ApplianceNames.pencil]:wn,[f.ApplianceNames.selector]:xn,[f.ApplianceNames.eraser]:Sn,[f.ApplianceNames.shape]:bn,[f.ApplianceNames.text]:vn,[f.ApplianceNames.laserPointer]:In,pencilEraser1:yn,pencilEraser2:Cn,pencilEraser3:An},Ki="local-cursor";class rt{constructor(e,t,s,r){var o;this.manager=e,this.enableCursor=t,this.cursorInstances=new Map,this.userApplianceIcons={},this.sideEffectManager=new Ke,this.store=this.manager.store,this.leaveFlag=!0,this._style="default",this.onCursorMove=h=>{const c=this.initCursorInstance(h.uid);if(h.state===Yt.Leave)c.leave();else{const l=c.updateMember();this.canMoveCursor(l)&&c.move(h.position)}},this.initCursorInstance=h=>{let c=this.cursorInstances.get(h);return c||(c=new Mn(this.manager,h,this,P.wrapper),this.cursorInstances.set(h,c)),c},this.mouseMoveListener_=(h,c)=>{const l=this.getType(h);this.updateCursor(l,h.clientX,h.clientY),c&&this.showPencilEraserIfNeeded(l,h.clientX,h.clientY)},this.mouseMoveTimer=0,this.mouseMoveListener=h=>{const c=h.pointerType==="touch";if(c&&!h.isPrimary)return;const l=Date.now();if(l-this.mouseMoveTimer>48){if(this.mouseMoveTimer=l,P.supportAppliancePlugin&&f.isRoom(P.displayer)&&P.displayer.disableDeviceInputs){this.leaveFlag&&(this.manager.dispatchInternalEvent(R.CursorMove,{uid:this.manager.uid,state:Yt.Leave}),this.leaveFlag=!1);return}this.mouseMoveListener_(h,c),this.leaveFlag=!0}},this.mouseLeaveListener=()=>{this.hideCursor(this.manager.uid)},this.getPoint=(h,c,l)=>{var d;const u=(d=h==null?void 0:h.divElement)==null?void 0:d.getBoundingClientRect();if(u)return h==null?void 0:h.convertToPointInWorld({x:c-u.x,y:l-u.y})},this.getType=h=>{var u;const c=h.target,l=this.manager.focusApp;switch(c.parentElement){case this.mainViewElement:return{type:"main"};case((u=l==null?void 0:l.view)==null?void 0:u.divElement):return{type:"app"};default:return{type:"main"}}},this.roomMembers=(o=this.manager.room)==null?void 0:o.state.roomMembers;const n=P.wrapper;n&&this.setupWrapper(n),this.sideEffectManager.add(()=>A.on("cursorMove",this.onCursorMove)),this.sideEffectManager.add(()=>A.on("playgroundSizeChange",()=>this.updateContainerRect()));const a=this.manager.room;a&&this.sideEffectManager.add(()=>{const h=c=>{this.style==="custom"&&c.memberState&&this.enableCustomCursor()};return a.callbacks.on("onRoomStateChanged",h),()=>a.callbacks.off("onRoomStateChanged",h)}),r&&(this.userApplianceIcons=r),this.style=(s==null?void 0:s.style)||"default"}get applianceIcons(){return{...Bn,...this.userApplianceIcons}}get style(){return this._style}set style(e){this._style!==e&&(this._style=e,this.cursorInstances.forEach(t=>{t.setStyle(e)}),e==="custom"?this.enableCustomCursor():this.sideEffectManager.flush(Ki))}enableCustomCursor(){this.sideEffectManager.add(()=>mn(this.manager.getMemberState()),Ki)}canMoveCursor(e){const t=(e==null?void 0:e.memberState.currentApplianceName)===f.ApplianceNames.laserPointer;return this.enableCursor||t}setupWrapper(e){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.wrapperRect=e.getBoundingClientRect()}setMainViewDivElement(e){this.mainViewElement=e}get boxState(){return this.store.getBoxState()}get focusView(){var e;return(e=this.manager.focusApp)==null?void 0:e.view}showPencilEraserIfNeeded(e,t,s){const r=si(this.manager.room,this.manager.uid),n=(r==null?void 0:r.memberState.currentApplianceName)===f.ApplianceNames.pencilEraser;if(this.wrapperRect&&this.manager.canOperate&&this.canMoveCursor(r)&&n){const a=e.type==="main"?this.manager.mainView:this.focusView,o=this.getPoint(a,t,s);o&&this.onCursorMove({uid:this.manager.uid,position:{x:o.x,y:o.y,type:e.type}})}}updateCursor(e,t,s){const r=si(this.manager.room,this.manager.uid);if(this.wrapperRect&&this.manager.canOperate&&this.canMoveCursor(r)){const n=e.type==="main"?this.manager.mainView:this.focusView,a=this.getPoint(n,t,s);a&&this.manager.dispatchInternalEvent(R.CursorMove,{uid:this.manager.uid,position:{x:a.x,y:a.y,type:e.type}})}}updateContainerRect(){var e,t;this.containerRect=(e=P.container)==null?void 0:e.getBoundingClientRect(),this.wrapperRect=(t=P.wrapper)==null?void 0:t.getBoundingClientRect()}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()}destroy(){this.sideEffectManager.flushAll(),this.cursorInstances.size&&(this.cursorInstances.forEach(e=>{e.destroy()}),this.cursorInstances.clear())}}rt.kind="CursorManager";function ge(i,e){if(i.kind&&e&&Object.keys(e).includes(i.kind))switch(i.kind){case"AppManager":return(e==null?void 0:e.AppManager)||ot;case"BoxManager":return(e==null?void 0:e.BoxManager)||it;case"AttributesDelegate":return(e==null?void 0:e.AttributesDelegate)||at;case"CursorManager":return(e==null?void 0:e.CursorManager)||rt;case"AppProxy":return(e==null?void 0:e.AppProxy)||nt;case"AppContext":return(e==null?void 0:e.AppContext)||qe;case"TeleBoxManager":return(e==null?void 0:e.TeleBoxManager)||tt;case"TeleBoxCollector":return(e==null?void 0:e.TeleBoxCollector)||Le;default:return i}return i}var Q=(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",i.Registered="registered",i.IframeBridge="iframeBridge",i.BoxesStatus="boxesStatus",i.LastNotMinimizedBoxesStatus="lastNotMinimizedBoxesStatus",i))(Q||{});class at{constructor(e){this.context=e,this.setAppFocus=(t,s)=>{s?this.context.safeSetAttributes({focus:t}):this.context.safeSetAttributes({focus:void 0})}}setContext(e){this.context=e}get attributes(){return this.context.getAttributes()}apps(){return w.get(this.attributes,["apps"])}get focus(){return w.get(this.attributes,["focus"])}getAppAttributes(e){return w.get(this.apps(),[e])}getAppState(e){return w.get(this.apps(),[e,"state"])}getMaximized(){return w.get(this.attributes,["maximized"])}getMinimized(){return w.get(this.attributes,["minimized"])}getBoxesStatus(){return w.get(this.attributes,["boxesStatus"])}getBoxStatus(e){return w.get(this.attributes,["boxesStatus",e])}setBoxStatus(e,t){this.attributes.boxesStatus||this.context.safeSetAttributes({boxesStatus:{}}),this.getBoxStatus(e)!==t&&this.context.safeUpdateAttributes(["boxesStatus",e],t)}getLastNotMinimizedBoxesStatus(){return w.get(this.attributes,["lastNotMinimizedBoxesStatus"])}getLastNotMinimizedBoxStatus(e){return w.get(this.attributes,["lastNotMinimizedBoxesStatus",e])}setLastNotMinimizedBoxStatus(e,t){this.attributes.lastNotMinimizedBoxesStatus||this.context.safeSetAttributes({lastNotMinimizedBoxesStatus:{}}),this.getLastNotMinimizedBoxStatus(e)!==t&&this.context.safeUpdateAttributes(["lastNotMinimizedBoxesStatus",e],t)}setupAppAttributes(e,t,s){this.attributes.apps||this.context.safeSetAttributes({apps:{}});const n=["scenePath","title"];s||n.push("scenes");const a=w.pick(e.options,n),o={kind:e.kind,options:a,isDynamicPPT:s,forceTop:e.forceTop,forceNormal:e.forceNormal,isDragContent:e.isDragContent};typeof e.src=="string"&&(o.src=e.src),o.createdAt=Date.now(),this.context.safeUpdateAttributes(["apps",t],o),this.context.safeUpdateAttributes(["apps",t,"state"],{[ee.Size]:{},[ee.Position]:{},[ee.SceneIndex]:0})}updateAppState(e,t,s){w.get(this.attributes,["apps",e,"state"])&&this.context.safeUpdateAttributes(["apps",e,"state",t],s)}cleanAppAttributes(e){this.context.safeUpdateAttributes(["apps",e],void 0),this.context.safeSetAttributes({[e]:void 0}),this.attributes.focus===e&&this.cleanFocus()}cleanFocus(){this.context.safeSetAttributes({focus:void 0})}getAppSceneIndex(e){var t;return(t=this.getAppState(e))==null?void 0:t[ee.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.boxState}setMainViewScenePath(e){this.context.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.context.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return w.get(this.attributes,["mainViewCamera"])}getMainViewSize(){return w.get(this.attributes,["mainViewSize"])}setMainViewCamera(e){this.context.safeSetAttributes({mainViewCamera:{...e}})}setMainViewSize(e){e.width===0||e.height===0||this.context.safeSetAttributes({mainViewSize:{...e}})}setMainViewCameraAndSize(e,t){t.width===0||t.height===0||this.context.safeSetAttributes({mainViewCamera:{...e},mainViewSize:{...t}})}updateCursor(e,t){w.get(this.attributes,["cursors"])||this.context.safeUpdateAttributes(["cursors"],{}),w.get(this.attributes,["cursors",e])||this.context.safeUpdateAttributes(["cursors",e],{}),this.context.safeUpdateAttributes(["cursors",e,"position"],t)}updateCursorState(e,t){w.get(this.attributes,["cursors",e])||this.context.safeUpdateAttributes(["cursors",e],{}),this.context.safeUpdateAttributes(["cursors",e,"cursorState"],t)}getCursorState(e){return w.get(this.attributes,["cursors",e,"cursorState"])}cleanCursor(e){this.context.safeUpdateAttributes(["cursors",e],void 0)}setMainViewFocusPath(e){const t=this.getMainViewScenePath();t&&be(e,t)}getIframeBridge(){return w.get(this.attributes,["iframeBridge"])}setIframeBridge(e){if(w.isObject(e)){const t=this.getIframeBridge();for(const s in e){const r=e[s];t[s]!==r&&this.context.safeUpdateAttributes(["iframeBridge",s],r)}}}}at.kind="AttributesDelegate";const Nn=(i,e={getAttributes:()=>{throw new Error("getAttributes not implemented")},safeSetAttributes:()=>{throw new Error("safeSetAttributes not implemented")},safeUpdateAttributes:()=>{throw new Error("safeUpdateAttributes not implemented")}})=>{const t=ge(at,i);return new t(e)},xi=(i,e)=>{let t=0;const s=e.length-1;return i===e.index?i===s?t=i-1:t=e.index+1:t=e.index,t},ce=new ve.default,Os=class{constructor(i,e,t,s){var r;this.params=i,this.manager=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.store=this.manager.store,this.status="normal",this.getAppInitState=n=>{var Z,_,W,ie;const a=this.store.getAppState(n);if(!a)return;const o=a==null?void 0:a[ee.Position],h=this.store.focus,c=a==null?void 0:a[ee.Size],l=a==null?void 0:a[ee.SceneIndex],u=(Z=this.attributes)==null?void 0:Z.maximized,d=(_=this.attributes)==null?void 0:_.minimized,m=(W=this.store.getBoxStatus(n))!=null?W:void 0,g=(ie=this.store.getLastNotMinimizedBoxStatus(n))!=null?ie:void 0,{forceTop:b,forceNormal:M,isDragContent:N}=this.store.getAppAttributes(n),z=a==null?void 0:a.zIndex;let v={maximized:u,minimized:d,zIndex:z};return o&&(v={...v,id:n,x:o.x,y:o.y}),h===n&&(v={...v,focus:!0}),c&&(v={...v,width:c.width,height:c.height}),l&&(v={...v,sceneIndex:l}),m&&(v={...v,boxStatus:m}),g&&(v={...v,lastNotMinimizedBoxStatus:g}),b&&(v={...v,forceTop:b}),M&&(v={...v,forceNormal:M}),N&&(v={...v,isDragContent:N}),v},this.appAttributesUpdateListener=n=>{this.manager.refresher.add(n,()=>f.autorun(()=>{const a=this.manager.attributes[n];a&&this.appEmitter.emit("attributesUpdate",a)})),this.manager.refresher.add(this.stateKey,()=>f.autorun(()=>{var o,h,c,l;const a=(o=this.appAttributes)==null?void 0:o.state;(a==null?void 0:a.zIndex)>0&&a.zIndex!==((h=this.box)==null?void 0:h.zIndex)&&((c=this.boxManager)==null||c.setZIndex(n,a.zIndex),(l=this.boxManager)==null||l.focusBox({appId:n}))})),this.manager.refresher.add(`${n}-fullPath`,()=>f.autorun(()=>{var o;const a=(o=this.appAttributes)==null?void 0:o.fullPath;this.setFocusScenePathHandler(a),this._prevFullPath!==a&&(this.notifyPageStateChange(),this._prevFullPath=a)}))},this.setFocusScenePathHandler=w.debounce(n=>{var a;this.view&&n&&n!==((a=this.view)==null?void 0:a.focusScenePath)&&(be(this.view,n),L.emit("onAppScenePathChange",{appId:this.id,view:this.view}))},50),this.notifyPageStateChange=w.debounce(()=>{this.appEmitter.emit("pageStateChange",this.pageState)},50),this.notifyBoxStatusChange=n=>{this.appEmitter.emit("boxStatusChange",{appId:this.id,status:n})},this.kind=i.kind,this.id=t,this.stateKey=`${this.id}_state`,this.appProxies.set(this.id,this),this.appEmitter=new ve.default,this.appListener=this.makeAppEventListener(this.id),this.isAddApp=s,this.initScenes(),(r=this.params.options)!=null&&r.scenePath&&this.createView(),this._pageState=new Er({displayer:this.manager.displayer,scenePath:this.scenePath,view:this.view,notifyPageStateChange:this.notifyPageStateChange})}initScenes(){var e;const i=this.params.options;i&&(this.scenePath=i.scenePath,((e=this.appAttributes)==null?void 0:e.isDynamicPPT)&&this.scenePath?this.scenes=Pe(this.manager.displayer)[this.scenePath]:this.scenes=i.scenes)}get view(){return this.manager.viewManager.getView(this.id)}get viewIndex(){var i;return(i=this.view)==null?void 0:i.focusSceneIndex}get isWritable(){var i;return this.manager.canOperate&&!((i=this.box)!=null&&i.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}get Logger(){return this.manager.windowManger.Logger}getFullScenePath(){if(this.scenePath)return w.get(this.appAttributes,[Q.FullPath])||this.getFullScenePathFromScenes()}getFullScenePathFromScenes(){const i=w.get(this.appAttributes,["state","SceneIndex"],0),e=Ir(this.manager.room,this.scenePath,i);return e&&this.setFullPath(e),e}setFullPath(i){this.manager.safeUpdateAttributes(["apps",this.id,Q.FullPath],i)}async baseInsertApp(i=!1,e=x.Normal){var a;const t=this.params;if(!t.kind)throw this.Logger&&this.Logger.error("[WindowManager]: kind require"),new Error("[WindowManager]: kind require");const s=await((a=J.appClasses.get(t.kind))==null?void 0:a()),r=J.registered.get(t.kind),n=this.manager.windowManger.resolveAppOptions(t.kind,r==null?void 0:r.appOptions);if(s)await this.setupApp(this.id,i,s,t.options,n,this.manager.useBoxesStatus?e:void 0,t.forceTop,t.forceNormal,t.isDragContent);else throw this.Logger&&this.Logger.error(`[WindowManager]: app load failed ${t.kind} ${t.src}`),new Error(`[WindowManager]: app load failed ${t.kind} ${t.src}`);return A.emit("updateManagerRect"),{appId:this.id,app:s}}get box(){var i;return(i=this.boxManager)==null?void 0:i.getBox(this.id)}async setupApp(i,e,t,s,r,n,a,o,h){var u;if(re("setupApp",i,t,s,n,a,o,h),!this.boxManager)throw new us;const c=ge(qe,P.extendClass),l=new c(this.manager,this.boxManager,i,this,r);this.appContext=l;try{A.once(`${i}${R.WindowCreated}`).then(async()=>{var g;let d;e||(d=this.getAppInitState(i),(g=this.boxManager)==null||g.updateBoxState(d)),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(i),this.setViewFocusScenePath();let m;this.manager.isReplay&&(m=this.manager.mainView.scenePath),setTimeout(async()=>{this.Logger&&this.Logger.info(`[WindowManager]: setup app ${this.kind}, appId: ${i}`);const b=await t.setup(l);this.appResult=b,J.notifyApp(this.kind,"created",{appId:i,result:b}),this.afterSetupApp(d),this.fixMobileSize(),m&&this.manager.mainViewProxy.setFocusScenePath(m),L.emit("onAppSetup",i)},rs)}),(u=this.boxManager)==null||u.createBox({appId:i,app:t,options:s,canOperate:this.manager.canOperate,smartPosition:this.isAddApp,boxStatus:n,forceTop:a,forceNormal:o,isDragContent:h}),this.isAddApp&&this.box&&(n&&this.store.setBoxStatus(i,n),this.store.updateAppState(i,ee.ZIndex,this.box.zIndex),this.store.updateAppState(i,ee.Size,{width:this.box.intrinsicWidth,height:this.box.intrinsicHeight}),this.boxManager.focusBox({appId:i},!1))}catch(d){throw this.Logger&&this.Logger.error(`[WindowManager]: app setup error: ${d.message}`),new Error(`[WindowManager]: app setup error: ${d.message}`)}}fixMobileSize(){var e,t;const i=(e=this.boxManager)==null?void 0:e.getBox(this.id);i&&((t=this.boxManager)==null||t.resizeBox({appId:this.id,width:i.intrinsicWidth+.001,height:i.intrinsicHeight+.001,skipUpdate:!0}))}afterSetupApp(i){var e;i&&(!(i!=null&&i.x)||!i.y)&&((e=this.boxManager)==null||e.setBoxInitState(this.id))}async onSeek(i){var t;this.appEmitter.emit("seek",i).catch(s=>{console.log(`[WindowManager]: emit seek error: ${s.message}`)});const e=this.getAppInitState(this.id);(t=this.boxManager)==null||t.updateBoxState(e)}async onReconnected(){var n;if(!Boolean(this.manager.attributes.apps[this.id])){await this.destroy(!0,!1,!0);return}this.appEmitter.emit("reconnected",void 0);const e=this.getAppInitState(this.id);await this.destroy(!0,!1,!0);const t=this.params,s=ge(Os,P.extendClass);await new s(t,this.manager,this.id,this.isAddApp).baseInsertApp(!0,e==null?void 0:e.boxStatus),(n=this.boxManager)==null||n.updateBoxState(e)}async onRemoveScene(i){if(this.scenePath&&i.startsWith(this.scenePath+"/")){let e=this.pageState.index,t=this._pageState.getFullPath(e);t||(e=0,t=this._pageState.getFullPath(e)),t&&this.setFullPath(t),this.setViewFocusScenePath(),this.view&&(this.view.focusSceneIndex=e)}}emitAppSceneStateChange(i){this.appEmitter.emit("sceneStateChange",i)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(i){return(e,t)=>{var s,r,n,a;if(!!this.manager.canOperate)switch(e){case"setBoxSize":{(s=this.boxManager)==null||s.resizeBox({appId:i,width:t.width,height:t.height,skipUpdate:!1});break}case"setBoxMinSize":{(r=this.boxManager)==null||r.setBoxMinSize({appId:i,minWidth:t.minwidth,minHeight:t.minheight});break}case"setBoxTitle":{(n=this.boxManager)==null||n.setBoxTitle({appId:i,title:t.title});break}case is.destroy:{if(this.status==="destroyed")return;this.destroy(!0,!1,!0,t==null?void 0:t.error),t!=null&&t.error&&console.error(t==null?void 0:t.error);break}case"focus":{(a=this.boxManager)==null||a.focusBox({appId:this.id}),ce.emit("focus",{appId:this.id});break}}}}setScenePath(){if(!this.manager.canOperate)return;const i=this.getFullScenePath();this.manager.room&&i&&this.view&&Ht(this.manager.room,i)}setViewFocusScenePath(){const i=this.getFullScenePath();return i&&this.view&&be(this.view,i),i}async createView(){const i=await this.viewManager.createView(this.id);return this.setViewFocusScenePath(),i}get pageState(){return this._pageState.toObject()}async removeSceneByIndex(i){const e=this._pageState.getFullPath(i);if(e){const t=xi(i,this.pageState);return this.setSceneIndexWithoutSync(t),this.manager.dispatchInternalEvent(R.SetAppFocusIndex,{type:"app",appID:this.id,index:t}),setTimeout(()=>{Jt(this.manager.room,e,i)},100),!0}else return!1}setSceneIndexWithoutSync(i){this.view&&(this.view.focusSceneIndex=i)}setSceneIndex(i){if(this.view){this.view.focusSceneIndex=i;const e=this._pageState.getFullPath(i);e&&this.setFullPath(e)}}async destroy(i,e,t,s){var r;if(this.status!=="destroyed"){this.status="destroyed";try{await J.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:s})}catch(n){this.Logger&&this.Logger.error(`[WindowManager]: notifyApp error: ${n.message}`),console.error("[WindowManager]: notifyApp error",n.message,n.stack)}this.appEmitter.clearListeners(),A.emit(`destroy-${this.id}`,{error:s}),i&&((r=this.boxManager)==null||r.closeBox(this.id,t)),e&&(this.store.cleanAppAttributes(this.id),this.scenePath&&Jt(this.manager.room,this.scenePath)),this.appProxies.delete(this.id),this._pageState.destroy(),this.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),this.manager.refresher.remove(this.id),this.manager.refresher.remove(this.stateKey),this.manager.refresher.remove(`${this.id}-fullPath`),this._prevFullPath=void 0,this.Logger&&this.Logger.info(`[WindowManager]: destroy app ${this.kind} appId: ${this.id}`)}}close(){return this.destroy(!0,!0,!1)}};let nt=Os;nt.kind="AppProxy";class zn{constructor(e){this.displayer=e,this.views=new Map}createView(e){const t=Ws(this.displayer);return this.views.set(e,t),t}getView(e){return this.views.get(e)}destroyView(e){const t=this.views.get(e);if(t){try{t.release()}catch{}this.views.delete(e)}}setViewScenePath(e,t){const s=this.views.get(e);s&&(s.focusScenePath=t)}destroy(){this.views.forEach(e=>{try{e.release()}catch{}}),this.views.clear()}}const Ws=i=>{const e=i.views.createView();return Dn(e),e},Dn=i=>{i.setCameraBound({maxContentMode:()=>10,minContentMode:()=>.1})};class Tn{constructor(e){this.manager=e,this.polling=!1,this.started=!1,this.mainViewIsAddListener=!1,this.isForcingMainViewDivElement=!1,this.wrapperRectWorkaroundFrame=0,this.store=this.manager.store,this.viewMode=this.manager.windowManger.viewMode,this.sideEffectManager=new Ke,this.playgroundSizeChangeListenerLocalConsole=new We("playgroundSizeChangeListener",100),this.sizeUpdatedLocalConsole=new We("sizeUpdated",100),this.cameraUpdatedLocalConsole=new We("cameraUpdated",100),this.cameraReactionLocalConsole=new We("cameraReaction",100),this.syncCamera=()=>{if(!this.polling||this.viewMode!==f.ViewMode.Broadcaster)return;const{mainViewCamera:s}=this;s&&s.id!==this.manager.uid&&this.moveCameraSizeByAttributes()},this.startListenWritableChange=()=>{this.sideEffectManager.add(()=>A.on("writableChange",s=>{s&&this.ensureCameraAndSize(),this.manager.room&&this.syncMainView(this.manager.room)}))},this.onWrapperRectChange=s=>{this.pendingWrapperRectChange=s,this.wrapperRectWorkaroundFrame&&cancelAnimationFrame(this.wrapperRectWorkaroundFrame),this.wrapperRectWorkaroundFrame=requestAnimationFrame(this.runWrapperRectWorkaround)},this.runWrapperRectWorkaround=()=>{this.wrapperRectWorkaroundFrame=0;const s=this.pendingWrapperRectChange,r=this.mainView.divElement;if(this.pendingWrapperRectChange=void 0,!s||!r)return;const n=r.getBoundingClientRect(),a={width:n.width,height:n.height},o=Math.abs(s.width-a.width)<=.5&&Math.abs(s.height-a.height)<=.5,h=Math.abs(this.mainView.size.width-a.width)>.5||Math.abs(this.mainView.size.height-a.height)>.5;o&&h&&this.forceSyncMainViewDivElement(`wrapperRectChange:${s.origin||"unknown"}`,a,r)},this.addCameraReaction=()=>{this.manager.refresher.add(Q.MainViewCamera,this.cameraReaction)},this.cameraReaction=()=>f.reaction(()=>this.mainViewCamera,s=>{s&&s.id!==this.manager.uid&&(this.moveCameraToContian(this.mainViewSize),this.moveCamera(s),this.cameraReactionLocalConsole.log(`camera: ${JSON.stringify(s)}, current size: ${JSON.stringify(this.mainViewSize)}`))},{fireImmediately:!0}),this.sizeChangeHandler=w.debounce(s=>{s&&(this.moveCameraToContian(s),this.moveCamera(this.mainViewCamera),console.log("[window-manager] sizeChangeHandler current size and camera"+JSON.stringify(s)+JSON.stringify(this.mainViewCamera)+JSON.stringify(this.mainView.camera)+JSON.stringify(this.mainView.size))),this.ensureMainViewSize()},30),this.onUpdateContainerSizeRatio=()=>{const s=this.store.getMainViewSize();console.log("[window-manager] onUpdateContainerSizeRatio "+JSON.stringify(s)),this.sizeChangeHandler(s)},this.onCameraUpdatedByDevice=s=>{this.viewMode!==f.ViewMode.Follower&&(this.store.setMainViewCamera({...s,id:this.manager.uid}),w.isEqual(this.mainViewSize,{...this.mainView.size,id:this.manager.uid})||this.setMainViewSize(this.view.size))},this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.setMainViewSize=w.debounce(s=>{this.store.setMainViewSize({...s,id:this.manager.uid})},50),this._syncMainViewTimer=0,this.handleCameraOrSizeUpdated=()=>{L.emit("cameraStateChange",this.cameraState),this.manager.room&&this.manager.room.syncMainView&&(clearTimeout(this._syncMainViewTimer),this._syncMainViewTimer=setTimeout(this.syncMainView,100,this.manager.room)),this.ensureMainViewSize()},this.onCameraUpdated=s=>{this.cameraUpdatedLocalConsole.log(JSON.stringify(s)),this.handleCameraOrSizeUpdated()},this.onSizeUpdated=s=>{this.sizeUpdatedLocalConsole.log(JSON.stringify(s)),this.handleCameraOrSizeUpdated()},this.syncMainView=s=>{s.isWritable&&s.syncMainView(this.mainView)},this.setViewMode=s=>{this.viewMode=s},this.mainView=this.createMainView(),this.moveCameraSizeByAttributes(),A.once("mainViewMounted").then(()=>{this.addMainViewListener(),this.start(),this.ensureCameraAndSize(),this.startListenWritableChange()});const t=()=>{var s,r,n,a,o,h,c,l;this.playgroundSizeChangeListenerLocalConsole.log(JSON.stringify(this.mainView.camera),JSON.stringify(this.mainView.size),JSON.stringify(this.mainViewSize),JSON.stringify(this.mainViewCamera),window.outerHeight,window.outerWidth,(r=(s=window.visualViewport)==null?void 0:s.width)!=null?r:"null",(a=(n=window.visualViewport)==null?void 0:n.height)!=null?a:"null",(h=(o=window.visualViewport)==null?void 0:o.offsetLeft)!=null?h:"null",(l=(c=window.visualViewport)==null?void 0:c.offsetTop)!=null?l:"null"),this.sizeChangeHandler(this.mainViewSize)};this.sideEffectManager.add(()=>A.on("playgroundSizeChange",t)),this.sideEffectManager.add(()=>A.on("containerSizeRatioUpdate",this.onUpdateContainerSizeRatio)),this.sideEffectManager.add(()=>A.on("wrapperRectChange",this.onWrapperRectChange)),this.sideEffectManager.add(()=>A.on("startReconnect",()=>{this.didRelease||this.mainView.release()})),this.sideEffectManager.setInterval(this.syncCamera,1500)}ensureCameraAndSize(){this.viewMode===f.ViewMode.Broadcaster&&(!this.mainViewCamera||!this.mainViewSize)&&(this.manager.dispatchInternalEvent(R.InitMainViewCamera),this.setCameraAndSize())}get mainViewCamera(){return this.store.getMainViewCamera()}get mainViewSize(){return this.store.getMainViewSize()}get didRelease(){return w.get(this.view,["didRelease"])}moveCameraSizeByAttributes(){this.moveCameraToContian(this.mainViewSize),this.moveCamera(this.mainViewCamera)}forceSyncMainViewDivElement(e,t,s){var o,h;const{width:r,height:n}=this.mainView.size,a=s;if(!(Math.abs(r-t.width)<=.5&&Math.abs(n-t.height)<=.5)){if(this.isForcingMainViewDivElement){console.log("[window-manager] skipForceSyncMainViewDivElement "+JSON.stringify({reason:e,observedSize:t,viewSize:this.mainView.size}));return}this.isForcingMainViewDivElement=!0;try{const l=this.mainView.screen,u=l==null?void 0:l.resizeObserver;typeof(l==null?void 0:l.refreshSize)=="function"&&(console.log("[window-manager] forceSyncMainViewDivElement observerReset "+JSON.stringify({reason:e,viewSize:this.mainView.size,observedSize:t})),(o=u==null?void 0:u.disconnect)==null||o.call(u),l.refreshSize(t.width,t.height),(h=u==null?void 0:u.observe)==null||h.call(u,s))}finally{queueMicrotask(()=>{const c=a.getBoundingClientRect();console.log("[window-manager] forceSyncMainViewDivElementResult "+JSON.stringify({reason:e,viewSize:this.mainView.size,rect:{width:c.width,height:c.height}})),this.isForcingMainViewDivElement=!1})}}}start(){console.log("[window-manager] start attributes size:"+JSON.stringify(this.mainViewSize)),this.sizeChangeHandler(this.mainViewSize),!this.started&&(this.addCameraListener(),this.addCameraReaction(),this.manager.room&&this.syncMainView(this.manager.room),this.started=!0,this.mainView.focusScenePath&&this.manager.windowManger.onMainViewScenePathChangeHandler(this.mainView.focusScenePath),console.log("[window-manager] start end mainView size:"+JSON.stringify(this.mainView.size)))}setCameraAndSize(){const e={...this.mainView.camera,id:this.manager.uid},t={...this.mainView.size,id:this.manager.uid};this.store.setMainViewCameraAndSize(e,t)}get view(){return this.mainView}get cameraState(){return{...this.view.camera,...this.view.size}}createMainView(){const e=Ws(this.manager.displayer),t=this.store.getMainViewScenePath();return t&&be(e,t),e}onReconnect(){if(this.didRelease)this.rebind();else{const e=this.store.getMainViewScenePath();this.setFocusScenePath(e)}}setFocusScenePath(e){if(e)return be(this.view,e)}rebind(){const e=this.mainView.divElement,t=this.mainView.disableCameraTransform;this.stop(),this.didRelease||this.mainView.release(),this.removeMainViewListener(),this.mainView=this.createMainView(),this.mainView.disableCameraTransform=t,this.mainView.divElement=e,this.addMainViewListener(),this.start(),L.emit("onMainViewRebind",this.mainView)}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)),this.mainViewIsAddListener=!1}async mainViewClickHandler(){var e;!this.manager.canOperate||(this.store.cleanFocus(),(e=this.manager.boxManager)==null||e.blurAllBox())}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.on("onCameraUpdated",this.onCameraUpdated),this.view.callbacks.on("onSizeUpdated",this.onSizeUpdated)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.off("onCameraUpdated",this.onCameraUpdated),this.view.callbacks.off("onSizeUpdated",this.onSizeUpdated)}ensureMainViewSize(){(!this.mainViewSize||this.mainViewSize.width===0||this.mainViewSize.height===0)&&this.mainView.size.width>0&&this.mainView.size.height>0&&this.setMainViewSize(this.mainView.size)}moveCameraToContian(e){w.isEmpty(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:f.AnimationMode.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!w.isEmpty(e)){if(w.isEqual(e,this.view.camera))return;const{centerX:t,centerY:s,scale:r}=e,n=r*(this.scale||1);this.view.moveCamera({centerX:t,centerY:s,scale:n,animationMode:f.AnimationMode.Immediately})}}stop(){this.removeCameraListener(),this.manager.refresher.remove(Q.MainViewCamera),this.manager.refresher.remove(Q.MainViewSize),this.started=!1}destroy(){console.log("[window-manager] destroy "),this.wrapperRectWorkaroundFrame&&(cancelAnimationFrame(this.wrapperRectWorkaroundFrame),this.wrapperRectWorkaroundFrame=0),this.playgroundSizeChangeListenerLocalConsole.destroy(),this.sizeUpdatedLocalConsole.destroy(),this.cameraUpdatedLocalConsole.destroy(),this.cameraReactionLocalConsole.destroy(),this.removeMainViewListener(),this.stop(),this.sideEffectManager.flushAll()}}class Pn{constructor(e){this.context=e,this.addRedoUndoListeners=t=>{if(t===void 0)this.addViewCallbacks(this.context.mainView(),this.onCanRedoStepsUpdate,this.onCanUndoStepsUpdate);else{const s=this.context.getAppProxy(t);s&&s.view&&this.addViewCallbacks(s.view,this.onCanRedoStepsUpdate,this.onCanUndoStepsUpdate)}},this.addViewCallbacks=(t,s,r)=>{s(t.canRedoSteps),r(t.canUndoSteps),t.callbacks.on("onCanRedoStepsUpdate",s),t.callbacks.on("onCanUndoStepsUpdate",r)},this.disposeViewCallbacks=t=>{t.callbacks.off("onCanRedoStepsUpdate",this.onCanRedoStepsUpdate),t.callbacks.off("onCanUndoStepsUpdate",this.onCanUndoStepsUpdate)},this.onCanRedoStepsUpdate=t=>{L.emit("canRedoStepsChange",t)},this.onCanUndoStepsUpdate=t=>{L.emit("canUndoStepsChange",t)},this.disposePrevFocusViewRedoUndoListeners=t=>{let s;if(t===void 0)s=this.context.mainView();else{const r=this.context.getAppProxy(t);r&&r.view&&(s=r.view)}s&&this.disposeViewCallbacks(s)},A.on("focusedChange",t=>{this.disposePrevFocusViewRedoUndoListeners(t.prev),setTimeout(()=>{this.addRedoUndoListeners(t.focused)},0)}),A.on("rootDirRemoved",()=>{this.disposePrevFocusViewRedoUndoListeners(e.focus()),this.addRedoUndoListeners(e.focus())}),this.addRedoUndoListeners(e.focus())}destroy(){this.disposePrevFocusViewRedoUndoListeners(this.context.focus())}}class ot{constructor(e){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.isReplay=this.windowManger.isReplay,this.mainViewScenesLength=0,this.callbacksNode=null,this.appCreateQueue=new or,this.sideEffectManager=new Ke,this.sceneState=null,this.rootDirRemoving=!1,this._useBoxesStatus=!1,this.onRemoveScenes=async t=>{var r,n;const{scenePath:s}=t;if(s===q){console.log("[window-manager] onRemoveScenes ROOT_DIR"),await this.onRootDirRemoved(),this.dispatchInternalEvent(R.RootDirRemoved);return}if(Nr(s)){let a=this.mainView.focusSceneIndex||0,o=(r=this.callbacksNode)==null?void 0:r.scenes[a];o||(a=0,o=(n=this.callbacksNode)==null?void 0:n.scenes[a]),o&&(console.log(`[window-manager] onRemoveScenes setMainViewScenePath ${q}${o}`),this.setMainViewScenePath(`${q}${o}`)),await this.setMainViewSceneIndex(a)}else this.appProxies.forEach(a=>{a.onRemoveScene(s)})},this.onReadonlyChanged=()=>{this.appProxies.forEach(t=>{t.emitAppIsWritableChange()})},this.onPlayerSeekStart=async()=>{await this.closeAll()},this.onPlayerSeekDone=async t=>{await this._attributesUpdateCallback(this.attributes.apps),this.appProxies.forEach(s=>{s.onSeek(t)})},this.createRootDirScenesCallback=()=>{let t=!1;this.callbacksNode&&(this.callbacksNode.dispose(),t=!0),this.callbacksNode=this.displayer.createScenesCallback(q,{onAddScene:this.onSceneChange,onRemoveScene:async(s,r)=>{await this.onSceneChange(s),A.emit("rootDirSceneRemoved",r)}}),this.callbacksNode&&(this.updateSceneState(this.callbacksNode),this.mainViewScenesLength=this.callbacksNode.scenes.length,t&&this.emitMainViewScenesChange(this.callbacksNode.scenes.length))},this.removeSceneByIndex=async t=>{var n;const s=xi(t,this.windowManger.pageState);this.setSceneIndexWithoutSync(s),this.dispatchInternalEvent(R.SetAppFocusIndex,{type:"main",index:s});const r=(n=this.callbacksNode)==null?void 0:n.scenes[t];return setTimeout(()=>{r&&Jt(this.room,`${q}${r}`,t)},100),new Promise((a,o)=>{A.once("rootDirSceneRemoved").then(h=>{h===r&&a(!0)}).catch(h=>{console.log(`[WindowManager]: removePage error: ${h}`),o(!1)})})},this.setSceneIndexWithoutSync=t=>{var r;const s=(r=this.callbacksNode)==null?void 0:r.scenes[t];s&&this.mainViewProxy.setFocusScenePath(`${q}${s}`)},this.onSceneChange=t=>(this.mainViewScenesLength=t.scenes.length,this.updateSceneState(t),this.emitMainViewScenesChange(this.mainViewScenesLength)),this.emitMainViewScenesChange=t=>Promise.all([L.emit("mainViewScenesLengthChange",t),A.emit("changePageState")]),this.updateSceneState=t=>{const s=this.store.getMainViewSceneIndex()||0;let r=t.scenes[s];r||(r=t.scenes[this.mainView.focusSceneIndex||0]),this.sceneState={scenePath:`${q}${r}`,contextPath:t.path,index:s,scenes:t.scenes.map(n=>({name:n})),sceneName:r},L.emit("sceneStateChange",this.sceneState)},this.onBoxMove=t=>{this.dispatchInternalEvent(R.AppMove,t),this.store.updateAppState(t.appId,ee.Position,{x:t.x,y:t.y}),L.emit("onBoxMove",t)},this.onBoxResize=t=>{t.width&&t.height&&(this.dispatchInternalEvent(R.AppResize,t),this.store.updateAppState(t.appId,ee.Size,{width:t.width,height:t.height}),L.emit("onBoxResize",t))},this.onBoxFocus=t=>{this.windowManger.safeSetAttributes({focus:t.appId}),L.emit("onBoxFocus",t)},this.onBoxBlurred=t=>{this.attributes.focus===t.appId&&(this.windowManger.safeSetAttributes({focus:void 0}),L.emit("onBoxBlurred",t))},this.onBoxClose=t=>{const s=this.appProxies.get(t.appId);s&&s.destroy(!1,!0,!0,t.error),L.emit("onBoxClose",t)},this.onBoxStateChange=t=>{this.dispatchInternalEvent(R.AppBoxStateChange,t),L.emit("onBoxStateChange",t)},this.notifyBoxesStatusChange=w.debounce(()=>{var s;(s=this.boxManager)==null||s.setBoxesStatus(this.attributes.boxesStatus);const t=Object.entries(this.attributes.boxesStatus);t.length>0&&t.forEach(([r,n])=>{const a=this.appProxies.get(r);a&&a.notifyBoxStatusChange(n)})},100),this.addBoxesStatusChangeListener=()=>{this.refresher.add("boxesStatus",()=>_e(()=>this.attributes.boxesStatus,()=>{this.notifyBoxesStatusChange()})),this.refresher.add("lastNotMinimizedBoxesStatus",()=>_e(()=>this.attributes.lastNotMinimizedBoxesStatus,()=>{var t;(t=this.boxManager)==null||t.setLastNotMinimizedBoxesStatus(this.attributes.lastNotMinimizedBoxesStatus)}))},this.addAppsChangeListener=()=>{this.refresher.add("apps",()=>_e(()=>this.attributes.apps,()=>{this.attributesUpdateCallback(this.attributes.apps)}))},this.addAppCloseListener=()=>{this.refresher.add("appsClose",()=>_e(()=>this.attributes.apps,t=>{t.some(s=>s.kind===f.UpdateEventKind.Removed)&&this.onAppDelete(this.attributes.apps)}))},this.onMainViewIndexChange=t=>{t!==void 0&&this._prevSceneIndex!==t&&(L.emit("mainViewSceneIndexChange",t),A.emit("changePageState"),this.callbacksNode&&this.updateSceneState(this.callbacksNode),this._prevSceneIndex=t)},this.onFocusChange=t=>{var s;this._prevFocused!==t&&(L.emit("focusedChange",t),A.emit("focusedChange",{focused:t,prev:this._prevFocused}),this._prevFocused=t,t!==void 0&&((s=this.boxManager)==null||s.focusBox({appId:t}),setTimeout(()=>{const r=this.appProxies.get(t);r&&J.notifyApp(r.kind,"focus",{appId:t})},0)))},this.attributesUpdateCallback=w.debounce(t=>this._attributesUpdateCallback(t),100),this._appIds=[],this.onRegisteredChange=t=>{!t||Object.entries(t).forEach(([s,r])=>{J.appClasses.has(s)||J.register({kind:s,src:r.src,name:r.name})})},this.onMinimized=t=>{var s,r;((s=this.boxManager)==null?void 0:s.minimized)!==t&&(t===!0&&((r=this.boxManager)==null||r.blurAllBox()),setTimeout(()=>{var n;(n=this.boxManager)==null||n.setMinimized(Boolean(t))},0))},this.onAppDelete=async t=>{const s=Object.keys(t);for(const[r,n]of this.appProxies.entries())s.includes(r)||await n.destroy(!0,!1,!0)},this.closeAll=async()=>{for(const[t,s]of this.appProxies.entries())await s.destroy(!0,!1,!0)},this.displayerStateListener=t=>{this.appProxies.forEach(s=>{s.appEmitter.emit("roomStateChange",t)}),A.emit("observerIdChange",this.displayer.observerId)},this.displayerWritableListener=t=>{var n,a;const s=!t,r=this.windowManger.readonly===void 0||this.windowManger.readonly===!1;this.windowManger.readonly===void 0?(n=this.boxManager)==null||n.setReadonly(t):(a=this.boxManager)==null||a.setReadonly(!(s&&r)),this.appProxies.forEach(o=>{o.emitAppIsWritableChange()}),A.emit("writableChange",s)},this.updateSceneIndex=()=>{const t=this.store.getMainViewScenePath(),s=Et(t),r=Pe(this.displayer)[s];if(r.length){const n=t.replace(s,"").replace("/",""),a=r.findIndex(o=>o.name===n);w.isInteger(a)&&a>=0&&this.safeSetAttributes({_mainSceneIndex:a})}},this.updateRootDirRemoving=t=>{this.rootDirRemoving=t},this.displayer=e.displayer,this.store=Nn(P.extendClass,{getAttributes:()=>this.attributes,safeSetAttributes:t=>this.safeSetAttributes(t),safeUpdateAttributes:(t,s)=>this.safeUpdateAttributes(t,s)}),this.mainViewProxy=new Tn(this),this.viewManager=new zn(this.displayer),this.appListeners=new zr(this),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=Zs,this.refresher.setRoom(this.room),this.refresher.setContext({emitter:A}),this.sideEffectManager.addDisposer(()=>{var t,s;this.appCreateQueue.destroy(),this.mainViewProxy.destroy(),this.refresher.destroy(),this.viewManager.destroy(),(t=this.boxManager)==null||t.destroy(),(s=this.callbacksNode)==null||s.dispose()}),A.once("onCreated").then(()=>this.onCreated()),A.on("onReconnected",()=>this.onReconnected()),f.isPlayer(this.displayer)&&(A.on("seekStart",this.onPlayerSeekStart),A.on("seek",this.onPlayerSeekDone)),A.on("removeScenes",this.onRemoveScenes),A.on("setReadonly",this.onReadonlyChanged),this.createRootDirScenesCallback(),J.setSyncRegisterApp(t=>{this.safeUpdateAttributes([Q.Registered,t.kind],t)})}get useBoxesStatus(){return this._useBoxesStatus}set useBoxesStatus(e){this._useBoxesStatus=e}getMemberState(){var e;return((e=this.room)==null?void 0:e.state.memberState)||{strokeColor:[0,0,0]}}async onRootDirRemoved(e=!0){this.setMainViewScenePath(ss),this.createRootDirScenesCallback();for(const[t,s]of this.appProxies.entries())s.view&&await this.closeApp(t,e);this.mainViewProxy.rebind(),A.emit("rootDirRemoved"),this.updateRootDirRemoving(!1)}get eventName(){return f.isRoom(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return f.isRoom(this.displayer)?this.displayer:void 0}get mainView(){return this.mainViewProxy.view}get polling(){return this.mainViewProxy.polling}set polling(e){this.mainViewProxy.polling=e}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}get uid(){var e;return((e=this.room)==null?void 0:e.uid)||""}get Logger(){return this.windowManger.Logger}getMainViewSceneDir(){const e=this.store.getMainViewScenePath();if(e)return Et(e);throw new Error("[WindowManager]: mainViewSceneDir not found")}async onCreated(){var e;if(Object.keys(this.attributes.apps).length&&this.store.focus&&(this._focusAppId=this.store.focus,await new Promise(t=>{this._focusAppCreatedResolve=t,this._resolveTimer=setTimeout(()=>{t(this.appProxies.get(this._focusAppId||""))},500)}).then(()=>{this._resolveTimer=void 0,this._focusAppCreatedResolve=void 0,this.focusByAttributes(this.attributes.apps)})),await this._attributesUpdateCallback(this.attributes.apps),A.emit("updateManagerRect"),ce.on("move",this.onBoxMove),ce.on("resize",this.onBoxResize),ce.on("focus",this.onBoxFocus),ce.on("close",this.onBoxClose),ce.on("boxStateChange",this.onBoxStateChange),ce.on("blurred",this.onBoxBlurred),this.addAppsChangeListener(),this.addAppCloseListener(),this.addBoxesStatusChangeListener(),this.refresher.add("maximized",()=>f.autorun(()=>{var s;const t=this.attributes.maximized;(s=this.boxManager)==null||s.setMaximized(Boolean(t))})),this.refresher.add("minimized",()=>f.autorun(()=>{const t=this.attributes.minimized;this.onMinimized(t)})),this.refresher.add("mainViewIndex",()=>f.autorun(()=>{const t=w.get(this.attributes,"_mainSceneIndex");this.onMainViewIndexChange(t)})),this.refresher.add("focusedChange",()=>f.autorun(()=>{const t=w.get(this.attributes,"focus");this.onFocusChange(t)})),this.refresher.add("registeredChange",()=>f.autorun(()=>{const t=w.get(this.attributes,Q.Registered);this.onRegisteredChange(t)})),!this.attributes.apps||Object.keys(this.attributes.apps).length===0){const t=this.store.getMainViewScenePath();if(!t)return;this.resetScenePath(t)}this.displayerWritableListener(!((e=this.room)!=null&&e.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this.focusByAttributes(this.attributes.apps),this._prevFocused=this.attributes.focus,P.supportAppliancePlugin||this.sideEffectManager.add(()=>{const t=new Pn({mainView:()=>this.mainViewProxy.view,focus:()=>this.attributes.focus,getAppProxy:s=>this.appProxies.get(s)});return()=>t.destroy()})}notifyAppsChange(e){(this._appIds.length!==e.length||!this._appIds.every(t=>e.includes(t)))&&(this._appIds=e,L.emit("appsChange",e))}async _attributesUpdateCallback(e){if(e&&P.container){const t=Object.keys(e);t.length===0&&this.appCreateQueue.emitReady();const r=w.orderBy(t.map(n=>({id:n,createdAt:e[n].createdAt})),"createdAt","asc").map(({id:n})=>n);this.notifyAppsChange(r);for(const n of r)if(!this.appProxies.has(n)&&!this.appStatus.has(n)){const a=e[n];try{if(!this.attributes[n])throw this.Logger&&this.Logger.error(`[WindowManager]: appAttributes is undefined, appId: ${n}`),new Error("appAttributes is undefined");this.appCreateQueue.push(async()=>{this.appStatus.set(n,Qt.StartCreate);const h=await this.baseInsertApp({kind:a.kind,options:a.options,isDynamicPPT:a.isDynamicPPT,forceNormal:a.forceNormal,forceTop:a.forceTop,isDragContent:a.isDragContent},n,!1);return h&&this._focusAppId===n&&this._focusAppCreatedResolve&&(this._resolveTimer&&clearTimeout(this._resolveTimer),this._focusAppCreatedResolve(h)),h}),this.focusByAttributes(e)}catch(o){console.warn("[WindowManager]: Insert App Error",o)}}}}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"),L.emit("onMainViewMounted",s);const r=this.hasRoot(s.divElement),n=this.getRectByDivElement(s.divElement);let a=`[window-manager] bindMainView hasRoot:${r}, rect:${JSON.stringify(n)}, outerHeight:${window.outerHeight}, outerWidth:${window.outerWidth}`;const o=window.visualViewport;o&&(a+=`, visualViewportWidth:${o.width}, visualViewportHeight:${o.height}, visualViewportOffsetLeft:${o.offsetLeft}, visualViewportOffsetTop:${o.offsetTop}`),console.log(a)}hasRoot(e){let t=e;for(;t;){if(t.parentElement===document.body)return!0;t=t.parentElement}return!1}getRectByDivElement(e){return e.getBoundingClientRect()}setMainViewFocusPath(e){var s;const t=e||this.store.getMainViewScenePath();if(t)return be(this.mainView,t),((s=this.mainView)==null?void 0:s.focusScenePath)===t}resetScenePath(e){this.displayer.state.sceneState.scenePath!==e&&Ht(this.room,e)}async addApp(e,t){var a;re("addApp",e),(a=this.windowManger.Logger)==null||a.info(`[WindowManager]: addApp ${e.kind}, isDynamicPPT: ${t}`);const{appId:s,needFocus:r}=await this.beforeAddApp(e,t),n=await this.baseInsertApp(e,s,!0,r);return this.afterAddApp(n),n==null?void 0:n.id}async beforeAddApp(e,t){var a,o;const s=await vr(e.kind);this.appStatus.set(s,Qt.StartCreate);const r=(a=e.attributes)!=null?a:{};this.safeUpdateAttributes([s],r),this.store.setupAppAttributes(e,s,t);const n=!((o=this.boxManager)!=null&&o.minimized);return n&&this.store.setAppFocus(s,!0),{appId:s,needFocus:n}}afterAddApp(e){var t,s;if(e&&e.box){const r=e.box;ce.emit("move",{appId:e.id,x:r==null?void 0:r.intrinsicX,y:r==null?void 0:r.intrinsicY}),this.store.updateAppState(e.id,ee.ZIndex,r.zIndex)}(t=this.boxManager)!=null&&t.minimized&&((s=this.boxManager)==null||s.setMinimized(!1,!1))}async closeApp(e,t=!0){const s=this.appProxies.get(e);s&&await s.destroy(!0,t,!1)}async baseInsertApp(e,t,s,r){var o;if(this.appProxies.has(t)){(o=this.windowManger.Logger)==null||o.warn(`[WindowManager]: app duplicate exists and cannot be created again, appId: ${t}`);return}const n=ge(nt,P.extendClass),a=new n(e,this,t,s);if(a)return await a.baseInsertApp(r),this.appStatus.delete(t),a;throw this.appStatus.delete(t),this.Logger&&this.Logger.error(`[WindowManager]: initialize AppProxy failed, appId: ${t}`),new Error("[WindowManger]: initialize AppProxy failed")}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(Et(e)!==q)throw this.Logger&&this.Logger.error('[WindowManager]: main view scenePath must in root dir "/"'),new Error('[WindowManager]: main view scenePath must in root dir "/"');if(t===f.ScenePathType.None)throw this.Logger&&this.Logger.error(`[WindowManager]: ${e} not valid scene`),new Error(`[WindowManager]: ${e} not valid scene`);if(t===f.ScenePathType.Page)await this._setMainViewScenePath(e);else if(t===f.ScenePathType.Dir){const r=Cr(this.displayer,e);r&&await this._setMainViewScenePath(r)}}}async _setMainViewScenePath(e){this.setMainViewFocusPath(e)&&(this.safeSetAttributes({_mainScenePath:e}),this.store.setMainViewFocusPath(this.mainView),this.updateSceneIndex(),this.dispatchSetMainViewScenePath(e))}async setMainViewSceneIndex(e){var t;if(this.room){if(this.store.getMainViewSceneIndex()===e)return;const s=(t=this.callbacksNode)==null?void 0:t.scenes[e],r=`${q}${s}`;if(s)this.setMainViewFocusPath(r)&&(this.store.setMainViewScenePath(r),this.store.setMainViewSceneIndex(e),this.dispatchSetMainViewScenePath(r));else throw this.Logger&&this.Logger.error(`[WindowManager]: ${e} not valid index`),new Error(`[WindowManager]: ${e} not valid index`)}}dispatchSetMainViewScenePath(e){this.dispatchInternalEvent(R.SetMainViewScenePath,{nextScenePath:e}),L.emit("mainViewScenePathChange",e),Ht(this.room,e)}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(){await this._attributesUpdateCallback(this.attributes.apps);const t=Array.from(this.appProxies.values()).map(s=>s.onReconnected());this.mainViewProxy.onReconnect(),await Promise.all(t),this.callbacksNode&&this.onSceneChange(this.callbacksNode)}notifyContainerRectUpdate(e){this.appProxies.forEach(t=>{t.appEmitter.emit("containerRectUpdate",e)})}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent(Gt,{eventName:e,payload:t})}destroy(){this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),ce.clearListeners(),A.clearListeners(),this.appProxies.size&&this.appProxies.forEach(e=>{e.destroy(!0,!1,!0)}),L.clearListeners(),this.sideEffectManager.flushAll(),this._prevFocused=void 0,this._prevSceneIndex=void 0,this._resolveTimer&&clearTimeout(this._resolveTimer),this._focusAppCreatedResolve=void 0,this._resolveTimer=void 0}}ot.kind="AppManager";const Ln=window.ResizeObserver||sr.ResizeObserver;class Si{constructor(e){this.emitter=e,this.updateSizerLocalConsole=new We("updateSizer",100)}static create(e,t,s,r){const n=new Si(r);return n.observePlaygroundSize(e,t,s),n}observePlaygroundSize(e,t,s){this.updateSizer(e.getBoundingClientRect(),t,s,"observePlaygroundSize"),this.containerResizeObserver=new Ln(r=>{var a;const n=(a=r[0])==null?void 0:a.contentRect;n&&(this.updateSizer(n,t,s,"containerResizeObserver"),this.emitter.emit("playgroundSizeChange",n))}),this.disposer=this.emitter.on("containerSizeRatioUpdate",()=>{const r=e.getBoundingClientRect();this.updateSizer(r,t,s,"containerSizeRatioUpdate"),this.emitter.emit("playgroundSizeChange",r)}),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},s,r,n){if(e&&t){t/e>P.containerSizeRatio?(t=e*P.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/P.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!1)),r.style.width=`${e}px`,r.style.height=`${t}px`;const a=r.getBoundingClientRect();this.updateSizerLocalConsole.log(`from ${n}, traget size: ${JSON.stringify({width:e,height:t})}, wrapperRect: ${a.width} ${a.height}`),this.emitter.emit("wrapperRectChange",{width:a.width,height:a.height,origin:n})}}disconnect(){var e,t;this.updateSizerLocalConsole.destroy(),(e=this.containerResizeObserver)==null||e.disconnect(),(t=this.disposer)==null||t.call(this),this.disposer=void 0}}class En{constructor(e){this.manager=e,A.on("changePageState",()=>{L.emit("pageStateChange",this.toObject())})}get index(){return this.manager.store.getMainViewSceneIndex()||0}get length(){return this.manager.mainViewScenesLength||0}toObject(){return{index:this.index>=this.length?this.length-1:this.index,length:this.length}}}class Vn{constructor(e){this.ctx=e,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=async t=>{var s,r;t===f.RoomPhase.Reconnecting&&this.ctx.emitter.emit("startReconnect"),t===f.RoomPhase.Connected&&this.phase===f.RoomPhase.Reconnecting&&((s=this.room)!=null&&s.isWritable?(r=this.room)==null||r.dispatchMagixEvent(Lt,{}):(await as(500),this.onReconnected())),this.phase=t},this.onReconnected=w.debounce(()=>{this._onReconnected()},1e3),this._onReconnected=()=>{re("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach((t,s)=>{w.isFunction(t)&&this.disposers.set(s,t())}),this.ctx.emitter.emit("onReconnected")}}setRoom(e){this.room=e,this.phase=e==null?void 0:e.phase,e&&(e.callbacks.off("onPhaseChanged",this.onPhaseChanged),e.callbacks.on("onPhaseChanged",this.onPhaseChanged),e.addMagixEventListener(Lt,t=>{t.authorId===e.observerId&&this.onReconnected()},{fireSelfEventAfterCommit:!0}))}setContext(e){this.ctx=e}releaseDisposers(){this.disposers.forEach(e=>{w.isFunction(e)&&e()}),this.disposers.clear()}refresh(){this._onReconnected()}add(e,t){const s=this.disposers.get(e);s&&w.isFunction(s)&&s(),w.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&&(w.isFunction(t)&&t(),this.disposers.delete(e))}hasReactor(e){return this.reactors.has(e)}destroy(){var e,t;(e=this.room)==null||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),(t=this.room)==null||t.removeMagixEventListener(Lt,this.onReconnected),this.releaseDisposers()}}const jn=(i,e)=>{if(f.isPlayer(i))kn(i);else{if(i=i,Object.getOwnPropertyDescriptor(i,"disableCameraTransform"))return;Object.defineProperty(i,"disableCameraTransform",{get(){return e.mainView.disableCameraTransform},set(n){e.mainView.disableCameraTransform=n}}),Object.defineProperty(i,"canUndoSteps",{get(){return e.canUndoSteps}}),Object.defineProperty(i,"canRedoSteps",{get(){return e.canRedoSteps}});const s=i.scalePptToFit;i.scalePptToFit=(...n)=>{var a;s.call(i,...n),(a=e.appManager)!=null&&a.mainViewProxy&&e.appManager.mainViewProxy.setCameraAndSize()};const r=i.putScenes;i.putScenes=(...n)=>{const[a,o]=n,h=e.mainView.focusScenePath;if(h&&a&&o){console.log("[window-manager] putScenes "+JSON.stringify(n));for(const c of o)if(`${a}${c.name}`===h){console.error(`[window-manager] putScenes: scene name can not be the same as the current scene path: ${h}`);return}}return r.call(i,...n)},i.moveCamera=n=>e.moveCamera(n),i.moveCameraToContain=(...n)=>e.moveCameraToContain(...n),i.convertToPointInWorld=(...n)=>e.mainView.convertToPointInWorld(...n),i.setCameraBound=(...n)=>e.mainView.setCameraBound(...n),i.scenePreview=(...n)=>e.mainView.scenePreview(...n),i.fillSceneSnapshot=(...n)=>e.mainView.fillSceneSnapshot(...n),i.generateScreenshot=(...n)=>e.mainView.generateScreenshot(...n),i.setMemberState=(...n)=>e.mainView.setMemberState(...n),i.redo=()=>e.redo(),i.undo=()=>e.undo(),i.cleanCurrentScene=()=>e.cleanCurrentScene(),i.delete=()=>e.delete(),i.copy=()=>e.copy(),i.paste=()=>e.paste(),i.duplicate=()=>e.duplicate(),i.insertImage=(...n)=>e.insertImage(...n),i.completeImageUpload=(...n)=>e.completeImageUpload(...n),i.insertText=(...n)=>e.insertText(...n),i.lockImage=(...n)=>e.lockImage(...n),i.lockImages=(...n)=>e.lockImages(...n),Rn(i,e)}},Rn=(i,e)=>{const t=i.removeScenes;i.removeScenes=(s,r)=>{var a;s===q&&((a=e.appManager)==null||a.updateRootDirRemoving(!0));const n=t.call(i,s);return A.emit("removeScenes",{scenePath:s,index:r}),n}},kn=i=>{const e=i.seekToProgressTime;async function t(s){await A.emit("seekStart");const r=await e.call(i,s);return A.emit("seek",s),r}i.seekToProgressTime=t},Un=async()=>{const i=await Promise.resolve().then(function(){return require("./app-media-player.js")});return P.debug&&i.setOptions({verbose:!0}),i.default||i},_n=async()=>{const i=await Promise.resolve().then(function(){return require("./app-docs-viewer.js")});return i.default||i},On=async()=>{const i=await Promise.resolve().then(function(){return require("./app-presentation.js")}),e=i.default||i;return e.default||e.NetlessAppPresentation||e},Wn=()=>{P.register({kind:de.DocsViewer,src:_n}),P.register({kind:de.MediaPlayer,src:Un}),P.register({kind:de.Presentation,src:On,appOptions:{debounceSync:!0,useScrollbar:!0}})},de={DocsViewer:"DocsViewer",MediaPlayer:"MediaPlayer",Presentation:"Presentation"};const me={Ready:"Ready",RootRect:"ReplayRootRect",Message:"message",ComputeStyle:"computeStyle",Load:"load",DisplayerState:"displayerState",Show:"show",Hide:"hide"},$n=(i,e)=>new Array(i).fill(0).map((t,s)=>e(s)),j=class{constructor(i,e){this.manager=i,this.appManager=e,this.magixEventMap=new Map,this.cssList=[],this.allowAppliances=["clicker"],this.bridgeDisposer=w.noop,this.rootRect=null,this.sideEffectManager=new Ke,this.execListenIframe=w.debounce(t=>{this.listenIframe(t)},50),this.onPhaseChangedListener=t=>{t===f.PlayerPhase.Playing&&this.computedStyleAndIframeDisplay()},this.stateChangeListener=t=>{t={...t},t.cameraState=this.manager.cameraState,this.postMessage({kind:"RoomStateChanged",payload:t}),t.cameraState&&(j.emitter.emit("GetRootRect"),this.computedStyle(t)),t.memberState&&(this.computedZindex(),this.updateStyle()),t.sceneState&&this.computedIframeDisplay(t,this.attributes)},this.displayer=j.displayer=e.displayer,this.iframe=this._createIframe(),this.sideEffectManager.addDisposer(j.emitter.on("ReplayRootRect",t=>{this.rootRect=t}),me.RootRect),this.sideEffectManager.addDisposer(j.emitter.on("HideIframe",()=>{this.iframe.className=j.hiddenClass}),me.Hide),this.sideEffectManager.addDisposer(j.emitter.on("DispayIframe",()=>{this.iframe.className=""}),me.Show),this.sideEffectManager.addDisposer(j.emitter.on("created",()=>{this.bridgeDisposer(),this.bridgeDisposer=f.autorun(()=>{var s;const t=this.attributes;if(t.url){const r=(s=this.iframe)==null?void 0:s.src;r&&r!==t.url&&this.execListenIframe(t)}t.displaySceneDir&&this.computedIframeDisplay(this.displayer.state,t),(t.width||t.height)&&this.iframe&&(this.iframe.width=`${t.width}px`,this.iframe.height=`${t.height}px`),this.postMessage({kind:"AttributesUpdate",payload:t})})})),this.sideEffectManager.addDisposer(i.emitter.on("cameraStateChange",()=>{this.computedStyle(this.displayer.state)})),j.onCreate(this)}static onCreate(i){j.emitter.emit("StartCreate"),j.emitter.emit("OnCreate",i),j.emitter.emit("created")}insert(i){const e={url:i.url,width:i.width,height:i.height,displaySceneDir:i.displaySceneDir,useClicker:i.useClicker||!1,useSelector:i.useSelector};this.setAttributes(e);const t=()=>{this.getIframe(),this.listenIframe(this.attributes),this.listenDisplayerState(),j.emitter.emit("GetRootRect")};if(this.getIframe())t();else{const s=this.sideEffectManager.addDisposer(j.emitter.on("WrapperDidMount",()=>{t(),this.sideEffectManager.flush(s)})),r=this.sideEffectManager.addDisposer(j.emitter.on("WrapperDidUpdate",()=>{t(),this.sideEffectManager.flush(r)}))}return this.attributes.useSelector&&this.allowAppliances.push("selector"),this.computedStyle(this.displayer.state),this.listenDisplayerCallbacks(),this.getComputedIframeStyle(),this.sideEffectManager.addEventListener(window,"message",this.messageListener.bind(this),void 0,me.Message),j.alreadyCreate=!0,this}getComputedIframeStyle(){this.sideEffectManager.setTimeout(()=>{this.iframe&&getComputedStyle(this.iframe)},200,me.ComputeStyle)}destroy(){this.sideEffectManager.flushAll(),j.emitter.emit("Destory"),j.alreadyCreate=!1,j.emitter.clearListeners()}getIframe(){return this.iframe||(this.iframe=this._createIframe()),this.iframe}setIframeSize(i){this.iframe&&(this.iframe.width=`${i.width}px`,this.iframe.height=`${i.height}px`,this.setAttributes({width:i.width,height:i.height}))}get attributes(){return this.appManager.store.getIframeBridge()}setAttributes(i){this.appManager.store.setIframeBridge(i)}_createIframe(){const i=document.createElement("iframe");return i.id="IframeBridge",i.className=j.hiddenClass,this.appManager.mainView.divElement&&this.appManager.mainView.divElement.appendChild(i),i}scaleIframeToFit(i=f.AnimationMode.Immediately){if(!this.inDisplaySceneDir)return;const{width:e=1280,height:t=720}=this.attributes,s=e?-e/2:0,r=t?-t/2:0;this.manager.moveCameraToContain({originX:s,originY:r,width:e,height:t,animationMode:i})}get isReplay(){return this.manager.isReplay}handleSetPage(i){if(this.isReplay||!this.attributes.displaySceneDir)return;const e=i.payload,t=this.displayer,s=t.entireScenes()[this.attributes.displaySceneDir];if(!s||s.length!==e){const r=$n(e,n=>({name:String(n+1)}));t.putScenes(this.attributes.displaySceneDir,r),this.manager.setMainViewScenePath(this.attributes.displaySceneDir)}}listenIframe(i){const e=t=>{var s;this.postMessage({kind:"Init",payload:{attributes:this.attributes,roomState:(s=j.displayer)==null?void 0:s.state,currentPage:this.currentPage,observerId:this.displayer.observerId}}),j.emitter.emit("IframeLoad",t),this.sideEffectManager.addDisposer(j.emitter.on("Ready",()=>{var r;this.postMessage((r=this.attributes.lastEvent)==null?void 0:r.payload)}),me.Ready),this.computedStyleAndIframeDisplay()};i.url&&this.iframe.src!==i.url&&(this.src_url_equal_anchor||(this.src_url_equal_anchor=document.createElement("a")),this.src_url_equal_anchor.href=i.url,this.src_url_equal_anchor.href!==this.iframe.src&&(this.iframe.src=i.url)),this.iframe.width=`${i.width}px`,this.iframe.height=`${i.height}px`,this.sideEffectManager.addEventListener(this.iframe,"load",e,void 0,me.Load)}listenDisplayerState(){this.isReplay&&(this.displayer._phase===f.PlayerPhase.Playing&&this.computedStyleAndIframeDisplay(),this.sideEffectManager.add(()=>(this.displayer.callbacks.on("onPhaseChanged",this.onPhaseChangedListener),()=>this.displayer.callbacks.off("onPhaseChanged",this.onPhaseChangedListener)),me.DisplayerState)),this.computedStyleAndIframeDisplay()}computedStyleAndIframeDisplay(){this.computedStyle(this.displayer.state),this.computedIframeDisplay(this.displayer.state,this.attributes)}listenDisplayerCallbacks(){this.displayer.callbacks.on(this.callbackName,this.stateChangeListener)}get callbackName(){return this.isReplay?"onPlayerStateChanged":"onRoomStateChanged"}computedStyle(i){const e=this.manager.cameraState,t=this.attributes.width||1280,s=this.attributes.height||720;if(this.iframe){const{width:r,height:n,scale:a,centerX:o,centerY:h}=e,c=this.rootRect||{x:0,y:0},l=`${r/2+c.x}px`,u=`${n/2+c.y}px`,d=`transform-origin: ${l} ${u};`,m=(r-t)/2*a,g=(n-s)/2*a,b=-(o*a)+m,M=-(h*a)+g,N=`transform: translate(${b}px,${M}px) scale(${a}, ${a});`,W=["position: absolute;","border: 0.1px solid rgba(0,0,0,0);","top: 0px;","left: 0px;",d,N];this.cssList=W,this.computedZindex(),this.updateStyle()}}computedIframeDisplay(i,e){this.inDisplaySceneDir?j.emitter.emit("DispayIframe"):j.emitter.emit("HideIframe")}computedZindex(){const i="z-index: -1;",e=this.cssList.findIndex(t=>t===i);e!==-1&&this.cssList.splice(e,1),(!this.isClicker()||this.isDisableInput)&&this.cssList.push(i)}updateStyle(){this.iframe.style.cssText=this.cssList.join(" ")}get iframeOrigin(){if(this.iframe)try{return new URL(this.iframe.src).origin}catch(i){console.warn(i)}}messageListener(i){if(re("<<<",JSON.stringify(i.data)),i.origin!==this.iframeOrigin)return;const e=i.data;switch(e.kind){case"SetAttributes":{this.handleSetAttributes(e);break}case"RegisterMagixEvent":{this.handleRegisterMagixEvent(e);break}case"RemoveMagixEvent":{this.handleRemoveMagixEvent(e);break}case"DispatchMagixEvent":{this.handleDispatchMagixEvent(e);break}case"RemoveAllMagixEvent":{this.handleRemoveAllMagixEvent();break}case"NextPage":{this.handleNextPage();break}case"PrevPage":{this.handlePrevPage();break}case"SDKCreate":{this.handleSDKCreate();break}case"SetPage":{this.handleSetPage(e);break}case"GetAttributes":{this.handleGetAttributes();break}case"PageTo":{this.handlePageTo(e);break}default:{re(`${e.kind} not allow event.`);break}}}handleSDKCreate(){this.postMessage({kind:"Init",payload:{attributes:this.attributes,roomState:this.displayer.state,currentPage:this.currentPage,observerId:this.displayer.observerId}})}handleDispatchMagixEvent(i){const e=i.payload;this.appManager.safeDispatchMagixEvent(e.event,e.payload)}handleSetAttributes(i){this.setAttributes(i.payload)}handleRegisterMagixEvent(i){const e=i.payload,t=s=>{s.authorId!==this.displayer.observerId&&this.postMessage({kind:"ReciveMagixEvent",payload:s})};this.magixEventMap.set(e,t),this.displayer.addMagixEventListener(e,t)}handleRemoveMagixEvent(i){const e=i.payload,t=this.magixEventMap.get(e);this.displayer.removeMagixEventListener(e,t)}handleNextPage(){this.manager.canOperate&&(this.manager.nextPage(),this.dispatchMagixEvent("NextPage",{}))}handlePrevPage(){this.manager.canOperate&&(this.manager.prevPage(),this.dispatchMagixEvent("PrevPage",{}))}handlePageTo(i){if(this.manager.canOperate){const e=i.payload;if(!Number.isSafeInteger(e)||e<=0)return;this.manager.setMainViewSceneIndex(e-1),this.dispatchMagixEvent("PageTo",e-1)}}handleRemoveAllMagixEvent(){this.magixEventMap.forEach((i,e)=>{this.displayer.removeMagixEventListener(e,i)}),this.magixEventMap.clear()}handleGetAttributes(){this.postMessage({kind:"GetAttributes",payload:this.attributes})}postMessage(i){var e;this.iframe&&((e=this.iframe.contentWindow)==null||e.postMessage(JSON.parse(JSON.stringify(i)),"*"))}dispatchMagixEvent(i,e){this.manager.canOperate&&(this.setAttributes({lastEvent:{name:i,payload:e}}),this.displayer.dispatchMagixEvent(i,e))}get currentIndex(){return this.manager.mainViewSceneIndex}get currentPage(){return this.currentIndex+1}get totalPage(){return this.manager.mainViewScenesLength}get readonly(){return!this.displayer.isWritable}get inDisplaySceneDir(){return this.manager.mainViewSceneDir===this.attributes.displaySceneDir}isClicker(){if(this.readonly)return!1;const i=this.displayer.state.memberState.currentApplianceName;return this.allowAppliances.includes(i)}get isDisableInput(){return"disableDeviceInputs"in this.displayer?this.displayer.disableDeviceInputs:!0}};let Ee=j;Ee.kind="IframeBridge";Ee.hiddenClass="netless-iframe-brdige-hidden";Ee.emitter=new ve.default;Ee.displayer=null;Ee.alreadyCreate=!1;class Zn extends ve.default{_inject(e){this.context=e}}class $s{constructor(e){this.extends=new Map,this.context={manager:this,windowManager:e.windowManager,internalEmitter:e.internalEmitter},e.container&&this.refreshContainer(e.container)}refreshContainer(e){this.context.windowManagerContainer=e,this.extends.forEach(t=>{t._inject(this.context)})}hasRegister(e){return J.appClasses.has(e)}use(e){this.extends.set(e.kind,e),e._inject(this.context),e.onCreate()}destroy(){this.extends.forEach(e=>{this.extends.delete(e.kind),e.onDestroy()})}}function Fn(i,e){return e===void 0?i:()=>({...typeof i=="function"?i():i,...e})}function Gn(i,e){if(i.kind&&e&&Object.keys(e).includes(i.kind))switch(i.kind){case"AppManager":return(e==null?void 0:e.AppManager)||ot;case"BoxManager":return(e==null?void 0:e.BoxManager)||it;case"AttributesDelegate":return(e==null?void 0:e.AttributesDelegate)||at;case"CursorManager":return(e==null?void 0:e.CursorManager)||rt;case"AppProxy":return(e==null?void 0:e.AppProxy)||nt;case"AppContext":return(e==null?void 0:e.AppContext)||qe;case"TeleBoxManager":return(e==null?void 0:e.TeleBoxManager)||tt;case"TeleBoxCollector":return(e==null?void 0:e.TeleBoxCollector)||Le;default:return i}return i}const Zt="Slide",Ft=de.Presentation,Qn=1,Yn=4;function qi(i){return typeof i=="number"&&Number.isFinite(i)&&i>=Qn&&i<=Yn}const Zs=new Vn({emitter:A}),C=class extends f.InvisiblePlugin{constructor(i){super(i),this.version="1.0.17-beta.1",this.dependencies={dependencies:{"@juggle/resize-observer":"^3.3.1","@netless/telebox-insider":"0.3.0",emittery:"^0.9.2",lodash:"^4.17.21","p-retry":"^4.6.1",uuid:"^7.0.3","video.js":">=7"},peerDependencies:{jspdf:"2.5.1","white-web-sdk":"^2.16.55"},devDependencies:{"@hyrious/dts":"^0.2.2","@netless/app-docs-viewer":"^0.2.19","@netless/app-media-player":"0.1.4","@netless/app-presentation":"^0.1.9","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-url":"^6.1.0","@sveltejs/vite-plugin-svelte":"1.0.0-next.30","@tsconfig/svelte":"^2.0.1","@types/debug":"^4.1.7","@types/lodash":"^4.14.182","@types/lodash-es":"^4.17.4","@types/uuid":"^8.3.1","@typescript-eslint/eslint-plugin":"^4.30.0","@typescript-eslint/parser":"^4.30.0","@vitest/ui":"^0.14.1",cypress:"^8.7.0",dotenv:"^10.0.0",eslint:"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-plugin-svelte3":"^3.2.0",jsdom:"^19.0.0",jspdf:"^2.5.1",less:"^4.1.1",prettier:"^2.3.2","prettier-plugin-svelte":"^2.4.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-styles":"^3.14.1","side-effect-manager":"0.1.5",svelte:"^3.42.4",typescript:"^4.5.5",vite:"^2.9.9",vitest:"^0.14.1","white-web-sdk":"^2.16.55"}},this.emitter=L,this.viewMode=f.ViewMode.Broadcaster,this.isReplay=f.isPlayer(this.displayer),this._cursorUIDs=[],this.containerSizeRatio=C.containerSizeRatio,this.onMainViewScenePathChangeHandler=e=>{const t=this.mainView.divElement;if(t){const s=t.querySelector(".background img");if(s){const r=s==null?void 0:s.getBoundingClientRect(),n=window.getComputedStyle(s),a=(r==null?void 0:r.width)>0&&(r==null?void 0:r.height)>0&&n.display!=="none",o=this.mainView.camera;console.log("[window-manager] backgroundImageVisible:"+a+" camera:"+JSON.stringify(o));return}console.log("[window-manager] onMainViewScenePathChange scenePath:"+e+" backgroundImageVisible is not found");return}console.log("[window-manager] onMainViewScenePathChange scenePath:"+e+" mainViewElement is not found")},C.displayer=i.displayer,window.NETLESS_DEPS={dependencies:{"@juggle/resize-observer":"^3.3.1","@netless/telebox-insider":"0.3.0",emittery:"^0.9.2",lodash:"^4.17.21","p-retry":"^4.6.1",uuid:"^7.0.3","video.js":">=7"},peerDependencies:{jspdf:"2.5.1","white-web-sdk":"^2.16.55"},devDependencies:{"@hyrious/dts":"^0.2.2","@netless/app-docs-viewer":"^0.2.19","@netless/app-media-player":"0.1.4","@netless/app-presentation":"^0.1.9","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-url":"^6.1.0","@sveltejs/vite-plugin-svelte":"1.0.0-next.30","@tsconfig/svelte":"^2.0.1","@types/debug":"^4.1.7","@types/lodash":"^4.14.182","@types/lodash-es":"^4.17.4","@types/uuid":"^8.3.1","@typescript-eslint/eslint-plugin":"^4.30.0","@typescript-eslint/parser":"^4.30.0","@vitest/ui":"^0.14.1",cypress:"^8.7.0",dotenv:"^10.0.0",eslint:"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-plugin-svelte3":"^3.2.0",jsdom:"^19.0.0",jspdf:"^2.5.1",less:"^4.1.1",prettier:"^2.3.2","prettier-plugin-svelte":"^2.4.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-styles":"^3.14.1","side-effect-manager":"0.1.5",svelte:"^3.42.4",typescript:"^4.5.5",vite:"^2.9.9",vitest:"^0.14.1","white-web-sdk":"^2.16.55"}},this.emitter.on("mainViewScenePathChange",this.onMainViewScenePathChangeHandler)}get Logger(){return this._roomLogger}static onCreate(i){C._resolve(i)}static async mount(i,e){var c;const t=i.room;C.container=i.container,C.supportAppliancePlugin=i.supportAppliancePlugin;const s=i.containerSizeRatio,r=i.debug,n=i.cursor;C.params=i,C.extendClass=e,C.displayer=i.room,Qa();let a;if(f.isRoom(t)){if(t.phase!==f.RoomPhase.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");t.phase===f.RoomPhase.Connected&&t.isWritable&&(t.disableSerialization=!1),a=await this.initManager(t),a&&(a._roomLogger=t.logger,a.attributesDeboundceLog=new Fa(a._roomLogger,"attributes",300),C.registered.size>0&&a._roomLogger.info(`[WindowManager] registered apps: ${JSON.stringify(Array.from(C.registered.keys()))}`))}if(C.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");if(this.debug=Boolean(r),a!=null&&a._roomLogger?a._roomLogger.info(`[WindowManager] Already insert room version: ${a.version}`):re("Already insert room",a),f.isRoom(this.displayer)){if(!a)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await ts.default(async l=>{if(a=t.getInvisiblePlugin(C.kind),!a)throw re(`manager is empty. retrying ${l}`),new Error},{retries:10,maxTimeout:5e3});if(!a)throw new Error("[WindowManager]: create manager failed");a.builtinAppOptions=i.builtinAppOptions,s&&(C.containerSizeRatio=s),await a.ensureAttributes();const o=ge(ot,C.extendClass),h=ge(rt,C.extendClass);a._fullscreen=i.fullscreen,a.appManager=new o(a),a.appManager.polling=i.polling||!1,a._pageState=new En(a.appManager),a.cursorManager=new h(a.appManager,Boolean(n),i.cursorOptions,i.applianceIcons),a.extendPluginManager=new $s({internalEmitter:A,windowManager:a}),s&&(a.containerSizeRatio=s),i.container&&a.bindContainer(i.container),jn(t,a),A.emit("onCreated"),C.isCreated=!0,a._roomLogger&&a.attributes.registered&&Object.keys(a.attributes.registered).length>0&&a._roomLogger.info(`[WindowManager] attributes registered apps: ${JSON.stringify(Array.from(Object.keys(a.attributes.registered)))}`);try{await cr()}catch(l){(c=a._roomLogger)==null||c.warn(`[WindowManager] indexedDB open failed: ${l.message}`),console.warn("[WindowManager]: indexedDB open failed"),console.log(l)}return a.emitter.on("mainViewScenePathChange",a.onMainViewScenePathChangeHandler),a}static initManager(i){return Ya(i)}static initContainer(i,e,t){const{chessboard:s,overwriteStyles:r,fullscreen:n}=t;C.container||(C.container=e);const{playground:a,wrapper:o,sizer:h,mainViewElement:c}=Ga(e);if(C.playground=a,s&&h.classList.add("netless-window-manager-chess-sizer"),n&&h.classList.add("netless-window-manager-fullscreen"),r){const l=document.createElement("style");l.textContent=r,a.appendChild(l)}return i.containerResizeObserver=Si.create(a,h,o,A),C.wrapper=o,C.sizer=h,c}static get registered(){return J.registered}bindContainer(i){var e,t,s,r,n,a;if(f.isRoom(this.displayer)&&this.room.phase!==f.RoomPhase.Connected)throw new ds;if(C.isCreated&&C.container)C.container.firstChild&&i.appendChild(C.container.firstChild);else if(C.params){const o=C.params,h=C.initContainer(this,i,o);this.boxManager&&this.boxManager.destroy();const c=Oa(this,L,A,ce,{collectorContainer:o.collectorContainer,collectorStyles:o.collectorStyles,prefersColorScheme:o.prefersColorScheme,useBoxesStatus:o.useBoxesStatus});this.boxManager=c,this.appManager&&(this.appManager.useBoxesStatus=o.useBoxesStatus||!1,this.appManager.setBoxManager(c)),this.bindMainView(h,o.disableCameraTransform),C.wrapper&&((e=this.cursorManager)==null||e.setupWrapper(C.wrapper))}A.emit("updateManagerRect"),(t=this.appManager)==null||t.refresh(),(s=this.appManager)==null||s.resetMaximized(),(r=this.appManager)==null||r.resetMinimized(),(n=this.appManager)==null||n.displayerWritableListener(!this.room.isWritable),C.container=i,(a=this.extendPluginManager)==null||a.refreshContainer(i)}bindCollectorContainer(i){C.isCreated&&this.boxManager?this.boxManager.setCollectorContainer(i):C.params&&(C.params.collectorContainer=i)}static register(i){return J.register(i)}static unregister(i){return J.unregister(i)}resolveAppOptions(i,e){var s;const t=i===de.Presentation?(s=this.builtinAppOptions)==null?void 0:s.Presentation:void 0;return Fn(e,t)}async addApp(i){if(this.appManager)return this.appManager.rootDirRemoving?new Promise((e,t)=>{A.once("rootDirRemoved").then(async()=>{try{const s=await this._addApp(i);e(s)}catch(s){t(s.message)}})}):this._addApp(i);throw new te}async _addApp(i){var e,t,s;if(this.appManager){if(!i.kind||typeof i.kind!="string")throw new hs;i.src&&typeof i.src=="string"&&J.register({kind:i.kind,src:i.src});const r=await((e=J.appClasses.get(i.kind))==null?void 0:e());if(r&&((t=r.config)==null?void 0:t.singleton)&&this.appManager.appProxies.has(i.kind))throw new ns;const n=this.setupScenePath(i,this.appManager);return n===void 0?void 0:((s=i==null?void 0:i.options)!=null&&s.scenePath&&(i.options.scenePath=Br(i.options.scenePath)),await this.appManager.addApp(i,Boolean(n)))}else throw new te}setupScenePath(i,e){let t=!1;if(i.options){const{scenePath:s,scenes:r}=i.options;if(s){if(!Ar(s))throw new ls;const n=Object.keys(this.apps||{});for(const a of n){const o=e.store.getAppScenePath(a);if(o&&o===s){if(console.warn(`[WindowManager]: ScenePath "${s}" already opened`),this.boxManager){const h=this.boxManager.getTopBox();h&&(this.boxManager.setZIndex(a,h.zIndex+1,!1),this.boxManager.focusBox({appId:a},!1))}return}}}s&&r&&r.length>0&&(this.isDynamicPPT(r)?(t=!0,Pe(this.displayer)[s]||$e(this.room,s,r)):Pe(this.displayer)[s]||$e(this.room,s,[{name:r[0].name}])),s&&r===void 0&&$e(this.room,s,[{}])}return t}async setMainViewScenePath(i){this.appManager&&await this.appManager.setMainViewScenePath(i)}async setMainViewSceneIndex(i){this.appManager&&await this.appManager.setMainViewSceneIndex(i)}async nextPage(){if(this.appManager){const i=this.mainViewSceneIndex+1;return i>=this.mainViewScenesLength?(console.warn("[WindowManager]: current page is the last page"),!1):(await this.appManager.setMainViewSceneIndex(i),!0)}else return!1}async prevPage(){if(this.appManager){const i=this.mainViewSceneIndex-1;return i<0?(console.warn("[WindowManager]: current page is the first page"),!1):(await this.appManager.setMainViewSceneIndex(i),!0)}else return!1}async jumpPage(i){return this.appManager?i<0||i>=this.pageState.length?(console.warn(`[WindowManager]: index ${i} out of range`),!1):(await this.appManager.setMainViewSceneIndex(i),!0):!1}async addPage(i){if(this.appManager){const e=i==null?void 0:i.after,t=i==null?void 0:i.scene;if(e){const s=this.mainViewSceneIndex+1;this.room.putScenes(q,[t||{}],s)}else this.room.putScenes(q,[t||{}])}}async removePage(i){if(this.appManager){const e=i===void 0?this.pageState.index:i;return this.pageState.length===1?(console.warn("[WindowManager]: can not remove the last page"),!1):e<0||e>=this.pageState.length?(console.warn(`[WindowManager]: index ${i} out of range`),!1):this.appManager.removeSceneByIndex(e)}else return!1}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),A.emit("setReadonly",i)}switchMainViewToWriter(){var i;return(i=this.appManager)==null?void 0:i.mainViewProxy.mainViewClickHandler()}onAppDestroy(i,e){yr(`destroy-${i}`,e)}onAppEvent(i,e){return A.on(`custom-${i}`,e)}setViewMode(i){var e,t,s,r;(i===f.ViewMode.Broadcaster||i===f.ViewMode.Follower)&&(this.canOperate&&i===f.ViewMode.Broadcaster&&((e=this.appManager)==null||e.mainViewProxy.setCameraAndSize()),(t=this.appManager)==null||t.mainViewProxy.start()),i===f.ViewMode.Freedom&&((s=this.appManager)==null||s.mainViewProxy.stop()),this.viewMode=i,(r=this.appManager)==null||r.mainViewProxy.setViewMode(i)}setBoxState(i){if(!!this.canOperate)switch(i){case"normal":this.setMaximized(!1),this.setMinimized(!1);break;case"maximized":this.setMaximized(!0),this.setMinimized(!1);break;case"minimized":this.setMinimized(!0);break}}setMaximized(i){var e;!this.canOperate||(e=this.boxManager)==null||e.setMaximized(i,!1)}setMinimized(i){var e;!this.canOperate||(e=this.boxManager)==null||e.setMinimized(i,!1)}setBoxStatus(i,e){var t;!this.canOperate||(t=this.appManager)==null||t.store.setBoxStatus(i,e)}setLastNotMinimizedBoxStatus(i,e){var t;!this.canOperate||(t=this.appManager)==null||t.store.setLastNotMinimizedBoxStatus(i,e)}setFullscreen(i){var e;this._fullscreen!==i&&(this._fullscreen=i,(e=C.sizer)==null||e.classList.toggle("netless-window-manager-fullscreen",i),L.emit("fullscreenChange",i))}get cursorUIDs(){return this._cursorUIDs}setCursorUIDs(i){var e,t;if(this._cursorUIDs=i||[],this._cursorUIDs.length===0)(e=this._cursorUIDsStyleDOM)==null||e.remove();else{this._cursorUIDsStyleDOM||(this._cursorUIDsStyleDOM=document.createElement("style")),(t=C.playground)==null||t.appendChild(this._cursorUIDsStyleDOM);let s="[data-cursor-uid] { display: none }";for(const r of this._cursorUIDs)s+=`
|
|
16
|
+
`;return e}const mt=document.createElement("style");function mn(i){const[e,t,s]=i.strokeColor,r=((1<<24)+(e<<16)+(t<<8)+s).toString(16).slice(1);return mt.textContent=pn({"cursor-pencil":xe(_s(r)),"cursor-eraser":xe(Us),"cursor-rectangle":xe(ze(r)),"cursor-ellipse":xe(ze(r)),"cursor-straight":xe(ze(r)),"cursor-arrow":xe(ze(r)),"cursor-shape":xe(ze(r))}),document.head.appendChild(mt),()=>{mt.parentNode!=null&&document.head.removeChild(mt)}}const fn=new Set([f.ApplianceNames.rectangle,f.ApplianceNames.ellipse,f.ApplianceNames.straight,f.ApplianceNames.arrow,f.ApplianceNames.shape]);function Xi(i,e){if(i===f.ApplianceNames.pencil)return _s(e);if(i===f.ApplianceNames.eraser)return Us;if(fn.has(i))return ze(e)}class Mn{constructor(e,t,s,r){this.manager=e,this.memberId=t,this.cursorManager=s,this.wrapper=r,this.style="default",this.move=n=>{var a;if(n.type==="main"){const o=this.cursorManager.wrapperRect;this.component&&o&&(this.autoHidden(),this.moveCursor(n,o,this.manager.mainView))}else{const o=this.cursorManager.focusView,h=(a=o==null?void 0:o.divElement)==null?void 0:a.getBoundingClientRect(),c=o==null?void 0:o.camera;o&&h&&c&&this.component&&(this.autoHidden(),this.moveCursor(n,h,o))}},this.setStyle=n=>{this.style=n,this.component&&this.component.$set({src:this.getIcon(),custom:this.isCustomIcon()})},this.leave=()=>{this.hide()},this.updateMember(),this.createCursor(),this.autoHidden(),this.setStyle(s.style)}moveCursor(e,t,s){var h,c;const{x:r,y:n,type:a}=e,o=s==null?void 0:s.screen.convertPointToScreen(r,n);if(o){let l=o.x-2,u=o.y-18;if(this.isCustomIcon()&&(l-=11,u+=4),a==="app"){const d=this.cursorManager.wrapperRect;d&&(l=l+t.x-d.x,u=u+t.y-d.y)}o.x<0||o.x>t.width||o.y<0||o.y>t.height?(h=this.component)==null||h.$set({visible:!1,x:l,y:u}):(c=this.component)==null||c.$set({visible:!0,x:l,y:u})}}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 memberColorHex(){var r,n;const[e,t,s]=((n=(r=this.member)==null?void 0:r.memberState)==null?void 0:n.strokeColor)||[236,52,85];return((1<<24)+(e<<16)+(t<<8)+s).toString(16).slice(1)}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&&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 memberTagName(){var e;return(e=this.payload)==null?void 0:e.cursorTagName}autoHidden(){this.timer&&clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.hide()},1e3*10)}async createCursor(){this.member&&this.wrapper&&(this.component=new gn({target:this.wrapper,props:this.initProps()}))}initProps(){var e;return{uid:this.memberId,x:0,y:0,appliance:this.memberApplianceName,avatar:this.memberAvatar,src:this.getIcon(),custom:this.isCustomIcon(),visible:!1,backgroundColor:this.memberColor,cursorName:this.memberCursorName,theme:this.memberTheme,color:this.memberCursorTextColor,cursorTagBackgroundColor:this.memberCursorTagBackgroundColor,opacity:this.memberOpacity,tagName:this.memberTagName,pencilEraserSize:(e=this.member)==null?void 0:e.memberState.pencilEraserSize}}getIcon(){var h;if(!this.member)return;const{memberApplianceName:e,memberColorHex:t}=this,{userApplianceIcons:s,applianceIcons:r}=this.cursorManager;let n=this.memberApplianceName;n===f.ApplianceNames.pencilEraser&&(n=`${n}${((h=this.member)==null?void 0:h.memberState.pencilEraserSize)||1}`);const a=n&&s[n];if(a)return a;if(this.style==="custom"&&e){const c=Xi(e,t);if(c)return c}return r[n||f.ApplianceNames.shape]||r[f.ApplianceNames.shape]}isCustomIcon(){var a;if(!this.member)return!1;const{memberApplianceName:e,memberColorHex:t}=this,{userApplianceIcons:s}=this.cursorManager;let r=this.memberApplianceName;return r===f.ApplianceNames.pencilEraser&&(r=`${r}${((a=this.member)==null?void 0:a.memberState.pencilEraserSize)||1}`),r&&s[r]?!1:!!(this.style==="custom"&&e&&Xi(e,t))}updateMember(){return this.member=si(this.manager.room,this.memberId),this.updateComponent(),this.member}updateComponent(){var e;(e=this.component)==null||e.$set(w.omit(this.initProps(),["x","y"]))}destroy(){this.component&&this.component.$destroy(),this.cursorManager.cursorInstances.delete(this.memberId),this.timer&&clearTimeout(this.timer)}hide(){this.component&&(this.component.$set({visible:!1}),this.destroy())}}var wn="data:image/png;base64,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",xn="data:image/png;base64,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",Sn="data:image/png;base64,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",bn="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",vn="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",In="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjhweCIgaGVpZ2h0PSIyOHB4IiB2aWV3Qm94PSIwIDAgMjggMjgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU1LjEgKDc4MTM2KSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT7nvJbnu4QgMjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgeD0iLTEyMC4wJSIgeT0iLTEyMC4wJSIgd2lkdGg9IjM0MC4wJSIgaGVpZ2h0PSIzNDAuMCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0xIj4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hC0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5LjAwMDAwMCwgOS4wMDAwMDApIiBmaWxsPSIjRkYwMTAwIj4KICAgICAgICAgICAgPGNpcmNsZSBpZD0i5qSt5ZyG5b2iIiBmaWx0ZXI9InVybCgjZmlsdGVyLTEpIiBjeD0iNSIgY3k9IjUiIHI9IjUiPjwvY2lyY2xlPgogICAgICAgICAgICA8cGF0aCBkPSJNNSw4IEM2LjY1Njg1NDI1LDggOCw2LjY1Njg1NDI1IDgsNSBDOCwzLjM0MzE0NTc1IDYuNjU2ODU0MjUsMiA1LDIgQzMuMzQzMTQ1NzUsMiAyLDMuMzQzMTQ1NzUgMiw1IEMyLDYuNjU2ODU0MjUgMy4zNDMxNDU3NSw4IDUsOCBaIE01LDYuMjg1NzE0MjkgQzQuMjg5OTE5NjEsNi4yODU3MTQyOSAzLjcxNDI4NTcxLDUuNzEwMDgwMzkgMy43MTQyODU3MSw1IEMzLjcxNDI4NTcxLDQuMjg5OTE5NjEgNC4yODk5MTk2MSwzLjcxNDI4NTcxIDUsMy43MTQyODU3MSBDNS43MTAwODAzOSwzLjcxNDI4NTcxIDYuMjg1NzE0MjksNC4yODk5MTk2MSA2LjI4NTcxNDI5LDUgQzYuMjg1NzE0MjksNS43MTAwODAzOSA1LjcxMDA4MDM5LDYuMjg1NzE0MjkgNSw2LjI4NTcxNDI5IFoiIGlkPSLmpK3lnIblvaIiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+",yn="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAxOCAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSIyNSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K",Cn="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAyNiAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIyNSIgaGVpZ2h0PSIzMyIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K",An="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCAzNCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC41IiB5PSIwLjUiIHdpZHRoPSIzMyIgaGVpZ2h0PSI0OSIgcng9IjMuNSIgZmlsbD0iYmxhY2siIGZpbGwtb3BhY2l0eT0iMC4zNSIgc3Ryb2tlPSJ3aGl0ZSIvPgo8L3N2Zz4K";const Bn={[f.ApplianceNames.pencil]:wn,[f.ApplianceNames.selector]:xn,[f.ApplianceNames.eraser]:Sn,[f.ApplianceNames.shape]:bn,[f.ApplianceNames.text]:vn,[f.ApplianceNames.laserPointer]:In,pencilEraser1:yn,pencilEraser2:Cn,pencilEraser3:An},Ki="local-cursor";class rt{constructor(e,t,s,r){var o;this.manager=e,this.enableCursor=t,this.cursorInstances=new Map,this.userApplianceIcons={},this.sideEffectManager=new Ke,this.store=this.manager.store,this.leaveFlag=!0,this._style="default",this.onCursorMove=h=>{const c=this.initCursorInstance(h.uid);if(h.state===Yt.Leave)c.leave();else{const l=c.updateMember();this.canMoveCursor(l)&&c.move(h.position)}},this.initCursorInstance=h=>{let c=this.cursorInstances.get(h);return c||(c=new Mn(this.manager,h,this,P.wrapper),this.cursorInstances.set(h,c)),c},this.mouseMoveListener_=(h,c)=>{const l=this.getType(h);this.updateCursor(l,h.clientX,h.clientY),c&&this.showPencilEraserIfNeeded(l,h.clientX,h.clientY)},this.mouseMoveTimer=0,this.mouseMoveListener=h=>{const c=h.pointerType==="touch";if(c&&!h.isPrimary)return;const l=Date.now();if(l-this.mouseMoveTimer>48){if(this.mouseMoveTimer=l,P.supportAppliancePlugin&&f.isRoom(P.displayer)&&P.displayer.disableDeviceInputs){this.leaveFlag&&(this.manager.dispatchInternalEvent(R.CursorMove,{uid:this.manager.uid,state:Yt.Leave}),this.leaveFlag=!1);return}this.mouseMoveListener_(h,c),this.leaveFlag=!0}},this.mouseLeaveListener=()=>{this.hideCursor(this.manager.uid)},this.getPoint=(h,c,l)=>{var d;const u=(d=h==null?void 0:h.divElement)==null?void 0:d.getBoundingClientRect();if(u)return h==null?void 0:h.convertToPointInWorld({x:c-u.x,y:l-u.y})},this.getType=h=>{var u;const c=h.target,l=this.manager.focusApp;switch(c.parentElement){case this.mainViewElement:return{type:"main"};case((u=l==null?void 0:l.view)==null?void 0:u.divElement):return{type:"app"};default:return{type:"main"}}},this.roomMembers=(o=this.manager.room)==null?void 0:o.state.roomMembers;const n=P.wrapper;n&&this.setupWrapper(n),this.sideEffectManager.add(()=>A.on("cursorMove",this.onCursorMove)),this.sideEffectManager.add(()=>A.on("playgroundSizeChange",()=>this.updateContainerRect()));const a=this.manager.room;a&&this.sideEffectManager.add(()=>{const h=c=>{this.style==="custom"&&c.memberState&&this.enableCustomCursor()};return a.callbacks.on("onRoomStateChanged",h),()=>a.callbacks.off("onRoomStateChanged",h)}),r&&(this.userApplianceIcons=r),this.style=(s==null?void 0:s.style)||"default"}get applianceIcons(){return{...Bn,...this.userApplianceIcons}}get style(){return this._style}set style(e){this._style!==e&&(this._style=e,this.cursorInstances.forEach(t=>{t.setStyle(e)}),e==="custom"?this.enableCustomCursor():this.sideEffectManager.flush(Ki))}enableCustomCursor(){this.sideEffectManager.add(()=>mn(this.manager.getMemberState()),Ki)}canMoveCursor(e){const t=(e==null?void 0:e.memberState.currentApplianceName)===f.ApplianceNames.laserPointer;return this.enableCursor||t}setupWrapper(e){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.wrapperRect=e.getBoundingClientRect()}setMainViewDivElement(e){this.mainViewElement=e}get boxState(){return this.store.getBoxState()}get focusView(){var e;return(e=this.manager.focusApp)==null?void 0:e.view}showPencilEraserIfNeeded(e,t,s){const r=si(this.manager.room,this.manager.uid),n=(r==null?void 0:r.memberState.currentApplianceName)===f.ApplianceNames.pencilEraser;if(this.wrapperRect&&this.manager.canOperate&&this.canMoveCursor(r)&&n){const a=e.type==="main"?this.manager.mainView:this.focusView,o=this.getPoint(a,t,s);o&&this.onCursorMove({uid:this.manager.uid,position:{x:o.x,y:o.y,type:e.type}})}}updateCursor(e,t,s){const r=si(this.manager.room,this.manager.uid);if(this.wrapperRect&&this.manager.canOperate&&this.canMoveCursor(r)){const n=e.type==="main"?this.manager.mainView:this.focusView,a=this.getPoint(n,t,s);a&&this.manager.dispatchInternalEvent(R.CursorMove,{uid:this.manager.uid,position:{x:a.x,y:a.y,type:e.type}})}}updateContainerRect(){var e,t;this.containerRect=(e=P.container)==null?void 0:e.getBoundingClientRect(),this.wrapperRect=(t=P.wrapper)==null?void 0:t.getBoundingClientRect()}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()}destroy(){this.sideEffectManager.flushAll(),this.cursorInstances.size&&(this.cursorInstances.forEach(e=>{e.destroy()}),this.cursorInstances.clear())}}rt.kind="CursorManager";function ge(i,e){if(i.kind&&e&&Object.keys(e).includes(i.kind))switch(i.kind){case"AppManager":return(e==null?void 0:e.AppManager)||ot;case"BoxManager":return(e==null?void 0:e.BoxManager)||it;case"AttributesDelegate":return(e==null?void 0:e.AttributesDelegate)||at;case"CursorManager":return(e==null?void 0:e.CursorManager)||rt;case"AppProxy":return(e==null?void 0:e.AppProxy)||nt;case"AppContext":return(e==null?void 0:e.AppContext)||qe;case"TeleBoxManager":return(e==null?void 0:e.TeleBoxManager)||tt;case"TeleBoxCollector":return(e==null?void 0:e.TeleBoxCollector)||Le;default:return i}return i}var Q=(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",i.Registered="registered",i.IframeBridge="iframeBridge",i.BoxesStatus="boxesStatus",i.LastNotMinimizedBoxesStatus="lastNotMinimizedBoxesStatus",i))(Q||{});class at{constructor(e){this.context=e,this.setAppFocus=(t,s)=>{s?this.context.safeSetAttributes({focus:t}):this.context.safeSetAttributes({focus:void 0})}}setContext(e){this.context=e}get attributes(){return this.context.getAttributes()}apps(){return w.get(this.attributes,["apps"])}get focus(){return w.get(this.attributes,["focus"])}getAppAttributes(e){return w.get(this.apps(),[e])}getAppState(e){return w.get(this.apps(),[e,"state"])}getMaximized(){return w.get(this.attributes,["maximized"])}getMinimized(){return w.get(this.attributes,["minimized"])}getBoxesStatus(){return w.get(this.attributes,["boxesStatus"])}getBoxStatus(e){return w.get(this.attributes,["boxesStatus",e])}setBoxStatus(e,t){this.attributes.boxesStatus||this.context.safeSetAttributes({boxesStatus:{}}),this.getBoxStatus(e)!==t&&this.context.safeUpdateAttributes(["boxesStatus",e],t)}getLastNotMinimizedBoxesStatus(){return w.get(this.attributes,["lastNotMinimizedBoxesStatus"])}getLastNotMinimizedBoxStatus(e){return w.get(this.attributes,["lastNotMinimizedBoxesStatus",e])}setLastNotMinimizedBoxStatus(e,t){this.attributes.lastNotMinimizedBoxesStatus||this.context.safeSetAttributes({lastNotMinimizedBoxesStatus:{}}),this.getLastNotMinimizedBoxStatus(e)!==t&&this.context.safeUpdateAttributes(["lastNotMinimizedBoxesStatus",e],t)}setupAppAttributes(e,t,s){this.attributes.apps||this.context.safeSetAttributes({apps:{}});const n=["scenePath","title"];s||n.push("scenes");const a=w.pick(e.options,n),o={kind:e.kind,options:a,isDynamicPPT:s,forceTop:e.forceTop,forceNormal:e.forceNormal,isDragContent:e.isDragContent};typeof e.src=="string"&&(o.src=e.src),o.createdAt=Date.now(),this.context.safeUpdateAttributes(["apps",t],o),this.context.safeUpdateAttributes(["apps",t,"state"],{[ee.Size]:{},[ee.Position]:{},[ee.SceneIndex]:0})}updateAppState(e,t,s){w.get(this.attributes,["apps",e,"state"])&&this.context.safeUpdateAttributes(["apps",e,"state",t],s)}cleanAppAttributes(e){this.context.safeUpdateAttributes(["apps",e],void 0),this.context.safeSetAttributes({[e]:void 0}),this.attributes.focus===e&&this.cleanFocus()}cleanFocus(){this.context.safeSetAttributes({focus:void 0})}getAppSceneIndex(e){var t;return(t=this.getAppState(e))==null?void 0:t[ee.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.boxState}setMainViewScenePath(e){this.context.safeSetAttributes({_mainScenePath:e})}setMainViewSceneIndex(e){this.context.safeSetAttributes({_mainSceneIndex:e})}getMainViewCamera(){return w.get(this.attributes,["mainViewCamera"])}getMainViewSize(){return w.get(this.attributes,["mainViewSize"])}setMainViewCamera(e){this.context.safeSetAttributes({mainViewCamera:{...e}})}setMainViewSize(e){e.width===0||e.height===0||this.context.safeSetAttributes({mainViewSize:{...e}})}setMainViewCameraAndSize(e,t){t.width===0||t.height===0||this.context.safeSetAttributes({mainViewCamera:{...e},mainViewSize:{...t}})}updateCursor(e,t){w.get(this.attributes,["cursors"])||this.context.safeUpdateAttributes(["cursors"],{}),w.get(this.attributes,["cursors",e])||this.context.safeUpdateAttributes(["cursors",e],{}),this.context.safeUpdateAttributes(["cursors",e,"position"],t)}updateCursorState(e,t){w.get(this.attributes,["cursors",e])||this.context.safeUpdateAttributes(["cursors",e],{}),this.context.safeUpdateAttributes(["cursors",e,"cursorState"],t)}getCursorState(e){return w.get(this.attributes,["cursors",e,"cursorState"])}cleanCursor(e){this.context.safeUpdateAttributes(["cursors",e],void 0)}setMainViewFocusPath(e){const t=this.getMainViewScenePath();t&&be(e,t)}getIframeBridge(){return w.get(this.attributes,["iframeBridge"])}setIframeBridge(e){if(w.isObject(e)){const t=this.getIframeBridge();for(const s in e){const r=e[s];t[s]!==r&&this.context.safeUpdateAttributes(["iframeBridge",s],r)}}}}at.kind="AttributesDelegate";const Nn=(i,e={getAttributes:()=>{throw new Error("getAttributes not implemented")},safeSetAttributes:()=>{throw new Error("safeSetAttributes not implemented")},safeUpdateAttributes:()=>{throw new Error("safeUpdateAttributes not implemented")}})=>{const t=ge(at,i);return new t(e)},xi=(i,e)=>{let t=0;const s=e.length-1;return i===e.index?i===s?t=i-1:t=e.index+1:t=e.index,t},ce=new ve.default,Os=class{constructor(i,e,t,s){var r;this.params=i,this.manager=e,this.boxManager=this.manager.boxManager,this.appProxies=this.manager.appProxies,this.viewManager=this.manager.viewManager,this.store=this.manager.store,this.status="normal",this.getAppInitState=n=>{var Z,_,W,ie;const a=this.store.getAppState(n);if(!a)return;const o=a==null?void 0:a[ee.Position],h=this.store.focus,c=a==null?void 0:a[ee.Size],l=a==null?void 0:a[ee.SceneIndex],u=(Z=this.attributes)==null?void 0:Z.maximized,d=(_=this.attributes)==null?void 0:_.minimized,m=(W=this.store.getBoxStatus(n))!=null?W:void 0,g=(ie=this.store.getLastNotMinimizedBoxStatus(n))!=null?ie:void 0,{forceTop:b,forceNormal:M,isDragContent:N}=this.store.getAppAttributes(n),z=a==null?void 0:a.zIndex;let v={maximized:u,minimized:d,zIndex:z};return o&&(v={...v,id:n,x:o.x,y:o.y}),h===n&&(v={...v,focus:!0}),c&&(v={...v,width:c.width,height:c.height}),l&&(v={...v,sceneIndex:l}),m&&(v={...v,boxStatus:m}),g&&(v={...v,lastNotMinimizedBoxStatus:g}),b&&(v={...v,forceTop:b}),M&&(v={...v,forceNormal:M}),N&&(v={...v,isDragContent:N}),v},this.appAttributesUpdateListener=n=>{this.manager.refresher.add(n,()=>f.autorun(()=>{const a=this.manager.attributes[n];a&&this.appEmitter.emit("attributesUpdate",a)})),this.manager.refresher.add(this.stateKey,()=>f.autorun(()=>{var o,h,c,l;const a=(o=this.appAttributes)==null?void 0:o.state;(a==null?void 0:a.zIndex)>0&&a.zIndex!==((h=this.box)==null?void 0:h.zIndex)&&((c=this.boxManager)==null||c.setZIndex(n,a.zIndex),(l=this.boxManager)==null||l.focusBox({appId:n}))})),this.manager.refresher.add(`${n}-fullPath`,()=>f.autorun(()=>{var o;const a=(o=this.appAttributes)==null?void 0:o.fullPath;this.setFocusScenePathHandler(a),this._prevFullPath!==a&&(this.notifyPageStateChange(),this._prevFullPath=a)}))},this.setFocusScenePathHandler=w.debounce(n=>{var a;this.view&&n&&n!==((a=this.view)==null?void 0:a.focusScenePath)&&(be(this.view,n),L.emit("onAppScenePathChange",{appId:this.id,view:this.view}))},50),this.notifyPageStateChange=w.debounce(()=>{this.appEmitter.emit("pageStateChange",this.pageState)},50),this.notifyBoxStatusChange=n=>{this.appEmitter.emit("boxStatusChange",{appId:this.id,status:n})},this.kind=i.kind,this.id=t,this.stateKey=`${this.id}_state`,this.appProxies.set(this.id,this),this.appEmitter=new ve.default,this.appListener=this.makeAppEventListener(this.id),this.isAddApp=s,this.initScenes(),(r=this.params.options)!=null&&r.scenePath&&this.createView(),this._pageState=new Er({displayer:this.manager.displayer,scenePath:this.scenePath,view:this.view,notifyPageStateChange:this.notifyPageStateChange})}initScenes(){var e;const i=this.params.options;i&&(this.scenePath=i.scenePath,((e=this.appAttributes)==null?void 0:e.isDynamicPPT)&&this.scenePath?this.scenes=Pe(this.manager.displayer)[this.scenePath]:this.scenes=i.scenes)}get view(){return this.manager.viewManager.getView(this.id)}get viewIndex(){var i;return(i=this.view)==null?void 0:i.focusSceneIndex}get isWritable(){var i;return this.manager.canOperate&&!((i=this.box)!=null&&i.readonly)}get attributes(){return this.manager.attributes[this.id]}get appAttributes(){return this.store.getAppAttributes(this.id)}get Logger(){return this.manager.windowManger.Logger}getFullScenePath(){if(this.scenePath)return w.get(this.appAttributes,[Q.FullPath])||this.getFullScenePathFromScenes()}getFullScenePathFromScenes(){const i=w.get(this.appAttributes,["state","SceneIndex"],0),e=Ir(this.manager.room,this.scenePath,i);return e&&this.setFullPath(e),e}setFullPath(i){this.manager.safeUpdateAttributes(["apps",this.id,Q.FullPath],i)}async baseInsertApp(i=!1,e=x.Normal){var a;const t=this.params;if(!t.kind)throw this.Logger&&this.Logger.error("[WindowManager]: kind require"),new Error("[WindowManager]: kind require");const s=await((a=J.appClasses.get(t.kind))==null?void 0:a()),r=J.registered.get(t.kind),n=this.manager.windowManger.resolveAppOptions(t.kind,r==null?void 0:r.appOptions);if(s)await this.setupApp(this.id,i,s,t.options,n,this.manager.useBoxesStatus?e:void 0,t.forceTop,t.forceNormal,t.isDragContent);else throw this.Logger&&this.Logger.error(`[WindowManager]: app load failed ${t.kind} ${t.src}`),new Error(`[WindowManager]: app load failed ${t.kind} ${t.src}`);return A.emit("updateManagerRect"),{appId:this.id,app:s}}get box(){var i;return(i=this.boxManager)==null?void 0:i.getBox(this.id)}async setupApp(i,e,t,s,r,n,a,o,h){var u;if(re("setupApp",i,t,s,n,a,o,h),!this.boxManager)throw new us;const c=ge(qe,P.extendClass),l=new c(this.manager,this.boxManager,i,this,r);this.appContext=l;try{A.once(`${i}${R.WindowCreated}`).then(async()=>{var g;let d;e||(d=this.getAppInitState(i),(g=this.boxManager)==null||g.updateBoxState(d)),this.appEmitter.onAny(this.appListener),this.appAttributesUpdateListener(i),this.setViewFocusScenePath();let m;this.manager.isReplay&&(m=this.manager.mainView.scenePath),setTimeout(async()=>{this.Logger&&this.Logger.info(`[WindowManager]: setup app ${this.kind}, appId: ${i}`);const b=await t.setup(l);this.appResult=b,J.notifyApp(this.kind,"created",{appId:i,result:b}),this.afterSetupApp(d),this.fixMobileSize(),m&&this.manager.mainViewProxy.setFocusScenePath(m),L.emit("onAppSetup",i)},rs)}),(u=this.boxManager)==null||u.createBox({appId:i,app:t,options:s,canOperate:this.manager.canOperate,smartPosition:this.isAddApp,boxStatus:n,forceTop:a,forceNormal:o,isDragContent:h}),this.isAddApp&&this.box&&(n&&this.store.setBoxStatus(i,n),this.store.updateAppState(i,ee.ZIndex,this.box.zIndex),this.store.updateAppState(i,ee.Size,{width:this.box.intrinsicWidth,height:this.box.intrinsicHeight}),this.boxManager.focusBox({appId:i},!1))}catch(d){throw this.Logger&&this.Logger.error(`[WindowManager]: app setup error: ${d.message}`),new Error(`[WindowManager]: app setup error: ${d.message}`)}}fixMobileSize(){var e,t;const i=(e=this.boxManager)==null?void 0:e.getBox(this.id);i&&((t=this.boxManager)==null||t.resizeBox({appId:this.id,width:i.intrinsicWidth+.001,height:i.intrinsicHeight+.001,skipUpdate:!0}))}afterSetupApp(i){var e;i&&(!(i!=null&&i.x)||!i.y)&&((e=this.boxManager)==null||e.setBoxInitState(this.id))}async onSeek(i){var t;this.appEmitter.emit("seek",i).catch(s=>{console.log(`[WindowManager]: emit seek error: ${s.message}`)});const e=this.getAppInitState(this.id);(t=this.boxManager)==null||t.updateBoxState(e)}async onReconnected(){var n;if(!Boolean(this.manager.attributes.apps[this.id])){await this.destroy(!0,!1,!0);return}this.appEmitter.emit("reconnected",void 0);const e=this.getAppInitState(this.id);await this.destroy(!0,!1,!0);const t=this.params,s=ge(Os,P.extendClass);await new s(t,this.manager,this.id,this.isAddApp).baseInsertApp(!0,e==null?void 0:e.boxStatus),(n=this.boxManager)==null||n.updateBoxState(e)}async onRemoveScene(i){if(this.scenePath&&i.startsWith(this.scenePath+"/")){let e=this.pageState.index,t=this._pageState.getFullPath(e);t||(e=0,t=this._pageState.getFullPath(e)),t&&this.setFullPath(t),this.setViewFocusScenePath(),this.view&&(this.view.focusSceneIndex=e)}}emitAppSceneStateChange(i){this.appEmitter.emit("sceneStateChange",i)}emitAppIsWritableChange(){this.appEmitter.emit("writableChange",this.isWritable)}makeAppEventListener(i){return(e,t)=>{var s,r,n,a;if(!!this.manager.canOperate)switch(e){case"setBoxSize":{(s=this.boxManager)==null||s.resizeBox({appId:i,width:t.width,height:t.height,skipUpdate:!1});break}case"setBoxMinSize":{(r=this.boxManager)==null||r.setBoxMinSize({appId:i,minWidth:t.minwidth,minHeight:t.minheight});break}case"setBoxTitle":{(n=this.boxManager)==null||n.setBoxTitle({appId:i,title:t.title});break}case is.destroy:{if(this.status==="destroyed")return;this.destroy(!0,!1,!0,t==null?void 0:t.error),t!=null&&t.error&&console.error(t==null?void 0:t.error);break}case"focus":{(a=this.boxManager)==null||a.focusBox({appId:this.id}),ce.emit("focus",{appId:this.id});break}}}}setScenePath(){if(!this.manager.canOperate)return;const i=this.getFullScenePath();this.manager.room&&i&&this.view&&Ht(this.manager.room,i)}setViewFocusScenePath(){const i=this.getFullScenePath();return i&&this.view&&be(this.view,i),i}async createView(){const i=await this.viewManager.createView(this.id);return this.setViewFocusScenePath(),i}get pageState(){return this._pageState.toObject()}async removeSceneByIndex(i){const e=this._pageState.getFullPath(i);if(e){const t=xi(i,this.pageState);return this.setSceneIndexWithoutSync(t),this.manager.dispatchInternalEvent(R.SetAppFocusIndex,{type:"app",appID:this.id,index:t}),setTimeout(()=>{Jt(this.manager.room,e,i)},100),!0}else return!1}setSceneIndexWithoutSync(i){this.view&&(this.view.focusSceneIndex=i)}setSceneIndex(i){if(this.view){this.view.focusSceneIndex=i;const e=this._pageState.getFullPath(i);e&&this.setFullPath(e)}}async destroy(i,e,t,s){var r;if(this.status!=="destroyed"){this.status="destroyed";try{await J.notifyApp(this.kind,"destroy",{appId:this.id}),await this.appEmitter.emit("destroy",{error:s})}catch(n){this.Logger&&this.Logger.error(`[WindowManager]: notifyApp error: ${n.message}`),console.error("[WindowManager]: notifyApp error",n.message,n.stack)}this.appEmitter.clearListeners(),A.emit(`destroy-${this.id}`,{error:s}),i&&((r=this.boxManager)==null||r.closeBox(this.id,t)),e&&(this.store.cleanAppAttributes(this.id),this.scenePath&&Jt(this.manager.room,this.scenePath)),this.appProxies.delete(this.id),this._pageState.destroy(),this.viewManager.destroyView(this.id),this.manager.appStatus.delete(this.id),this.manager.refresher.remove(this.id),this.manager.refresher.remove(this.stateKey),this.manager.refresher.remove(`${this.id}-fullPath`),this._prevFullPath=void 0,this.Logger&&this.Logger.info(`[WindowManager]: destroy app ${this.kind} appId: ${this.id}`)}}close(){return this.destroy(!0,!0,!1)}};let nt=Os;nt.kind="AppProxy";class zn{constructor(e){this.displayer=e,this.views=new Map}createView(e){const t=Ws(this.displayer);return this.views.set(e,t),t}getView(e){return this.views.get(e)}destroyView(e){const t=this.views.get(e);if(t){try{t.release()}catch{}this.views.delete(e)}}setViewScenePath(e,t){const s=this.views.get(e);s&&(s.focusScenePath=t)}destroy(){this.views.forEach(e=>{try{e.release()}catch{}}),this.views.clear()}}const Ws=i=>{const e=i.views.createView();return Dn(e),e},Dn=i=>{i.setCameraBound({maxContentMode:()=>10,minContentMode:()=>.1})};class Tn{constructor(e){this.manager=e,this.polling=!1,this.started=!1,this.mainViewIsAddListener=!1,this.isForcingMainViewDivElement=!1,this.wrapperRectWorkaroundFrame=0,this.store=this.manager.store,this.viewMode=this.manager.windowManger.viewMode,this.sideEffectManager=new Ke,this.playgroundSizeChangeListenerLocalConsole=new We("playgroundSizeChangeListener",100),this.sizeUpdatedLocalConsole=new We("sizeUpdated",100),this.cameraUpdatedLocalConsole=new We("cameraUpdated",100),this.cameraReactionLocalConsole=new We("cameraReaction",100),this.syncCamera=()=>{if(!this.polling||this.viewMode!==f.ViewMode.Broadcaster)return;const{mainViewCamera:s}=this;s&&s.id!==this.manager.uid&&this.moveCameraSizeByAttributes()},this.startListenWritableChange=()=>{this.sideEffectManager.add(()=>A.on("writableChange",s=>{s&&this.ensureCameraAndSize(),this.manager.room&&this.syncMainView(this.manager.room)}))},this.onWrapperRectChange=s=>{this.pendingWrapperRectChange=s,this.wrapperRectWorkaroundFrame&&cancelAnimationFrame(this.wrapperRectWorkaroundFrame),this.wrapperRectWorkaroundFrame=requestAnimationFrame(this.runWrapperRectWorkaround)},this.runWrapperRectWorkaround=()=>{this.wrapperRectWorkaroundFrame=0;const s=this.pendingWrapperRectChange,r=this.mainView.divElement;if(this.pendingWrapperRectChange=void 0,!s||!r)return;const n=r.getBoundingClientRect(),a={width:n.width,height:n.height},o=Math.abs(s.width-a.width)<=.5&&Math.abs(s.height-a.height)<=.5,h=Math.abs(this.mainView.size.width-a.width)>.5||Math.abs(this.mainView.size.height-a.height)>.5;o&&h&&this.forceSyncMainViewDivElement(`wrapperRectChange:${s.origin||"unknown"}`,a,r)},this.addCameraReaction=()=>{this.manager.refresher.add(Q.MainViewCamera,this.cameraReaction)},this.cameraReaction=()=>f.reaction(()=>this.mainViewCamera,s=>{s&&s.id!==this.manager.uid&&(this.moveCameraToContian(this.mainViewSize),this.moveCamera(s),this.cameraReactionLocalConsole.log(`camera: ${JSON.stringify(s)}, current size: ${JSON.stringify(this.mainViewSize)}`))},{fireImmediately:!0}),this.sizeChangeHandler=w.debounce(s=>{s&&(this.moveCameraToContian(s),this.moveCamera(this.mainViewCamera),console.log("[window-manager] sizeChangeHandler current size and camera"+JSON.stringify(s)+JSON.stringify(this.mainViewCamera)+JSON.stringify(this.mainView.camera)+JSON.stringify(this.mainView.size))),this.ensureMainViewSize()},30),this.onUpdateContainerSizeRatio=()=>{const s=this.store.getMainViewSize();console.log("[window-manager] onUpdateContainerSizeRatio "+JSON.stringify(s)),this.sizeChangeHandler(s)},this.onCameraUpdatedByDevice=s=>{this.viewMode!==f.ViewMode.Follower&&(this.store.setMainViewCamera({...s,id:this.manager.uid}),w.isEqual(this.mainViewSize,{...this.mainView.size,id:this.manager.uid})||this.setMainViewSize(this.view.size))},this.mainViewClickListener=()=>{this.mainViewClickHandler()},this.setMainViewSize=w.debounce(s=>{this.store.setMainViewSize({...s,id:this.manager.uid})},50),this._syncMainViewTimer=0,this.handleCameraOrSizeUpdated=()=>{L.emit("cameraStateChange",this.cameraState),this.manager.room&&this.manager.room.syncMainView&&(clearTimeout(this._syncMainViewTimer),this._syncMainViewTimer=setTimeout(this.syncMainView,100,this.manager.room)),this.ensureMainViewSize()},this.onCameraUpdated=s=>{this.cameraUpdatedLocalConsole.log(JSON.stringify(s)),this.handleCameraOrSizeUpdated()},this.onSizeUpdated=s=>{this.sizeUpdatedLocalConsole.log(JSON.stringify(s)),this.handleCameraOrSizeUpdated()},this.syncMainView=s=>{s.isWritable&&s.syncMainView(this.mainView)},this.setViewMode=s=>{this.viewMode=s},this.mainView=this.createMainView(),this.moveCameraSizeByAttributes(),A.once("mainViewMounted").then(()=>{this.addMainViewListener(),this.start(),this.ensureCameraAndSize(),this.startListenWritableChange()});const t=()=>{var s,r,n,a,o,h,c,l;this.playgroundSizeChangeListenerLocalConsole.log(JSON.stringify(this.mainView.camera),JSON.stringify(this.mainView.size),JSON.stringify(this.mainViewSize),JSON.stringify(this.mainViewCamera),window.outerHeight,window.outerWidth,(r=(s=window.visualViewport)==null?void 0:s.width)!=null?r:"null",(a=(n=window.visualViewport)==null?void 0:n.height)!=null?a:"null",(h=(o=window.visualViewport)==null?void 0:o.offsetLeft)!=null?h:"null",(l=(c=window.visualViewport)==null?void 0:c.offsetTop)!=null?l:"null"),this.sizeChangeHandler(this.mainViewSize)};this.sideEffectManager.add(()=>A.on("playgroundSizeChange",t)),this.sideEffectManager.add(()=>A.on("containerSizeRatioUpdate",this.onUpdateContainerSizeRatio)),this.sideEffectManager.add(()=>A.on("wrapperRectChange",this.onWrapperRectChange)),this.sideEffectManager.add(()=>A.on("startReconnect",()=>{this.didRelease||this.mainView.release()})),this.sideEffectManager.setInterval(this.syncCamera,1500)}ensureCameraAndSize(){this.viewMode===f.ViewMode.Broadcaster&&(!this.mainViewCamera||!this.mainViewSize)&&(this.manager.dispatchInternalEvent(R.InitMainViewCamera),this.setCameraAndSize())}get mainViewCamera(){return this.store.getMainViewCamera()}get mainViewSize(){return this.store.getMainViewSize()}get didRelease(){return w.get(this.view,["didRelease"])}moveCameraSizeByAttributes(){this.moveCameraToContian(this.mainViewSize),this.moveCamera(this.mainViewCamera)}forceSyncMainViewDivElement(e,t,s){var o,h;const{width:r,height:n}=this.mainView.size,a=s;if(!(Math.abs(r-t.width)<=.5&&Math.abs(n-t.height)<=.5)){if(this.isForcingMainViewDivElement){console.log("[window-manager] skipForceSyncMainViewDivElement "+JSON.stringify({reason:e,observedSize:t,viewSize:this.mainView.size}));return}this.isForcingMainViewDivElement=!0;try{const l=this.mainView.screen,u=l==null?void 0:l.resizeObserver;typeof(l==null?void 0:l.refreshSize)=="function"&&(console.log("[window-manager] forceSyncMainViewDivElement observerReset "+JSON.stringify({reason:e,viewSize:this.mainView.size,observedSize:t})),(o=u==null?void 0:u.disconnect)==null||o.call(u),l.refreshSize(t.width,t.height),(h=u==null?void 0:u.observe)==null||h.call(u,s))}finally{queueMicrotask(()=>{const c=a.getBoundingClientRect();console.log("[window-manager] forceSyncMainViewDivElementResult "+JSON.stringify({reason:e,viewSize:this.mainView.size,rect:{width:c.width,height:c.height}})),this.isForcingMainViewDivElement=!1})}}}start(){console.log("[window-manager] start attributes size:"+JSON.stringify(this.mainViewSize)),this.sizeChangeHandler(this.mainViewSize),!this.started&&(this.addCameraListener(),this.addCameraReaction(),this.manager.room&&this.syncMainView(this.manager.room),this.started=!0,this.mainView.focusScenePath&&this.manager.windowManger.onMainViewScenePathChangeHandler(this.mainView.focusScenePath),console.log("[window-manager] start end mainView size:"+JSON.stringify(this.mainView.size)))}setCameraAndSize(){const e={...this.mainView.camera,id:this.manager.uid},t={...this.mainView.size,id:this.manager.uid};this.store.setMainViewCameraAndSize(e,t)}get view(){return this.mainView}get cameraState(){return{...this.view.camera,...this.view.size}}createMainView(){const e=Ws(this.manager.displayer),t=this.store.getMainViewScenePath();return t&&be(e,t),e}onReconnect(){if(this.didRelease)this.rebind();else{const e=this.store.getMainViewScenePath();this.setFocusScenePath(e)}}setFocusScenePath(e){if(e)return be(this.view,e)}rebind(){const e=this.mainView.divElement,t=this.mainView.disableCameraTransform;this.stop(),this.didRelease||this.mainView.release(),this.removeMainViewListener(),this.mainView=this.createMainView(),this.mainView.disableCameraTransform=t,this.mainView.divElement=e,this.addMainViewListener(),this.start(),L.emit("onMainViewRebind",this.mainView)}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)),this.mainViewIsAddListener=!1}async mainViewClickHandler(){var e;!this.manager.canOperate||(this.store.cleanFocus(),(e=this.manager.boxManager)==null||e.blurAllBox())}addCameraListener(){this.view.callbacks.on("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.on("onCameraUpdated",this.onCameraUpdated),this.view.callbacks.on("onSizeUpdated",this.onSizeUpdated)}removeCameraListener(){this.view.callbacks.off("onCameraUpdatedByDevice",this.onCameraUpdatedByDevice),this.view.callbacks.off("onCameraUpdated",this.onCameraUpdated),this.view.callbacks.off("onSizeUpdated",this.onSizeUpdated)}ensureMainViewSize(){(!this.mainViewSize||this.mainViewSize.width===0||this.mainViewSize.height===0)&&this.mainView.size.width>0&&this.mainView.size.height>0&&this.setMainViewSize(this.mainView.size)}moveCameraToContian(e){w.isEmpty(e)||(this.view.moveCameraToContain({width:e.width,height:e.height,originX:-e.width/2,originY:-e.height/2,animationMode:f.AnimationMode.Immediately}),this.scale=this.view.camera.scale)}moveCamera(e){if(!w.isEmpty(e)){if(w.isEqual(e,this.view.camera))return;const{centerX:t,centerY:s,scale:r}=e,n=r*(this.scale||1);this.view.moveCamera({centerX:t,centerY:s,scale:n,animationMode:f.AnimationMode.Immediately})}}stop(){this.removeCameraListener(),this.manager.refresher.remove(Q.MainViewCamera),this.manager.refresher.remove(Q.MainViewSize),this.started=!1}destroy(){console.log("[window-manager] destroy "),this.wrapperRectWorkaroundFrame&&(cancelAnimationFrame(this.wrapperRectWorkaroundFrame),this.wrapperRectWorkaroundFrame=0),this.playgroundSizeChangeListenerLocalConsole.destroy(),this.sizeUpdatedLocalConsole.destroy(),this.cameraUpdatedLocalConsole.destroy(),this.cameraReactionLocalConsole.destroy(),this.removeMainViewListener(),this.stop(),this.sideEffectManager.flushAll()}}class Pn{constructor(e){this.context=e,this.addRedoUndoListeners=t=>{if(t===void 0)this.addViewCallbacks(this.context.mainView(),this.onCanRedoStepsUpdate,this.onCanUndoStepsUpdate);else{const s=this.context.getAppProxy(t);s&&s.view&&this.addViewCallbacks(s.view,this.onCanRedoStepsUpdate,this.onCanUndoStepsUpdate)}},this.addViewCallbacks=(t,s,r)=>{s(t.canRedoSteps),r(t.canUndoSteps),t.callbacks.on("onCanRedoStepsUpdate",s),t.callbacks.on("onCanUndoStepsUpdate",r)},this.disposeViewCallbacks=t=>{t.callbacks.off("onCanRedoStepsUpdate",this.onCanRedoStepsUpdate),t.callbacks.off("onCanUndoStepsUpdate",this.onCanUndoStepsUpdate)},this.onCanRedoStepsUpdate=t=>{L.emit("canRedoStepsChange",t)},this.onCanUndoStepsUpdate=t=>{L.emit("canUndoStepsChange",t)},this.disposePrevFocusViewRedoUndoListeners=t=>{let s;if(t===void 0)s=this.context.mainView();else{const r=this.context.getAppProxy(t);r&&r.view&&(s=r.view)}s&&this.disposeViewCallbacks(s)},A.on("focusedChange",t=>{this.disposePrevFocusViewRedoUndoListeners(t.prev),setTimeout(()=>{this.addRedoUndoListeners(t.focused)},0)}),A.on("rootDirRemoved",()=>{this.disposePrevFocusViewRedoUndoListeners(e.focus()),this.addRedoUndoListeners(e.focus())}),this.addRedoUndoListeners(e.focus())}destroy(){this.disposePrevFocusViewRedoUndoListeners(this.context.focus())}}class ot{constructor(e){this.windowManger=e,this.appProxies=new Map,this.appStatus=new Map,this.isReplay=this.windowManger.isReplay,this.mainViewScenesLength=0,this.callbacksNode=null,this.appCreateQueue=new or,this.sideEffectManager=new Ke,this.sceneState=null,this.rootDirRemoving=!1,this._useBoxesStatus=!1,this.onRemoveScenes=async t=>{var r,n;const{scenePath:s}=t;if(s===q){console.log("[window-manager] onRemoveScenes ROOT_DIR"),await this.onRootDirRemoved(),this.dispatchInternalEvent(R.RootDirRemoved);return}if(Nr(s)){let a=this.mainView.focusSceneIndex||0,o=(r=this.callbacksNode)==null?void 0:r.scenes[a];o||(a=0,o=(n=this.callbacksNode)==null?void 0:n.scenes[a]),o&&(console.log(`[window-manager] onRemoveScenes setMainViewScenePath ${q}${o}`),this.setMainViewScenePath(`${q}${o}`)),await this.setMainViewSceneIndex(a)}else this.appProxies.forEach(a=>{a.onRemoveScene(s)})},this.onReadonlyChanged=()=>{this.appProxies.forEach(t=>{t.emitAppIsWritableChange()})},this.onPlayerSeekStart=async()=>{await this.closeAll()},this.onPlayerSeekDone=async t=>{await this._attributesUpdateCallback(this.attributes.apps),this.appProxies.forEach(s=>{s.onSeek(t)})},this.createRootDirScenesCallback=()=>{let t=!1;this.callbacksNode&&(this.callbacksNode.dispose(),t=!0),this.callbacksNode=this.displayer.createScenesCallback(q,{onAddScene:this.onSceneChange,onRemoveScene:async(s,r)=>{await this.onSceneChange(s),A.emit("rootDirSceneRemoved",r)}}),this.callbacksNode&&(this.updateSceneState(this.callbacksNode),this.mainViewScenesLength=this.callbacksNode.scenes.length,t&&this.emitMainViewScenesChange(this.callbacksNode.scenes.length))},this.removeSceneByIndex=async t=>{var n;const s=xi(t,this.windowManger.pageState);this.setSceneIndexWithoutSync(s),this.dispatchInternalEvent(R.SetAppFocusIndex,{type:"main",index:s});const r=(n=this.callbacksNode)==null?void 0:n.scenes[t];return setTimeout(()=>{r&&Jt(this.room,`${q}${r}`,t)},100),new Promise((a,o)=>{A.once("rootDirSceneRemoved").then(h=>{h===r&&a(!0)}).catch(h=>{console.log(`[WindowManager]: removePage error: ${h}`),o(!1)})})},this.setSceneIndexWithoutSync=t=>{var r;const s=(r=this.callbacksNode)==null?void 0:r.scenes[t];s&&this.mainViewProxy.setFocusScenePath(`${q}${s}`)},this.onSceneChange=t=>(this.mainViewScenesLength=t.scenes.length,this.updateSceneState(t),this.emitMainViewScenesChange(this.mainViewScenesLength)),this.emitMainViewScenesChange=t=>Promise.all([L.emit("mainViewScenesLengthChange",t),A.emit("changePageState")]),this.updateSceneState=t=>{const s=this.store.getMainViewSceneIndex()||0;let r=t.scenes[s];r||(r=t.scenes[this.mainView.focusSceneIndex||0]),this.sceneState={scenePath:`${q}${r}`,contextPath:t.path,index:s,scenes:t.scenes.map(n=>({name:n})),sceneName:r},L.emit("sceneStateChange",this.sceneState)},this.onBoxMove=t=>{this.dispatchInternalEvent(R.AppMove,t),this.store.updateAppState(t.appId,ee.Position,{x:t.x,y:t.y}),L.emit("onBoxMove",t)},this.onBoxResize=t=>{t.width&&t.height&&(this.dispatchInternalEvent(R.AppResize,t),this.store.updateAppState(t.appId,ee.Size,{width:t.width,height:t.height}),L.emit("onBoxResize",t))},this.onBoxFocus=t=>{this.windowManger.safeSetAttributes({focus:t.appId}),L.emit("onBoxFocus",t)},this.onBoxBlurred=t=>{this.attributes.focus===t.appId&&(this.windowManger.safeSetAttributes({focus:void 0}),L.emit("onBoxBlurred",t))},this.onBoxClose=t=>{const s=this.appProxies.get(t.appId);s&&s.destroy(!1,!0,!0,t.error),L.emit("onBoxClose",t)},this.onBoxStateChange=t=>{this.dispatchInternalEvent(R.AppBoxStateChange,t),L.emit("onBoxStateChange",t)},this.notifyBoxesStatusChange=w.debounce(()=>{var s;(s=this.boxManager)==null||s.setBoxesStatus(this.attributes.boxesStatus);const t=Object.entries(this.attributes.boxesStatus);t.length>0&&t.forEach(([r,n])=>{const a=this.appProxies.get(r);a&&a.notifyBoxStatusChange(n)})},100),this.addBoxesStatusChangeListener=()=>{this.refresher.add("boxesStatus",()=>_e(()=>this.attributes.boxesStatus,()=>{this.notifyBoxesStatusChange()})),this.refresher.add("lastNotMinimizedBoxesStatus",()=>_e(()=>this.attributes.lastNotMinimizedBoxesStatus,()=>{var t;(t=this.boxManager)==null||t.setLastNotMinimizedBoxesStatus(this.attributes.lastNotMinimizedBoxesStatus)}))},this.addAppsChangeListener=()=>{this.refresher.add("apps",()=>_e(()=>this.attributes.apps,()=>{this.attributesUpdateCallback(this.attributes.apps)}))},this.addAppCloseListener=()=>{this.refresher.add("appsClose",()=>_e(()=>this.attributes.apps,t=>{t.some(s=>s.kind===f.UpdateEventKind.Removed)&&this.onAppDelete(this.attributes.apps)}))},this.onMainViewIndexChange=t=>{t!==void 0&&this._prevSceneIndex!==t&&(L.emit("mainViewSceneIndexChange",t),A.emit("changePageState"),this.callbacksNode&&this.updateSceneState(this.callbacksNode),this._prevSceneIndex=t)},this.onFocusChange=t=>{var s;this._prevFocused!==t&&(L.emit("focusedChange",t),A.emit("focusedChange",{focused:t,prev:this._prevFocused}),this._prevFocused=t,t!==void 0&&((s=this.boxManager)==null||s.focusBox({appId:t}),setTimeout(()=>{const r=this.appProxies.get(t);r&&J.notifyApp(r.kind,"focus",{appId:t})},0)))},this.attributesUpdateCallback=w.debounce(t=>this._attributesUpdateCallback(t),100),this._appIds=[],this.onRegisteredChange=t=>{!t||Object.entries(t).forEach(([s,r])=>{J.appClasses.has(s)||J.register({kind:s,src:r.src,name:r.name})})},this.onMinimized=t=>{var s,r;((s=this.boxManager)==null?void 0:s.minimized)!==t&&(t===!0&&((r=this.boxManager)==null||r.blurAllBox()),setTimeout(()=>{var n;(n=this.boxManager)==null||n.setMinimized(Boolean(t))},0))},this.onAppDelete=async t=>{const s=Object.keys(t);for(const[r,n]of this.appProxies.entries())s.includes(r)||await n.destroy(!0,!1,!0)},this.closeAll=async()=>{for(const[t,s]of this.appProxies.entries())await s.destroy(!0,!1,!0)},this.displayerStateListener=t=>{this.appProxies.forEach(s=>{s.appEmitter.emit("roomStateChange",t)}),A.emit("observerIdChange",this.displayer.observerId)},this.displayerWritableListener=t=>{var n,a;const s=!t,r=this.windowManger.readonly===void 0||this.windowManger.readonly===!1;this.windowManger.readonly===void 0?(n=this.boxManager)==null||n.setReadonly(t):(a=this.boxManager)==null||a.setReadonly(!(s&&r)),this.appProxies.forEach(o=>{o.emitAppIsWritableChange()}),A.emit("writableChange",s)},this.updateSceneIndex=()=>{const t=this.store.getMainViewScenePath(),s=Et(t),r=Pe(this.displayer)[s];if(r.length){const n=t.replace(s,"").replace("/",""),a=r.findIndex(o=>o.name===n);w.isInteger(a)&&a>=0&&this.safeSetAttributes({_mainSceneIndex:a})}},this.updateRootDirRemoving=t=>{this.rootDirRemoving=t},this.displayer=e.displayer,this.store=Nn(P.extendClass,{getAttributes:()=>this.attributes,safeSetAttributes:t=>this.safeSetAttributes(t),safeUpdateAttributes:(t,s)=>this.safeUpdateAttributes(t,s)}),this.mainViewProxy=new Tn(this),this.viewManager=new zn(this.displayer),this.appListeners=new zr(this),this.displayer.callbacks.on(this.eventName,this.displayerStateListener),this.appListeners.addListeners(),this.refresher=Zs,this.refresher.setRoom(this.room),this.refresher.setContext({emitter:A}),this.sideEffectManager.addDisposer(()=>{var t,s;this.appCreateQueue.destroy(),this.mainViewProxy.destroy(),this.refresher.destroy(),this.viewManager.destroy(),(t=this.boxManager)==null||t.destroy(),(s=this.callbacksNode)==null||s.dispose()}),A.once("onCreated").then(()=>this.onCreated()),A.on("onReconnected",()=>this.onReconnected()),f.isPlayer(this.displayer)&&(A.on("seekStart",this.onPlayerSeekStart),A.on("seek",this.onPlayerSeekDone)),A.on("removeScenes",this.onRemoveScenes),A.on("setReadonly",this.onReadonlyChanged),this.createRootDirScenesCallback(),J.setSyncRegisterApp(t=>{this.safeUpdateAttributes([Q.Registered,t.kind],t)})}get useBoxesStatus(){return this._useBoxesStatus}set useBoxesStatus(e){this._useBoxesStatus=e}getMemberState(){var e;return((e=this.room)==null?void 0:e.state.memberState)||{strokeColor:[0,0,0]}}async onRootDirRemoved(e=!0){this.setMainViewScenePath(ss),this.createRootDirScenesCallback();for(const[t,s]of this.appProxies.entries())s.view&&await this.closeApp(t,e);this.mainViewProxy.rebind(),A.emit("rootDirRemoved"),this.updateRootDirRemoving(!1)}get eventName(){return f.isRoom(this.displayer)?"onRoomStateChanged":"onPlayerStateChanged"}get attributes(){return this.windowManger.attributes}get canOperate(){return this.windowManger.canOperate}get room(){return f.isRoom(this.displayer)?this.displayer:void 0}get mainView(){return this.mainViewProxy.view}get polling(){return this.mainViewProxy.polling}set polling(e){this.mainViewProxy.polling=e}get focusApp(){if(this.store.focus)return this.appProxies.get(this.store.focus)}get uid(){var e;return((e=this.room)==null?void 0:e.uid)||""}get Logger(){return this.windowManger.Logger}getMainViewSceneDir(){const e=this.store.getMainViewScenePath();if(e)return Et(e);throw new Error("[WindowManager]: mainViewSceneDir not found")}async onCreated(){var e;if(Object.keys(this.attributes.apps).length&&this.store.focus&&(this._focusAppId=this.store.focus,await new Promise(t=>{this._focusAppCreatedResolve=t,this._resolveTimer=setTimeout(()=>{t(this.appProxies.get(this._focusAppId||""))},500)}).then(()=>{this._resolveTimer=void 0,this._focusAppCreatedResolve=void 0,this.focusByAttributes(this.attributes.apps)})),await this._attributesUpdateCallback(this.attributes.apps),A.emit("updateManagerRect"),ce.on("move",this.onBoxMove),ce.on("resize",this.onBoxResize),ce.on("focus",this.onBoxFocus),ce.on("close",this.onBoxClose),ce.on("boxStateChange",this.onBoxStateChange),ce.on("blurred",this.onBoxBlurred),this.addAppsChangeListener(),this.addAppCloseListener(),this.addBoxesStatusChangeListener(),this.refresher.add("maximized",()=>f.autorun(()=>{var s;const t=this.attributes.maximized;(s=this.boxManager)==null||s.setMaximized(Boolean(t))})),this.refresher.add("minimized",()=>f.autorun(()=>{const t=this.attributes.minimized;this.onMinimized(t)})),this.refresher.add("mainViewIndex",()=>f.autorun(()=>{const t=w.get(this.attributes,"_mainSceneIndex");this.onMainViewIndexChange(t)})),this.refresher.add("focusedChange",()=>f.autorun(()=>{const t=w.get(this.attributes,"focus");this.onFocusChange(t)})),this.refresher.add("registeredChange",()=>f.autorun(()=>{const t=w.get(this.attributes,Q.Registered);this.onRegisteredChange(t)})),!this.attributes.apps||Object.keys(this.attributes.apps).length===0){const t=this.store.getMainViewScenePath();if(!t)return;this.resetScenePath(t)}this.displayerWritableListener(!((e=this.room)!=null&&e.isWritable)),this.displayer.callbacks.on("onEnableWriteNowChanged",this.displayerWritableListener),this.focusByAttributes(this.attributes.apps),this._prevFocused=this.attributes.focus,P.supportAppliancePlugin||this.sideEffectManager.add(()=>{const t=new Pn({mainView:()=>this.mainViewProxy.view,focus:()=>this.attributes.focus,getAppProxy:s=>this.appProxies.get(s)});return()=>t.destroy()})}notifyAppsChange(e){(this._appIds.length!==e.length||!this._appIds.every(t=>e.includes(t)))&&(this._appIds=e,L.emit("appsChange",e))}async _attributesUpdateCallback(e){if(e&&P.container){const t=Object.keys(e);t.length===0&&this.appCreateQueue.emitReady();const r=w.orderBy(t.map(n=>({id:n,createdAt:e[n].createdAt})),"createdAt","asc").map(({id:n})=>n);this.notifyAppsChange(r);for(const n of r)if(!this.appProxies.has(n)&&!this.appStatus.has(n)){const a=e[n];try{if(!this.attributes[n])throw this.Logger&&this.Logger.error(`[WindowManager]: appAttributes is undefined, appId: ${n}`),new Error("appAttributes is undefined");this.appCreateQueue.push(async()=>{this.appStatus.set(n,Qt.StartCreate);const h=await this.baseInsertApp({kind:a.kind,options:a.options,isDynamicPPT:a.isDynamicPPT,forceNormal:a.forceNormal,forceTop:a.forceTop,isDragContent:a.isDragContent},n,!1);return h&&this._focusAppId===n&&this._focusAppCreatedResolve&&(this._resolveTimer&&clearTimeout(this._resolveTimer),this._focusAppCreatedResolve(h)),h}),this.focusByAttributes(e)}catch(o){console.warn("[WindowManager]: Insert App Error",o)}}}}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"),L.emit("onMainViewMounted",s);const r=this.hasRoot(s.divElement),n=this.getRectByDivElement(s.divElement);let a=`[window-manager] bindMainView hasRoot:${r}, rect:${JSON.stringify(n)}, outerHeight:${window.outerHeight}, outerWidth:${window.outerWidth}`;const o=window.visualViewport;o&&(a+=`, visualViewportWidth:${o.width}, visualViewportHeight:${o.height}, visualViewportOffsetLeft:${o.offsetLeft}, visualViewportOffsetTop:${o.offsetTop}`),console.log(a)}hasRoot(e){let t=e;for(;t;){if(t.parentElement===document.body)return!0;t=t.parentElement}return!1}getRectByDivElement(e){return e.getBoundingClientRect()}setMainViewFocusPath(e){var s;const t=e||this.store.getMainViewScenePath();if(t)return be(this.mainView,t),((s=this.mainView)==null?void 0:s.focusScenePath)===t}resetScenePath(e){this.displayer.state.sceneState.scenePath!==e&&Ht(this.room,e)}async addApp(e,t){var a;re("addApp",e),(a=this.windowManger.Logger)==null||a.info(`[WindowManager]: addApp ${e.kind}, isDynamicPPT: ${t}`);const{appId:s,needFocus:r}=await this.beforeAddApp(e,t),n=await this.baseInsertApp(e,s,!0,r);return this.afterAddApp(n),n==null?void 0:n.id}async beforeAddApp(e,t){var a,o;const s=await vr(e.kind);this.appStatus.set(s,Qt.StartCreate);const r=(a=e.attributes)!=null?a:{};this.safeUpdateAttributes([s],r),this.store.setupAppAttributes(e,s,t);const n=!((o=this.boxManager)!=null&&o.minimized);return n&&this.store.setAppFocus(s,!0),{appId:s,needFocus:n}}afterAddApp(e){var t,s;if(e&&e.box){const r=e.box;ce.emit("move",{appId:e.id,x:r==null?void 0:r.intrinsicX,y:r==null?void 0:r.intrinsicY}),this.store.updateAppState(e.id,ee.ZIndex,r.zIndex)}(t=this.boxManager)!=null&&t.minimized&&((s=this.boxManager)==null||s.setMinimized(!1,!1))}async closeApp(e,t=!0){const s=this.appProxies.get(e);s&&await s.destroy(!0,t,!1)}async baseInsertApp(e,t,s,r){var o;if(this.appProxies.has(t)){(o=this.windowManger.Logger)==null||o.warn(`[WindowManager]: app duplicate exists and cannot be created again, appId: ${t}`);return}const n=ge(nt,P.extendClass),a=new n(e,this,t,s);if(a)return await a.baseInsertApp(r),this.appStatus.delete(t),a;throw this.appStatus.delete(t),this.Logger&&this.Logger.error(`[WindowManager]: initialize AppProxy failed, appId: ${t}`),new Error("[WindowManger]: initialize AppProxy failed")}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(Et(e)!==q)throw this.Logger&&this.Logger.error('[WindowManager]: main view scenePath must in root dir "/"'),new Error('[WindowManager]: main view scenePath must in root dir "/"');if(t===f.ScenePathType.None)throw this.Logger&&this.Logger.error(`[WindowManager]: ${e} not valid scene`),new Error(`[WindowManager]: ${e} not valid scene`);if(t===f.ScenePathType.Page)await this._setMainViewScenePath(e);else if(t===f.ScenePathType.Dir){const r=Cr(this.displayer,e);r&&await this._setMainViewScenePath(r)}}}async _setMainViewScenePath(e){this.setMainViewFocusPath(e)&&(this.safeSetAttributes({_mainScenePath:e}),this.store.setMainViewFocusPath(this.mainView),this.updateSceneIndex(),this.dispatchSetMainViewScenePath(e))}async setMainViewSceneIndex(e){var t;if(this.room){if(this.store.getMainViewSceneIndex()===e)return;const s=(t=this.callbacksNode)==null?void 0:t.scenes[e],r=`${q}${s}`;if(s)this.setMainViewFocusPath(r)&&(this.store.setMainViewScenePath(r),this.store.setMainViewSceneIndex(e),this.dispatchSetMainViewScenePath(r));else throw this.Logger&&this.Logger.error(`[WindowManager]: ${e} not valid index`),new Error(`[WindowManager]: ${e} not valid index`)}}dispatchSetMainViewScenePath(e){this.dispatchInternalEvent(R.SetMainViewScenePath,{nextScenePath:e}),L.emit("mainViewScenePathChange",e),Ht(this.room,e)}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(){await this._attributesUpdateCallback(this.attributes.apps);const t=Array.from(this.appProxies.values()).map(s=>s.onReconnected());this.mainViewProxy.onReconnect(),await Promise.all(t),this.callbacksNode&&this.onSceneChange(this.callbacksNode)}notifyContainerRectUpdate(e){this.appProxies.forEach(t=>{t.appEmitter.emit("containerRectUpdate",e)})}dispatchInternalEvent(e,t){this.safeDispatchMagixEvent(Gt,{eventName:e,payload:t})}destroy(){this.displayer.callbacks.off(this.eventName,this.displayerStateListener),this.displayer.callbacks.off("onEnableWriteNowChanged",this.displayerWritableListener),this.appListeners.removeListeners(),ce.clearListeners(),A.clearListeners(),this.appProxies.size&&this.appProxies.forEach(e=>{e.destroy(!0,!1,!0)}),L.clearListeners(),this.sideEffectManager.flushAll(),this._prevFocused=void 0,this._prevSceneIndex=void 0,this._resolveTimer&&clearTimeout(this._resolveTimer),this._focusAppCreatedResolve=void 0,this._resolveTimer=void 0}}ot.kind="AppManager";const Ln=window.ResizeObserver||sr.ResizeObserver;class Si{constructor(e){this.emitter=e,this.updateSizerLocalConsole=new We("updateSizer",100)}static create(e,t,s,r){const n=new Si(r);return n.observePlaygroundSize(e,t,s),n}observePlaygroundSize(e,t,s){this.updateSizer(e.getBoundingClientRect(),t,s,"observePlaygroundSize"),this.containerResizeObserver=new Ln(r=>{var a;const n=(a=r[0])==null?void 0:a.contentRect;n&&(this.updateSizer(n,t,s,"containerResizeObserver"),this.emitter.emit("playgroundSizeChange",n))}),this.disposer=this.emitter.on("containerSizeRatioUpdate",()=>{const r=e.getBoundingClientRect();this.updateSizer(r,t,s,"containerSizeRatioUpdate"),this.emitter.emit("playgroundSizeChange",r)}),this.containerResizeObserver.observe(e)}updateSizer({width:e,height:t},s,r,n){if(e&&t){t/e>P.containerSizeRatio?(t=e*P.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!0)):(e=t/P.containerSizeRatio,s.classList.toggle("netless-window-manager-sizer-horizontal",!1)),r.style.width=`${e}px`,r.style.height=`${t}px`;const a=r.getBoundingClientRect();this.updateSizerLocalConsole.log(`from ${n}, traget size: ${JSON.stringify({width:e,height:t})}, wrapperRect: ${a.width} ${a.height}`),this.emitter.emit("wrapperRectChange",{width:a.width,height:a.height,origin:n})}}disconnect(){var e,t;this.updateSizerLocalConsole.destroy(),(e=this.containerResizeObserver)==null||e.disconnect(),(t=this.disposer)==null||t.call(this),this.disposer=void 0}}class En{constructor(e){this.manager=e,A.on("changePageState",()=>{L.emit("pageStateChange",this.toObject())})}get index(){return this.manager.store.getMainViewSceneIndex()||0}get length(){return this.manager.mainViewScenesLength||0}toObject(){return{index:this.index>=this.length?this.length-1:this.index,length:this.length}}}class Vn{constructor(e){this.ctx=e,this.reactors=new Map,this.disposers=new Map,this.onPhaseChanged=async t=>{var s,r;t===f.RoomPhase.Reconnecting&&this.ctx.emitter.emit("startReconnect"),t===f.RoomPhase.Connected&&this.phase===f.RoomPhase.Reconnecting&&((s=this.room)!=null&&s.isWritable?(r=this.room)==null||r.dispatchMagixEvent(Lt,{}):(await as(500),this.onReconnected())),this.phase=t},this.onReconnected=w.debounce(()=>{this._onReconnected()},1e3),this._onReconnected=()=>{re("onReconnected refresh reactors"),this.releaseDisposers(),this.reactors.forEach((t,s)=>{w.isFunction(t)&&this.disposers.set(s,t())}),this.ctx.emitter.emit("onReconnected")}}setRoom(e){this.room=e,this.phase=e==null?void 0:e.phase,e&&(e.callbacks.off("onPhaseChanged",this.onPhaseChanged),e.callbacks.on("onPhaseChanged",this.onPhaseChanged),e.addMagixEventListener(Lt,t=>{t.authorId===e.observerId&&this.onReconnected()},{fireSelfEventAfterCommit:!0}))}setContext(e){this.ctx=e}releaseDisposers(){this.disposers.forEach(e=>{w.isFunction(e)&&e()}),this.disposers.clear()}refresh(){this._onReconnected()}add(e,t){const s=this.disposers.get(e);s&&w.isFunction(s)&&s(),w.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&&(w.isFunction(t)&&t(),this.disposers.delete(e))}hasReactor(e){return this.reactors.has(e)}destroy(){var e,t;(e=this.room)==null||e.callbacks.off("onPhaseChanged",this.onPhaseChanged),(t=this.room)==null||t.removeMagixEventListener(Lt,this.onReconnected),this.releaseDisposers()}}const jn=(i,e)=>{if(f.isPlayer(i))kn(i);else{if(i=i,Object.getOwnPropertyDescriptor(i,"disableCameraTransform"))return;Object.defineProperty(i,"disableCameraTransform",{get(){return e.mainView.disableCameraTransform},set(n){e.mainView.disableCameraTransform=n}}),Object.defineProperty(i,"canUndoSteps",{get(){return e.canUndoSteps}}),Object.defineProperty(i,"canRedoSteps",{get(){return e.canRedoSteps}});const s=i.scalePptToFit;i.scalePptToFit=(...n)=>{var a;s.call(i,...n),(a=e.appManager)!=null&&a.mainViewProxy&&e.appManager.mainViewProxy.setCameraAndSize()};const r=i.putScenes;i.putScenes=(...n)=>{const[a,o]=n,h=e.mainView.focusScenePath;if(h&&a&&o){console.log("[window-manager] putScenes "+JSON.stringify(n));for(const c of o)if(`${a}${c.name}`===h){console.error(`[window-manager] putScenes: scene name can not be the same as the current scene path: ${h}`);return}}return r.call(i,...n)},i.moveCamera=n=>e.moveCamera(n),i.moveCameraToContain=(...n)=>e.moveCameraToContain(...n),i.convertToPointInWorld=(...n)=>e.mainView.convertToPointInWorld(...n),i.setCameraBound=(...n)=>e.mainView.setCameraBound(...n),i.scenePreview=(...n)=>e.mainView.scenePreview(...n),i.fillSceneSnapshot=(...n)=>e.mainView.fillSceneSnapshot(...n),i.generateScreenshot=(...n)=>e.mainView.generateScreenshot(...n),i.setMemberState=(...n)=>e.mainView.setMemberState(...n),i.redo=()=>e.redo(),i.undo=()=>e.undo(),i.cleanCurrentScene=()=>e.cleanCurrentScene(),i.delete=()=>e.delete(),i.copy=()=>e.copy(),i.paste=()=>e.paste(),i.duplicate=()=>e.duplicate(),i.insertImage=(...n)=>e.insertImage(...n),i.completeImageUpload=(...n)=>e.completeImageUpload(...n),i.insertText=(...n)=>e.insertText(...n),i.lockImage=(...n)=>e.lockImage(...n),i.lockImages=(...n)=>e.lockImages(...n),Rn(i,e)}},Rn=(i,e)=>{const t=i.removeScenes;i.removeScenes=(s,r)=>{var a;s===q&&((a=e.appManager)==null||a.updateRootDirRemoving(!0));const n=t.call(i,s);return A.emit("removeScenes",{scenePath:s,index:r}),n}},kn=i=>{const e=i.seekToProgressTime;async function t(s){await A.emit("seekStart");const r=await e.call(i,s);return A.emit("seek",s),r}i.seekToProgressTime=t},Un=async()=>{const i=await Promise.resolve().then(function(){return require("./app-media-player.js")});return P.debug&&i.setOptions({verbose:!0}),i.default||i},_n=async()=>{const i=await Promise.resolve().then(function(){return require("./app-docs-viewer.js")});return i.default||i},On=async()=>{const i=await Promise.resolve().then(function(){return require("./app-presentation.js")});return i.default||i},Wn=()=>{P.register({kind:de.DocsViewer,src:_n}),P.register({kind:de.MediaPlayer,src:Un}),P.register({kind:de.Presentation,src:On,appOptions:{debounceSync:!0,useScrollbar:!0}})},de={DocsViewer:"DocsViewer",MediaPlayer:"MediaPlayer",Presentation:"Presentation"};const me={Ready:"Ready",RootRect:"ReplayRootRect",Message:"message",ComputeStyle:"computeStyle",Load:"load",DisplayerState:"displayerState",Show:"show",Hide:"hide"},$n=(i,e)=>new Array(i).fill(0).map((t,s)=>e(s)),j=class{constructor(i,e){this.manager=i,this.appManager=e,this.magixEventMap=new Map,this.cssList=[],this.allowAppliances=["clicker"],this.bridgeDisposer=w.noop,this.rootRect=null,this.sideEffectManager=new Ke,this.execListenIframe=w.debounce(t=>{this.listenIframe(t)},50),this.onPhaseChangedListener=t=>{t===f.PlayerPhase.Playing&&this.computedStyleAndIframeDisplay()},this.stateChangeListener=t=>{t={...t},t.cameraState=this.manager.cameraState,this.postMessage({kind:"RoomStateChanged",payload:t}),t.cameraState&&(j.emitter.emit("GetRootRect"),this.computedStyle(t)),t.memberState&&(this.computedZindex(),this.updateStyle()),t.sceneState&&this.computedIframeDisplay(t,this.attributes)},this.displayer=j.displayer=e.displayer,this.iframe=this._createIframe(),this.sideEffectManager.addDisposer(j.emitter.on("ReplayRootRect",t=>{this.rootRect=t}),me.RootRect),this.sideEffectManager.addDisposer(j.emitter.on("HideIframe",()=>{this.iframe.className=j.hiddenClass}),me.Hide),this.sideEffectManager.addDisposer(j.emitter.on("DispayIframe",()=>{this.iframe.className=""}),me.Show),this.sideEffectManager.addDisposer(j.emitter.on("created",()=>{this.bridgeDisposer(),this.bridgeDisposer=f.autorun(()=>{var s;const t=this.attributes;if(t.url){const r=(s=this.iframe)==null?void 0:s.src;r&&r!==t.url&&this.execListenIframe(t)}t.displaySceneDir&&this.computedIframeDisplay(this.displayer.state,t),(t.width||t.height)&&this.iframe&&(this.iframe.width=`${t.width}px`,this.iframe.height=`${t.height}px`),this.postMessage({kind:"AttributesUpdate",payload:t})})})),this.sideEffectManager.addDisposer(i.emitter.on("cameraStateChange",()=>{this.computedStyle(this.displayer.state)})),j.onCreate(this)}static onCreate(i){j.emitter.emit("StartCreate"),j.emitter.emit("OnCreate",i),j.emitter.emit("created")}insert(i){const e={url:i.url,width:i.width,height:i.height,displaySceneDir:i.displaySceneDir,useClicker:i.useClicker||!1,useSelector:i.useSelector};this.setAttributes(e);const t=()=>{this.getIframe(),this.listenIframe(this.attributes),this.listenDisplayerState(),j.emitter.emit("GetRootRect")};if(this.getIframe())t();else{const s=this.sideEffectManager.addDisposer(j.emitter.on("WrapperDidMount",()=>{t(),this.sideEffectManager.flush(s)})),r=this.sideEffectManager.addDisposer(j.emitter.on("WrapperDidUpdate",()=>{t(),this.sideEffectManager.flush(r)}))}return this.attributes.useSelector&&this.allowAppliances.push("selector"),this.computedStyle(this.displayer.state),this.listenDisplayerCallbacks(),this.getComputedIframeStyle(),this.sideEffectManager.addEventListener(window,"message",this.messageListener.bind(this),void 0,me.Message),j.alreadyCreate=!0,this}getComputedIframeStyle(){this.sideEffectManager.setTimeout(()=>{this.iframe&&getComputedStyle(this.iframe)},200,me.ComputeStyle)}destroy(){this.sideEffectManager.flushAll(),j.emitter.emit("Destory"),j.alreadyCreate=!1,j.emitter.clearListeners()}getIframe(){return this.iframe||(this.iframe=this._createIframe()),this.iframe}setIframeSize(i){this.iframe&&(this.iframe.width=`${i.width}px`,this.iframe.height=`${i.height}px`,this.setAttributes({width:i.width,height:i.height}))}get attributes(){return this.appManager.store.getIframeBridge()}setAttributes(i){this.appManager.store.setIframeBridge(i)}_createIframe(){const i=document.createElement("iframe");return i.id="IframeBridge",i.className=j.hiddenClass,this.appManager.mainView.divElement&&this.appManager.mainView.divElement.appendChild(i),i}scaleIframeToFit(i=f.AnimationMode.Immediately){if(!this.inDisplaySceneDir)return;const{width:e=1280,height:t=720}=this.attributes,s=e?-e/2:0,r=t?-t/2:0;this.manager.moveCameraToContain({originX:s,originY:r,width:e,height:t,animationMode:i})}get isReplay(){return this.manager.isReplay}handleSetPage(i){if(this.isReplay||!this.attributes.displaySceneDir)return;const e=i.payload,t=this.displayer,s=t.entireScenes()[this.attributes.displaySceneDir];if(!s||s.length!==e){const r=$n(e,n=>({name:String(n+1)}));t.putScenes(this.attributes.displaySceneDir,r),this.manager.setMainViewScenePath(this.attributes.displaySceneDir)}}listenIframe(i){const e=t=>{var s;this.postMessage({kind:"Init",payload:{attributes:this.attributes,roomState:(s=j.displayer)==null?void 0:s.state,currentPage:this.currentPage,observerId:this.displayer.observerId}}),j.emitter.emit("IframeLoad",t),this.sideEffectManager.addDisposer(j.emitter.on("Ready",()=>{var r;this.postMessage((r=this.attributes.lastEvent)==null?void 0:r.payload)}),me.Ready),this.computedStyleAndIframeDisplay()};i.url&&this.iframe.src!==i.url&&(this.src_url_equal_anchor||(this.src_url_equal_anchor=document.createElement("a")),this.src_url_equal_anchor.href=i.url,this.src_url_equal_anchor.href!==this.iframe.src&&(this.iframe.src=i.url)),this.iframe.width=`${i.width}px`,this.iframe.height=`${i.height}px`,this.sideEffectManager.addEventListener(this.iframe,"load",e,void 0,me.Load)}listenDisplayerState(){this.isReplay&&(this.displayer._phase===f.PlayerPhase.Playing&&this.computedStyleAndIframeDisplay(),this.sideEffectManager.add(()=>(this.displayer.callbacks.on("onPhaseChanged",this.onPhaseChangedListener),()=>this.displayer.callbacks.off("onPhaseChanged",this.onPhaseChangedListener)),me.DisplayerState)),this.computedStyleAndIframeDisplay()}computedStyleAndIframeDisplay(){this.computedStyle(this.displayer.state),this.computedIframeDisplay(this.displayer.state,this.attributes)}listenDisplayerCallbacks(){this.displayer.callbacks.on(this.callbackName,this.stateChangeListener)}get callbackName(){return this.isReplay?"onPlayerStateChanged":"onRoomStateChanged"}computedStyle(i){const e=this.manager.cameraState,t=this.attributes.width||1280,s=this.attributes.height||720;if(this.iframe){const{width:r,height:n,scale:a,centerX:o,centerY:h}=e,c=this.rootRect||{x:0,y:0},l=`${r/2+c.x}px`,u=`${n/2+c.y}px`,d=`transform-origin: ${l} ${u};`,m=(r-t)/2*a,g=(n-s)/2*a,b=-(o*a)+m,M=-(h*a)+g,N=`transform: translate(${b}px,${M}px) scale(${a}, ${a});`,W=["position: absolute;","border: 0.1px solid rgba(0,0,0,0);","top: 0px;","left: 0px;",d,N];this.cssList=W,this.computedZindex(),this.updateStyle()}}computedIframeDisplay(i,e){this.inDisplaySceneDir?j.emitter.emit("DispayIframe"):j.emitter.emit("HideIframe")}computedZindex(){const i="z-index: -1;",e=this.cssList.findIndex(t=>t===i);e!==-1&&this.cssList.splice(e,1),(!this.isClicker()||this.isDisableInput)&&this.cssList.push(i)}updateStyle(){this.iframe.style.cssText=this.cssList.join(" ")}get iframeOrigin(){if(this.iframe)try{return new URL(this.iframe.src).origin}catch(i){console.warn(i)}}messageListener(i){if(re("<<<",JSON.stringify(i.data)),i.origin!==this.iframeOrigin)return;const e=i.data;switch(e.kind){case"SetAttributes":{this.handleSetAttributes(e);break}case"RegisterMagixEvent":{this.handleRegisterMagixEvent(e);break}case"RemoveMagixEvent":{this.handleRemoveMagixEvent(e);break}case"DispatchMagixEvent":{this.handleDispatchMagixEvent(e);break}case"RemoveAllMagixEvent":{this.handleRemoveAllMagixEvent();break}case"NextPage":{this.handleNextPage();break}case"PrevPage":{this.handlePrevPage();break}case"SDKCreate":{this.handleSDKCreate();break}case"SetPage":{this.handleSetPage(e);break}case"GetAttributes":{this.handleGetAttributes();break}case"PageTo":{this.handlePageTo(e);break}default:{re(`${e.kind} not allow event.`);break}}}handleSDKCreate(){this.postMessage({kind:"Init",payload:{attributes:this.attributes,roomState:this.displayer.state,currentPage:this.currentPage,observerId:this.displayer.observerId}})}handleDispatchMagixEvent(i){const e=i.payload;this.appManager.safeDispatchMagixEvent(e.event,e.payload)}handleSetAttributes(i){this.setAttributes(i.payload)}handleRegisterMagixEvent(i){const e=i.payload,t=s=>{s.authorId!==this.displayer.observerId&&this.postMessage({kind:"ReciveMagixEvent",payload:s})};this.magixEventMap.set(e,t),this.displayer.addMagixEventListener(e,t)}handleRemoveMagixEvent(i){const e=i.payload,t=this.magixEventMap.get(e);this.displayer.removeMagixEventListener(e,t)}handleNextPage(){this.manager.canOperate&&(this.manager.nextPage(),this.dispatchMagixEvent("NextPage",{}))}handlePrevPage(){this.manager.canOperate&&(this.manager.prevPage(),this.dispatchMagixEvent("PrevPage",{}))}handlePageTo(i){if(this.manager.canOperate){const e=i.payload;if(!Number.isSafeInteger(e)||e<=0)return;this.manager.setMainViewSceneIndex(e-1),this.dispatchMagixEvent("PageTo",e-1)}}handleRemoveAllMagixEvent(){this.magixEventMap.forEach((i,e)=>{this.displayer.removeMagixEventListener(e,i)}),this.magixEventMap.clear()}handleGetAttributes(){this.postMessage({kind:"GetAttributes",payload:this.attributes})}postMessage(i){var e;this.iframe&&((e=this.iframe.contentWindow)==null||e.postMessage(JSON.parse(JSON.stringify(i)),"*"))}dispatchMagixEvent(i,e){this.manager.canOperate&&(this.setAttributes({lastEvent:{name:i,payload:e}}),this.displayer.dispatchMagixEvent(i,e))}get currentIndex(){return this.manager.mainViewSceneIndex}get currentPage(){return this.currentIndex+1}get totalPage(){return this.manager.mainViewScenesLength}get readonly(){return!this.displayer.isWritable}get inDisplaySceneDir(){return this.manager.mainViewSceneDir===this.attributes.displaySceneDir}isClicker(){if(this.readonly)return!1;const i=this.displayer.state.memberState.currentApplianceName;return this.allowAppliances.includes(i)}get isDisableInput(){return"disableDeviceInputs"in this.displayer?this.displayer.disableDeviceInputs:!0}};let Ee=j;Ee.kind="IframeBridge";Ee.hiddenClass="netless-iframe-brdige-hidden";Ee.emitter=new ve.default;Ee.displayer=null;Ee.alreadyCreate=!1;class Zn extends ve.default{_inject(e){this.context=e}}class $s{constructor(e){this.extends=new Map,this.context={manager:this,windowManager:e.windowManager,internalEmitter:e.internalEmitter},e.container&&this.refreshContainer(e.container)}refreshContainer(e){this.context.windowManagerContainer=e,this.extends.forEach(t=>{t._inject(this.context)})}hasRegister(e){return J.appClasses.has(e)}use(e){this.extends.set(e.kind,e),e._inject(this.context),e.onCreate()}destroy(){this.extends.forEach(e=>{this.extends.delete(e.kind),e.onDestroy()})}}function Fn(i,e){return e===void 0?i:()=>({...typeof i=="function"?i():i,...e})}function Gn(i,e){if(i.kind&&e&&Object.keys(e).includes(i.kind))switch(i.kind){case"AppManager":return(e==null?void 0:e.AppManager)||ot;case"BoxManager":return(e==null?void 0:e.BoxManager)||it;case"AttributesDelegate":return(e==null?void 0:e.AttributesDelegate)||at;case"CursorManager":return(e==null?void 0:e.CursorManager)||rt;case"AppProxy":return(e==null?void 0:e.AppProxy)||nt;case"AppContext":return(e==null?void 0:e.AppContext)||qe;case"TeleBoxManager":return(e==null?void 0:e.TeleBoxManager)||tt;case"TeleBoxCollector":return(e==null?void 0:e.TeleBoxCollector)||Le;default:return i}return i}const Zt="Slide",Ft=de.Presentation,Qn=1,Yn=4;function qi(i){return typeof i=="number"&&Number.isFinite(i)&&i>=Qn&&i<=Yn}const Zs=new Vn({emitter:A}),C=class extends f.InvisiblePlugin{constructor(i){super(i),this.version="1.0.17-beta.2",this.dependencies={dependencies:{"@juggle/resize-observer":"^3.3.1","@netless/telebox-insider":"0.3.0",emittery:"^0.9.2",lodash:"^4.17.21","p-retry":"^4.6.1",uuid:"^7.0.3","video.js":">=7"},peerDependencies:{jspdf:"2.5.1","white-web-sdk":"^2.16.55"},devDependencies:{"@hyrious/dts":"^0.2.2","@netless/app-docs-viewer":"^0.2.19","@netless/app-media-player":"0.1.4","@netless/app-presentation":"^0.1.10","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-url":"^6.1.0","@sveltejs/vite-plugin-svelte":"1.0.0-next.30","@tsconfig/svelte":"^2.0.1","@types/debug":"^4.1.7","@types/lodash":"^4.14.182","@types/lodash-es":"^4.17.4","@types/uuid":"^8.3.1","@typescript-eslint/eslint-plugin":"^4.30.0","@typescript-eslint/parser":"^4.30.0","@vitest/ui":"^0.14.1",cypress:"^8.7.0",dotenv:"^10.0.0",eslint:"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-plugin-svelte3":"^3.2.0",jsdom:"^19.0.0",jspdf:"^2.5.1",less:"^4.1.1",prettier:"^2.3.2","prettier-plugin-svelte":"^2.4.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-styles":"^3.14.1","side-effect-manager":"0.1.5",svelte:"^3.42.4",typescript:"^4.5.5",vite:"^2.9.9",vitest:"^0.14.1","white-web-sdk":"^2.16.55"}},this.emitter=L,this.viewMode=f.ViewMode.Broadcaster,this.isReplay=f.isPlayer(this.displayer),this._cursorUIDs=[],this.containerSizeRatio=C.containerSizeRatio,this.onMainViewScenePathChangeHandler=e=>{const t=this.mainView.divElement;if(t){const s=t.querySelector(".background img");if(s){const r=s==null?void 0:s.getBoundingClientRect(),n=window.getComputedStyle(s),a=(r==null?void 0:r.width)>0&&(r==null?void 0:r.height)>0&&n.display!=="none",o=this.mainView.camera;console.log("[window-manager] backgroundImageVisible:"+a+" camera:"+JSON.stringify(o));return}console.log("[window-manager] onMainViewScenePathChange scenePath:"+e+" backgroundImageVisible is not found");return}console.log("[window-manager] onMainViewScenePathChange scenePath:"+e+" mainViewElement is not found")},C.displayer=i.displayer,window.NETLESS_DEPS={dependencies:{"@juggle/resize-observer":"^3.3.1","@netless/telebox-insider":"0.3.0",emittery:"^0.9.2",lodash:"^4.17.21","p-retry":"^4.6.1",uuid:"^7.0.3","video.js":">=7"},peerDependencies:{jspdf:"2.5.1","white-web-sdk":"^2.16.55"},devDependencies:{"@hyrious/dts":"^0.2.2","@netless/app-docs-viewer":"^0.2.19","@netless/app-media-player":"0.1.4","@netless/app-presentation":"^0.1.10","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-url":"^6.1.0","@sveltejs/vite-plugin-svelte":"1.0.0-next.30","@tsconfig/svelte":"^2.0.1","@types/debug":"^4.1.7","@types/lodash":"^4.14.182","@types/lodash-es":"^4.17.4","@types/uuid":"^8.3.1","@typescript-eslint/eslint-plugin":"^4.30.0","@typescript-eslint/parser":"^4.30.0","@vitest/ui":"^0.14.1",cypress:"^8.7.0",dotenv:"^10.0.0",eslint:"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-plugin-svelte3":"^3.2.0",jsdom:"^19.0.0",jspdf:"^2.5.1",less:"^4.1.1",prettier:"^2.3.2","prettier-plugin-svelte":"^2.4.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-styles":"^3.14.1","side-effect-manager":"0.1.5",svelte:"^3.42.4",typescript:"^4.5.5",vite:"^2.9.9",vitest:"^0.14.1","white-web-sdk":"^2.16.55"}},this.emitter.on("mainViewScenePathChange",this.onMainViewScenePathChangeHandler)}get Logger(){return this._roomLogger}static onCreate(i){C._resolve(i)}static async mount(i,e){var c;const t=i.room;C.container=i.container,C.supportAppliancePlugin=i.supportAppliancePlugin;const s=i.containerSizeRatio,r=i.debug,n=i.cursor;C.params=i,C.extendClass=e,C.displayer=i.room,Qa();let a;if(f.isRoom(t)){if(t.phase!==f.RoomPhase.Connected)throw new Error("[WindowManager]: Room only Connected can be mount");t.phase===f.RoomPhase.Connected&&t.isWritable&&(t.disableSerialization=!1),a=await this.initManager(t),a&&(a._roomLogger=t.logger,a.attributesDeboundceLog=new Fa(a._roomLogger,"attributes",300),C.registered.size>0&&a._roomLogger.info(`[WindowManager] registered apps: ${JSON.stringify(Array.from(C.registered.keys()))}`))}if(C.isCreated)throw new Error("[WindowManager]: Already created cannot be created again");if(this.debug=Boolean(r),a!=null&&a._roomLogger?a._roomLogger.info(`[WindowManager] Already insert room version: ${a.version}`):re("Already insert room",a),f.isRoom(this.displayer)){if(!a)throw new Error("[WindowManager]: init InvisiblePlugin failed")}else await ts.default(async l=>{if(a=t.getInvisiblePlugin(C.kind),!a)throw re(`manager is empty. retrying ${l}`),new Error},{retries:10,maxTimeout:5e3});if(!a)throw new Error("[WindowManager]: create manager failed");a.builtinAppOptions=i.builtinAppOptions,s&&(C.containerSizeRatio=s),await a.ensureAttributes();const o=ge(ot,C.extendClass),h=ge(rt,C.extendClass);a._fullscreen=i.fullscreen,a.appManager=new o(a),a.appManager.polling=i.polling||!1,a._pageState=new En(a.appManager),a.cursorManager=new h(a.appManager,Boolean(n),i.cursorOptions,i.applianceIcons),a.extendPluginManager=new $s({internalEmitter:A,windowManager:a}),s&&(a.containerSizeRatio=s),i.container&&a.bindContainer(i.container),jn(t,a),A.emit("onCreated"),C.isCreated=!0,a._roomLogger&&a.attributes.registered&&Object.keys(a.attributes.registered).length>0&&a._roomLogger.info(`[WindowManager] attributes registered apps: ${JSON.stringify(Array.from(Object.keys(a.attributes.registered)))}`);try{await cr()}catch(l){(c=a._roomLogger)==null||c.warn(`[WindowManager] indexedDB open failed: ${l.message}`),console.warn("[WindowManager]: indexedDB open failed"),console.log(l)}return a.emitter.on("mainViewScenePathChange",a.onMainViewScenePathChangeHandler),a}static initManager(i){return Ya(i)}static initContainer(i,e,t){const{chessboard:s,overwriteStyles:r,fullscreen:n}=t;C.container||(C.container=e);const{playground:a,wrapper:o,sizer:h,mainViewElement:c}=Ga(e);if(C.playground=a,s&&h.classList.add("netless-window-manager-chess-sizer"),n&&h.classList.add("netless-window-manager-fullscreen"),r){const l=document.createElement("style");l.textContent=r,a.appendChild(l)}return i.containerResizeObserver=Si.create(a,h,o,A),C.wrapper=o,C.sizer=h,c}static get registered(){return J.registered}bindContainer(i){var e,t,s,r,n,a;if(f.isRoom(this.displayer)&&this.room.phase!==f.RoomPhase.Connected)throw new ds;if(C.isCreated&&C.container)C.container.firstChild&&i.appendChild(C.container.firstChild);else if(C.params){const o=C.params,h=C.initContainer(this,i,o);this.boxManager&&this.boxManager.destroy();const c=Oa(this,L,A,ce,{collectorContainer:o.collectorContainer,collectorStyles:o.collectorStyles,prefersColorScheme:o.prefersColorScheme,useBoxesStatus:o.useBoxesStatus});this.boxManager=c,this.appManager&&(this.appManager.useBoxesStatus=o.useBoxesStatus||!1,this.appManager.setBoxManager(c)),this.bindMainView(h,o.disableCameraTransform),C.wrapper&&((e=this.cursorManager)==null||e.setupWrapper(C.wrapper))}A.emit("updateManagerRect"),(t=this.appManager)==null||t.refresh(),(s=this.appManager)==null||s.resetMaximized(),(r=this.appManager)==null||r.resetMinimized(),(n=this.appManager)==null||n.displayerWritableListener(!this.room.isWritable),C.container=i,(a=this.extendPluginManager)==null||a.refreshContainer(i)}bindCollectorContainer(i){C.isCreated&&this.boxManager?this.boxManager.setCollectorContainer(i):C.params&&(C.params.collectorContainer=i)}static register(i){return J.register(i)}static unregister(i){return J.unregister(i)}resolveAppOptions(i,e){var s;const t=i===de.Presentation?(s=this.builtinAppOptions)==null?void 0:s.Presentation:void 0;return Fn(e,t)}async addApp(i){if(this.appManager)return this.appManager.rootDirRemoving?new Promise((e,t)=>{A.once("rootDirRemoved").then(async()=>{try{const s=await this._addApp(i);e(s)}catch(s){t(s.message)}})}):this._addApp(i);throw new te}async _addApp(i){var e,t,s;if(this.appManager){if(!i.kind||typeof i.kind!="string")throw new hs;i.src&&typeof i.src=="string"&&J.register({kind:i.kind,src:i.src});const r=await((e=J.appClasses.get(i.kind))==null?void 0:e());if(r&&((t=r.config)==null?void 0:t.singleton)&&this.appManager.appProxies.has(i.kind))throw new ns;const n=this.setupScenePath(i,this.appManager);return n===void 0?void 0:((s=i==null?void 0:i.options)!=null&&s.scenePath&&(i.options.scenePath=Br(i.options.scenePath)),await this.appManager.addApp(i,Boolean(n)))}else throw new te}setupScenePath(i,e){let t=!1;if(i.options){const{scenePath:s,scenes:r}=i.options;if(s){if(!Ar(s))throw new ls;const n=Object.keys(this.apps||{});for(const a of n){const o=e.store.getAppScenePath(a);if(o&&o===s){if(console.warn(`[WindowManager]: ScenePath "${s}" already opened`),this.boxManager){const h=this.boxManager.getTopBox();h&&(this.boxManager.setZIndex(a,h.zIndex+1,!1),this.boxManager.focusBox({appId:a},!1))}return}}}s&&r&&r.length>0&&(this.isDynamicPPT(r)?(t=!0,Pe(this.displayer)[s]||$e(this.room,s,r)):Pe(this.displayer)[s]||$e(this.room,s,[{name:r[0].name}])),s&&r===void 0&&$e(this.room,s,[{}])}return t}async setMainViewScenePath(i){this.appManager&&await this.appManager.setMainViewScenePath(i)}async setMainViewSceneIndex(i){this.appManager&&await this.appManager.setMainViewSceneIndex(i)}async nextPage(){if(this.appManager){const i=this.mainViewSceneIndex+1;return i>=this.mainViewScenesLength?(console.warn("[WindowManager]: current page is the last page"),!1):(await this.appManager.setMainViewSceneIndex(i),!0)}else return!1}async prevPage(){if(this.appManager){const i=this.mainViewSceneIndex-1;return i<0?(console.warn("[WindowManager]: current page is the first page"),!1):(await this.appManager.setMainViewSceneIndex(i),!0)}else return!1}async jumpPage(i){return this.appManager?i<0||i>=this.pageState.length?(console.warn(`[WindowManager]: index ${i} out of range`),!1):(await this.appManager.setMainViewSceneIndex(i),!0):!1}async addPage(i){if(this.appManager){const e=i==null?void 0:i.after,t=i==null?void 0:i.scene;if(e){const s=this.mainViewSceneIndex+1;this.room.putScenes(q,[t||{}],s)}else this.room.putScenes(q,[t||{}])}}async removePage(i){if(this.appManager){const e=i===void 0?this.pageState.index:i;return this.pageState.length===1?(console.warn("[WindowManager]: can not remove the last page"),!1):e<0||e>=this.pageState.length?(console.warn(`[WindowManager]: index ${i} out of range`),!1):this.appManager.removeSceneByIndex(e)}else return!1}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),A.emit("setReadonly",i)}switchMainViewToWriter(){var i;return(i=this.appManager)==null?void 0:i.mainViewProxy.mainViewClickHandler()}onAppDestroy(i,e){yr(`destroy-${i}`,e)}onAppEvent(i,e){return A.on(`custom-${i}`,e)}setViewMode(i){var e,t,s,r;(i===f.ViewMode.Broadcaster||i===f.ViewMode.Follower)&&(this.canOperate&&i===f.ViewMode.Broadcaster&&((e=this.appManager)==null||e.mainViewProxy.setCameraAndSize()),(t=this.appManager)==null||t.mainViewProxy.start()),i===f.ViewMode.Freedom&&((s=this.appManager)==null||s.mainViewProxy.stop()),this.viewMode=i,(r=this.appManager)==null||r.mainViewProxy.setViewMode(i)}setBoxState(i){if(!!this.canOperate)switch(i){case"normal":this.setMaximized(!1),this.setMinimized(!1);break;case"maximized":this.setMaximized(!0),this.setMinimized(!1);break;case"minimized":this.setMinimized(!0);break}}setMaximized(i){var e;!this.canOperate||(e=this.boxManager)==null||e.setMaximized(i,!1)}setMinimized(i){var e;!this.canOperate||(e=this.boxManager)==null||e.setMinimized(i,!1)}setBoxStatus(i,e){var t;!this.canOperate||(t=this.appManager)==null||t.store.setBoxStatus(i,e)}setLastNotMinimizedBoxStatus(i,e){var t;!this.canOperate||(t=this.appManager)==null||t.store.setLastNotMinimizedBoxStatus(i,e)}setFullscreen(i){var e;this._fullscreen!==i&&(this._fullscreen=i,(e=C.sizer)==null||e.classList.toggle("netless-window-manager-fullscreen",i),L.emit("fullscreenChange",i))}get cursorUIDs(){return this._cursorUIDs}setCursorUIDs(i){var e,t;if(this._cursorUIDs=i||[],this._cursorUIDs.length===0)(e=this._cursorUIDsStyleDOM)==null||e.remove();else{this._cursorUIDsStyleDOM||(this._cursorUIDsStyleDOM=document.createElement("style")),(t=C.playground)==null||t.appendChild(this._cursorUIDsStyleDOM);let s="[data-cursor-uid] { display: none }";for(const r of this._cursorUIDs)s+=`
|
|
17
17
|
[data-cursor-uid="${r}"] { display: flex }`;this._cursorUIDsStyleDOM.textContent=s}}get mainView(){if(this.appManager)return this.appManager.mainViewProxy.view;throw new te}get camera(){if(this.appManager)return this.appManager.mainViewProxy.view.camera;throw new te}get cameraState(){if(this.appManager)return this.appManager.mainViewProxy.cameraState;throw new te}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 te}get boxStatus(){if(this.appManager)return this.appManager.store.getBoxesStatus();throw new te}get lastNotMinimizedBoxStatus(){if(this.appManager)return this.appManager.store.getLastNotMinimizedBoxesStatus();throw new te}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 te}get focused(){return this.attributes.focus}get focusedView(){var i,e;return((e=(i=this.appManager)==null?void 0:i.focusApp)==null?void 0:e.view)||this.mainView}get polling(){var i;return((i=this.appManager)==null?void 0:i.polling)||!1}set polling(i){this.appManager&&(this.appManager.polling=i)}get cursorStyle(){var i;return((i=this.cursorManager)==null?void 0:i.style)||"default"}set cursorStyle(i){if(!this.cursorManager)throw new Error("[WindowManager]: cursor is not enabled, please set { cursor: true }.");this.cursorManager.style=i}get mainViewSceneIndex(){var i;return((i=this._pageState)==null?void 0:i.index)||0}get mainViewSceneDir(){var i;if(this.appManager)return(i=this.appManager)==null?void 0:i.getMainViewSceneDir();throw new te}get topApp(){var i,e;return(e=(i=this.boxManager)==null?void 0:i.getTopBox())==null?void 0:e.id}get mainViewScenesLength(){var i;return((i=this._pageState)==null?void 0:i.length)||0}get canRedoSteps(){var i;return((i=this.focusedView)==null?void 0:i.canRedoSteps)||0}get canUndoSteps(){var i;return((i=this.focusedView)==null?void 0:i.canUndoSteps)||0}get sceneState(){if(this.appManager)return this.appManager.sceneState;throw new te}get pageState(){if(this._pageState)return this._pageState.toObject();throw new te}get fullscreen(){return Boolean(this._fullscreen)}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)}dispatchDocsEvent(i,e={}){var u;const t=e.appId||this.focused;if(!t)return console.warn("not found "+(e.appId||"focused app")),!1;const s=this.queryOne(t);if(!s)return console.warn("not found app with id "+t),!1;const r=t.startsWith(`${de.DocsViewer}-`)||s.kind===de.DocsViewer,n=t.startsWith(`${Ft}-`)||s.kind===Ft,a=t.startsWith(`${Zt}-`)||s.kind===Zt;let o=s.kind;if(r?o=de.DocsViewer:n?o=Ft:a&&(o=Zt),!C.registered.has(o))return console.warn("not registered app kind "+o),!1;let h,c,l;if(r){const d=(u=s.box)==null?void 0:u.$footer;if(!d)return console.warn("not found app with id "+t),!1;const m=g=>{g&&g.dispatchEvent(new MouseEvent("click"))};switch(i){case"prevPage":case"prevStep":m(d.querySelector('button[class$="btn-page-back"]'));break;case"nextPage":case"nextStep":m(d.querySelector('button[class$="btn-page-next"]'));break;case"jumpToPage":if(h=e.page,c=d.querySelector('input[class$="page-number-input"]'),!c||typeof h!="number")return console.warn("failed to jump"+(h?" to page "+h:"")),!1;c.value=""+h,c.dispatchEvent(new InputEvent("change"));break;case"scalePage":return console.warn("not supported event "+i+" for app kind "+o),!1;default:return console.warn("unknown event "+i),!1}return!0}if(n){const d=s.appResult;if(!d)return console.warn("not found app with id "+t),!1;switch(i){case"prevPage":case"prevStep":return d.prevPage();case"nextPage":case"nextStep":return d.nextPage();case"jumpToPage":return h=e.page,typeof h!="number"?(console.warn("failed to jump"+(h?" to page "+h:"")),!1):d.jumpPage(h-1);case"scalePage":if(l=e.scale,!qi(l))return console.warn("failed to scale, scale should be a number from 1 to 4"),!1;try{return d.moveCamera({centerX:0,centerY:0,scale:d.getOriginScale()*l}),!0}catch(m){return console.warn(m),!1}default:return console.warn("unknown event "+i),!1}}if(a){const d=s.appResult;if(!d)return console.warn("not found app with id "+t),!1;switch(i){case"prevPage":return d.prevPage();case"nextPage":return d.nextPage();case"prevStep":return d.prevStep();case"nextStep":return d.nextStep();case"jumpToPage":return h=e.page,typeof h!="number"?(console.warn("failed to jump"+(h?" to page "+h:"")),!1):d.jumpToPage(h);case"scalePage":return l=e.scale,qi(l)?(d.scaleView(l),!0):(console.warn("failed to scale, scale should be a number from 1 to 4"),!1);default:return console.warn("unknown event "+i),!1}}return console.warn("not supported app kind "+s.kind),!1}async closeApp(i){var e;return(e=this.appManager)==null?void 0:e.closeApp(i)}focusApp(i){var t,s,r;const e=(t=this.boxManager)==null?void 0:t.getBox(i);e&&((s=this.boxManager)==null||s.focusBox({appId:i},!1),((r=this.boxManager)==null?void 0:r.teleBoxManager).makeBoxTop(e,!1))}moveCamera(i){const e=w.omit(i,["animationMode"]),t={...this.mainView.camera};w.isEqual({...t,...e},t)||(this.mainView.moveCamera(i),setTimeout(()=>{var s;(s=this.appManager)==null||s.mainViewProxy.setCameraAndSize()},500))}moveCameraToContain(i){this.mainView.moveCameraToContain(i),setTimeout(()=>{var e;(e=this.appManager)==null||e.mainViewProxy.setCameraAndSize()},500)}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,r,n,a;(i=this.attributesDeboundceLog)==null||i.destroy(),this.attributesDeboundceLog=void 0,(e=this.containerResizeObserver)==null||e.disconnect(),(t=this.appManager)==null||t.destroy(),(s=this.cursorManager)==null||s.destroy(),(r=this.extendPluginManager)==null||r.destroy(),C.container=void 0,C.wrapper=void 0,C.sizer=void 0,C.isCreated=!1,C.playground&&((n=C.playground.parentNode)==null||n.removeChild(C.playground)),C.params=void 0,this.emitter.off("mainViewScenePathChange",this.onMainViewScenePathChangeHandler),(a=this._iframeBridge)==null||a.destroy(),this._iframeBridge=void 0,re("Destroyed")}bindMainView(i,e){var t;this.appManager&&(this.appManager.bindMainView(i,Boolean(e)),(t=this.cursorManager)==null||t.setMainViewDivElement(i))}get canOperate(){return f.isRoom(this.displayer)?this.displayer.isWritable&&this.displayer.phase===f.RoomPhase.Connected:!1}get room(){return this.displayer}safeSetAttributes(i){this.canOperate&&(this.setAttributes(i),this.attributesDeboundceLog&&this.attributesDeboundceLog.logDebouncedShallowMerge("safeSetAttributes",i))}safeUpdateAttributes(i,e){this.canOperate&&(this.updateAttributes(i,e),this.attributesDeboundceLog&&this.attributesDeboundceLog.logDebouncedUpdateAttributes(i,e))}setPrefersColorScheme(i){var e,t;(t=(e=this.appManager)==null?void 0:e.boxManager)==null||t.setPrefersColorScheme(i)}cleanCurrentScene(){var i,e;re("clean current scene"),(i=this.focusedView)==null||i.cleanCurrentScene(),this.Logger&&this.Logger.info(`[WindowManager]: cleanCurrentScene ${(e=this.focusedView)==null?void 0:e.focusScenePath}`)}redo(){var i;return((i=this.focusedView)==null?void 0:i.redo())||0}undo(){var i;return((i=this.focusedView)==null?void 0:i.undo())||0}delete(){var i,e;(i=this.focusedView)==null||i.delete(),this.Logger&&this.Logger.info(`[WindowManager]: delete ${(e=this.focusedView)==null?void 0:e.focusScenePath}`)}copy(){var i;(i=this.focusedView)==null||i.copy()}paste(){var i;(i=this.focusedView)==null||i.paste()}duplicate(){var i;(i=this.focusedView)==null||i.duplicate()}insertText(i,e,t){var s;return((s=this.focusedView)==null?void 0:s.insertText(i,e,t))||""}insertImage(i){var e;return(e=this.focusedView)==null?void 0:e.insertImage(i)}completeImageUpload(i,e){var t;return(t=this.focusedView)==null?void 0:t.completeImageUpload(i,e)}lockImage(i,e){var t;return(t=this.focusedView)==null?void 0:t.lockImage(i,e)}lockImages(i){var e;return(e=this.focusedView)==null?void 0:e.lockImages(i)}refresh(){var i;this._refresh(),(i=this.appManager)==null||i.dispatchInternalEvent(R.Refresh)}_refresh(){var i,e;(i=this.appManager)==null||i.mainViewProxy.rebind(),C.container&&this.bindContainer(C.container),(e=this.appManager)==null||e.refresher.refresh()}setContainerSizeRatio(i){if(!w.isNumber(i)||!(i>0))throw new Error(`[WindowManager]: updateContainerSizeRatio error, ratio must be a positive number. but got ${i}`);C.containerSizeRatio=i,this.containerSizeRatio=i,A.emit("containerSizeRatioUpdate",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://")}async ensureAttributes(){w.isNull(this.attributes)&&await as(50),w.isObject(this.attributes)&&(this.attributes[Q.Apps]||this.safeSetAttributes({[Q.Apps]:{}}),this.attributes[Q.Cursors]||this.safeSetAttributes({[Q.Cursors]:{}}),this.attributes._mainScenePath||this.safeSetAttributes({_mainScenePath:ss}),this.attributes._mainSceneIndex||this.safeSetAttributes({_mainSceneIndex:0}),this.attributes[Q.Registered]||this.safeSetAttributes({[Q.Registered]:{}}),this.attributes[Q.IframeBridge]||this.safeSetAttributes({[Q.IframeBridge]:{}}))}getIframeBridge(){if(!this.appManager)throw new Error("[WindowManager]: should call getIframeBridge() after await mount()");return this._iframeBridge||(this._iframeBridge=new Ee(this,this.appManager)),this._iframeBridge}useExtendPlugin(i){var e;(e=this.extendPluginManager)==null||e.use(i)}};let P=C;P.kind="WindowManager";P.debug=!1;P.containerSizeRatio=nr;P.isCreated=!1;P._resolve=i=>{};Wn();exports.AppContext=qe;exports.AppCreateError=ns;exports.AppManager=ot;exports.AppManagerNotInitError=te;exports.AppNotRegisterError=Dr;exports.AppProxy=nt;exports.AttributesDelegate=at;exports.BindContainerRoomPhaseInvalidError=ds;exports.BoxManager=it;exports.BoxManagerNotFoundError=us;exports.BoxNotCreatedError=cs;exports.BuiltinApps=de;exports.CursorManager=rt;exports.ExtendPlugin=Zn;exports.ExtendPluginManager=$s;exports.InvalidScenePath=ls;exports.ParamsInvalidError=hs;exports.TeleBoxCollector=Le;exports.TeleBoxManager=tt;exports.WhiteWebSDKInvalidError=os;exports.WindowManager=P;exports.calculateNextIndex=xi;exports.getExtendClass=Gn;exports.reconnectRefresher=Zs;
|
|
18
18
|
//# sourceMappingURL=index.js.map
|