@netless/window-manager 1.0.15 → 1.0.17-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/index.d.ts +71 -10
- package/dist/index.js +55 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +23 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/App/AppProxy.ts +5 -1
- package/src/BuiltinApps.ts +5 -1
- package/src/Utils/resolveAppOptions.ts +12 -0
- package/src/index.ts +18 -0
- package/dist/app-docs-viewer.js +0 -4
- package/dist/app-docs-viewer.js.map +0 -1
- package/dist/app-media-player.js +0 -31
- package/dist/app-media-player.js.map +0 -1
- package/dist/app-presentation.js +0 -21
- package/dist/app-presentation.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netless/window-manager",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17-beta.0",
|
|
4
4
|
"description": "Multi-window mode for Netless Whiteboard",
|
|
5
5
|
"author": "l1shen <lishen1635@gmail.com> (https://github.com/l1shen)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"jspdf": "2.5.1",
|
|
26
|
-
"white-web-sdk": "^2.16.
|
|
26
|
+
"white-web-sdk": "^2.16.55"
|
|
27
27
|
},
|
|
28
28
|
"peerDependenciesMeta": {
|
|
29
29
|
"jspdf": {
|
|
@@ -73,6 +73,6 @@
|
|
|
73
73
|
"typescript": "^4.5.5",
|
|
74
74
|
"vite": "^2.9.9",
|
|
75
75
|
"vitest": "^0.14.1",
|
|
76
|
-
"white-web-sdk": "^2.16.
|
|
76
|
+
"white-web-sdk": "^2.16.55"
|
|
77
77
|
}
|
|
78
78
|
}
|
package/src/App/AppProxy.ts
CHANGED
|
@@ -154,13 +154,17 @@ export class AppProxy implements PageRemoveService {
|
|
|
154
154
|
}
|
|
155
155
|
const appImpl = await appRegister.appClasses.get(params.kind)?.();
|
|
156
156
|
const appParams = appRegister.registered.get(params.kind);
|
|
157
|
+
const appOptions = this.manager.windowManger.resolveAppOptions(
|
|
158
|
+
params.kind,
|
|
159
|
+
appParams?.appOptions
|
|
160
|
+
);
|
|
157
161
|
if (appImpl) {
|
|
158
162
|
await this.setupApp(
|
|
159
163
|
this.id,
|
|
160
164
|
skipUpdate,
|
|
161
165
|
appImpl,
|
|
162
166
|
params.options,
|
|
163
|
-
|
|
167
|
+
appOptions,
|
|
164
168
|
this.manager.useBoxesStatus ? boxStatus : undefined,
|
|
165
169
|
params.forceTop,
|
|
166
170
|
params.forceNormal,
|
package/src/BuiltinApps.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { WindowManager } from "./index";
|
|
2
|
+
import type { PresentationAppOptions } from "@netless/app-presentation";
|
|
3
|
+
|
|
4
|
+
export interface BuiltinAppOptions {
|
|
5
|
+
Presentation?: PresentationAppOptions;
|
|
6
|
+
}
|
|
2
7
|
|
|
3
8
|
const loadAppMediaPlayer = async () => {
|
|
4
9
|
const mod = await import("@netless/app-media-player");
|
|
@@ -31,7 +36,6 @@ export const setupBuiltin = () => {
|
|
|
31
36
|
kind: BuiltinApps.Presentation,
|
|
32
37
|
src: loadAppPresentation,
|
|
33
38
|
appOptions: {
|
|
34
|
-
reScaleOnPageChange: true,
|
|
35
39
|
debounceSync: true,
|
|
36
40
|
useScrollbar: true,
|
|
37
41
|
},
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function resolveAppOptions(
|
|
2
|
+
registeredOptions: any | (() => any),
|
|
3
|
+
override: any
|
|
4
|
+
): any | (() => any) {
|
|
5
|
+
if (override === undefined) {
|
|
6
|
+
return registeredOptions;
|
|
7
|
+
}
|
|
8
|
+
return () => ({
|
|
9
|
+
...(typeof registeredOptions === "function" ? registeredOptions() : registeredOptions),
|
|
10
|
+
...override,
|
|
11
|
+
});
|
|
12
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ import { PageStateImpl } from "./PageState";
|
|
|
17
17
|
import { ReconnectRefresher } from "./ReconnectRefresher";
|
|
18
18
|
import { replaceRoomFunction } from "./Utils/RoomHacker";
|
|
19
19
|
import { BuiltinApps, setupBuiltin } from "./BuiltinApps";
|
|
20
|
+
import type { BuiltinAppOptions } from "./BuiltinApps";
|
|
20
21
|
import "video.js/dist/video-js.css";
|
|
21
22
|
import "./style.css";
|
|
22
23
|
import "@netless/telebox-insider/dist/style.css";
|
|
@@ -66,6 +67,7 @@ import type { ExtendPluginInstance } from "./ExtendPluginManager";
|
|
|
66
67
|
import { ExtendPluginManager } from "./ExtendPluginManager";
|
|
67
68
|
import { getExtendClass } from "./Utils/extendClass";
|
|
68
69
|
import type { ExtendClass } from "./Utils/extendClass";
|
|
70
|
+
import { resolveAppOptions as mergeAppOptions } from "./Utils/resolveAppOptions";
|
|
69
71
|
|
|
70
72
|
export * from "./utils/extendClass";
|
|
71
73
|
|
|
@@ -244,6 +246,8 @@ export type MountParams = {
|
|
|
244
246
|
supportAppliancePlugin?: boolean;
|
|
245
247
|
/** 是否使用 boxesStatus 状态管理窗口 */
|
|
246
248
|
useBoxesStatus?: boolean;
|
|
249
|
+
/** Local Presentation options applied before restoring apps. Not synchronized. */
|
|
250
|
+
builtinAppOptions?: BuiltinAppOptions;
|
|
247
251
|
};
|
|
248
252
|
|
|
249
253
|
export const reconnectRefresher = new ReconnectRefresher({ emitter: internalEmitter });
|
|
@@ -281,6 +285,8 @@ export class WindowManager
|
|
|
281
285
|
|
|
282
286
|
public _appliancePlugin?: any;
|
|
283
287
|
|
|
288
|
+
public builtinAppOptions?: BuiltinAppOptions;
|
|
289
|
+
|
|
284
290
|
private boxManager?: BoxManager;
|
|
285
291
|
private static params?: MountParams;
|
|
286
292
|
static extendClass?: ExtendClass;
|
|
@@ -385,6 +391,8 @@ export class WindowManager
|
|
|
385
391
|
throw new Error("[WindowManager]: create manager failed");
|
|
386
392
|
}
|
|
387
393
|
|
|
394
|
+
manager.builtinAppOptions = params.builtinAppOptions;
|
|
395
|
+
|
|
388
396
|
if (containerSizeRatio) {
|
|
389
397
|
WindowManager.containerSizeRatio = containerSizeRatio;
|
|
390
398
|
}
|
|
@@ -586,6 +594,15 @@ export class WindowManager
|
|
|
586
594
|
return appRegister.unregister(kind);
|
|
587
595
|
}
|
|
588
596
|
|
|
597
|
+
public resolveAppOptions(
|
|
598
|
+
kind: string,
|
|
599
|
+
registeredOptions?: any | (() => any)
|
|
600
|
+
): any | (() => any) {
|
|
601
|
+
const override =
|
|
602
|
+
kind === BuiltinApps.Presentation ? this.builtinAppOptions?.Presentation : undefined;
|
|
603
|
+
return mergeAppOptions(registeredOptions, override);
|
|
604
|
+
}
|
|
605
|
+
|
|
589
606
|
/**
|
|
590
607
|
* 创建一个 app 至白板
|
|
591
608
|
*/
|
|
@@ -1494,6 +1511,7 @@ setupBuiltin();
|
|
|
1494
1511
|
export * from "./typings";
|
|
1495
1512
|
|
|
1496
1513
|
export { BuiltinApps } from "./BuiltinApps";
|
|
1514
|
+
export type { BuiltinAppOptions } from "./BuiltinApps";
|
|
1497
1515
|
export type { PublicEvent } from "./callback";
|
|
1498
1516
|
|
|
1499
1517
|
export * from "./ExtendPluginManager";
|
package/dist/app-docs-viewer.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function Nt(t){if(t&&t.__esModule)return t;var e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return t&&Object.keys(t).forEach(function(s){if(s!=="default"){var i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:function(){return t[s]}})}}),e.default=t,Object.freeze(e)}var $t=`.netless-app-docs-viewer-content{position:relative;height:100%;overflow:hidden}.netless-app-docs-viewer-preview-mask{display:none;position:absolute;z-index:200;top:0;left:0;width:100%;height:100%}.netless-app-docs-viewer-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-docs-viewer-preview-active .netless-app-docs-viewer-preview-mask{display:block}.netless-app-docs-viewer-preview-active .netless-app-docs-viewer-preview{transform:translate(0)}.netless-app-docs-viewer-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-docs-viewer-preview-page:hover,.netless-app-docs-viewer-preview-page.netless-app-docs-viewer-preview-page-active{border-color:#444e601a}.netless-app-docs-viewer-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-docs-viewer-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-docs-viewer-footer{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;border-top:1px solid #eeeef7;color:#191919}.netless-app-docs-viewer-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-docs-viewer-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-docs-viewer-footer-btn:hover{background:rgba(237,237,240,.9)}@media (hover: none){.netless-app-docs-viewer-footer-btn:hover{background:transparent!important}}.netless-app-docs-viewer-footer-btn>svg{width:100%;height:100%}.netless-app-docs-viewer-footer-btn>svg:nth-of-type(2){display:none}.netless-app-docs-viewer-footer-btn.netless-app-docs-viewer-footer-btn-playing>svg:nth-of-type(1){display:none}.netless-app-docs-viewer-footer-btn.netless-app-docs-viewer-footer-btn-playing>svg:nth-of-type(2){display:initial}.netless-app-docs-viewer-footer-btn~.netless-app-docs-viewer-footer-btn{margin-left:15px}.netless-app-docs-viewer-page-jumps{flex:1;display:flex;justify-content:center;align-items:center}.netless-app-docs-viewer-page-number{margin-left:auto;font-size:13px;user-select:none;white-space:nowrap;word-break:keep-all}.netless-app-docs-viewer-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-docs-viewer-page-number-input:hover,.netless-app-docs-viewer-page-number-input:focus,.netless-app-docs-viewer-page-number-input:active{background:#fff;box-shadow:#63636333 0 2px 8px}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-footer-btn{cursor:not-allowed}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-footer-btn:hover{background:transparent}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-page-number-input{cursor:not-allowed}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-page-number-input:hover,.netless-app-docs-viewer-readonly .netless-app-docs-viewer-page-number-input:focus,.netless-app-docs-viewer-readonly .netless-app-docs-viewer-page-number-input:active{background:transparent;box-shadow:none}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-page-number-input:disabled{color:inherit}.netless-app-docs-viewer-readonly.netless-app-docs-viewer-float-footer{display:none}.telebox-color-scheme-dark .netless-app-docs-viewer-page-number-input{color:#a6a6a8}.telebox-color-scheme-dark .netless-app-docs-viewer-page-number-input:active,.telebox-color-scheme-dark .netless-app-docs-viewer-page-number-input:focus,.telebox-color-scheme-dark .netless-app-docs-viewer-page-number-input:hover{color:#222}.telebox-color-scheme-dark .netless-app-docs-viewer-footer{color:#a6a6a8;background:#2d2d33;border-top:none}.telebox-color-scheme-dark .netless-app-docs-viewer-footer-btn:hover{background:#212126}.telebox-color-scheme-dark .netless-app-docs-viewer-preview{background:rgba(50,50,50,.9)}.netless-app-docs-viewer-static-scrollbar{position:absolute;top:0;right:0;z-index:2147483647;width:8px;min-height:30px;margin:0;padding:0;border:none;outline:none;border-radius:4px;background:rgba(68,78,96,.4);box-shadow:1px 1px 8px #ffffffb3;opacity:0;transition:background .4s,opacity .4s 3s,transform .2s;user-select:none}.netless-app-docs-viewer-static-scrollbar.netless-app-docs-viewer-static-scrollbar-dragging{background:rgba(68,78,96,.6);opacity:1;transition:background .4s,opacity .4s 3s!important}.netless-app-docs-viewer-static-scrollbar:hover,.netless-app-docs-viewer-static-scrollbar:focus{background:rgba(68,78,96,.5)}.netless-app-docs-viewer-static-scrollbar:active{background:rgba(68,78,96,.6)}.netless-app-docs-viewer-content:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-static-scrollbar{display:none}.netless-app-docs-viewer-static-pages:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.page-renderer-pages-container{position:relative;overflow:hidden}.page-renderer-page{position:absolute;top:0;left:0;background-position:center;background-size:cover;background-repeat:no-repeat}.page-renderer-pages-container.is-hwa .page-renderer-page{will-change:transform}.page-renderer-page-img{display:block;width:100%;height:auto;user-select:none}.netless-app-docs-viewer-static-pages{overflow:hidden;position:relative;height:100%;user-select:none}.netless-app-docs-viewer-static-page{display:block;width:100%;height:auto;user-select:none}.netless-app-docs-viewer-static-wb-view,.netless-app-docs-viewer-dynamic-wb-view{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;overflow:hidden}.netless-app-docs-viewer-dynamic-wb-view .cursor-clicker .ppt-event-source{cursor:pointer}
|
|
2
|
-
`;const Pt=(t,e,s,i)=>{if(s==="length"||s==="prototype"||s==="arguments"||s==="caller")return;const r=Object.getOwnPropertyDescriptor(t,s),a=Object.getOwnPropertyDescriptor(e,s);!Rt(r,a)&&i||Object.defineProperty(t,s,a)},Rt=function(t,e){return t===void 0||t.configurable||t.writable===e.writable&&t.enumerable===e.enumerable&&t.configurable===e.configurable&&(t.writable||t.value===e.value)},kt=(t,e)=>{const s=Object.getPrototypeOf(e);s!==Object.getPrototypeOf(t)&&Object.setPrototypeOf(t,s)},Ot=(t,e)=>`/* Wrapped ${t}*/
|
|
3
|
-
${e}`,Lt=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),At=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),zt=(t,e,s)=>{const i=s===""?"":`with ${s.trim()}() `,r=Ot.bind(null,i,e.toString());Object.defineProperty(r,"name",At),Object.defineProperty(t,"toString",{...Lt,value:r})};function Vt(t,e,{ignoreNonConfigurable:s=!1}={}){const{name:i}=t;for(const r of Reflect.ownKeys(e))Pt(t,e,r,s);return kt(t,e),zt(t,e,i),t}const Ht=(t,e={})=>{if(typeof t!="function")throw new TypeError(`Expected the first argument to be a function, got \`${typeof t}\``);const{wait:s=0,maxWait:i=Number.POSITIVE_INFINITY,before:r=!1,after:a=!0}=e;if(!r&&!a)throw new Error("Both `before` and `after` are false, function wouldn't be called.");let o,n,c;const l=function(...d){const h=this,P=()=>{o=void 0,n&&(clearTimeout(n),n=void 0),a&&(c=t.apply(h,d))},R=()=>{n=void 0,o&&(clearTimeout(o),o=void 0),a&&(c=t.apply(h,d))},u=r&&!o;return clearTimeout(o),o=setTimeout(P,s),i>0&&i!==Number.POSITIVE_INFINITY&&!n&&(n=setTimeout(R,i)),u&&(c=t.apply(h,d)),c};return Vt(l,t),l.cancel=()=>{o&&(clearTimeout(o),o=void 0),n&&(clearTimeout(n),n=void 0)},l};var Dt="!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",Mt=87,Bt=20,_e=[],Wt=()=>{for(let t=0;t<Bt;t++)_e[t]=Dt.charAt(Math.random()*Mt);return _e.join("")};function Be(t){try{return t()}catch(e){console.error(e)}}var Q=class{constructor(){this.push=this.addDisposer,this.disposers=new Map}addDisposer(t,e=this.genUID()){return this.flush(e),this.disposers.set(e,Array.isArray(t)?Ut(t):t),e}add(t,e=this.genUID()){const s=t();return s?this.addDisposer(s,e):e}addEventListener(t,e,s,i,r=this.genUID()){return t.addEventListener(e,s,i),this.addDisposer(()=>t.removeEventListener(e,s,i),r),r}setTimeout(t,e,s=this.genUID()){const i=window.setTimeout(()=>{this.remove(s),t()},e);return this.addDisposer(()=>window.clearTimeout(i),s)}setInterval(t,e,s=this.genUID()){const i=window.setInterval(t,e);return this.addDisposer(()=>window.clearInterval(i),s)}remove(t){const e=this.disposers.get(t);return this.disposers.delete(t),e}flush(t){const e=this.remove(t);e&&e()}flushAll(){this.disposers.forEach(Be),this.disposers.clear()}genUID(){let t;do t=Wt();while(this.disposers.has(t));return t}};function Ut(t){return()=>t.forEach(Be)}var I=[],Ft=function(){return I.some(function(t){return t.activeTargets.length>0})},Yt=function(){return I.some(function(t){return t.skippedTargets.length>0})},Ie="ResizeObserver loop completed with undelivered notifications.",jt=function(){var t;typeof ErrorEvent=="function"?t=new ErrorEvent("error",{message:Ie}):(t=document.createEvent("Event"),t.initEvent("error",!1,!1),t.message=Ie),window.dispatchEvent(t)},W;(function(t){t.BORDER_BOX="border-box",t.CONTENT_BOX="content-box",t.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box"})(W||(W={}));var C=function(t){return Object.freeze(t)},Gt=function(){function t(e,s){this.inlineSize=e,this.blockSize=s,C(this)}return t}(),We=function(){function t(e,s,i,r){return this.x=e,this.y=s,this.width=i,this.height=r,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,C(this)}return t.prototype.toJSON=function(){var e=this,s=e.x,i=e.y,r=e.top,a=e.right,o=e.bottom,n=e.left,c=e.width,l=e.height;return{x:s,y:i,top:r,right:a,bottom:o,left:n,width:c,height:l}},t.fromRect=function(e){return new t(e.x,e.y,e.width,e.height)},t}(),de=function(t){return t instanceof SVGElement&&"getBBox"in t},Ue=function(t){if(de(t)){var e=t.getBBox(),s=e.width,i=e.height;return!s&&!i}var r=t,a=r.offsetWidth,o=r.offsetHeight;return!(a||o||t.getClientRects().length)},Ce=function(t){var e;if(t instanceof Element)return!0;var s=(e=t==null?void 0:t.ownerDocument)===null||e===void 0?void 0:e.defaultView;return!!(s&&t instanceof s.Element)},Xt=function(t){switch(t.tagName){case"INPUT":if(t.type!=="image")break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1},B=typeof window!="undefined"?window:{},X=new WeakMap,Ne=/auto|scroll/,qt=/^tb|vertical/,Jt=/msie|trident/i.test(B.navigator&&B.navigator.userAgent),v=function(t){return parseFloat(t||"0")},L=function(t,e,s){return t===void 0&&(t=0),e===void 0&&(e=0),s===void 0&&(s=!1),new Gt((s?e:t)||0,(s?t:e)||0)},$e=C({devicePixelContentBoxSize:L(),borderBoxSize:L(),contentBoxSize:L(),contentRect:new We(0,0,0,0)}),Fe=function(t,e){if(e===void 0&&(e=!1),X.has(t)&&!e)return X.get(t);if(Ue(t))return X.set(t,$e),$e;var s=getComputedStyle(t),i=de(t)&&t.ownerSVGElement&&t.getBBox(),r=!Jt&&s.boxSizing==="border-box",a=qt.test(s.writingMode||""),o=!i&&Ne.test(s.overflowY||""),n=!i&&Ne.test(s.overflowX||""),c=i?0:v(s.paddingTop),l=i?0:v(s.paddingRight),d=i?0:v(s.paddingBottom),h=i?0:v(s.paddingLeft),P=i?0:v(s.borderTopWidth),R=i?0:v(s.borderRightWidth),u=i?0:v(s.borderBottomWidth),m=i?0:v(s.borderLeftWidth),H=h+l,T=c+d,D=m+R,S=P+u,G=n?t.offsetHeight-S-t.clientHeight:0,_=o?t.offsetWidth-D-t.clientWidth:0,re=r?H+D:0,f=r?T+S:0,p=i?i.width:v(s.width)-re-_,k=i?i.height:v(s.height)-f-G,ae=p+H+_+D,oe=k+T+G+S,O=C({devicePixelContentBoxSize:L(Math.round(p*devicePixelRatio),Math.round(k*devicePixelRatio),a),borderBoxSize:L(ae,oe,a),contentBoxSize:L(p,k,a),contentRect:new We(h,c,p,k)});return X.set(t,O),O},Ye=function(t,e,s){var i=Fe(t,s),r=i.borderBoxSize,a=i.contentBoxSize,o=i.devicePixelContentBoxSize;switch(e){case W.DEVICE_PIXEL_CONTENT_BOX:return o;case W.BORDER_BOX:return r;default:return a}},Kt=function(){function t(e){var s=Fe(e);this.target=e,this.contentRect=s.contentRect,this.borderBoxSize=C([s.borderBoxSize]),this.contentBoxSize=C([s.contentBoxSize]),this.devicePixelContentBoxSize=C([s.devicePixelContentBoxSize])}return t}(),je=function(t){if(Ue(t))return 1/0;for(var e=0,s=t.parentNode;s;)e+=1,s=s.parentNode;return e},Zt=function(){var t=1/0,e=[];I.forEach(function(o){if(o.activeTargets.length!==0){var n=[];o.activeTargets.forEach(function(l){var d=new Kt(l.target),h=je(l.target);n.push(d),l.lastReportedSize=Ye(l.target,l.observedBox),h<t&&(t=h)}),e.push(function(){o.callback.call(o.observer,n,o.observer)}),o.activeTargets.splice(0,o.activeTargets.length)}});for(var s=0,i=e;s<i.length;s++){var r=i[s];r()}return t},Pe=function(t){I.forEach(function(s){s.activeTargets.splice(0,s.activeTargets.length),s.skippedTargets.splice(0,s.skippedTargets.length),s.observationTargets.forEach(function(r){r.isActive()&&(je(r.target)>t?s.activeTargets.push(r):s.skippedTargets.push(r))})})},Qt=function(){var t=0;for(Pe(t);Ft();)t=Zt(),Pe(t);return Yt()&&jt(),t>0},ne,Ge=[],es=function(){return Ge.splice(0).forEach(function(t){return t()})},ts=function(t){if(!ne){var e=0,s=document.createTextNode(""),i={characterData:!0};new MutationObserver(function(){return es()}).observe(s,i),ne=function(){s.textContent="".concat(e?e--:e++)}}Ge.push(t),ne()},ss=function(t){ts(function(){requestAnimationFrame(t)})},K=0,is=function(){return!!K},rs=250,as={attributes:!0,characterData:!0,childList:!0,subtree:!0},Re=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],ke=function(t){return t===void 0&&(t=0),Date.now()+t},ce=!1,os=function(){function t(){var e=this;this.stopped=!0,this.listener=function(){return e.schedule()}}return t.prototype.run=function(e){var s=this;if(e===void 0&&(e=rs),!ce){ce=!0;var i=ke(e);ss(function(){var r=!1;try{r=Qt()}finally{if(ce=!1,e=i-ke(),!is())return;r?s.run(1e3):e>0?s.run(e):s.start()}})}},t.prototype.schedule=function(){this.stop(),this.run()},t.prototype.observe=function(){var e=this,s=function(){return e.observer&&e.observer.observe(document.body,as)};document.body?s():B.addEventListener("DOMContentLoaded",s)},t.prototype.start=function(){var e=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),Re.forEach(function(s){return B.addEventListener(s,e.listener,!0)}))},t.prototype.stop=function(){var e=this;this.stopped||(this.observer&&this.observer.disconnect(),Re.forEach(function(s){return B.removeEventListener(s,e.listener,!0)}),this.stopped=!0)},t}(),le=new os,Oe=function(t){!K&&t>0&&le.start(),K+=t,!K&&le.stop()},ns=function(t){return!de(t)&&!Xt(t)&&getComputedStyle(t).display==="inline"},cs=function(){function t(e,s){this.target=e,this.observedBox=s||W.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return t.prototype.isActive=function(){var e=Ye(this.target,this.observedBox,!0);return ns(this.target)&&(this.lastReportedSize=e),this.lastReportedSize.inlineSize!==e.inlineSize||this.lastReportedSize.blockSize!==e.blockSize},t}(),ls=function(){function t(e,s){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=e,this.callback=s}return t}(),q=new WeakMap,Le=function(t,e){for(var s=0;s<t.length;s+=1)if(t[s].target===e)return s;return-1},J=function(){function t(){}return t.connect=function(e,s){var i=new ls(e,s);q.set(e,i)},t.observe=function(e,s,i){var r=q.get(e),a=r.observationTargets.length===0;Le(r.observationTargets,s)<0&&(a&&I.push(r),r.observationTargets.push(new cs(s,i&&i.box)),Oe(1),le.schedule())},t.unobserve=function(e,s){var i=q.get(e),r=Le(i.observationTargets,s),a=i.observationTargets.length===1;r>=0&&(a&&I.splice(I.indexOf(i),1),i.observationTargets.splice(r,1),Oe(-1))},t.disconnect=function(e){var s=this,i=q.get(e);i.observationTargets.slice().forEach(function(r){return s.unobserve(e,r.target)}),i.activeTargets.splice(0,i.activeTargets.length)},t}(),hs=function(){function t(e){if(arguments.length===0)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if(typeof e!="function")throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");J.connect(this,e)}return t.prototype.observe=function(e,s){if(arguments.length===0)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Ce(e))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");J.observe(this,e,s)},t.prototype.unobserve=function(e){if(arguments.length===0)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Ce(e))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");J.unobserve(this,e)},t.prototype.disconnect=function(){J.disconnect(this)},t.toString=function(){return"function ResizeObserver () { [polyfill code] }"},t}();function ds(t){const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("class",`${t}-footer-icon-sidebar`),s.setAttribute("viewBox","0 0 64 64");const i=document.createElementNS(e,"path");return i.setAttribute("fill","currentColor"),i.setAttribute("d","M50 8H14c-3.309 0-6 2.691-6 6v36c0 3.309 2.691 6 6 6h36c3.309 0 6-2.691 6-6V14c0-3.309-2.691-6-6-6zM12 50V14c0-1.103.897-2 2-2h8v40h-8c-1.103 0-2-.897-2-2zm40 0c0 1.103-.897 2-2 2H26V12h24c1.103 0 2 .897 2 2z"),s.appendChild(i),s}function ps(t){const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("class",`${t}-footer-icon-arrow-left`),s.setAttribute("viewBox","0 0 500 500");const i=document.createElementNS(e,"path");return i.setAttribute("fill","currentColor"),i.setAttribute("d","M177.81 249.959L337.473 90.295c2.722-2.865 2.651-7.378-.143-10.1-2.793-2.65-7.163-2.65-9.956 0l-164.75 164.75c-2.793 2.793-2.793 7.306 0 10.1l164.75 164.75c2.865 2.722 7.378 2.65 10.099-.143 2.651-2.794 2.651-7.163 0-9.957L177.809 249.959z"),s.appendChild(i),s}function us(t){const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("class",`${t}-footer-icon-arrow-right`),s.setAttribute("viewBox","0 0 500 500");const i=document.createElementNS(e,"path");return i.setAttribute("fill","currentColor"),i.setAttribute("d","M322.19 250.041L162.527 409.705c-2.722 2.865-2.651 7.378.143 10.1 2.793 2.65 7.163 2.65 9.956 0l164.75-164.75c2.793-2.793 2.793-7.306 0-10.1l-164.75-164.75c-2.865-2.722-7.378-2.65-10.099.143-2.651 2.794-2.651 7.163 0 9.957l159.664 159.736z"),s.appendChild(i),s}function gs(t){const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("class",`${t}-footer-icon-play`),s.setAttribute("viewBox","0 0 500 500");const i=document.createElementNS(e,"path");return i.setAttribute("fill","currentColor"),i.setAttribute("d","M418.158 257.419L174.663 413.33c-6.017 3.919-15.708 3.772-21.291-.29-2.791-2.018-4.295-4.483-4.295-7.084V94.109c0-5.65 6.883-10.289 15.271-10.289 4.298 0 8.391 1.307 11.181 3.332l242.629 155.484c6.016 3.917 6.451 10.292.649 14.491-.216.154-.432.154-.649.292zM170.621 391.288l223.116-141.301L170.71 107.753l-.089 283.535z"),s.appendChild(i),s}function fs(t){const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("class",`${t}-footer-icon-pause`),s.setAttribute("viewBox","0 0 500 500");const i=document.createElementNS(e,"path");return i.setAttribute("fill","currentColor"),i.setAttribute("d","M312.491 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261zM165.257 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261z"),s.appendChild(i),s}const E=typeof window!="undefined",Xe=E&&!("onscroll"in window)||typeof navigator!="undefined"&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),qe=E&&"IntersectionObserver"in window,Je=E&&"classList"in document.createElement("p"),Ke=E&&window.devicePixelRatio>1,vs={elements_selector:".lazy",container:Xe||E?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_bg_set:"bg-set",data_poster:"poster",class_applied:"applied",class_loading:"loading",class_loaded:"loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1,restore_on_error:!1},Ze=t=>Object.assign({},vs,t),Ae=function(t,e){let s;const i="LazyLoad::Initialized",r=new t(e);try{s=new CustomEvent(i,{detail:{instance:r}})}catch{s=document.createEvent("CustomEvent"),s.initCustomEvent(i,!1,!1,{instance:r})}window.dispatchEvent(s)},ws=(t,e)=>{if(!!e)if(!e.length)Ae(t,e);else for(let s=0,i;i=e[s];s+=1)Ae(t,i)},b="src",pe="srcset",ue="sizes",Qe="poster",F="llOriginalAttrs",et="data",ge="loading",tt="loaded",st="applied",bs="entered",fe="error",it="native",rt="data-",at="ll-status",g=(t,e)=>t.getAttribute(rt+e),ms=(t,e,s)=>{const i=rt+e;if(s===null){t.removeAttribute(i);return}t.setAttribute(i,s)},Y=t=>g(t,at),$=(t,e)=>ms(t,at,e),ee=t=>$(t,null),ve=t=>Y(t)===null,Ss=t=>Y(t)===ge,ys=t=>Y(t)===fe,we=t=>Y(t)===it,Es=[ge,tt,st,fe],xs=t=>Es.indexOf(Y(t))>=0,x=(t,e,s,i)=>{if(!(!t||typeof t!="function")){if(i!==void 0){t(e,s,i);return}if(s!==void 0){t(e,s);return}t(e)}},V=(t,e)=>{if(e!==""){if(Je){t.classList.add(e);return}t.className+=(t.className?" ":"")+e}},w=(t,e)=>{if(e!==""){if(Je){t.classList.remove(e);return}t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}},Ts=t=>{t.llTempImage=document.createElement("IMG")},_s=t=>{delete t.llTempImage},ot=t=>t.llTempImage,te=(t,e)=>{if(!e)return;const s=e._observer;!s||s.unobserve(t)},Is=t=>{t.disconnect()},Cs=(t,e,s)=>{e.unobserve_entered&&te(t,s)},be=(t,e)=>{!t||(t.loadingCount+=e)},Ns=t=>{!t||(t.toLoadCount-=1)},nt=(t,e)=>{!t||(t.toLoadCount=e)},$s=t=>t.loadingCount>0,Ps=t=>t.toLoadCount>0,ct=t=>{let e=[];for(let s=0,i;i=t.children[s];s+=1)i.tagName==="SOURCE"&&e.push(i);return e},me=(t,e)=>{const s=t.parentNode;if(!s||s.tagName!=="PICTURE")return;ct(s).forEach(e)},lt=(t,e)=>{ct(t).forEach(e)},se=[b],ht=[b,Qe],U=[b,pe,ue],dt=[et],ie=t=>!!t[F],pt=t=>t[F],ut=t=>delete t[F],A=(t,e)=>{if(ie(t))return;const s={};e.forEach(i=>{s[i]=t.getAttribute(i)}),t[F]=s},Rs=t=>{ie(t)||(t[F]={backgroundImage:t.style.backgroundImage})},ks=(t,e,s)=>{if(!s){t.removeAttribute(e);return}t.setAttribute(e,s)},N=(t,e)=>{if(!ie(t))return;const s=pt(t);e.forEach(i=>{ks(t,i,s[i])})},Os=t=>{if(!ie(t))return;const e=pt(t);t.style.backgroundImage=e.backgroundImage},gt=(t,e,s)=>{V(t,e.class_applied),$(t,st),s&&(e.unobserve_completed&&te(t,e),x(e.callback_applied,t,s))},ft=(t,e,s)=>{V(t,e.class_loading),$(t,ge),s&&(be(s,1),x(e.callback_loading,t,s))},y=(t,e,s)=>{!s||t.setAttribute(e,s)},ze=(t,e)=>{y(t,ue,g(t,e.data_sizes)),y(t,pe,g(t,e.data_srcset)),y(t,b,g(t,e.data_src))},Ls=(t,e)=>{me(t,s=>{A(s,U),ze(s,e)}),A(t,U),ze(t,e)},As=(t,e)=>{A(t,se),y(t,b,g(t,e.data_src))},zs=(t,e)=>{lt(t,s=>{A(s,se),y(s,b,g(s,e.data_src))}),A(t,ht),y(t,Qe,g(t,e.data_poster)),y(t,b,g(t,e.data_src)),t.load()},Vs=(t,e)=>{A(t,dt),y(t,et,g(t,e.data_src))},Hs=(t,e,s)=>{const i=g(t,e.data_bg),r=g(t,e.data_bg_hidpi),a=Ke&&r?r:i;!a||(t.style.backgroundImage=`url("${a}")`,ot(t).setAttribute(b,a),ft(t,e,s))},Ds=(t,e,s)=>{const i=g(t,e.data_bg_multi),r=g(t,e.data_bg_multi_hidpi),a=Ke&&r?r:i;!a||(t.style.backgroundImage=a,gt(t,e,s))},Ms=(t,e,s)=>{const i=g(t,e.data_bg_set);if(!i)return;const r=i.split("|");let a=r.map(o=>`image-set(${o})`);t.style.backgroundImage=a.join(),t.style.backgroundImage===""&&(a=r.map(o=>`-webkit-image-set(${o})`),t.style.backgroundImage=a.join()),gt(t,e,s)},vt={IMG:Ls,IFRAME:As,VIDEO:zs,OBJECT:Vs},Bs=(t,e)=>{const s=vt[t.tagName];!s||s(t,e)},Ws=(t,e,s)=>{const i=vt[t.tagName];!i||(i(t,e),ft(t,e,s))},Us=["IMG","IFRAME","VIDEO","OBJECT"],Fs=t=>Us.indexOf(t.tagName)>-1,wt=(t,e)=>{e&&!$s(e)&&!Ps(e)&&x(t.callback_finish,e)},Ve=(t,e,s)=>{t.addEventListener(e,s),t.llEvLisnrs[e]=s},Ys=(t,e,s)=>{t.removeEventListener(e,s)},Se=t=>!!t.llEvLisnrs,js=(t,e,s)=>{Se(t)||(t.llEvLisnrs={});const i=t.tagName==="VIDEO"?"loadeddata":"load";Ve(t,i,e),Ve(t,"error",s)},he=t=>{if(!Se(t))return;const e=t.llEvLisnrs;for(let s in e){const i=e[s];Ys(t,s,i)}delete t.llEvLisnrs},bt=(t,e,s)=>{_s(t),be(s,-1),Ns(s),w(t,e.class_loading),e.unobserve_completed&&te(t,s)},Gs=(t,e,s,i)=>{const r=we(e);bt(e,s,i),V(e,s.class_loaded),$(e,tt),x(s.callback_loaded,e,i),r||wt(s,i)},Xs=(t,e,s,i)=>{const r=we(e);bt(e,s,i),V(e,s.class_error),$(e,fe),x(s.callback_error,e,i),s.restore_on_error&&N(e,U),r||wt(s,i)},ye=(t,e,s)=>{const i=ot(t)||t;if(Se(i))return;js(i,o=>{Gs(o,t,e,s),he(i)},o=>{Xs(o,t,e,s),he(i)})},qs=(t,e,s)=>{Ts(t),ye(t,e,s),Rs(t),Hs(t,e,s),Ds(t,e,s),Ms(t,e,s)},Js=(t,e,s)=>{ye(t,e,s),Ws(t,e,s)},Ee=(t,e,s)=>{Fs(t)?Js(t,e,s):qs(t,e,s)},Ks=(t,e,s)=>{t.setAttribute("loading","lazy"),ye(t,e,s),Bs(t,e),$(t,it)},He=t=>{t.removeAttribute(b),t.removeAttribute(pe),t.removeAttribute(ue)},Zs=t=>{me(t,e=>{He(e)}),He(t)},mt=t=>{me(t,e=>{N(e,U)}),N(t,U)},Qs=t=>{lt(t,e=>{N(e,se)}),N(t,ht),t.load()},ei=t=>{N(t,se)},ti=t=>{N(t,dt)},si={IMG:mt,IFRAME:ei,VIDEO:Qs,OBJECT:ti},ii=t=>{const e=si[t.tagName];if(!e){Os(t);return}e(t)},ri=(t,e)=>{ve(t)||we(t)||(w(t,e.class_entered),w(t,e.class_exited),w(t,e.class_applied),w(t,e.class_loading),w(t,e.class_loaded),w(t,e.class_error))},ai=(t,e)=>{ii(t),ri(t,e),ee(t),ut(t)},oi=(t,e,s,i)=>{!s.cancel_on_exit||!Ss(t)||t.tagName==="IMG"&&(he(t),Zs(t),mt(t),w(t,s.class_loading),be(i,-1),ee(t),x(s.callback_cancel,t,e,i))},ni=(t,e,s,i)=>{const r=xs(t);$(t,bs),V(t,s.class_entered),w(t,s.class_exited),Cs(t,s,i),x(s.callback_enter,t,e,i),!r&&Ee(t,s,i)},ci=(t,e,s,i)=>{ve(t)||(V(t,s.class_exited),oi(t,e,s,i),x(s.callback_exit,t,e,i))},li=["IMG","IFRAME","VIDEO"],St=t=>t.use_native&&"loading"in HTMLImageElement.prototype,hi=(t,e,s)=>{t.forEach(i=>{li.indexOf(i.tagName)!==-1&&Ks(i,e,s)}),nt(s,0)},di=t=>t.isIntersecting||t.intersectionRatio>0,pi=t=>({root:t.container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}),ui=(t,e,s)=>{t.forEach(i=>di(i)?ni(i.target,i,e,s):ci(i.target,i,e,s))},gi=(t,e)=>{e.forEach(s=>{t.observe(s)})},fi=(t,e)=>{Is(t),gi(t,e)},vi=(t,e)=>{!qe||St(t)||(e._observer=new IntersectionObserver(s=>{ui(s,t,e)},pi(t)))},yt=t=>Array.prototype.slice.call(t),Z=t=>t.container.querySelectorAll(t.elements_selector),wi=t=>yt(t).filter(ve),bi=t=>ys(t),mi=t=>yt(t).filter(bi),De=(t,e)=>wi(t||Z(e)),Si=(t,e)=>{mi(Z(t)).forEach(i=>{w(i,t.class_error),ee(i)}),e.update()},yi=(t,e)=>{!E||(e._onlineHandler=()=>{Si(t,e)},window.addEventListener("online",e._onlineHandler))},Ei=t=>{!E||window.removeEventListener("online",t._onlineHandler)},j=function(t,e){const s=Ze(t);this._settings=s,this.loadingCount=0,vi(s,this),yi(s,this),this.update(e)};j.prototype={update:function(t){const e=this._settings,s=De(t,e);if(nt(this,s.length),Xe||!qe){this.loadAll(s);return}if(St(e)){hi(s,e,this);return}fi(this._observer,s)},destroy:function(){this._observer&&this._observer.disconnect(),Ei(this),Z(this._settings).forEach(t=>{ut(t)}),delete this._observer,delete this._settings,delete this._onlineHandler,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){const e=this._settings;De(t,e).forEach(i=>{te(i,this),Ee(i,e,this)})},restoreAll:function(){const t=this._settings;Z(t).forEach(e=>{ai(e,t)})}};j.load=(t,e)=>{const s=Ze(e);Ee(t,s)};j.resetStatus=t=>{ee(t)};E&&ws(j,window.lazyLoadOptions);class Et{constructor({readonly:e,box:s,pages:i,onNewPageIndex:r,onPlay:a}){if(this.pageIndex=0,this.namespace="netless-app-docs-viewer",this.isShowPreview=!1,this.isSmallBox=!1,this.sideEffect=new Q,i.length<=0)throw new Error("[DocsViewer] Empty pages.");this.readonly=e,this.box=s,this.pages=i,this.onNewPageIndex=r,this.onPlay=a,this.onPageIndexChanged=()=>{},this.render()}mount(){this.box.mountContent(this.$content),this.box.mountFooter(this.$footer),this.sideEffect.add(()=>{const e=new j({container:this.$preview,elements_selector:`.${this.wrapClassName("preview-page>img")}`});return()=>e.destroy()},"preview-lazyload")}unmount(){this.$content.remove(),this.$footer.remove()}setReadonly(e){this.readonly!==e&&(this.readonly=e,this.$content.classList.toggle(this.wrapClassName("readonly"),e),this.$footer.classList.toggle(this.wrapClassName("readonly"),e),this.$pageNumberInput.disabled=e)}destroy(){this.sideEffect.flushAll(),this.unmount()}setPageIndex(e){Number.isNaN(e)||(this.pageIndex=e,this.$pageNumberInput.value=String(e+1),this.onPageIndexChanged(e))}setSmallBox(e){this.isSmallBox!==e&&(this.isSmallBox=e,this.$footer.classList.toggle(this.wrapClassName("float-footer"),e))}render(){return this.renderContent(),this.renderFooter(),this.$content}renderContent(){if(!this.$content){const e=document.createElement("div");e.className=this.wrapClassName("content"),this.$content=e,this.readonly&&e.classList.add(this.wrapClassName("readonly")),e.appendChild(this.renderPreviewMask()),e.appendChild(this.renderPreview())}return this.$content}renderPreview(){if(!this.$preview){const e=document.createElement("div");e.className=this.wrapClassName("preview")+" tele-fancy-scrollbar",this.$preview=e;const s=this.wrapClassName("preview-page"),i=this.wrapClassName("preview-page-name");this.pages.forEach((r,a)=>{var o;const n=(o=r.thumbnail)!=null?o:r.src.startsWith("ppt")?void 0:r.src;if(!n)return;const c=String(a),l=document.createElement("a");l.className=s+" "+this.wrapClassName(`preview-page-${a}`),l.setAttribute("href","#"),l.dataset.pageIndex=c;const d=document.createElement("span");d.className=i,d.textContent=String(a+1),d.dataset.pageIndex=c;const h=document.createElement("img");h.width=r.width,h.height=r.height,h.dataset.src=n,h.dataset.pageIndex=c,l.appendChild(h),l.appendChild(d),e.appendChild(l)}),this.sideEffect.addEventListener(e,"click",r=>{var a;if(this.readonly)return;const o=(a=r.target.dataset)==null?void 0:a.pageIndex;o&&(r.preventDefault(),r.stopPropagation(),r.stopImmediatePropagation(),this.onNewPageIndex(Number(o)),this.togglePreview(!1))})}return this.$preview}renderPreviewMask(){return this.$previewMask||(this.$previewMask=document.createElement("div"),this.$previewMask.className=this.wrapClassName("preview-mask"),this.sideEffect.addEventListener(this.$previewMask,"click",e=>{this.readonly||e.target===this.$previewMask&&this.togglePreview(!1)})),this.$previewMask}renderFooter(){if(!this.$footer){const e=document.createElement("div");if(e.className=this.wrapClassName("footer"),this.$footer=e,this.readonly&&e.classList.add(this.wrapClassName("readonly")),this.isSmallBox&&e.classList.add(this.wrapClassName("float-footer")),this.pages.some(c=>c.thumbnail||!c.src.startsWith("ppt"))){const c=this.renderFooterBtn("btn-sidebar",ds(this.namespace));this.sideEffect.addEventListener(c,"click",()=>{this.readonly||this.togglePreview()}),this.$footer.appendChild(c)}const s=document.createElement("div");s.className=this.wrapClassName("page-jumps");const i=this.renderFooterBtn("btn-page-back",ps(this.namespace));if(this.sideEffect.addEventListener(i,"click",()=>{this.readonly||this.onNewPageIndex(this.pageIndex-1)}),s.appendChild(i),this.onPlay){const c=this.renderFooterBtn("btn-page-play",gs(this.namespace),fs(this.namespace)),l=()=>{this.sideEffect.setTimeout(()=>{c.classList.toggle(this.wrapClassName("footer-btn-playing"),!1)},500,"returnPlay")};this.sideEffect.addEventListener(c,"click",()=>{this.readonly||(c.classList.toggle(this.wrapClassName("footer-btn-playing"),!0),this.onPlay&&this.onPlay(),l())}),s.appendChild(c)}const r=this.renderFooterBtn("btn-page-next",us(this.namespace));this.sideEffect.addEventListener(r,"click",()=>{this.readonly||this.onNewPageIndex(this.pageIndex+1)}),s.appendChild(r);const a=document.createElement("div");a.className=this.wrapClassName("page-number");const o=document.createElement("input");o.className=this.wrapClassName("page-number-input"),o.value=String(this.pageIndex+1),this.readonly&&(o.disabled=!0),this.$pageNumberInput=o,this.sideEffect.addEventListener(o,"focus",()=>{o.select()}),this.sideEffect.addEventListener(o,"change",()=>{this.readonly||o.value&&this.onNewPageIndex(Number(o.value)-1)});const n=document.createElement("span");n.textContent=" / "+this.pages.length,a.appendChild(o),a.appendChild(n),this.$footer.appendChild(s),this.$footer.appendChild(a)}return this.$footer}renderFooterBtn(e,s,i){const r=document.createElement("button");return r.className=this.wrapClassName("footer-btn")+" "+this.wrapClassName(e),r.appendChild(s),i&&r.appendChild(i),r}togglePreview(e){if(this.isShowPreview=e!=null?e:!this.isShowPreview,this.$content.classList.toggle(this.wrapClassName("preview-active"),this.isShowPreview),this.isShowPreview){const s=this.$preview.querySelector("."+this.wrapClassName(`preview-page-${this.pageIndex}`));s&&this.$preview.scrollTo({top:s.offsetTop-16})}}wrapClassName(e){return`${this.namespace}-${e}`}}function z(t,e,s){return Math.min(Math.max(t,e),s)}function Me(t){return t.touches?t.touches[0]:t}function xt(t){t.stopPropagation(),t.cancelable&&t.preventDefault()}function Tt(t){if(!t)return!1;const e=t.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}class xi{constructor(e){var s,i,r;this.velocity=0,this.paused=!0,this._animationFrameID=null,this._loopTimestamp=0,this.looper=a=>{if(this.paused)return;let o=Math.floor((a-this._loopTimestamp)/1e3*60)+1;for(this._loopTimestamp=a;o-- >0;)this.stepper();this.onStep(this.current,this),!this.paused&&this.current!==this.target&&window.requestAnimationFrame(this.looper)},this.current=(s=e.start)!=null?s:0,this.target=this.current,this.stiffness=(i=e.stiffness)!=null?i:170,this.damping=(r=e.damping)!=null?r:26,this.onStep=e.onStep}stepTo(e,s){this.paused&&s!=null&&(this.current=s),this.paused=!1,this.target=e,this.onStep(this.current,this),this._loopTimestamp=Date.now(),window.requestAnimationFrame(this.looper)}pause(){this.paused=!0}destroy(){this.pause()}stepper(){const e=-this.stiffness*(this.current-this.target),s=-this.damping*this.velocity,i=this.velocity+(e+s)/60,r=this.current+i/60;Math.abs(i-0)<.01&&Math.abs(r-this.target)<.01?(this.current=this.target,this.velocity=0):(this.current=r,this.velocity=i)}}class Ti{constructor(e,s,i,r){this.scale=1,this.lastVisit=Date.now(),this.pageOffsetY=0,this.pageOffsetX=0,this.visible=!0,this.index=e,this.page=s,this.scale=i,this.pageOffsetX=(r-s.width)/2;const a=document.createElement("div");a.className="page-renderer-page",a.dataset.index=`${e}`,a.style.width=`${s.width*i}px`,a.style.height=`${s.height*i}px`,s.thumbnail&&(a.style.backgroundImage=`url("${s.thumbnail}")`);const o=document.createElement("img");o.className="page-renderer-page-img",o.width=s.width,o.height=s.height,o.src=s.src,a.appendChild(o),this.$page=a}translateY(e){Math.abs(e-this.pageOffsetY)>=.001&&(this.pageOffsetY=e,this.$page.style.transform=`translate(${this.pageOffsetX*this.scale}px, ${this.pageOffsetY*this.scale}px)`)}setScale(e){Math.abs(e-this.scale)>=.001&&(this.scale=e,this.$page.style.width=`${this.page.width*this.scale}px`,this.$page.style.height=`${this.page.height*this.scale}px`,this.$page.style.transform=`translate(${this.pageOffsetX*this.scale}px, ${this.pageOffsetY*this.scale}px)`)}setVisible(e){e!==this.visible&&(this.visible=e,this.$page.style.opacity=e?"1":"0")}}const _i=window.requestIdleCallback||(t=>window.setTimeout(t,5e3)),Ii=window.cancelIdleCallback||window.clearTimeout;class Ci{constructor(e,s,i){this.pages=e,this.pagesIntrinsicWidth=s,this.scale=i,this.els=new Map,this.maxElCount=200,this.gcTimer=null,this.gc=()=>{if(this.gcTimer=null,this.els.size>this.maxElCount){const r=[...this.els.values()].sort((a,o)=>o.lastVisit-a.lastVisit);for(let a=Math.floor(this.maxElCount/4);a<r.length;a++)this.els.delete(r[a].index)}}}getEl(e){let s=this.els.get(e);return s||(s=new Ti(e,this.pages[e],this.scale,this.pagesIntrinsicWidth),this.els.set(e,s)),s.lastVisit=Date.now(),this.els.size>this.maxElCount&&this.gcTimer===null&&(this.gcTimer=_i(this.gc)),s}setScale(e){e!==this.scale&&(this.scale=e,this.els.forEach(s=>s.setScale(e)))}destroy(){this.els.clear(),this.gcTimer!==null&&(Ii(this.gcTimer),this.gcTimer=null)}}class Ni{constructor(e){this._hwaTimeout=NaN,this._turnOffHWA=()=>{window.clearTimeout(this._hwaTimeout),this._hwaTimeout=NaN,this.$pages.classList.toggle("is-hwa",!1)},this.pagesScrollTop=e.pagesScrollTop||0,this.containerWidth=e.containerWidth||1,this.containerHeight=e.containerHeight||1,this.pages=e.pages.map(a=>{if(a.thumbnail)return a;try{const o=new URL(a.src);return o.searchParams.set("x-oss-process","image/resize,l_50"),{...a,thumbnail:o.toString()}}catch(o){return console.error(o),a}});const s=Array(this.pages.length);let i=1/0,r=0;this.pagesIntrinsicHeight=this.pages.reduce((a,o,n)=>(s[n]=a,o.width>r&&(r=o.width),o.height<=i&&(i=o.height),a+o.height),0),this.pagesIntrinsicWidth=r,this.pagesMinHeight=i,this.pagesIntrinsicYs=s,this.scale=this._calcScale(),this.threshold=this._calcThreshold(),this.onPageIndexChanged=e.onPageIndexChanged,this.pageScrollIndex=0,this.pagesScrollTop!==0&&(this.pageScrollIndex=this.findScrollPageIndex(),this.onPageIndexChanged&&this.pageScrollIndex>0&&this.onPageIndexChanged(this.pageScrollIndex)),this.pageElManager=new Ci(this.pages,r,this.scale),this.$pages=this.renderPages()}setContainerSize(e,s){e>0&&s>0&&(e!==this.containerWidth||s!==this.containerHeight)&&(this.containerWidth=e,this.containerHeight=s,this.$pages.style.width=`${this.containerWidth}px`,this.$pages.style.height=`${this.containerHeight}px`,this.scale=this._calcScale(),this.threshold=this._calcThreshold(),this.pageElManager.setScale(this.scale),this.$pages.parentElement&&this.pagesScrollTo(this.pagesScrollTop,!0))}renderPages(){const e=document.createElement("div");return e.className="page-renderer-pages-container",e.style.width=`${this.containerWidth}px`,e.style.height=`${this.containerHeight}px`,e}pagesScrollTo(e,s){if(e=z(e,0,this.pagesIntrinsicHeight-this.containerHeight/this.scale),s||Math.abs(e-this.pagesScrollTop)>=.001){this._turnOnHWA(),this.pagesScrollTop=e;const i=this.findScrollPageIndex(),r=Math.max(i-this.threshold,0),a=Math.min(i+this.threshold,this.pages.length-1);for(let o=0;o<this.$pages.children.length;o++){const n=this.$pages.children[o],c=Number(n.dataset.index);c>=r&&c<=a||(n.remove(),o--)}for(let o=r;o<=a;o++){const n=this.pageElManager.getEl(o);n.$page.parentElement!==this.$pages&&this.$pages.appendChild(n.$page),n.translateY(this.pagesIntrinsicYs[o]-this.pagesScrollTop)}i!==this.pageScrollIndex&&(this.pageScrollIndex=i,this.onPageIndexChanged&&this.onPageIndexChanged(i))}}findScrollPageIndex(){for(let e=0;e<this.pagesIntrinsicYs.length;e++)if(this.pagesIntrinsicYs[e]+this.pages[e].height-this.pagesScrollTop>=.001)return e;return this.pagesIntrinsicYs.length-1}mount(e){e.appendChild(this.$pages),this.pagesScrollTo(this.pagesScrollTop,!0)}unmount(){this.$pages.remove()}destroy(){this.unmount(),this.onPageIndexChanged=void 0,this.pageElManager.destroy(),this._hwaTimeout&&(window.clearTimeout(this._hwaTimeout),this._hwaTimeout=NaN)}_calcScale(){return this.containerWidth/this.pagesIntrinsicWidth||1}_calcThreshold(){return z(Math.ceil(this.containerHeight/this.scale/this.pagesMinHeight/2),1,this.pages.length)}_turnOnHWA(){this._hwaTimeout?window.clearTimeout(this._hwaTimeout):this.$pages.classList.toggle("is-hwa",!0),this._hwaTimeout=window.setTimeout(this._turnOffHWA,1e3)}}const $i=30;class Pi{constructor(e){this.sideEffect=new Q,this.pagesScrollTop=e.pagesScrollTop||0,this.containerWidth=e.containerWidth||1,this.containerHeight=e.containerHeight||1,this.pagesWidth=e.pagesWidth||1,this.pagesHeight=e.pagesHeight||1,this.scale=this._calcScale(),this.scrollbarMinHeight=e.scrollbarMinHeight||$i,this.scrollbarHeight=this._calcScrollbarHeight(),this.readonly=e.readonly,this.wrapClassName=e.wrapClassName,this.onDragScroll=e.onDragScroll,this.$scrollbar=this.renderScrollbar()}mount(e){e.appendChild(this.$scrollbar),this.pagesScrollTo(this.pagesScrollTop,!0)}unmount(){this.$scrollbar.remove()}setReadonly(e){this.readonly=e}setContainerSize(e,s){e>0&&s>0&&(e!==this.containerWidth||s!==this.containerHeight)&&(this.containerWidth=e,this.containerHeight=s,this.scale=this._calcScale(),this._updateScrollbarHeight(),this.$scrollbar.parentElement&&this.pagesScrollTo(this.pagesScrollTop,!0))}pagesScrollTo(e,s){if(e=z(e,0,this.pagesHeight-this.containerHeight/this.scale),s||Math.abs(e-this.pagesScrollTop)>=.001){this.pagesScrollTop=e;const i=this.pagesScrollTop*this.scale,r=this.pagesHeight*this.scale,a=i/(r-this.containerHeight)*(this.containerHeight-this.scrollbarHeight);window.requestAnimationFrame?window.requestAnimationFrame(()=>{this.$scrollbar.style.transform=`translateY(${a}px)`}):this.$scrollbar.style.transform=`translateY(${a}px)`}}destroy(){this.unmount(),this.onDragScroll=void 0,this.sideEffect.flushAll()}renderScrollbar(){const e=document.createElement("button");e.className=this.wrapClassName("scrollbar"),e.style.minHeight=`${this.scrollbarMinHeight}px`,e.style.height=`${this.scrollbarHeight}px`;const s=i=>{if(this.readonly||i.button!=null&&i.button!==0)return;xt(i);const r=this.wrapClassName("scrollbar-dragging");e.classList.toggle(r,!0);const a=this.pagesScrollTop,{clientY:o}=Me(i),n=l=>{if(this.readonly)return;const{clientY:d}=Me(l),h=(d-o)/this.scale;Math.abs(h)>0&&this.onDragScroll&&this.onDragScroll(a+h*(this.pagesHeight*this.scale/this.containerHeight))},c=()=>{e.classList.toggle(r,!1),window.removeEventListener("mousemove",n,!0),window.removeEventListener("touchmove",n,!0),window.removeEventListener("mouseup",c,!0),window.removeEventListener("touchend",c,!0),window.removeEventListener("touchcancel",c,!0)};window.addEventListener("mousemove",n,!0),window.addEventListener("touchmove",n,!0),window.addEventListener("mouseup",c,!0),window.addEventListener("touchend",c,!0),window.addEventListener("touchcancel",c,!0)};return this.sideEffect.addEventListener(e,"mousedown",s),this.sideEffect.addEventListener(e,"touchstart",s),e}_calcScale(){return this.containerWidth/this.pagesWidth||1}_calcScrollbarHeight(){return z(this.containerHeight/(this.pagesHeight*this.scale)*this.containerHeight,this.scrollbarMinHeight,this.containerHeight)}_updateScrollbarHeight(){const e=this._calcScrollbarHeight();Math.abs(e-this.scrollbarHeight)>.001&&(this.scrollbarHeight=e,this.$scrollbar.style.height=`${e}px`)}}const Ri=window.ResizeObserver||hs,M=640;class ki{constructor({context:e,whiteboardView:s,readonly:i,box:r,pages:a,pageScrollTop:o=0,mountWhiteboard:n,onUserScroll:c,baseScenePath:l,appId:d}){this.sideEffect=new Q,this.userScrolling=!1,this.docsViewReadonly=!1,this.onNewPageIndex=u=>{this.scrollToPage(u)},this.toPdf=async()=>{const u=document.createElement("canvas"),m=u.getContext("2d");if(!m||!this.baseScenePath){this.reportProgress(100,null);return}const H=this.whiteboardView.focusScenePath||`${this.baseScenePath}/1`,T=this.pages[0],{jsPDF:D}=await Promise.resolve().then(function(){return Nt(require("jspdf"))}),S=new D({format:[T.width,T.height],orientation:T.width>T.height?"l":"p",compress:!0});for(const[_,re]of this.pages.entries()){const{width:f,height:p,src:k}=re;u.width=f,u.height=p;const ae=f>p?"l":"p";_>0&&S.addPage([f,p],ae);const oe=await this.getBase64FromUrl(k),O=document.createElement("img");O.src=oe,await new Promise(Ct=>O.onload=Ct),m.drawImage(O,0,0);const _t=u.toDataURL("image/png");m.clearRect(0,0,f,p);const xe={centerX:f/2,centerY:p/2+_*p,scale:1},Te=this.context.manager.windowManger;Te._appliancePlugin?await Te._appliancePlugin.screenshotToCanvasAsync(m,H,f,p,xe):this.whiteboardView.screenshotToCanvas(m,H,f,p,xe);const It=u.toDataURL("image/png");S.addImage(_t,"PNG",0,0,f,p,"","FAST"),S.addImage(It,"PNG",0,0,f,p,"","FAST"),m.clearRect(0,0,f,p),Math.ceil((_+1)/this.pages.length*100)<100&&this.reportProgress(Math.ceil((_+1)/this.pages.length*100),null)}const G=S.output("arraybuffer");this.reportProgress(100,{pdf:G,title:this.box.title})},this.context=e,this.whiteboardView=s,this.readonly=i,this.box=r,this.pages=a,this.baseScenePath=l,this.appId=d,this.mountWhiteboard=n,this._onUserScroll=c;const h=this.debounce(()=>{this.userScrolling=!1,this._onUserScroll&&this._onUserScroll(this.pageRenderer.pagesScrollTop)},{wait:80},"debounce-updateUserScroll");this.updateUserScroll=()=>{this.userScrolling=!0,h()},this.viewer=new Et({readonly:i,box:r,pages:a,onNewPageIndex:this.onNewPageIndex});const{width:P,height:R}=this.whiteboardView.size;this.pageRenderer=new Ni({pagesScrollTop:o,pages:this.pages,containerWidth:P,containerHeight:R,onPageIndexChanged:this.viewer.setPageIndex.bind(this.viewer)}),this.scrollbar=new Pi({pagesScrollTop:this.pageRenderer.pagesScrollTop,containerWidth:P,containerHeight:R,pagesWidth:this.pageRenderer.pagesIntrinsicWidth,pagesHeight:this.pageRenderer.pagesIntrinsicHeight,readonly:this.readonly,wrapClassName:this.wrapClassName.bind(this),onDragScroll:u=>{this.pageScrollTo(u),this.updateUserScroll()}}),this.pageScrollStepper=new xi({start:this.pageRenderer.pagesScrollTop,onStep:u=>{this.pageScrollTo(u)}}),this.render()}setDocsViewReadonly(e){this.docsViewReadonly=e}mount(){this.viewer.mount(),this.setupScrollListener();const e=this.debounce(this.renderRatioHeight.bind(this),{wait:80});return this.sideEffect.add(()=>{const s=new Ri(e);return s.observe(this.viewer.$content),()=>s.disconnect()}),this.sideEffect.setTimeout(()=>{this.userScrolling||this.pageScrollTo(this.pageRenderer.pagesScrollTop)},100),this.sideEffect.add(()=>{const s=i=>{i.data.type==="@netless/_request_save_pdf_"&&i.data.appId===this.appId&&this.toPdf().catch(()=>this.reportProgress(100,null))};return window.addEventListener("message",s),()=>{window.removeEventListener("message",s)}}),this}unmount(){return this.viewer.unmount(),this}setReadonly(e){this.readonly!==e&&(this.readonly=e,this.viewer.setReadonly(e),this.scrollbar.setReadonly(e))}destroy(){this.sideEffect.flushAll(),this.pageScrollStepper.destroy(),this._onUserScroll=void 0,this.unmount(),this.viewer.destroy(),this.pageRenderer.destroy(),this.scrollbar.destroy()}syncPageScrollTop(e){!this.userScrolling&&e>=0&&Math.abs(this.pageRenderer.pagesScrollTop-e)>.01&&this.pageScrollStepper.stepTo(e,this.pageRenderer.pagesScrollTop)}render(){this.pageRenderer.mount(this.viewer.$content),this.viewer.$content.appendChild(this.renderWhiteboardView()),this.scrollbar.mount(this.viewer.$content),this.renderRatioHeight()}renderRatioHeight(){const e=this.box.absoluteHeight,s=e<=M;if(this.viewer.setSmallBox(s),s){const i=26/M,r=26/e,a=26/M,o=0,n=Math.max((i+a-(r+o))/2,0);if(this.box.$titleBar){const c=r+n;this.box.$titleBar.style.height=`${c*100}%`}if(this.box.$footer){const c=o+n;this.box.$footer.style.height=`${c*100}%`}}else{if(this.box.$titleBar){const i=Math.max(26/M,26/e);this.box.$titleBar.style.height=`${i*100}%`}if(this.box.$footer){const i=Math.max(26/M,26/e);this.box.$footer.style.height=`${i*100}%`}}}renderWhiteboardView(){return this.$whiteboardView||(this.$whiteboardView=document.createElement("div"),this.$whiteboardView.className=this.wrapClassName("wb-view"),this.mountWhiteboard(this.$whiteboardView),this.sideEffect.addEventListener(this.$whiteboardView,"wheel",e=>{xt(e),this.readonly||(this.pageScrollTo(this.pageRenderer.pagesScrollTop+e.deltaY),this.updateUserScroll())},{passive:!1,capture:!0}),this.sideEffect.addEventListener(this.$whiteboardView,"touchmove",e=>{this.readonly||e.touches.length<=1||this.updateUserScroll()},{passive:!0,capture:!0})),this.$whiteboardView}scrollTopPageToEl(e){return e*this.pageRenderer.scale}scrollTopElToPage(e){return e/this.pageRenderer.scale}elScrollTo(e){this.pageScrollTo(this.scrollTopElToPage(e))}pageScrollTo(e){const s=this.scrollTopElToPage(this.whiteboardView.size.height/2);this.whiteboardView.moveCamera({centerY:z(e+s,s,this.pageRenderer.pagesIntrinsicHeight-s),animationMode:"immediately"})}scrollToPage(e){if(!this.readonly&&!Number.isNaN(e)){const s=this.pageRenderer.pagesIntrinsicYs[e];s>=0&&(this.pageScrollTo(s+5/this.pageRenderer.scale),this.updateUserScroll())}}setupScrollListener(){this.sideEffect.add(()=>{const e=s=>{const{width:i,height:r}=this.whiteboardView.size;if(i<=0||r<=0)return;const a=s.centerY-this.pageRenderer.containerHeight/this.pageRenderer.scale/2;this.pageRenderer.pagesScrollTo(a),this.scrollbar.pagesScrollTo(a)};return this.whiteboardView.callbacks.on("onCameraUpdated",e),()=>this.whiteboardView.callbacks.off("onCameraUpdated",e)}),this.sideEffect.add(()=>{const{updateUserScroll:e}=this;return this.whiteboardView.callbacks.on("onCameraUpdatedByDevice",e),()=>this.whiteboardView.callbacks.off("onCameraUpdatedByDevice",e)}),this.sideEffect.add(()=>{const e=({width:s,height:i})=>{if(s<=0||i<=0)return;this.pageRenderer.setContainerSize(s,i),this.scrollbar.setContainerSize(s,i);const{pagesIntrinsicWidth:r,pagesIntrinsicHeight:a}=this.pageRenderer;this.whiteboardView.moveCameraToContain({originX:0,originY:this.pageRenderer.pagesScrollTop,width:r,height:i/this.pageRenderer.scale,animationMode:"immediately"}),this.whiteboardView.setCameraBound({damping:1,maxContentMode:()=>this.pageRenderer.scale,minContentMode:()=>this.pageRenderer.scale,centerX:r/2,centerY:a/2,width:r,height:a})};return this.whiteboardView.callbacks.on("onSizeUpdated",e),()=>{this.whiteboardView.callbacks.off("onSizeUpdated",e)}},"whiteboard-size-update"),this.sideEffect.addEventListener(window,"keyup",e=>{if(this.readonly||!this.box.focus||this.box.minimized||Tt(e.target)||this.docsViewReadonly)return;let s=null;switch(e.key){case"PageDown":{s=this.pageRenderer.pagesScrollTop+this.pageRenderer.containerHeight/this.pageRenderer.scale;break}case"PageUp":{s=this.pageRenderer.pagesScrollTop-this.pageRenderer.containerHeight/this.pageRenderer.scale;break}case"ArrowDown":{s=this.pageRenderer.pagesScrollTop+this.pageRenderer.containerHeight/4/this.pageRenderer.scale;break}case"ArrowUp":{s=this.pageRenderer.pagesScrollTop-this.pageRenderer.containerHeight/4/this.pageRenderer.scale;break}}s!==null&&(this._onUserScroll?this._onUserScroll(s):(this.pageScrollTo(s),this.updateUserScroll()))},{capture:!0})}debounce(e,s,i){const r=Ht(e,s);return this.sideEffect.addDisposer(()=>r.cancel(),i),r}wrapClassName(e){return"netless-app-docs-viewer-static-"+e}async getBase64FromUrl(e){const i=await(await fetch(this._invalidate(e))).blob();return new Promise(r=>{const a=new FileReader;a.readAsDataURL(i),a.onloadend=()=>{const o=a.result;r(o)}})}_invalidate(e){try{const s=new URL(e);return s.searchParams.set("t",Date.now().toString()),s.toString()}catch{return e}}reportProgress(e,s){window.postMessage({type:"@netless/_result_save_pdf_",appId:this.appId,progress:e,result:s})}}class Oi{constructor({context:e,whiteboardView:s,box:i,pages:r}){this.sideEffect=new Q,this.docsViewReadonly=!1,this.onPlayPPT=()=>{const a=this.context.getRoom();a&&a.pptNextStep()},this._scaleDocsToFitImpl=()=>{const a=this.pages[this.getPageIndex()];a&&(this.whiteboardView.moveCameraToContain({originX:-a.width/2,originY:-a.height/2,width:a.width,height:a.height,animationMode:"immediately"}),this.whiteboardView.setCameraBound({damping:1,maxContentMode:()=>this.whiteboardView.camera.scale,minContentMode:()=>this.whiteboardView.camera.scale,centerX:0,centerY:0,width:a.width,height:a.height}))},this._scaleDocsToFitDebounced=()=>{this.sideEffect.setTimeout(this._scaleDocsToFitImpl,1e3,"_scaleDocsToFitDebounced")},this.scaleDocsToFit=()=>{this._scaleDocsToFitImpl(),this._scaleDocsToFitDebounced()},this.onNewPageIndex=a=>{this.jumpToPage(a,!0)},this.context=e,this.whiteboardView=s,this.box=i,this.pages=r,this.displayer=e.getDisplayer(),this.viewer=new Et({readonly:!e.getIsWritable(),box:i,pages:r,onNewPageIndex:this.onNewPageIndex,onPlay:this.onPlayPPT}),this.render(),this.sideEffect.add(()=>{const a=o=>{this.viewer.setReadonly(!o)};return this.context.emitter.on("writableChange",a),()=>this.context.emitter.off("writableChange",a)}),this.sideEffect.add(()=>{const a=o=>{this.jumpToPage(o.index)};return this.context.emitter.on("sceneStateChange",a),()=>this.context.emitter.off("sceneStateChange",a)})}setDocsViewReadonly(e){this.docsViewReadonly=e}mount(){this.viewer.mount();const e=this.getPageIndex();return e!==0&&this.jumpToPage(e),this.scaleDocsToFit(),this.sideEffect.add(()=>(this.whiteboardView.callbacks.on("onSizeUpdated",this.scaleDocsToFit),()=>{this.whiteboardView.callbacks.off("onSizeUpdated",this.scaleDocsToFit)})),this}unmount(){return this.viewer.unmount(),this}destroy(){this.sideEffect.flushAll(),this.unmount(),this.viewer.destroy()}getPageIndex(){return this.displayer.state.sceneState.index}jumpToPage(e,s){var i,r;if(e=z(e,0,this.pages.length-1),e!==this.getPageIndex()&&this.context.getIsWritable()){const a=this.context.getInitScenePath(),o=(r=(i=this.context.getScenes())==null?void 0:i[e])==null?void 0:r.name;a&&o&&this.context.setScenePath(`${a}/${o}`),this.scaleDocsToFit()}if(e!==this.viewer.pageIndex&&this.viewer.setPageIndex(e),s){const a=this.context.getRoom();if(a){const o=a.state.globalState.__pptState;a.setGlobalState({__pptState:o&&{uuid:o.uuid,pageIndex:e,disableAutoPlay:o.disableAutoPlay}})}}}render(){this.viewer.$content.appendChild(this.renderMask()),this.viewer.$content.appendChild(this.renderWhiteboardView()),this.sideEffect.addEventListener(window,"keydown",e=>{var s;if(!this.docsViewReadonly&&this.box.focus&&!Tt(e.target))switch(e.key){case"ArrowUp":case"ArrowLeft":{this.jumpToPage(this.getPageIndex()-1,!0);break}case"ArrowRight":case"ArrowDown":{(s=this.context.getRoom())==null||s.pptNextStep();break}}})}renderMask(){if(!this.$mask){const e=document.createElement("div");e.className=this.wrapClassName("mask"),this.$mask=e;const s=document.createElement("button");s.className=this.wrapClassName("back");const i=document.createElement("button");i.className=this.wrapClassName("next")}return this.$mask}renderWhiteboardView(){return this.$whiteboardView||(this.$whiteboardView=document.createElement("div"),this.$whiteboardView.className=this.wrapClassName("wb-view"),this.sideEffect.addEventListener(this.$whiteboardView,"click",e=>{var s;const i=this.context.getRoom();if(i&&i.state.memberState.currentApplianceName==="clicker"){for(let r=e.target;r;r=r.parentElement)if((s=r.classList)!=null&&s.contains("ppt-event-source"))return;i.pptNextStep()}}),this.context.mountView(this.$whiteboardView)),this.$whiteboardView}wrapClassName(e){return"netless-app-docs-viewer-dynamic-"+e}}const Li="DocsViewer",Ai={kind:Li,setup(t){const e=t.getBox(),s=t.getScenes();if(!s)throw new Error("[Docs Viewer]: scenes not found.");const i=t.getView();if(!i)throw new Error("[Docs Viewer]: no whiteboard view.");const r=s.map(({ppt:n})=>n?{width:n.width,height:n.height,src:n.src,thumbnail:n.previewURL}:null).filter(n=>Boolean(n));if(r.length<=0)throw new Error("[Docs Viewer]: empty scenes.");e.mountStyles($t);let a=null;return r[0].src.startsWith("ppt")?a=Vi(t,i,e,r):a=zi(t,i,e,r),(t.getAppOptions()||{}).justDocsViewReadonly&&a.setDocsViewReadonly(!0),{setDocsViewReadonly:n=>{a==null||a.setDocsViewReadonly(n)}}}};function zi(t,e,s,i){var r;e.disableCameraTransform=!t.getIsWritable();const a=new ki({context:t,whiteboardView:e,readonly:!t.getIsWritable(),box:s,pages:i,pageScrollTop:(r=t.getAttributes())==null?void 0:r.pageScrollTop,mountWhiteboard:t.mountView.bind(t),onUserScroll:o=>{var n;((n=t.getAttributes())==null?void 0:n.pageScrollTop)!==o&&!s.readonly&&t.updateAttributes(["pageScrollTop"],o)},baseScenePath:t.getInitScenePath(),appId:t.appId}).mount();return a.viewer.onPageIndexChanged=o=>{t.dispatchAppEvent("pageStateChange",{index:o,length:i.length})},t.dispatchAppEvent("pageStateChange",{index:a.viewer.pageIndex,length:i.length}),t.emitter.on("attributesUpdate",o=>{o&&o.pageScrollTop!=null&&a.syncPageScrollTop(o.pageScrollTop)}),t.emitter.on("writableChange",o=>{a.setReadonly(!o),e.disableCameraTransform=!o}),a}function Vi(t,e,s,i){e.disableCameraTransform=!0;const r=new Oi({context:t,whiteboardView:e,box:s,pages:i}).mount();return r.viewer.onPageIndexChanged=a=>{t.dispatchAppEvent("pageStateChange",{index:a,length:i.length})},t.dispatchAppEvent("pageStateChange",{index:r.getPageIndex(),length:i.length}),t.mountView(r.$whiteboardView),t.isAddApp&&e.callbacks.once("onSizeUpdated",({width:a,height:o})=>{if(i.length>0&&s.state!=="maximized"){const{width:n,height:c}=i[0],d=c/n*a-o;d!==0&&t.getIsWritable()&&t.emitter.emit("setBoxSize",{width:s.width,height:s.height+d/s.containerRect.height})}}),r}exports.default=Ai;
|
|
4
|
-
//# sourceMappingURL=app-docs-viewer.js.map
|