@netless/app-slide 0.2.105-beta.0 → 0.2.105-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.es.js CHANGED
@@ -42853,11 +42853,12 @@ class SlidePreviewer {
42853
42853
  }
42854
42854
  }
42855
42855
  const usePlugin = /* @__PURE__ */ Slide.Slide.usePlugin.bind(Slide.Slide);
42856
- const version = "0.2.105-beta.0";
42856
+ const version = "0.2.105-beta.2";
42857
+ const DEFAULT_SLIDE_SETUP_READY_TIMEOUT = 5e3;
42857
42858
  const SlideApp = {
42858
42859
  kind: "Slide",
42859
42860
  setup(context) {
42860
- var _a, _b, _c, _d, _e;
42861
+ var _a, _b, _c, _d, _e, _f;
42861
42862
  console.log("[Slide] setup @ " + version);
42862
42863
  if (context.getIsWritable()) {
42863
42864
  context.storage.ensureState(EmptyAttributes);
@@ -42878,6 +42879,8 @@ const SlideApp = {
42878
42879
  }
42879
42880
  const baseScenePath = context.getInitScenePath();
42880
42881
  let docsViewer = null;
42882
+ let slideControllerRef;
42883
+ let firstRenderFailed = false;
42881
42884
  const onPageChanged = (page) => {
42882
42885
  const room2 = context.getRoom();
42883
42886
  if (docsViewer && docsViewer.slideController) {
@@ -42903,14 +42906,21 @@ const SlideApp = {
42903
42906
  ...options,
42904
42907
  onPageChanged,
42905
42908
  onNavigate: options.onNavigate,
42906
- onRenderError: appOptions2.onRenderError,
42909
+ onRenderError: (error, pageIndex) => {
42910
+ var _a2;
42911
+ firstRenderFailed = true;
42912
+ (_a2 = appOptions2.onRenderError) == null ? void 0 : _a2.call(appOptions2, error, pageIndex);
42913
+ },
42907
42914
  showRenderError: appOptions2.showRenderError,
42908
42915
  invisibleBehavior: appOptions2.invisibleBehavior
42909
42916
  });
42917
+ slideControllerRef = slideController;
42910
42918
  if (useFreezer)
42911
42919
  apps.set(context.appId, slideController, box);
42912
42920
  logger.setAppController(context.appId, slideController);
42913
42921
  slideController.readyPromise.then(options.onReady).then(() => {
42922
+ if (disposed)
42923
+ return;
42914
42924
  const room2 = context.getRoom();
42915
42925
  let synced = false;
42916
42926
  if (room2 && context.getIsWritable()) {
@@ -42965,6 +42975,44 @@ const SlideApp = {
42965
42975
  return () => room.callbacks.off("onRoomStateChanged", onRoomStateChanged);
42966
42976
  });
42967
42977
  }
42978
+ const isLazySetupMode = () => {
42979
+ var _a2;
42980
+ return ((_a2 = context.getWindowManager()) == null ? void 0 : _a2.lazySetupInMaximizedMode) === true;
42981
+ };
42982
+ const isBlurFreezeAllowed = () => {
42983
+ var _a2;
42984
+ const boxStatus = context.getBoxStatus();
42985
+ if (boxStatus)
42986
+ return boxStatus !== "normal";
42987
+ const boxState = (_a2 = context.getWindowManager()) == null ? void 0 : _a2.boxState;
42988
+ return boxState != null && boxState !== "normal";
42989
+ };
42990
+ sideEffect.add(
42991
+ () => context.emitter.on("focus", (isFocused) => {
42992
+ if (disposed)
42993
+ return;
42994
+ if (!isLazySetupMode())
42995
+ return;
42996
+ const controller = docsViewer == null ? void 0 : docsViewer.slideController;
42997
+ if (!controller)
42998
+ return;
42999
+ if (!isFocused) {
43000
+ if (!isBlurFreezeAllowed())
43001
+ return;
43002
+ if (!controller.isFrozen) {
43003
+ log("[Slide] blur freeze", context.appId);
43004
+ controller.freeze();
43005
+ }
43006
+ return;
43007
+ }
43008
+ if (useFreezer) {
43009
+ apps.focus(context.appId);
43010
+ } else if (controller.isFrozen) {
43011
+ log("[Slide] focus unfreeze", context.appId);
43012
+ controller.unfreeze();
43013
+ }
43014
+ })
43015
+ );
42968
43016
  let disposed = false;
42969
43017
  let offDestroy;
42970
43018
  const teardown = () => {
@@ -42987,7 +43035,29 @@ const SlideApp = {
42987
43035
  docsViewer.mount();
42988
43036
  SlideApp.__teardownByContext || (SlideApp.__teardownByContext = /* @__PURE__ */ new WeakMap());
42989
43037
  SlideApp.__teardownByContext.set(context, teardown);
42990
- return {
43038
+ const waitForFirstRender = (timeoutMs) => new Promise((resolve) => {
43039
+ let settled = false;
43040
+ let pollTimer;
43041
+ const settle = (loaded) => {
43042
+ if (settled)
43043
+ return;
43044
+ settled = true;
43045
+ window.clearTimeout(timeoutTimer);
43046
+ if (pollTimer !== void 0)
43047
+ window.clearInterval(pollTimer);
43048
+ resolve(loaded);
43049
+ };
43050
+ const timeoutTimer = window.setTimeout(() => settle(false), timeoutMs);
43051
+ slideControllerRef == null ? void 0 : slideControllerRef.readyPromise.then(
43052
+ () => settle(!firstRenderFailed),
43053
+ () => settle(false)
43054
+ );
43055
+ pollTimer = window.setInterval(() => {
43056
+ if (disposed || firstRenderFailed)
43057
+ settle(false);
43058
+ }, 100);
43059
+ });
43060
+ const appResult = {
42991
43061
  onScaleChanged: (cb) => {
42992
43062
  if (!docsViewer) {
42993
43063
  return () => void 0;
@@ -43106,6 +43176,16 @@ const SlideApp = {
43106
43176
  return false;
43107
43177
  }
43108
43178
  };
43179
+ const setupReadyTimeout = (_f = appOptions == null ? void 0 : appOptions.setupReadyTimeout) != null ? _f : DEFAULT_SLIDE_SETUP_READY_TIMEOUT;
43180
+ return waitForFirstRender(setupReadyTimeout).then(() => {
43181
+ if (firstRenderFailed) {
43182
+ throw new Error("[Slide] first render failed before ready");
43183
+ }
43184
+ if (!disposed && !(slideControllerRef == null ? void 0 : slideControllerRef.ready)) {
43185
+ log("[Slide] setup ready wait timed out, slide keeps loading in background");
43186
+ }
43187
+ return appResult;
43188
+ });
43109
43189
  },
43110
43190
  teardown(context) {
43111
43191
  var _a, _b, _c;