@netless/app-slide 0.2.105-beta.3 → 0.2.106-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.iife.js CHANGED
@@ -8071,5 +8071,5 @@ geometry=${JSON.stringify(s)}`;let l=this.players.get(a);if(!l){const h={};l=new
8071
8071
  box-shadow: 1px 0 2px rgba(0, 0, 0, 0.2);
8072
8072
  cursor: grab;
8073
8073
  `,this.addThumbDragListener(B,"vertical",L,A),M.appendChild(B),this.container.appendChild(M),this.verticalScrollBar=M}addThumbDragListener(T,m,M,w){let A=0,L=0;const B=(wt,bt)=>{m==="horizontal"?this.isDraggingHorizontal=!0:this.isDraggingVertical=!0,A=m==="horizontal"?wt:bt,L=m==="horizontal"?parseFloat(T.style.left)||0:parseFloat(T.style.top)||0,T.style.cursor="grabbing"},G=(wt,bt)=>{var Z,V;if(!(m==="horizontal"?this.isDraggingHorizontal:this.isDraggingVertical))return;const k=(m==="horizontal"?wt:bt)-A;let X=L+k;X=Math.max(1,Math.min(w-M-1,X)),m==="horizontal"?T.style.left=`${X}px`:T.style.top=`${X}px`;const O=w-M-2;let z=0;O>0&&(z=(X-1)/O,z=Math.max(0,Math.min(1,z))),m==="horizontal"?this.resizableContainer.handleNormalizeTranslate(z,(Z=this.resizableContainer.translateY)!=null?Z:.5,{triggerScrollBar:!1,triggerSync:!0}):this.resizableContainer.handleNormalizeTranslate((V=this.resizableContainer.translateX)!=null?V:.5,z,{triggerScrollBar:!1,triggerSync:!0})},W=()=>{m==="horizontal"?this.isDraggingHorizontal=!1:this.isDraggingVertical=!1,T.style.cursor="grab"},K=wt=>{B(wt.clientX,wt.clientY),wt.preventDefault()},et=wt=>{G(wt.clientX,wt.clientY)},at=()=>{W()};this.addTrackedListener(T,"mousedown",K),this.addTrackedListener(document,"mousemove",et),this.addTrackedListener(document,"mouseup",at)}destroy(){this.clearScrollBars()}}class X_{constructor(T,m,M,w){this.onScaleChanged=null,this.onLayoutUpdated=null,this.scaleChangedListeners=new Set,this.whiteboardContainer=null,this.slide=null,this.scale=1,this.slideWidth=1,this.slideHeight=1,this.scrollBar=null,this.translateX=.5,this.translateY=.5,this.updateSlideSize=()=>{if(this.slide){let A=!1;(this.slideWidth!==this.slide.width||this.slideHeight!==this.slide.height)&&(this.slideWidth=this.slide.width,this.slideHeight=this.slide.height,A=!0),A&&this.updateResizableContainer()}},this.enableResize=M,this.parent=T,this.context=m,this.root=document.createElement("div"),this.root.style.width="100%",this.root.style.height="100%",this.root.style.overflow="hidden",this.parent.appendChild(this.root),this.scrollContainer=document.createElement("div"),this.scrollContainer.setAttribute("data-resizable-scroll","true"),this.scrollContainer.style.width="100%",this.scrollContainer.style.height="100%",this.scrollContainer.style.position="relative",this.scrollContainer.style.overflow="hidden",this.container=document.createElement("div"),this.container.style.position="relative",this.container.setAttribute("data-resizable-container","true"),this.scrollContainer.appendChild(this.container),this.root.appendChild(this.scrollContainer),this.enableResize&&(this.scrollBar=new W_(this.root,this))}getTranslate(){return{x:this.translateX,y:this.translateY}}getScale(){return this.scale}addScaleChangedListener(T){return this.scaleChangedListeners.add(T),()=>{this.scaleChangedListeners.delete(T)}}renderScrollBar(T,m,M,w){this.scrollBar&&this.scrollBar.render(T,M,m,w)}setSlideObject(T){this.slide=T,this.slide.on("renderEnd",this.updateSlideSize)}updateResizableContainer(){var m,M;this.cancelScheduledLayoutUpdate();const T=this.scrollContainer.getBoundingClientRect();if(this.container.style.width=`${T.width*this.scale}px`,this.container.style.height=`${T.height*this.scale}px`,this.whiteboardContainer&&this.enableResize){const w=this.whiteboardContainer.getBoundingClientRect();if(w.width/w.height>this.slideWidth/this.slideHeight){const A=w.height*this.slideWidth/this.slideHeight,L=(w.width-A)/2;this.whiteboardContainer.style.clipPath=`inset(0px ${L}px 0px ${L}px)`}else if(w.width/w.height<this.slideWidth/this.slideHeight){const A=w.width*this.slideHeight/this.slideWidth,L=(w.height-A)/2;this.whiteboardContainer.style.clipPath=`inset(${L}px 0px ${L}px 0px)`}}this.renderScrollBar(T.width,T.width*this.scale,T.height,T.height*this.scale),this.handleNormalizeTranslate(this.translateX,this.translateY,{triggerScrollBar:!0,triggerSync:!1,force:!0}),(m=this.slide)==null||m.notifyFrameResize(),(M=this.onLayoutUpdated)==null||M.call(this)}handleNormalizeTranslate(T,m,M){var G;if(Math.abs(T-this.translateX)<.001&&Math.abs(m-this.translateY)<.001&&!M.triggerSync&&!M.force)return;const w=this.scrollContainer.getBoundingClientRect(),A=this.container.getBoundingClientRect(),L=-T*(A.width-w.width),B=-m*(A.height-w.height);this.translateX=T,this.translateY=m,this.container.style.transform=`translate(${L}px, ${B}px)`,M.triggerScrollBar&&((G=this.scrollBar)==null||G.handleNormalizeTranslate(T,m)),M.triggerSync&&this.enableResize&&this.context.getIsWritable()&&this.context.storage.setState({translateX:this.translateX,translateY:this.translateY})}scaleContainer(T){var m;if(!(Math.abs(this.scale-T)<.001||!this.enableResize)){if(T>1?(this.scrollContainer.style.width="calc(100% - 6px)",this.scrollContainer.style.height="calc(100% - 6px)"):(this.scrollContainer.style.width="100%",this.scrollContainer.style.height="100%"),T=this.enableResize?T:1,this.scale=T,this.enableResize){(m=this.onScaleChanged)==null||m.call(this,this.scale);for(const M of this.scaleChangedListeners)M(this.scale)}this.layoutFrameId===void 0&&(this.layoutFrameId=requestAnimationFrame(()=>{this.layoutFrameId=void 0,this.updateResizableContainer()}))}}cancelScheduledLayoutUpdate(){this.layoutFrameId!==void 0&&(cancelAnimationFrame(this.layoutFrameId),this.layoutFrameId=void 0)}addSlideContainer(T){this.container.appendChild(T)}addWhiteboardContainer(T){this.container.appendChild(T),this.whiteboardContainer=T}getCurrentScale(){return this.scale}destroy(T){var m;this.cancelScheduledLayoutUpdate(),this.onLayoutUpdated=null,this.scaleChangedListeners.clear(),(m=this.scrollBar)==null||m.destroy()}}var os=[],Y_=function(){return os.some(function(x){return x.activeTargets.length>0})},q_=function(){return os.some(function(x){return x.skippedTargets.length>0})},Op="ResizeObserver loop completed with undelivered notifications.",J_=function(){var x;typeof ErrorEvent=="function"?x=new ErrorEvent("error",{message:Op}):(x=document.createEvent("Event"),x.initEvent("error",!1,!1),x.message=Op),window.dispatchEvent(x)},Ea;(function(x){x.BORDER_BOX="border-box",x.CONTENT_BOX="content-box",x.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box"})(Ea||(Ea={}));var ss=function(x){return Object.freeze(x)},$_=function(){function x(T,m){this.inlineSize=T,this.blockSize=m,ss(this)}return x}(),Lp=function(){function x(T,m,M,w){return this.x=T,this.y=m,this.width=M,this.height=w,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,ss(this)}return x.prototype.toJSON=function(){var T=this,m=T.x,M=T.y,w=T.top,A=T.right,L=T.bottom,B=T.left,G=T.width,W=T.height;return{x:m,y:M,top:w,right:A,bottom:L,left:B,width:G,height:W}},x.fromRect=function(T){return new x(T.x,T.y,T.width,T.height)},x}(),Cu=function(x){return x instanceof SVGElement&&"getBBox"in x},Np=function(x){if(Cu(x)){var T=x.getBBox(),m=T.width,M=T.height;return!m&&!M}var w=x,A=w.offsetWidth,L=w.offsetHeight;return!(A||L||x.getClientRects().length)},Dp=function(x){var T;if(x instanceof Element)return!0;var m=(T=x==null?void 0:x.ownerDocument)===null||T===void 0?void 0:T.defaultView;return!!(m&&x instanceof m.Element)},K_=function(x){switch(x.tagName){case"INPUT":if(x.type!=="image")break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1},Aa=typeof window!="undefined"?window:{},Ll=new WeakMap,Fp=/auto|scroll/,Z_=/^tb|vertical/,Q_=/msie|trident/i.test(Aa.navigator&&Aa.navigator.userAgent),Qr=function(x){return parseFloat(x||"0")},Ds=function(x,T,m){return x===void 0&&(x=0),T===void 0&&(T=0),m===void 0&&(m=!1),new $_((m?T:x)||0,(m?x:T)||0)},Bp=ss({devicePixelContentBoxSize:Ds(),borderBoxSize:Ds(),contentBoxSize:Ds(),contentRect:new Lp(0,0,0,0)}),kp=function(x,T){if(T===void 0&&(T=!1),Ll.has(x)&&!T)return Ll.get(x);if(Np(x))return Ll.set(x,Bp),Bp;var m=getComputedStyle(x),M=Cu(x)&&x.ownerSVGElement&&x.getBBox(),w=!Q_&&m.boxSizing==="border-box",A=Z_.test(m.writingMode||""),L=!M&&Fp.test(m.overflowY||""),B=!M&&Fp.test(m.overflowX||""),G=M?0:Qr(m.paddingTop),W=M?0:Qr(m.paddingRight),K=M?0:Qr(m.paddingBottom),et=M?0:Qr(m.paddingLeft),at=M?0:Qr(m.borderTopWidth),wt=M?0:Qr(m.borderRightWidth),bt=M?0:Qr(m.borderBottomWidth),D=M?0:Qr(m.borderLeftWidth),P=et+W,k=G+K,X=D+wt,O=at+bt,z=B?x.offsetHeight-O-x.clientHeight:0,Z=L?x.offsetWidth-X-x.clientWidth:0,V=w?P+X:0,Mt=w?k+O:0,Ht=M?M.width:Qr(m.width)-V-Z,st=M?M.height:Qr(m.height)-Mt-z,U=Ht+P+Z+X,F=st+k+z+O,lt=ss({devicePixelContentBoxSize:Ds(Math.round(Ht*devicePixelRatio),Math.round(st*devicePixelRatio),A),borderBoxSize:Ds(U,F,A),contentBoxSize:Ds(Ht,st,A),contentRect:new Lp(et,G,Ht,st)});return Ll.set(x,lt),lt},Up=function(x,T,m){var M=kp(x,m),w=M.borderBoxSize,A=M.contentBoxSize,L=M.devicePixelContentBoxSize;switch(T){case Ea.DEVICE_PIXEL_CONTENT_BOX:return L;case Ea.BORDER_BOX:return w;default:return A}},tx=function(){function x(T){var m=kp(T);this.target=T,this.contentRect=m.contentRect,this.borderBoxSize=ss([m.borderBoxSize]),this.contentBoxSize=ss([m.contentBoxSize]),this.devicePixelContentBoxSize=ss([m.devicePixelContentBoxSize])}return x}(),Gp=function(x){if(Np(x))return 1/0;for(var T=0,m=x.parentNode;m;)T+=1,m=m.parentNode;return T},ex=function(){var x=1/0,T=[];os.forEach(function(L){if(L.activeTargets.length!==0){var B=[];L.activeTargets.forEach(function(W){var K=new tx(W.target),et=Gp(W.target);B.push(K),W.lastReportedSize=Up(W.target,W.observedBox),et<x&&(x=et)}),T.push(function(){L.callback.call(L.observer,B,L.observer)}),L.activeTargets.splice(0,L.activeTargets.length)}});for(var m=0,M=T;m<M.length;m++){var w=M[m];w()}return x},Hp=function(x){os.forEach(function(m){m.activeTargets.splice(0,m.activeTargets.length),m.skippedTargets.splice(0,m.skippedTargets.length),m.observationTargets.forEach(function(w){w.isActive()&&(Gp(w.target)>x?m.activeTargets.push(w):m.skippedTargets.push(w))})})},ix=function(){var x=0;for(Hp(x);Y_();)x=ex(),Hp(x);return q_()&&J_(),x>0},Ru,jp=[],nx=function(){return jp.splice(0).forEach(function(x){return x()})},rx=function(x){if(!Ru){var T=0,m=document.createTextNode(""),M={characterData:!0};new MutationObserver(function(){return nx()}).observe(m,M),Ru=function(){m.textContent="".concat(T?T--:T++)}}jp.push(x),Ru()},ox=function(x){rx(function(){requestAnimationFrame(x)})},Nl=0,sx=function(){return!!Nl},ax=250,lx={attributes:!0,characterData:!0,childList:!0,subtree:!0},zp=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],Vp=function(x){return x===void 0&&(x=0),Date.now()+x},Iu=!1,hx=function(){function x(){var T=this;this.stopped=!0,this.listener=function(){return T.schedule()}}return x.prototype.run=function(T){var m=this;if(T===void 0&&(T=ax),!Iu){Iu=!0;var M=Vp(T);ox(function(){var w=!1;try{w=ix()}finally{if(Iu=!1,T=M-Vp(),!sx())return;w?m.run(1e3):T>0?m.run(T):m.start()}})}},x.prototype.schedule=function(){this.stop(),this.run()},x.prototype.observe=function(){var T=this,m=function(){return T.observer&&T.observer.observe(document.body,lx)};document.body?m():Aa.addEventListener("DOMContentLoaded",m)},x.prototype.start=function(){var T=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),zp.forEach(function(m){return Aa.addEventListener(m,T.listener,!0)}))},x.prototype.stop=function(){var T=this;this.stopped||(this.observer&&this.observer.disconnect(),zp.forEach(function(m){return Aa.removeEventListener(m,T.listener,!0)}),this.stopped=!0)},x}(),Pu=new hx,Wp=function(x){!Nl&&x>0&&Pu.start(),Nl+=x,!Nl&&Pu.stop()},ux=function(x){return!Cu(x)&&!K_(x)&&getComputedStyle(x).display==="inline"},cx=function(){function x(T,m){this.target=T,this.observedBox=m||Ea.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return x.prototype.isActive=function(){var T=Up(this.target,this.observedBox,!0);return ux(this.target)&&(this.lastReportedSize=T),this.lastReportedSize.inlineSize!==T.inlineSize||this.lastReportedSize.blockSize!==T.blockSize},x}(),dx=function(){function x(T,m){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=T,this.callback=m}return x}(),Dl=new WeakMap,Xp=function(x,T){for(var m=0;m<x.length;m+=1)if(x[m].target===T)return m;return-1},Fl=function(){function x(){}return x.connect=function(T,m){var M=new dx(T,m);Dl.set(T,M)},x.observe=function(T,m,M){var w=Dl.get(T),A=w.observationTargets.length===0;Xp(w.observationTargets,m)<0&&(A&&os.push(w),w.observationTargets.push(new cx(m,M&&M.box)),Wp(1),Pu.schedule())},x.unobserve=function(T,m){var M=Dl.get(T),w=Xp(M.observationTargets,m),A=M.observationTargets.length===1;w>=0&&(A&&os.splice(os.indexOf(M),1),M.observationTargets.splice(w,1),Wp(-1))},x.disconnect=function(T){var m=this,M=Dl.get(T);M.observationTargets.slice().forEach(function(w){return m.unobserve(T,w.target)}),M.activeTargets.splice(0,M.activeTargets.length)},x}(),px=function(){function x(T){if(arguments.length===0)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if(typeof T!="function")throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");Fl.connect(this,T)}return x.prototype.observe=function(T,m){if(arguments.length===0)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Dp(T))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");Fl.observe(this,T,m)},x.prototype.unobserve=function(T){if(arguments.length===0)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Dp(T))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");Fl.unobserve(this,T)},x.prototype.disconnect=function(){Fl.disconnect(this)},x.toString=function(){return"function ResizeObserver () { [polyfill code] }"},x}();const fx=window.ResizeObserver||px,Yp=.5,Ou=({width:x,height:T})=>`${x.toFixed(1)} x ${T.toFixed(1)} px`,Lu=(x,T)=>Boolean(x&&T&&Math.abs(x.width-T.width)<=Yp&&Math.abs(x.height-T.height)<=Yp),mx=new Set(["clicker"]),gx=function(){};class qp{constructor({context:T,box:m,view:M,mountSlideController:w,mountWhiteboard:A,baseScenePath:L,appId:B,urlInterrupter:G,enableScale:W,onPagesReady:K,onNavigate:et}){this.slideController=null,this.isViewMounted=!1,this.justSildeReadonly=!1,this.syncEventQueuePolicy="fifo",this.boxSizeEventCount=0,this._applyResize=(at,wt)=>{var D,P,k;if(at.width<=0||at.height<=0||Lu(this.lastAppliedSize,at))return;this.lastAppliedSize=at,this.lastAppliedSource=wt,(D=this.resizableContainer)==null||D.updateResizableContainer(),(k=(P=this.slideController)==null?void 0:P.slide)==null||k.notifyFrameResize(),this.scaleDocsToFit();const bt=this._getContentSize();console.log("[app-slide] resize",{appId:this.appId,source:wt,eventCount:this.boxSizeEventCount,event:Ou(at),dom:Ou(bt)})},this._applyCurrentBoxSize=at=>{const wt=at!=null?at:this._getContentSize();this._applyResize(wt,at?"event":"observer")},this._onObserverSize=at=>{at.width<=0||at.height<=0||(this.lastObserverSize=at,this._applyResize(at,"observer"))},this._onContextBoxSizeChange=at=>{if(at.appId===this.context.appId){if(this.boxSizeEventCount+=1,this.latestBoxSize={width:at.width,height:at.height},Lu(this.lastObserverSize,this.latestBoxSize)||Lu(this.lastAppliedSize,this.latestBoxSize)){console.log("[app-slide] boxSizeChange skipped, observer already applied",{appId:this.appId,eventCount:this.boxSizeEventCount,source:this.lastAppliedSource,size:Ou(this.latestBoxSize)});return}this._applyResize(this.latestBoxSize,"event"),this._reconnectContentObserver()}},this.onError=({error:at,index:wt})=>{var bt,D;this.viewer.setPaused(),(bt=this.slideController)!=null&&bt.showRenderError&&(this.$overlay.textContent=`Error on slide[page=${this.slideController.page}]: ${at.message}`,this.$overlay.style.opacity="1"),(D=this.slideController)!=null&&D.onRenderError&&this.slideController.onRenderError(at,wt),Pr.warn("[Slide] render error",at)},this.onRenderStart=()=>{this.$whiteboardView.classList.add(this.wrapClassName("wb-view-hidden")),this.viewer.setPlaying()},this.onRenderEnd=()=>{},this.onPageChanged=()=>{clearTimeout(this._onPageChangedTimer),this._onPageChangedTimer=setTimeout(this._onPageChanged,200)},this._onPageChangedTimer=0,this._onPageChanged=()=>{this.$overlay.style.opacity="",this.$whiteboardView.classList.remove(this.wrapClassName("wb-view-hidden"))},this.refreshPages=()=>{this.slideController&&(this.viewer.pages=$d(this.slideController.slide,this.slideController.previewList),this.viewer.setPageIndex(this.getPageIndex(this.slideController.page)),this.scaleDocsToFit())},this.scaleDocsToFit=()=>{if(this.slideController){const{width:at,height:wt}=this.slideController.slide;if(at&&wt){const bt=this.context.storage.state.originSize,{width:D,height:P}=bt&&bt.width>0&&bt.height>0?bt:{width:at,height:wt};if(D>0&&P>0){this.whiteboardView.moveCameraToContain({originX:-D/2,originY:-P/2,width:D,height:P,animationMode:"immediately"});const k=this.whiteboardView.camera.scale;this.whiteboardView.setCameraBound({damping:1,maxContentMode:()=>k,minContentMode:()=>k,centerX:0,centerY:0,width:at,height:wt})}this.isViewMounted||(this.isViewMounted=!0,console.log("[Slide] mount whiteboard view"),this.mountWhiteboard(this.$whiteboardView))}}},this.onPlay=()=>{this.slideController&&this.slideController.slide.nextStep()},this.onNewPageIndex=(at,wt)=>{this.slideController&&this.slideController.jumpToPage(at+1,wt)},this.sideEffect=new Os,this.namespace="netless-app-slide",this.toPdf=async()=>{if(!this.slideController){this.reportProgress(100,null);return}const{slide:at}=this.slideController,wt=1920,bt=document.createElement("canvas"),D=bt.getContext("2d"),{slideCount:P,width:k,height:X}=at;let O=Math.floor(k),z=Math.floor(X);O>wt&&(O=wt,z=Math.floor(X*O/k)),z>wt&&(z=wt,O=Math.floor(k*z/X)),bt.width=O,bt.height=z;const Z=document.createElement("canvas");Z.width=O,Z.height=z;const V=Z.getContext("2d");if(!V||!this.getWhiteSnapshot||!D)return this.reportProgress(100,null),null;const Mt=O>z?"l":"p",{jsPDF:Ht}=await import("jspdf"),st=new Ht({format:[O,z],orientation:Mt,compress:!0});for(let lt=1;lt<=P;lt++){let Q=null;try{Q=await this.slideController.slide.snapshotWithTimingEnd(lt)}catch{}if(Q){const $=document.createElement("img");$.src=Q,await new Promise(ct=>$.onload=ct),D.drawImage($,0,0,O,z)}V.clearRect(0,0,O,z),await this.getWhiteSnapshot(lt,Z,V,k,X);try{const $=Z.toDataURL("image/png"),ct=document.createElement("img");ct.src=$,await new Promise(nt=>ct.onload=nt),D.drawImage(ct,0,0,O,z)}catch{}const vt=bt.toDataURL("image/jpeg",.6);lt>1&&st.addPage(),st.addImage(vt,"JPEG",0,0,O,z,"","FAST"),D.clearRect(0,0,O,z),Math.ceil(lt/P*100)<100&&this.reportProgress(Math.ceil(lt/P*100),null)}const U=st.output("arraybuffer"),F=this.box.title;this.reportProgress(100,{pdf:U,title:F})},this.context=T,this.box=m,this.whiteboardView=M,this.mountSlideController=w,this.mountWhiteboard=A,this.onNavigate=et||gx,this.baseScenePath=L,this.enableScale=W!=null?W:!1,this.appId=B,this.viewer=new Mu({readonly:m.readonly,onNewPageIndex:this.onNewPageIndex,onPlay:this.onPlay,urlInterrupter:G,onPagesReady:K}),this.sideEffect.add(()=>{const at=wt=>{this.setReadonly(wt)};return m.events.on("readonly",at),()=>m.events.off("readonly",at)}),this.sideEffect.add(()=>{const at=wt=>{wt.data.type==="@netless/_request_save_pdf_"&&wt.data.appId===this.appId&&this.toPdf().catch(()=>this.reportProgress(100,null))};return window.addEventListener("message",at),()=>{window.removeEventListener("message",at)}}),this.render(),this._registerBoxSizeChange(),this.sideEffect.add(()=>{var P,k;const at=X=>{this.resizableContainer&&this.resizableContainer.scaleContainer(X)};console.log("[SlideDocsViewer] Initial storage state:",this.context.storage.state),console.log("[SlideDocsViewer] Initial slideScale:",this.context.storage.state.slideScale),this.context.storage.state.slideScale!==void 0?(console.log("[SlideDocsViewer] Applying initial slideScale:",this.context.storage.state.slideScale),at(this.context.storage.state.slideScale)):console.log("[SlideDocsViewer] No initial slideScale found");const wt=(P=this.context.storage.state.translateX)!=null?P:.5,bt=(k=this.context.storage.state.translateY)!=null?k:.5;this.resizableContainer.handleNormalizeTranslate(wt,bt,{triggerScrollBar:!0,triggerSync:!1});const D=X=>{var O,z;if(X.slideScale!==void 0){const Z=X.slideScale.newValue;at(Z!=null?Z:1)}if(X.translateX!==void 0||X.translateY!==void 0){const Z=this.resizableContainer.getTranslate(),V=X.translateX?(O=X.translateX.newValue)!=null?O:.5:Z.x,Mt=X.translateY?(z=X.translateY.newValue)!=null?z:.5:Z.y;this.resizableContainer&&this.resizableContainer.handleNormalizeTranslate(V,Mt,{triggerScrollBar:!0,triggerSync:!1})}};return console.log("[SlideDocsViewer] Adding storage state listener"),this.context.storage.onStateChanged.addListener(D),()=>{console.log("[SlideDocsViewer] Removing storage state listener"),this.context.storage.onStateChanged.removeListener(D)}})}setJustSildeReadonly(T){this.justSildeReadonly=T,this.applyInteractionState()}setSyncEventQueuePolicy(T){this.syncEventQueuePolicy=T,this.applyInteractionState()}applyInteractionState(){var m;const T=(m=this.slideController)==null?void 0:m.slide;!T||(T.setInteractive(!this.justSildeReadonly),T.setSyncEventQueuePolicy(this.syncEventQueuePolicy))}render(){this.resizableContainer||(this.resizableContainer=new X_(this.viewer.$content,this.context,this.enableScale,this.box),this.resizableContainer.onLayoutUpdated=()=>{this.scaleDocsToFit()}),this.renderSlideContainer(),this.renderWhiteboardView(),this.renderOverlay(),this.resizableContainer.addSlideContainer(this.$slide),this.resizableContainer.addWhiteboardContainer(this.$whiteboardView),this.viewer.$content.appendChild(this.$overlay),this.sideEffect.addEventListener(window,"keydown",T=>{if(!this.justSildeReadonly&&this.box.focus&&this.slideController&&!Ty(T.target))switch(T.key){case"ArrowUp":case"ArrowLeft":{this.slideController.slide.prevStep(),this.onNavigate(this.slideController.page,"keydown");break}case"ArrowRight":case"ArrowDown":{this.slideController.slide.nextStep(),this.onNavigate(this.slideController.page,"keydown");break}}})}renderOverlay(){if(!this.$overlay){const T=document.createElement("div");T.className=this.wrapClassName("overlay"),this.$overlay=T}return this.$overlay}renderSlideContainer(){if(!this.$slide){const T=document.createElement("div");T.className=this.wrapClassName("slide"),T.dataset.appKind="Slide",this.$slide=T}return this.$slide}renderWhiteboardView(){return this.$whiteboardView||(this.$whiteboardView=document.createElement("div"),this.$whiteboardView.className=this.wrapClassName("wb-view")),this.$whiteboardView}mount(){var T,m,M,w;return this.box.mountContent(this.viewer.$content),this.box.mountFooter(this.viewer.$footer),this.slideController=this.mountSlideController({anchor:this.$slide,onRenderStart:this.onRenderStart,onRenderEnd:this.onRenderEnd,onTransitionStart:this.viewer.setPlaying,onTransitionEnd:this.viewer.setPaused,onReady:this.refreshPages,onNavigate:this.onNavigate,onError:this.onError}),this.applyInteractionState(),this.resizableContainer.setSlideObject(this.slideController.slide),this.scaleDocsToFit(),this.sideEffect.add(()=>(this.whiteboardView.callbacks.on("onSizeUpdated",this.scaleDocsToFit),()=>this.whiteboardView.callbacks.off("onSizeUpdated",this.scaleDocsToFit))),this._observeContentSize(),this._applyCurrentBoxSize(),(w=(M=(m=(T=this.context).getAppProxy)==null?void 0:m.call(T))==null?void 0:M.scheduleBoxSizeSync)==null||w.call(M),this}_getContentSize(){const T=(this.viewer.$content||this.box.$content).getBoundingClientRect();return{width:T.width,height:T.height}}_reconnectContentObserver(){const T=this.viewer.$content;!T||!this.contentResizeObserver||(this.contentResizeObserver.disconnect(),this.contentResizeObserver.observe(T))}_observeContentSize(){this.contentResizeObserver||(this.contentResizeObserver=new fx(T=>{const m=T[T.length-1],M=m!=null&&m.contentRect?{width:m.contentRect.width,height:m.contentRect.height}:this._getContentSize();this._onObserverSize(M)})),this._reconnectContentObserver()}_registerBoxSizeChange(){var T,m,M,w;this.offBoxSizeChange=this.context.emitter.on("boxSizeChange",this._onContextBoxSizeChange),this._observeContentSize(),this._applyCurrentBoxSize(),(w=(M=(m=(T=this.context).getAppProxy)==null?void 0:m.call(T))==null?void 0:M.scheduleBoxSizeSync)==null||w.call(M)}getPageIndex(T){return(T>0?T:1)-1}unmount(){var T,m;return(T=this.offBoxSizeChange)==null||T.call(this),this.offBoxSizeChange=void 0,(m=this.contentResizeObserver)==null||m.disconnect(),this.contentResizeObserver=void 0,this.slideController&&(this.slideController.destroy(),this.slideController=null),this.viewer.unmount(),this.resizableContainer.destroy(this.box),this}setReadonly(T){this.viewer.setReadonly(T)}destroy(){this.sideEffect.flushAll(),this.unmount(),this.viewer.destroy()}toggleClickThrough(T){this.$whiteboardView.style.pointerEvents=!T||mx.has(T)?"none":"auto"}wrapClassName(T){return`${this.namespace}-${T}`}async getWhiteSnapshot(T,m,M,w,A){const L={centerX:0,centerY:0,scale:Math.min(m.width/w,m.height/A)},B=`${this.baseScenePath}/${T}`,G=this.context.manager.windowManger;G._appliancePlugin?await G._appliancePlugin.screenshotToCanvasAsync(M,B,m.width,m.height,L):this.whiteboardView.screenshotToCanvas(M,B,m.width,m.height,L)}reportProgress(T,m){window.postMessage({type:"@netless/_result_save_pdf_",appId:this.appId,progress:T,result:m})}}Yi.useFreezer=!1,Yi.FreezerLength=2;function vx(){return Yi.FreezerLength}function yx(x){Yi.FreezerLength=x<1?1/0:x}const Ma=x=>"["+x+"]",Ca={map:new Map,boxes:new Map,queue:[],validateQueue(){for(this.queue.sort((x,T)=>{var w,A,L,B;const m=(A=(w=this.boxes.get(x))==null?void 0:w.zIndex)!=null?A:0,M=(B=(L=this.boxes.get(T))==null?void 0:L.zIndex)!=null?B:0;return-(m-M)}),Ji("[Slide] freezer: validate",Ma(this.queue));this.queue.length>Yi.FreezerLength;){const x=this.queue.pop(),T=this.map.get(x);T&&(Ji("[Slide] freezer: validate-freeze",x,Ma(this.queue)),T.freeze())}},set(x,T,m){Ji("[Slide] freezer: add",x,Ma(this.queue)),this.map.set(x,T),this.boxes.set(x,m),this.queue.includes(x)||this.queue.unshift(x),this.validateQueue()},delete(x){this.map.delete(x),this.boxes.delete(x),this.queue=this.queue.filter(T=>T!==x),Ji("[Slide] freezer: delete",x,Ma(this.queue))},focus(x){const T=this.map.get(x),m=this.queue.indexOf(x);m>-1&&this.queue.splice(m,1),this.queue.unshift(x),this.validateQueue(),Ji("[Slide] freezer: focus",x,Ma(this.queue)),T&&T.unfreeze()}},Nu=new Set;function _x(x){return Nu.add(x),()=>Nu.delete(x)}const Du=new Set;function xx(x){return Du.add(x),()=>Du.delete(x)}const bx=x=>{Yi.useFreezer=!0,x.on("focus",({appId:T})=>{Ca.focus(T)}),x.on("created",({appId:T})=>{Nu.forEach(m=>m(T))}),x.on("destroy",({appId:T})=>{Du.forEach(m=>m(T))})};var Jp=`.netless-app-slide-content{position:relative;height:100%;overflow:hidden}.netless-app-slide-preview-mask{display:none;position:absolute;z-index:200;top:0;left:0;width:100%;height:100%}.netless-app-slide-preview{display:flex;flex-direction:column;align-items:center;position:absolute;z-index:300;top:0;left:0;width:33%;max-width:200px;height:100%;padding-top:10px;transform:translate(-100%);background:rgba(237,237,240,.9);box-shadow:inset -1px 0 #0000001c;transition:transform .4s}.netless-app-slide-preview-active .netless-app-slide-preview-mask{display:block}.netless-app-slide-preview-active .netless-app-slide-preview{transform:translate(0)}.netless-app-slide-preview-page{position:relative;display:block;width:55%;margin-bottom:10px;font-size:0;color:transparent;outline:none;border:7px solid transparent;border-radius:4px;transition:border-color .3s;user-select:none}.netless-app-slide-preview-page:hover,.netless-app-slide-preview-page.netless-app-slide-preview-page-active{border-color:#444e601a}.netless-app-slide-preview-page>img{width:100%;height:auto;box-sizing:border-box;border:1px solid rgba(0,0,0,.5);border-radius:1px;background-color:#fff;box-shadow:0 2px 8px #0000004d}.netless-app-slide-preview-page-name{position:absolute;top:1px;left:-10px;transform:translate(-100%);text-align:right;font-size:12px;color:#5f5f5f;user-select:none}.netless-app-slide-footer{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;border-top:1px solid #eeeef7;-webkit-user-select:none;-webkit-touch-callout:none;-user-select:none;color:#191919}.netless-app-slide-float-footer{width:100%;min-height:26px;position:absolute;left:0;bottom:0;z-index:2000;background:rgba(249,249,252,.9);transition:opacity .4s}.netless-app-slide-footer-btn{box-sizing:border-box;width:26px;height:26px;font-size:0;margin:0;padding:3px;border:none;border-radius:1px;outline:none;color:currentColor;background:transparent;transition:background .4s;cursor:pointer;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.netless-app-slide-footer-btn:hover{background:rgba(237,237,240,.9)}@media (hover: none){.netless-app-slide-footer-btn:hover{background:transparent!important}}.netless-app-slide-footer-btn>svg{width:100%;height:100%}.netless-app-slide-footer-btn>svg:nth-of-type(2){display:none}.netless-app-slide-footer-btn.netless-app-slide-footer-btn-playing>svg:nth-of-type(1){display:none}.netless-app-slide-footer-btn.netless-app-slide-footer-btn-playing>svg:nth-of-type(2){display:initial}.netless-app-slide-footer-btn~.netless-app-slide-footer-btn{margin-left:15px}.netless-app-slide-page-jumps{flex:1;display:flex;justify-content:center;align-items:center}.netless-app-slide-page-number{margin-left:auto;font-size:13px;user-select:none;white-space:nowrap;word-break:keep-all}.netless-app-slide-page-number-input{border:none;outline:none;width:3em;margin:0;padding:0 2px;text-align:right;font-size:13px;line-height:1;font-weight:400;font-family:inherit;border-radius:2px;color:currentColor;background:transparent;transition:background .4s;user-select:text;-webkit-tap-highlight-color:rgba(0,0,0,0)}.netless-app-slide-page-number-input:hover,.netless-app-slide-page-number-input:focus,.netless-app-slide-page-number-input:active{background:#fff;box-shadow:#63636333 0 2px 8px}.netless-app-slide-readonly.netless-app-slide-footer{display:none}.telebox-color-scheme-dark .netless-app-slide-page-number-input{color:#a6a6a8}.telebox-color-scheme-dark .netless-app-slide-page-number-input:active,.telebox-color-scheme-dark .netless-app-slide-page-number-input:focus,.telebox-color-scheme-dark .netless-app-slide-page-number-input:hover{color:#222}.telebox-color-scheme-dark .netless-app-slide-footer{color:#a6a6a8;background:#2d2d33;border-top:none}.telebox-color-scheme-dark .netless-app-slide-footer-btn:hover{background:#212126}.telebox-color-scheme-dark .netless-app-slide-preview{background:rgba(50,50,50,.9)}.netless-app-slide-wb-view{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;overflow:hidden;transition:opacity .2s}.netless-app-slide-wb-view-hidden{opacity:0}.netless-app-slide-overlay{display:flex;align-items:center;justify-content:center;position:absolute;z-index:200;top:0;left:0;width:100%;height:100%;padding:8px;background:rgba(255,0,0,.25);transition:opacity .3s;opacity:0;pointer-events:none}.netless-app-slide-slide{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.netless-app-slide-slide canvas{transform:scale(var(--netless-app-slide-scale, 1))}
8074
- `;function wx({container:x,taskId:T,resourceList:m=[],url:M=pu,debug:w=!1}){if(!T)throw new Error("[Slide] taskId is required");x.style.cssText+="display:flex;flex-direction:column";const A=new $p({target:x});return A.debug=!!w,A.mount(T,M,m),A}class $p{constructor(T){this.slide=null,this.debug=!1,this.previewList=[],this.sideEffect=new Os,this.ready=!1,this.readyPromise=new Promise(m=>{this.resolveReady=()=>{this.ready=!0,m()}}),this.hotkeyListener=m=>{if(this.slide)switch(m.key){case"ArrowUp":case"ArrowLeft":{this.slide.prevStep();break}case"ArrowRight":case"ArrowDown":{this.slide.nextStep();break}}},this.onPageChanged=m=>{this.viewer.setPageIndex(m-1)},this.onTransitionStart=()=>{this.viewer.setPlaying()},this.onTransitionEnd=()=>{this.viewer.setPaused()},this.onError=({error:m})=>{this.viewer.setPaused(),console.warn("[Slide] render error",m)},this.destroyed=!1,this.refreshPages=()=>{this.slide&&(this.viewer.pages=$d(this.slide,this.previewList),this.viewer.setPageIndex(this.getPageIndex(this.slide.slideState.currentSlideIndex)))},this.onPlay=()=>{this.slide&&this.slide.nextStep()},this.onNewPageIndex=m=>{this.slide&&this.slide.slideCount>0&&this.slide.renderSlide(jd(m+1,1,this.slide.slideCount))},this.namespace="netless-app-slide",this.target=T.target,this.bgColor=Jd(this.target),this.viewer=new Mu({readonly:!1,onNewPageIndex:this.onNewPageIndex,onPlay:this.onPlay}),this.render()}render(){this.viewer.$content.appendChild(this.renderSlideContainer()),this.registerHotKeys(window)}registerHotKeys(T){this.sideEffect.addEventListener(T,"keydown",this.hotkeyListener,void 0,"hotkey")}mount(T,m,M,w=[]){this.target.appendChild(this.renderStyle()),this.target.appendChild(this.viewer.$content),this.target.appendChild(this.viewer.$footer),this.slide=new dn.Slide({anchor:this.$slide,interactive:!0,mode:"local",controller:this.debug,enableGlobalClick:!0,renderOptions:{minFPS:25,maxFPS:30,autoFPS:!0,autoResolution:!0,transactionBgColor:this.bgColor}}),this.registerEventListeners(),M.length>0?this.slide.setResourceList(T,M):this.slide.setResource(T,m),this.slide.renderSlide(1),this.previewList=w}renderStyle(){const T=document.createElement("style");return T.appendChild(document.createTextNode(Jp)),T}registerEventListeners(){if(!this.slide)return;const{slide:T}=this;T.on(dn.SLIDE_EVENTS.slideChange,this.onPageChanged),T.on(dn.SLIDE_EVENTS.renderStart,this.onTransitionStart),T.on(dn.SLIDE_EVENTS.renderEnd,this.onTransitionEnd),T.on(dn.SLIDE_EVENTS.mainSeqStepStart,this.onTransitionStart),T.on(dn.SLIDE_EVENTS.mainSeqStepEnd,this.onTransitionEnd),T.on(dn.SLIDE_EVENTS.renderError,this.onError),T.on(dn.SLIDE_EVENTS.renderEnd,this.resolveReady),this.readyPromise.then(this.refreshPages)}destroy(){this.sideEffect.flushAll(),this.slide&&!this.destroyed&&(this.slide.destroy(),this.destroyed=!0),this.viewer.destroy()}getPageIndex(T){return(T>0?T:1)-1}renderSlideContainer(){if(!this.$slide){const T=document.createElement("div");T.className=this.wrapClassName("slide"),T.dataset.appKind="Slide",this.$slide=T}return this.$slide}wrapClassName(T){return`${this.namespace}-${T}`}}const Tx=dn.Slide.usePlugin.bind(dn.Slide),Fu="0.2.105-beta.3",Sx=5e3,as={kind:"Slide",setup(x){var z,Z,V,Mt,Ht,st;if(console.log("[Slide] setup @ "+Fu),x.getIsWritable()&&x.storage.ensureState(fu),!x.storage.state.taskId)throw new Error("[Slide] no taskId");const T=x.getView();if(!T)throw new Error("[Slide] no view, please set scenePath on addApp()");T.disableCameraTransform=!0;const m=x.getBox();m.mountStyles(Jp);try{m.$content.dataset.appSlideVersion=Fu}catch{}const M=x.getInitScenePath();let w=null,A,L=!1;const B=U=>{const F=x.getRoom();if(w&&w.slideController){let lt=!1;F&&x.getIsWritable()&&(du(F,x,w.slideController.slide,M),lt=!0),Ji("[Slide] page to",U,lt?"(synced)":""),w.viewer.setPageIndex(U-1),w.viewer.setPaused(),w.onPageChanged();const Q=w.viewer.pages.length;Q>0&&x.dispatchAppEvent("pageStateChange",{index:U-1,length:Q})}},G=U=>{const F=x.getAppOptions()||{},lt=new Zd({context:x,...U,onPageChanged:B,onNavigate:U.onNavigate,onRenderError:(Q,vt)=>{var It;L=!0,(It=F.onRenderError)==null||It.call(F,Q,vt)},showRenderError:F.showRenderError,invisibleBehavior:F.invisibleBehavior});return A=lt,Yi.useFreezer&&Ca.set(x.appId,lt,m),Pr.setAppController(x.appId,lt),lt.readyPromise.then(U.onReady).then(()=>{if(bt)return;const Q=x.getRoom();let vt=!1;Q&&x.getIsWritable()&&(du(Q,x,lt.slide,M),vt=!0);const It=lt.slide.slideState.currentSlideIndex;Ji("[Slide] page to",It,vt?"(synced)":"","(on ready)"),lt.slide.on("renderEnd",U.onRenderEnd)}),lt};w=new qp({context:x,box:m,view:T,mountSlideController:G,mountWhiteboard:x.mountView.bind(x),baseScenePath:M,appId:x.appId,urlInterrupter:(z=x.getAppOptions())==null?void 0:z.urlInterrupter,enableScale:(V=(Z=x.getAppOptions())==null?void 0:Z.enableScale)!=null?V:!1,onPagesReady:({length:U})=>{const F=(w==null?void 0:w.viewer.pageIndex)||0;x.dispatchAppEvent("pageStateChange",{index:F,length:U})},onNavigate:(U,F)=>{Ji("[Slide] user navigate to",U,F?`(${F})`:"")}});const W=x.getAppOptions();w.setSyncEventQueuePolicy((Mt=W==null?void 0:W.syncEventQueuePolicy)!=null?Mt:"fifo"),w.setJustSildeReadonly((Ht=W==null?void 0:W.justSildeReadonly)!=null?Ht:!1);const K=x.getRoom(),et=new Os;et.add(()=>{var U;return Pr.setAppContext(x.appId,x),Pr.enable=((U=x.getAppOptions())==null?void 0:U.debug)||!1,Pr.level="debug",()=>Pr.deleteApp(x.appId)}),K&&(w.toggleClickThrough(K.state.memberState.currentApplianceName),et.add(()=>{const U=F=>{F.memberState&&w&&w.toggleClickThrough(F.memberState.currentApplianceName)};return K.callbacks.on("onRoomStateChanged",U),()=>K.callbacks.off("onRoomStateChanged",U)}));const at=()=>{var U;return((U=x.getWindowManager())==null?void 0:U.lazySetupInMaximizedMode)===!0},wt=()=>{var lt;const U=x.getBoxStatus();if(U)return U!=="normal";const F=(lt=x.getWindowManager())==null?void 0:lt.boxState;return F!=null&&F!=="normal"};et.add(()=>x.emitter.on("focus",U=>{if(bt||!at())return;const F=w==null?void 0:w.slideController;if(!!F){if(!U){if(!wt())return;F.isFrozen||(Ji("[Slide] blur freeze",x.appId),F.freeze());return}Yi.useFreezer?Ca.focus(x.appId):F.isFrozen&&(Ji("[Slide] focus unfreeze",x.appId),F.unfreeze())}}));let bt=!1,D;const P=()=>{if(bt)return;bt=!0;const U=D;D=void 0,U==null||U(),Ji("[Slide] destroy",x.appId),Yi.useFreezer&&Ca.delete(x.appId),et.flushAll(),w&&(w.destroy(),w=null)};D=x.emitter.on("destroy",P),w.mount(),as.__teardownByContext||(as.__teardownByContext=new WeakMap),as.__teardownByContext.set(x,P);const k=U=>new Promise(F=>{let lt=!1,Q;const vt=$=>{lt||(lt=!0,window.clearTimeout(It),Q!==void 0&&window.clearInterval(Q),F($))},It=window.setTimeout(()=>vt(!1),U);A==null||A.readyPromise.then(()=>vt(!L),()=>vt(!1)),Q=window.setInterval(()=>{(bt||L)&&vt(!1)},100)}),X={onScaleChanged:U=>w?w.resizableContainer.addScaleChangedListener(U):()=>{},scaleView:U=>{const F=Number(U);if(!Number.isFinite(F)||F<=0)return;const lt=w==null?void 0:w.resizableContainer;!lt||Math.abs(lt.getScale()-F)<.001||(x.storage.setState({slideScale:F,translateX:.5,translateY:.5}),lt.handleNormalizeTranslate(.5,.5,{triggerScrollBar:!0,triggerSync:!1}),lt.scaleContainer(F))},getViewScale:()=>w==null?void 0:w.resizableContainer.getScale(),translateView:(U,F)=>{var lt,Q;if(w!=null&&w.resizableContainer){const vt=w.resizableContainer,It=x.getBox().$content.getBoundingClientRect(),$=vt.container.getBoundingClientRect(),ct=$.width-It.width,nt=$.height-It.height;if(ct>0||nt>0){const yt=(lt=vt.translateX)!=null?lt:.5,Tt=(Q=vt.translateY)!=null?Q:.5,Ut=ct>0?U/ct:0,zt=nt>0?F/nt:0,Yt=Math.max(0,Math.min(1,yt+Ut)),ot=Math.max(0,Math.min(1,Tt+zt));x.storage.setState({translateX:Yt,translateY:ot}),vt.handleNormalizeTranslate(Yt,ot,{triggerScrollBar:!0,triggerSync:!1})}}},setSildeReadonly:U=>{w==null||w.setJustSildeReadonly(U)},setSyncEventQueuePolicy:U=>{w==null||w.setSyncEventQueuePolicy(U)},viewer:()=>w,controller:()=>w==null?void 0:w.slideController,slide:()=>{var U;return(U=w==null?void 0:w.slideController)==null?void 0:U.slide},nextStep:()=>{var U;return w&&w.slideController?((U=w==null?void 0:w.slideController)==null||U.slide.nextStep(),!0):!1},prevStep:()=>{var U;return w&&w.slideController?((U=w==null?void 0:w.slideController)==null||U.slide.prevStep(),!0):!1},position:()=>{const U=w==null?void 0:w.slideController;if(U)return[U.page,U.pageCount]},nextPage:()=>{const U=w==null?void 0:w.slideController;if(U){const{page:F,pageCount:lt}=U;if(lt>0&&F<lt)return U.jumpToPage(F+1),!0}return!1},prevPage:()=>{const U=w==null?void 0:w.slideController;if(U){const{page:F,pageCount:lt}=U;if(lt>0&&F>1)return U.jumpToPage(F-1),!0}return!1},jumpToPage:U=>{const F=w==null?void 0:w.slideController;if(F){const{page:lt,pageCount:Q}=F;if(Q>0&&lt>0&&lt<=Q)return F.jumpToPage(U),!0}return!1}},O=(st=W==null?void 0:W.setupReadyTimeout)!=null?st:Sx;return k(O).then(()=>{if(L)throw new Error("[Slide] first render failed before ready");return!bt&&!(A!=null&&A.ready)&&Ji("[Slide] setup ready wait timed out, slide keeps loading in background"),X})},teardown(x){var T,m,M;(m=(T=as.__teardownByContext)==null?void 0:T.get(x))==null||m(),(M=as.__teardownByContext)==null||M.delete(x)}};return Yi.DefaultUrl=pu,Yi.DocsViewer=Mu,Yi.SideEffectManager=Os,Yi.Slide=dn.Slide,Yi.SlideController=Zd,Yi.SlideControllerBase=Kd,Yi.SlideDocsViewer=qp,Yi.SlidePreviewer=$p,Yi.addHooks=bx,Yi.apps=Ca,Yi.default=as,Yi.getFreezerLength=vx,Yi.log=Ji,Yi.logger=Pr,Yi.onCreated=_x,Yi.onDestroyed=xx,Yi.previewSlide=wx,Yi.setFreezerLength=yx,Yi.syncSceneWithSlide=du,Yi.usePlugin=Tx,Yi.version=Fu,Object.defineProperties(Yi,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Yi}({});
8074
+ `;function wx({container:x,taskId:T,resourceList:m=[],url:M=pu,debug:w=!1}){if(!T)throw new Error("[Slide] taskId is required");x.style.cssText+="display:flex;flex-direction:column";const A=new $p({target:x});return A.debug=!!w,A.mount(T,M,m),A}class $p{constructor(T){this.slide=null,this.debug=!1,this.previewList=[],this.sideEffect=new Os,this.ready=!1,this.readyPromise=new Promise(m=>{this.resolveReady=()=>{this.ready=!0,m()}}),this.hotkeyListener=m=>{if(this.slide)switch(m.key){case"ArrowUp":case"ArrowLeft":{this.slide.prevStep();break}case"ArrowRight":case"ArrowDown":{this.slide.nextStep();break}}},this.onPageChanged=m=>{this.viewer.setPageIndex(m-1)},this.onTransitionStart=()=>{this.viewer.setPlaying()},this.onTransitionEnd=()=>{this.viewer.setPaused()},this.onError=({error:m})=>{this.viewer.setPaused(),console.warn("[Slide] render error",m)},this.destroyed=!1,this.refreshPages=()=>{this.slide&&(this.viewer.pages=$d(this.slide,this.previewList),this.viewer.setPageIndex(this.getPageIndex(this.slide.slideState.currentSlideIndex)))},this.onPlay=()=>{this.slide&&this.slide.nextStep()},this.onNewPageIndex=m=>{this.slide&&this.slide.slideCount>0&&this.slide.renderSlide(jd(m+1,1,this.slide.slideCount))},this.namespace="netless-app-slide",this.target=T.target,this.bgColor=Jd(this.target),this.viewer=new Mu({readonly:!1,onNewPageIndex:this.onNewPageIndex,onPlay:this.onPlay}),this.render()}render(){this.viewer.$content.appendChild(this.renderSlideContainer()),this.registerHotKeys(window)}registerHotKeys(T){this.sideEffect.addEventListener(T,"keydown",this.hotkeyListener,void 0,"hotkey")}mount(T,m,M,w=[]){this.target.appendChild(this.renderStyle()),this.target.appendChild(this.viewer.$content),this.target.appendChild(this.viewer.$footer),this.slide=new dn.Slide({anchor:this.$slide,interactive:!0,mode:"local",controller:this.debug,enableGlobalClick:!0,renderOptions:{minFPS:25,maxFPS:30,autoFPS:!0,autoResolution:!0,transactionBgColor:this.bgColor}}),this.registerEventListeners(),M.length>0?this.slide.setResourceList(T,M):this.slide.setResource(T,m),this.slide.renderSlide(1),this.previewList=w}renderStyle(){const T=document.createElement("style");return T.appendChild(document.createTextNode(Jp)),T}registerEventListeners(){if(!this.slide)return;const{slide:T}=this;T.on(dn.SLIDE_EVENTS.slideChange,this.onPageChanged),T.on(dn.SLIDE_EVENTS.renderStart,this.onTransitionStart),T.on(dn.SLIDE_EVENTS.renderEnd,this.onTransitionEnd),T.on(dn.SLIDE_EVENTS.mainSeqStepStart,this.onTransitionStart),T.on(dn.SLIDE_EVENTS.mainSeqStepEnd,this.onTransitionEnd),T.on(dn.SLIDE_EVENTS.renderError,this.onError),T.on(dn.SLIDE_EVENTS.renderEnd,this.resolveReady),this.readyPromise.then(this.refreshPages)}destroy(){this.sideEffect.flushAll(),this.slide&&!this.destroyed&&(this.slide.destroy(),this.destroyed=!0),this.viewer.destroy()}getPageIndex(T){return(T>0?T:1)-1}renderSlideContainer(){if(!this.$slide){const T=document.createElement("div");T.className=this.wrapClassName("slide"),T.dataset.appKind="Slide",this.$slide=T}return this.$slide}wrapClassName(T){return`${this.namespace}-${T}`}}const Tx=dn.Slide.usePlugin.bind(dn.Slide),Fu="0.2.106-beta.0",Sx=5e3,as={kind:"Slide",setup(x){var z,Z,V,Mt,Ht,st;if(console.log("[Slide] setup @ "+Fu),x.getIsWritable()&&x.storage.ensureState(fu),!x.storage.state.taskId)throw new Error("[Slide] no taskId");const T=x.getView();if(!T)throw new Error("[Slide] no view, please set scenePath on addApp()");T.disableCameraTransform=!0;const m=x.getBox();m.mountStyles(Jp);try{m.$content.dataset.appSlideVersion=Fu}catch{}const M=x.getInitScenePath();let w=null,A,L=!1;const B=U=>{const F=x.getRoom();if(w&&w.slideController){let lt=!1;F&&x.getIsWritable()&&(du(F,x,w.slideController.slide,M),lt=!0),Ji("[Slide] page to",U,lt?"(synced)":""),w.viewer.setPageIndex(U-1),w.viewer.setPaused(),w.onPageChanged();const Q=w.viewer.pages.length;Q>0&&x.dispatchAppEvent("pageStateChange",{index:U-1,length:Q})}},G=U=>{const F=x.getAppOptions()||{},lt=new Zd({context:x,...U,onPageChanged:B,onNavigate:U.onNavigate,onRenderError:(Q,vt)=>{var It;L=!0,(It=F.onRenderError)==null||It.call(F,Q,vt)},showRenderError:F.showRenderError,invisibleBehavior:F.invisibleBehavior});return A=lt,Yi.useFreezer&&Ca.set(x.appId,lt,m),Pr.setAppController(x.appId,lt),lt.readyPromise.then(U.onReady).then(()=>{if(bt)return;const Q=x.getRoom();let vt=!1;Q&&x.getIsWritable()&&(du(Q,x,lt.slide,M),vt=!0);const It=lt.slide.slideState.currentSlideIndex;Ji("[Slide] page to",It,vt?"(synced)":"","(on ready)"),lt.slide.on("renderEnd",U.onRenderEnd)}),lt};w=new qp({context:x,box:m,view:T,mountSlideController:G,mountWhiteboard:x.mountView.bind(x),baseScenePath:M,appId:x.appId,urlInterrupter:(z=x.getAppOptions())==null?void 0:z.urlInterrupter,enableScale:(V=(Z=x.getAppOptions())==null?void 0:Z.enableScale)!=null?V:!1,onPagesReady:({length:U})=>{const F=(w==null?void 0:w.viewer.pageIndex)||0;x.dispatchAppEvent("pageStateChange",{index:F,length:U})},onNavigate:(U,F)=>{Ji("[Slide] user navigate to",U,F?`(${F})`:"")}});const W=x.getAppOptions();w.setSyncEventQueuePolicy((Mt=W==null?void 0:W.syncEventQueuePolicy)!=null?Mt:"fifo"),w.setJustSildeReadonly((Ht=W==null?void 0:W.justSildeReadonly)!=null?Ht:!1);const K=x.getRoom(),et=new Os;et.add(()=>{var U;return Pr.setAppContext(x.appId,x),Pr.enable=((U=x.getAppOptions())==null?void 0:U.debug)||!1,Pr.level="debug",()=>Pr.deleteApp(x.appId)}),K&&(w.toggleClickThrough(K.state.memberState.currentApplianceName),et.add(()=>{const U=F=>{F.memberState&&w&&w.toggleClickThrough(F.memberState.currentApplianceName)};return K.callbacks.on("onRoomStateChanged",U),()=>K.callbacks.off("onRoomStateChanged",U)}));const at=()=>{var U;return((U=x.getWindowManager())==null?void 0:U.lazySetupInMaximizedMode)===!0},wt=()=>{var lt;const U=x.getBoxStatus();if(U)return U!=="normal";const F=(lt=x.getWindowManager())==null?void 0:lt.boxState;return F!=null&&F!=="normal"};et.add(()=>x.emitter.on("focus",U=>{if(bt||!at())return;const F=w==null?void 0:w.slideController;if(!!F){if(!U){if(!wt())return;F.isFrozen||(Ji("[Slide] blur freeze",x.appId),F.freeze());return}Yi.useFreezer?Ca.focus(x.appId):F.isFrozen&&(Ji("[Slide] focus unfreeze",x.appId),F.unfreeze())}}));let bt=!1,D;const P=()=>{if(bt)return;bt=!0;const U=D;D=void 0,U==null||U(),Ji("[Slide] destroy",x.appId),Yi.useFreezer&&Ca.delete(x.appId),et.flushAll(),w&&(w.destroy(),w=null)};D=x.emitter.on("destroy",P),w.mount(),as.__teardownByContext||(as.__teardownByContext=new WeakMap),as.__teardownByContext.set(x,P);const k=U=>new Promise(F=>{let lt=!1;const Q=$=>{lt||(lt=!0,window.clearTimeout(vt),window.clearInterval(It),F($))},vt=window.setTimeout(()=>Q(!1),U);A==null||A.readyPromise.then(()=>Q(!L),()=>Q(!1));const It=window.setInterval(()=>{(bt||L)&&Q(!1)},100)}),X={onPptMediaPermissionRequest:U=>{var lt,Q;const F=(lt=w==null?void 0:w.slideController)==null?void 0:lt.slide;return(Q=F==null?void 0:F.onPptMediaPermissionRequest(U))!=null?Q:()=>{}},playPptMedia:()=>{var U;(U=w==null?void 0:w.slideController)==null||U.slide.playPptMedia()},onScaleChanged:U=>w?w.resizableContainer.addScaleChangedListener(U):()=>{},scaleView:U=>{const F=Number(U);if(!Number.isFinite(F)||F<=0)return;const lt=w==null?void 0:w.resizableContainer;!lt||Math.abs(lt.getScale()-F)<.001||(x.storage.setState({slideScale:F,translateX:.5,translateY:.5}),lt.handleNormalizeTranslate(.5,.5,{triggerScrollBar:!0,triggerSync:!1}),lt.scaleContainer(F))},getViewScale:()=>w==null?void 0:w.resizableContainer.getScale(),translateView:(U,F)=>{var lt,Q;if(w!=null&&w.resizableContainer){const vt=w.resizableContainer,It=x.getBox().$content.getBoundingClientRect(),$=vt.container.getBoundingClientRect(),ct=$.width-It.width,nt=$.height-It.height;if(ct>0||nt>0){const yt=(lt=vt.translateX)!=null?lt:.5,Tt=(Q=vt.translateY)!=null?Q:.5,Ut=ct>0?U/ct:0,zt=nt>0?F/nt:0,Yt=Math.max(0,Math.min(1,yt+Ut)),ot=Math.max(0,Math.min(1,Tt+zt));x.storage.setState({translateX:Yt,translateY:ot}),vt.handleNormalizeTranslate(Yt,ot,{triggerScrollBar:!0,triggerSync:!1})}}},setSildeReadonly:U=>{w==null||w.setJustSildeReadonly(U)},setSyncEventQueuePolicy:U=>{w==null||w.setSyncEventQueuePolicy(U)},viewer:()=>w,controller:()=>w==null?void 0:w.slideController,slide:()=>{var U;return(U=w==null?void 0:w.slideController)==null?void 0:U.slide},nextStep:()=>{var U;return w&&w.slideController?((U=w==null?void 0:w.slideController)==null||U.slide.nextStep(),!0):!1},prevStep:()=>{var U;return w&&w.slideController?((U=w==null?void 0:w.slideController)==null||U.slide.prevStep(),!0):!1},position:()=>{const U=w==null?void 0:w.slideController;if(U)return[U.page,U.pageCount]},nextPage:()=>{const U=w==null?void 0:w.slideController;if(U){const{page:F,pageCount:lt}=U;if(lt>0&&F<lt)return U.jumpToPage(F+1),!0}return!1},prevPage:()=>{const U=w==null?void 0:w.slideController;if(U){const{page:F,pageCount:lt}=U;if(lt>0&&F>1)return U.jumpToPage(F-1),!0}return!1},jumpToPage:U=>{const F=w==null?void 0:w.slideController;if(F){const{page:lt,pageCount:Q}=F;if(Q>0&&lt>0&&lt<=Q)return F.jumpToPage(U),!0}return!1}},O=(st=W==null?void 0:W.setupReadyTimeout)!=null?st:Sx;return k(O).then(()=>{if(L)throw new Error("[Slide] first render failed before ready");return!bt&&!(A!=null&&A.ready)&&Ji("[Slide] setup ready wait timed out, slide keeps loading in background"),X})},teardown(x){var T,m,M;(m=(T=as.__teardownByContext)==null?void 0:T.get(x))==null||m(),(M=as.__teardownByContext)==null||M.delete(x)}};return Yi.DefaultUrl=pu,Yi.DocsViewer=Mu,Yi.SideEffectManager=Os,Yi.Slide=dn.Slide,Yi.SlideController=Zd,Yi.SlideControllerBase=Kd,Yi.SlideDocsViewer=qp,Yi.SlidePreviewer=$p,Yi.addHooks=bx,Yi.apps=Ca,Yi.default=as,Yi.getFreezerLength=vx,Yi.log=Ji,Yi.logger=Pr,Yi.onCreated=_x,Yi.onDestroyed=xx,Yi.previewSlide=wx,Yi.setFreezerLength=yx,Yi.syncSceneWithSlide=du,Yi.usePlugin=Tx,Yi.version=Fu,Object.defineProperties(Yi,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Yi}({});
8075
8075
  //# sourceMappingURL=main.iife.js.map