@netless/window-manager 0.4.49 → 0.4.51

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.es.js CHANGED
@@ -2681,6 +2681,9 @@ class AppManager {
2681
2681
  });
2682
2682
  this.mainViewProxy.onReconnect();
2683
2683
  await Promise.all(reconnected);
2684
+ if (this.callbacksNode) {
2685
+ this.onSceneChange(this.callbacksNode);
2686
+ }
2684
2687
  }
2685
2688
  notifyContainerRectUpdate(rect) {
2686
2689
  this.appProxies.forEach((appProxy) => {
@@ -2879,7 +2882,7 @@ var objectAssign = shouldUseNative$1() ? Object.assign : function(target, source
2879
2882
  * This source code is licensed under the MIT license found in the
2880
2883
  * LICENSE file in the root directory of this source tree.
2881
2884
  */
2882
- var l$1 = objectAssign, n$2 = typeof Symbol === "function" && Symbol.for, p = n$2 ? Symbol.for("react.element") : 60103, q = n$2 ? Symbol.for("react.portal") : 60106, r$4 = n$2 ? Symbol.for("react.fragment") : 60107, t$3 = n$2 ? Symbol.for("react.strict_mode") : 60108, u$3 = n$2 ? Symbol.for("react.profiler") : 60114, v$2 = n$2 ? Symbol.for("react.provider") : 60109, w$1 = n$2 ? Symbol.for("react.context") : 60110, x$1 = n$2 ? Symbol.for("react.forward_ref") : 60112, y$1 = n$2 ? Symbol.for("react.suspense") : 60113, z$1 = n$2 ? Symbol.for("react.memo") : 60115, A$1 = n$2 ? Symbol.for("react.lazy") : 60116, B$1 = typeof Symbol === "function" && Symbol.iterator;
2885
+ var l$1 = objectAssign, n$3 = typeof Symbol === "function" && Symbol.for, p = n$3 ? Symbol.for("react.element") : 60103, q = n$3 ? Symbol.for("react.portal") : 60106, r$4 = n$3 ? Symbol.for("react.fragment") : 60107, t$3 = n$3 ? Symbol.for("react.strict_mode") : 60108, u$3 = n$3 ? Symbol.for("react.profiler") : 60114, v$2 = n$3 ? Symbol.for("react.provider") : 60109, w$1 = n$3 ? Symbol.for("react.context") : 60110, x$1 = n$3 ? Symbol.for("react.forward_ref") : 60112, y$1 = n$3 ? Symbol.for("react.suspense") : 60113, z$1 = n$3 ? Symbol.for("react.memo") : 60115, A$1 = n$3 ? Symbol.for("react.lazy") : 60116, B$1 = typeof Symbol === "function" && Symbol.iterator;
2883
2886
  function C$2(a2) {
2884
2887
  for (var b2 = "https://reactjs.org/docs/error-decoder.html?invariant=" + a2, c2 = 1; c2 < arguments.length; c2++)
2885
2888
  b2 += "&args[]=" + encodeURIComponent(arguments[c2]);
@@ -4232,7 +4235,7 @@ const e$1$1 = "!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn
4232
4235
  t$1$1[r2] = e$1$1.charAt(Math.random() * s$1$1);
4233
4236
  return t$1$1.join("");
4234
4237
  };
4235
- class o$2 {
4238
+ class o$1 {
4236
4239
  constructor() {
4237
4240
  this.disposers = /* @__PURE__ */ new Map();
4238
4241
  }
@@ -4338,7 +4341,7 @@ function t$2(e2, s2, t2, i2) {
4338
4341
  u2.addBeforeDestroy(t3);
4339
4342
  }), u2;
4340
4343
  }
4341
- function i$1(e2, s2) {
4344
+ function i$2(e2, s2) {
4342
4345
  Object.keys(s2).forEach((r2) => {
4343
4346
  u$2(e2, r2, s2[r2]);
4344
4347
  });
@@ -4443,7 +4446,7 @@ class DefaultTitleBar {
4443
4446
  state = TELE_BOX_STATE.Normal
4444
4447
  } = {}) {
4445
4448
  this.$btns = [];
4446
- this.sideEffect = new o$2();
4449
+ this.sideEffect = new o$1();
4447
4450
  this.lastTitleBarClick = {
4448
4451
  timestamp: 0,
4449
4452
  clientX: -100,
@@ -4665,12 +4668,12 @@ class TeleBox {
4665
4668
  },
4666
4669
  collectorRect
4667
4670
  } = {}) {
4668
- this._renderSideEffect = new o$2();
4671
+ this._renderSideEffect = new o$1();
4669
4672
  this.handleTrackStart = (ev) => {
4670
4673
  var _a;
4671
4674
  return (_a = this._handleTrackStart) == null ? void 0 : _a.call(this, ev);
4672
4675
  };
4673
- this._sideEffect = new o$2();
4676
+ this._sideEffect = new o$1();
4674
4677
  this._valSideEffectBinder = c(this._sideEffect);
4675
4678
  const { combine, createVal } = this._valSideEffectBinder;
4676
4679
  this.id = id2;
@@ -4906,7 +4909,7 @@ class TeleBox {
4906
4909
  $userFooter: $userFooter$,
4907
4910
  $userStyles: $userStyles$
4908
4911
  };
4909
- i$1(this, valConfig);
4912
+ i$2(this, valConfig);
4910
4913
  this._state$ = state$;
4911
4914
  this._minSize$ = minSize$;
4912
4915
  this._size$ = size$;
@@ -5630,7 +5633,7 @@ class TeleBoxManager {
5630
5633
  readonly = false
5631
5634
  } = {}) {
5632
5635
  this.events = new EventEmitter();
5633
- this._sideEffect = new o$2();
5636
+ this._sideEffect = new o$1();
5634
5637
  const { combine, createVal } = c(this._sideEffect);
5635
5638
  this.root = root;
5636
5639
  this.namespace = namespace;
@@ -5826,7 +5829,7 @@ class TeleBoxManager {
5826
5829
  minimized: minimized$,
5827
5830
  maximized: maximized$
5828
5831
  };
5829
- i$1(this, valConfig);
5832
+ i$2(this, valConfig);
5830
5833
  this._state$ = state$;
5831
5834
  this.root.appendChild(this.maxTitleBar.render());
5832
5835
  }
@@ -7586,7 +7589,7 @@ var __spreadValues2 = (a2, b2) => {
7586
7589
  return a2;
7587
7590
  };
7588
7591
  var __spreadProps2 = (a2, b2) => __defProps2(a2, __getOwnPropDescs2(b2));
7589
- var styles = ".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}\n";
7592
+ var styles = /* @__PURE__ */ (() => ".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}\n")();
7590
7593
  const copyProperty = (to, from, property, ignoreNonConfigurable) => {
7591
7594
  if (property === "length" || property === "prototype") {
7592
7595
  return;
@@ -7692,59 +7695,63 @@ const debounceFn = (inputFunction, options = {}) => {
7692
7695
  };
7693
7696
  return debouncedFunction;
7694
7697
  };
7695
- const e$1 = "!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", s$1 = e$1.length, t$1 = Array(20), r$2 = () => {
7696
- for (let r2 = 0; r2 < 20; r2++)
7697
- t$1[r2] = e$1.charAt(Math.random() * s$1);
7698
+ const s$1 = "!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", e$1 = s$1.length, t$1 = Array(20), i$1 = () => {
7699
+ for (let i2 = 0; i2 < 20; i2++)
7700
+ t$1[i2] = s$1.charAt(Math.random() * e$1);
7698
7701
  return t$1.join("");
7699
7702
  };
7700
- class o$1 {
7703
+ function r$2(s2) {
7704
+ try {
7705
+ return s2();
7706
+ } catch (e2) {
7707
+ console.error(e2);
7708
+ }
7709
+ }
7710
+ class n$2 {
7701
7711
  constructor() {
7702
7712
  this.disposers = /* @__PURE__ */ new Map();
7703
7713
  }
7704
- add(e2, s2 = r$2()) {
7705
- return this.flush(s2), this.disposers.set(s2, e2()), s2;
7714
+ addDisposer(s2, e2 = this.genUID()) {
7715
+ return this.flush(e2), this.disposers.set(e2, Array.isArray(s2) ? () => s2.forEach(r$2) : s2), e2;
7706
7716
  }
7707
- addDisposer(e2, s2 = r$2()) {
7708
- return this.flush(s2), this.disposers.set(s2, e2), s2;
7717
+ add(s2, e2 = this.genUID()) {
7718
+ return this.addDisposer(s2(), e2);
7709
7719
  }
7710
- addEventListener(e2, s2, t2, o2, i2 = r$2()) {
7711
- return this.add(() => (e2.addEventListener(s2, t2, o2), () => e2.removeEventListener(s2, t2, o2)), i2), i2;
7720
+ addEventListener(s2, e2, t2, i2, r2 = this.genUID()) {
7721
+ return s2.addEventListener(e2, t2, i2), this.addDisposer(() => s2.removeEventListener(e2, t2, i2), r2), r2;
7712
7722
  }
7713
- setTimeout(e2, s2, t2 = r$2()) {
7714
- return this.add(() => {
7715
- const r2 = window.setTimeout(() => {
7716
- this.remove(t2), e2();
7717
- }, s2);
7718
- return () => window.clearTimeout(r2);
7719
- }, t2);
7723
+ setTimeout(s2, e2, t2 = this.genUID()) {
7724
+ const i2 = window.setTimeout(() => {
7725
+ this.remove(t2), s2();
7726
+ }, e2);
7727
+ return this.addDisposer(() => window.clearTimeout(i2), t2);
7720
7728
  }
7721
- setInterval(e2, s2, t2 = r$2()) {
7722
- return this.add(() => {
7723
- const t3 = window.setInterval(e2, s2);
7724
- return () => window.clearInterval(t3);
7725
- }, t2);
7729
+ setInterval(s2, e2, t2 = this.genUID()) {
7730
+ const i2 = window.setInterval(s2, e2);
7731
+ return this.addDisposer(() => window.clearInterval(i2), t2);
7726
7732
  }
7727
- remove(e2) {
7728
- const s2 = this.disposers.get(e2);
7729
- return this.disposers.delete(e2), s2;
7733
+ remove(s2) {
7734
+ const e2 = this.disposers.get(s2);
7735
+ return this.disposers.delete(s2), e2;
7730
7736
  }
7731
- flush(e2) {
7732
- const s2 = this.remove(e2);
7733
- if (s2)
7737
+ flush(s2) {
7738
+ const e2 = this.remove(s2);
7739
+ if (e2)
7734
7740
  try {
7735
- s2();
7741
+ e2();
7736
7742
  } catch (t2) {
7737
7743
  console.error(t2);
7738
7744
  }
7739
7745
  }
7740
7746
  flushAll() {
7741
- this.disposers.forEach((e2) => {
7742
- try {
7743
- e2();
7744
- } catch (s2) {
7745
- console.error(s2);
7746
- }
7747
- }), this.disposers.clear();
7747
+ this.disposers.forEach(r$2), this.disposers.clear();
7748
+ }
7749
+ genUID() {
7750
+ let s2;
7751
+ do {
7752
+ s2 = i$1();
7753
+ } while (this.disposers.has(s2));
7754
+ return s2;
7748
7755
  }
7749
7756
  }
7750
7757
  var resizeObservers = [];
@@ -8329,6 +8336,7 @@ const defaultSettings = {
8329
8336
  data_bg_hidpi: "bg-hidpi",
8330
8337
  data_bg_multi: "bg-multi",
8331
8338
  data_bg_multi_hidpi: "bg-multi-hidpi",
8339
+ data_bg_set: "bg-set",
8332
8340
  data_poster: "poster",
8333
8341
  class_applied: "applied",
8334
8342
  class_loading: "loading",
@@ -8347,7 +8355,8 @@ const defaultSettings = {
8347
8355
  callback_error: null,
8348
8356
  callback_finish: null,
8349
8357
  callback_cancel: null,
8350
- use_native: false
8358
+ use_native: false,
8359
+ restore_on_error: false
8351
8360
  };
8352
8361
  const getExtendedSettings = (customSettings) => {
8353
8362
  return Object.assign({}, defaultSettings, customSettings);
@@ -8619,6 +8628,20 @@ const setMultiBackground = (element2, settings, instance2) => {
8619
8628
  element2.style.backgroundImage = bgDataValue;
8620
8629
  manageApplied(element2, settings, instance2);
8621
8630
  };
8631
+ const setImgsetBackground = (element2, settings, instance2) => {
8632
+ const bgImgSetDataValue = getData(element2, settings.data_bg_set);
8633
+ if (!bgImgSetDataValue) {
8634
+ return;
8635
+ }
8636
+ const imgSetValues = bgImgSetDataValue.split("|");
8637
+ let bgImageValues = imgSetValues.map((value) => `image-set(${value})`);
8638
+ element2.style.backgroundImage = bgImageValues.join();
8639
+ if (element2.style.backgroundImage === "") {
8640
+ bgImageValues = imgSetValues.map((value) => `-webkit-image-set(${value})`);
8641
+ element2.style.backgroundImage = bgImageValues.join();
8642
+ }
8643
+ manageApplied(element2, settings, instance2);
8644
+ };
8622
8645
  const setSourcesFunctions = {
8623
8646
  IMG: setSourcesImg,
8624
8647
  IFRAME: setSourcesIframe,
@@ -8699,6 +8722,8 @@ const errorHandler = (event, element2, settings, instance2) => {
8699
8722
  addClass(element2, settings.class_error);
8700
8723
  setStatus(element2, statusError);
8701
8724
  safeCallback(settings.callback_error, element2, instance2);
8725
+ if (settings.restore_on_error)
8726
+ restoreOriginalAttrs(element2, attrsSrcSrcsetSizes);
8702
8727
  if (!goingNative)
8703
8728
  checkFinish(settings, instance2);
8704
8729
  };
@@ -8723,6 +8748,7 @@ const loadBackground = (element2, settings, instance2) => {
8723
8748
  saveOriginalBackgroundStyle(element2);
8724
8749
  setBackground(element2, settings, instance2);
8725
8750
  setMultiBackground(element2, settings, instance2);
8751
+ setImgsetBackground(element2, settings, instance2);
8726
8752
  };
8727
8753
  const loadRegular = (element2, settings, instance2) => {
8728
8754
  addOneShotEventListeners(element2, settings, instance2);
@@ -8889,9 +8915,16 @@ const setOnlineCheck = (settings, instance2) => {
8889
8915
  if (!runningOnBrowser) {
8890
8916
  return;
8891
8917
  }
8892
- window.addEventListener("online", () => {
8918
+ instance2._onlineHandler = () => {
8893
8919
  retryLazyLoad(settings, instance2);
8894
- });
8920
+ };
8921
+ window.addEventListener("online", instance2._onlineHandler);
8922
+ };
8923
+ const resetOnlineCheck = (instance2) => {
8924
+ if (!runningOnBrowser) {
8925
+ return;
8926
+ }
8927
+ window.removeEventListener("online", instance2._onlineHandler);
8895
8928
  };
8896
8929
  const LazyLoad = function(customSettings, elements) {
8897
8930
  const settings = getExtendedSettings(customSettings);
@@ -8920,11 +8953,13 @@ LazyLoad.prototype = {
8920
8953
  if (this._observer) {
8921
8954
  this._observer.disconnect();
8922
8955
  }
8956
+ resetOnlineCheck(this);
8923
8957
  queryElements(this._settings).forEach((element2) => {
8924
8958
  deleteOriginalAttrs(element2);
8925
8959
  });
8926
8960
  delete this._observer;
8927
8961
  delete this._settings;
8962
+ delete this._onlineHandler;
8928
8963
  delete this.loadingCount;
8929
8964
  delete this.toLoadCount;
8930
8965
  },
@@ -8959,7 +8994,7 @@ class DocsViewer {
8959
8994
  this.namespace = "netless-app-docs-viewer";
8960
8995
  this.isShowPreview = false;
8961
8996
  this.isSmallBox = false;
8962
- this.sideEffect = new o$1();
8997
+ this.sideEffect = new n$2();
8963
8998
  if (pages.length <= 0) {
8964
8999
  throw new Error("[DocsViewer] Empty pages.");
8965
9000
  }
@@ -9514,7 +9549,7 @@ class PageRenderer {
9514
9549
  const SCROLLBAR_DEFAULT_MIN_HEIGHT = 30;
9515
9550
  class ScrollBar {
9516
9551
  constructor(config) {
9517
- this.sideEffect = new o$1();
9552
+ this.sideEffect = new n$2();
9518
9553
  this.pagesScrollTop = config.pagesScrollTop || 0;
9519
9554
  this.containerWidth = config.containerWidth || 1;
9520
9555
  this.containerHeight = config.containerHeight || 1;
@@ -9641,17 +9676,68 @@ class StaticDocsViewer {
9641
9676
  pages,
9642
9677
  pageScrollTop = 0,
9643
9678
  mountWhiteboard,
9644
- onUserScroll
9679
+ onUserScroll,
9680
+ baseScenePath,
9681
+ appId
9645
9682
  }) {
9646
- this.sideEffect = new o$1();
9683
+ this.sideEffect = new n$2();
9647
9684
  this.userScrolling = false;
9648
9685
  this.onNewPageIndex = (index2) => {
9649
9686
  this.scrollToPage(index2);
9650
9687
  };
9688
+ this.toPdf = async () => {
9689
+ const whiteSnapshotCanvas = document.createElement("canvas");
9690
+ const whiteCtx = whiteSnapshotCanvas.getContext("2d");
9691
+ if (!whiteCtx || !this.baseScenePath) {
9692
+ this.reportProgress(100, null);
9693
+ return;
9694
+ }
9695
+ const scenePath = `${this.baseScenePath}/1`;
9696
+ const firstPage = this.pages[0];
9697
+ const { jsPDF } = await import("jspdf");
9698
+ const pdf = new jsPDF({
9699
+ format: [firstPage.width, firstPage.height],
9700
+ orientation: firstPage.width > firstPage.height ? "l" : "p",
9701
+ compress: true
9702
+ });
9703
+ for (const [index2, page] of this.pages.entries()) {
9704
+ const { width, height, src } = page;
9705
+ whiteSnapshotCanvas.width = width;
9706
+ whiteSnapshotCanvas.height = height;
9707
+ const orientation = width > height ? "l" : "p";
9708
+ if (index2 > 0) {
9709
+ pdf.addPage([width, height], orientation);
9710
+ }
9711
+ const pdfPageSrc = await this.getBase64FromUrl(src);
9712
+ const img = document.createElement("img");
9713
+ img.src = pdfPageSrc;
9714
+ await new Promise((resolve) => img.onload = resolve);
9715
+ whiteCtx.drawImage(img, 0, 0);
9716
+ const pdfPageBase64 = whiteSnapshotCanvas.toDataURL("image/jpeg", 0.6);
9717
+ whiteCtx.clearRect(0, 0, width, height);
9718
+ this.whiteboardView.screenshotToCanvas(whiteCtx, scenePath, width, height, {
9719
+ centerX: width / 2,
9720
+ centerY: height / 2 + index2 * height,
9721
+ scale: 1
9722
+ });
9723
+ const snapshot = whiteSnapshotCanvas.toDataURL("image/png");
9724
+ pdf.addImage(pdfPageBase64, "JPEG", 0, 0, width, height, "", "FAST");
9725
+ pdf.addImage(snapshot, "PNG", 0, 0, width, height, "", "FAST");
9726
+ whiteCtx.clearRect(0, 0, width, height);
9727
+ const progress = Math.ceil((index2 + 1) / this.pages.length * 100);
9728
+ if (progress < 100) {
9729
+ this.reportProgress(Math.ceil((index2 + 1) / this.pages.length * 100), null);
9730
+ }
9731
+ }
9732
+ const dataUrl = pdf.output("arraybuffer");
9733
+ this.reportProgress(100, { pdf: dataUrl, title: this.box.title });
9734
+ };
9651
9735
  this.whiteboardView = whiteboardView;
9652
9736
  this.readonly = readonly;
9653
9737
  this.box = box;
9654
9738
  this.pages = pages;
9739
+ this.baseScenePath = baseScenePath;
9740
+ this.appId = appId;
9655
9741
  this.mountWhiteboard = mountWhiteboard;
9656
9742
  this._onUserScroll = onUserScroll;
9657
9743
  const debouncedOnUserScroll = this.debounce(() => {
@@ -9715,6 +9801,17 @@ class StaticDocsViewer {
9715
9801
  this.pageScrollTo(this.pageRenderer.pagesScrollTop);
9716
9802
  }
9717
9803
  }, 100);
9804
+ this.sideEffect.add(() => {
9805
+ const handleDownloadPdf = (evt) => {
9806
+ if (evt.data.type === "@netless/_request_save_pdf_" && evt.data.appId === this.appId) {
9807
+ this.toPdf().catch(() => this.reportProgress(100, null));
9808
+ }
9809
+ };
9810
+ window.addEventListener("message", handleDownloadPdf);
9811
+ return () => {
9812
+ window.removeEventListener("message", handleDownloadPdf);
9813
+ };
9814
+ });
9718
9815
  return this;
9719
9816
  }
9720
9817
  unmount() {
@@ -9908,10 +10005,30 @@ class StaticDocsViewer {
9908
10005
  wrapClassName(className) {
9909
10006
  return "netless-app-docs-viewer-static-" + className;
9910
10007
  }
10008
+ async getBase64FromUrl(url) {
10009
+ const data = await fetch(url);
10010
+ const blob = await data.blob();
10011
+ return new Promise((resolve) => {
10012
+ const reader = new FileReader();
10013
+ reader.readAsDataURL(blob);
10014
+ reader.onloadend = () => {
10015
+ const base64data = reader.result;
10016
+ resolve(base64data);
10017
+ };
10018
+ });
10019
+ }
10020
+ reportProgress(progress, result) {
10021
+ window.postMessage({
10022
+ type: "@netless/_result_save_pdf_",
10023
+ appId: this.appId,
10024
+ progress,
10025
+ result
10026
+ });
10027
+ }
9911
10028
  }
9912
10029
  class DynamicDocsViewer {
9913
10030
  constructor({ context, whiteboardView, box, pages }) {
9914
- this.sideEffect = new o$1();
10031
+ this.sideEffect = new n$2();
9915
10032
  this.onPlayPPT = () => {
9916
10033
  const room = this.context.getRoom();
9917
10034
  if (room) {
@@ -10136,7 +10253,9 @@ function setupStaticDocsViewer(context, whiteboardView, box, pages) {
10136
10253
  if (((_a2 = context.getAttributes()) == null ? void 0 : _a2.pageScrollTop) !== pageScrollTop && !box.readonly) {
10137
10254
  context.updateAttributes(["pageScrollTop"], pageScrollTop);
10138
10255
  }
10139
- }
10256
+ },
10257
+ baseScenePath: context.getInitScenePath(),
10258
+ appId: context.appId
10140
10259
  }).mount();
10141
10260
  context.emitter.on("attributesUpdate", (attributes) => {
10142
10261
  if (attributes) {
@@ -16736,14 +16855,14 @@ const reconnectRefresher = new ReconnectRefresher({ emitter });
16736
16855
  const _WindowManager = class extends InvisiblePlugin {
16737
16856
  constructor(context) {
16738
16857
  super(context);
16739
- this.version = "0.4.49";
16740
- this.dependencies = { "dependencies": { "@juggle/resize-observer": "^3.3.1", "@netless/telebox-insider": "0.2.27", "emittery": "^0.9.2", "lodash": "^4.17.21", "p-retry": "^4.6.1", "side-effect-manager": "^0.1.5", "uuid": "^7.0.3", "video.js": ">=7" }, "peerDependencies": { "white-web-sdk": "^2.16.0" }, "devDependencies": { "@netless/app-docs-viewer": "^0.2.9", "@netless/app-media-player": "0.1.0-beta.5", "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-node-resolve": "^13.0.4", "@rollup/plugin-url": "^6.1.0", "@sveltejs/vite-plugin-svelte": "^1.0.0-next.22", "@tsconfig/svelte": "^2.0.1", "@types/debug": "^4.1.7", "@types/lodash": "^4.14.182", "@types/lodash-es": "^4.17.4", "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.30.0", "@vitest/ui": "^0.14.1", "cypress": "^8.7.0", "dotenv": "^10.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^3.2.0", "jsdom": "^19.0.0", "less": "^4.1.1", "prettier": "^2.3.2", "prettier-plugin-svelte": "^2.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-styles": "^3.14.1", "svelte": "^3.42.4", "typescript": "^4.5.5", "vite": "^2.5.3", "vitest": "^0.14.1", "white-web-sdk": "2.16.33" } };
16858
+ this.version = "0.4.51";
16859
+ this.dependencies = { "dependencies": { "@juggle/resize-observer": "^3.3.1", "@netless/telebox-insider": "0.2.27", "emittery": "^0.9.2", "lodash": "^4.17.21", "p-retry": "^4.6.1", "side-effect-manager": "^0.1.5", "uuid": "^7.0.3", "video.js": ">=7" }, "peerDependencies": { "jspdf": "2.5.1", "white-web-sdk": "^2.16.0" }, "devDependencies": { "@netless/app-docs-viewer": "^0.2.11", "@netless/app-media-player": "0.1.0-beta.5", "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-node-resolve": "^13.0.4", "@rollup/plugin-url": "^6.1.0", "@sveltejs/vite-plugin-svelte": "^1.0.0-next.22", "@tsconfig/svelte": "^2.0.1", "@types/debug": "^4.1.7", "@types/lodash": "^4.14.182", "@types/lodash-es": "^4.17.4", "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.30.0", "@vitest/ui": "^0.14.1", "cypress": "^8.7.0", "dotenv": "^10.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^3.2.0", "jsdom": "^19.0.0", "less": "^4.1.1", "prettier": "^2.3.2", "prettier-plugin-svelte": "^2.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-styles": "^3.14.1", "svelte": "^3.42.4", "typescript": "^4.5.5", "vite": "^2.5.3", "vitest": "^0.14.1", "white-web-sdk": "2.16.33" } };
16741
16860
  this.emitter = callbacks$1;
16742
16861
  this.viewMode = ViewMode.Broadcaster;
16743
16862
  this.isReplay = isPlayer(this.displayer);
16744
16863
  this.containerSizeRatio = _WindowManager.containerSizeRatio;
16745
16864
  _WindowManager.displayer = context.displayer;
16746
- window.NETLESS_DEPS = { "dependencies": { "@juggle/resize-observer": "^3.3.1", "@netless/telebox-insider": "0.2.27", "emittery": "^0.9.2", "lodash": "^4.17.21", "p-retry": "^4.6.1", "side-effect-manager": "^0.1.5", "uuid": "^7.0.3", "video.js": ">=7" }, "peerDependencies": { "white-web-sdk": "^2.16.0" }, "devDependencies": { "@netless/app-docs-viewer": "^0.2.9", "@netless/app-media-player": "0.1.0-beta.5", "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-node-resolve": "^13.0.4", "@rollup/plugin-url": "^6.1.0", "@sveltejs/vite-plugin-svelte": "^1.0.0-next.22", "@tsconfig/svelte": "^2.0.1", "@types/debug": "^4.1.7", "@types/lodash": "^4.14.182", "@types/lodash-es": "^4.17.4", "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.30.0", "@vitest/ui": "^0.14.1", "cypress": "^8.7.0", "dotenv": "^10.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^3.2.0", "jsdom": "^19.0.0", "less": "^4.1.1", "prettier": "^2.3.2", "prettier-plugin-svelte": "^2.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-styles": "^3.14.1", "svelte": "^3.42.4", "typescript": "^4.5.5", "vite": "^2.5.3", "vitest": "^0.14.1", "white-web-sdk": "2.16.33" } };
16865
+ window.NETLESS_DEPS = { "dependencies": { "@juggle/resize-observer": "^3.3.1", "@netless/telebox-insider": "0.2.27", "emittery": "^0.9.2", "lodash": "^4.17.21", "p-retry": "^4.6.1", "side-effect-manager": "^0.1.5", "uuid": "^7.0.3", "video.js": ">=7" }, "peerDependencies": { "jspdf": "2.5.1", "white-web-sdk": "^2.16.0" }, "devDependencies": { "@netless/app-docs-viewer": "^0.2.11", "@netless/app-media-player": "0.1.0-beta.5", "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-node-resolve": "^13.0.4", "@rollup/plugin-url": "^6.1.0", "@sveltejs/vite-plugin-svelte": "^1.0.0-next.22", "@tsconfig/svelte": "^2.0.1", "@types/debug": "^4.1.7", "@types/lodash": "^4.14.182", "@types/lodash-es": "^4.17.4", "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.30.0", "@vitest/ui": "^0.14.1", "cypress": "^8.7.0", "dotenv": "^10.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^3.2.0", "jsdom": "^19.0.0", "less": "^4.1.1", "prettier": "^2.3.2", "prettier-plugin-svelte": "^2.4.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-styles": "^3.14.1", "svelte": "^3.42.4", "typescript": "^4.5.5", "vite": "^2.5.3", "vitest": "^0.14.1", "white-web-sdk": "2.16.33" } };
16747
16866
  }
16748
16867
  static async mount(params) {
16749
16868
  const room = params.room;