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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/app-slide",
3
- "version": "0.2.105-beta.3",
3
+ "version": "0.2.106-beta.0",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.es.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "README-zh.md"
18
18
  ],
19
19
  "devDependencies": {
20
- "@netless/slide": "1.4.57",
20
+ "@netless/slide": "1.4.60",
21
21
  "@types/color-string": "^1.5.2",
22
22
  "color-string": "^1.9.1",
23
23
  "jspdf": "2.5.1",
@@ -35,6 +35,7 @@ export class ResizableContainer {
35
35
  enableResize: boolean,
36
36
  _box?: ReadonlyTeleBox
37
37
  ) {
38
+ void _box;
38
39
  this.enableResize = enableResize;
39
40
  this.parent = parent;
40
41
  this.context = context;
@@ -230,6 +231,7 @@ export class ResizableContainer {
230
231
  }
231
232
 
232
233
  public destroy(_box?: ReadonlyTeleBox): void {
234
+ void _box;
233
235
  this.cancelScheduledLayoutUpdate();
234
236
  this.onLayoutUpdated = null;
235
237
  this.scaleChangedListeners.clear();
@@ -228,7 +228,7 @@ export class SlideDocsViewer {
228
228
  this.viewer.$content,
229
229
  this.context,
230
230
  this.enableScale,
231
- this.box,
231
+ this.box
232
232
  );
233
233
  this.resizableContainer.onLayoutUpdated = () => {
234
234
  this.scaleDocsToFit();
@@ -391,7 +391,10 @@ export class SlideDocsViewer {
391
391
  this.latestBoxSize = { width: payload.width, height: payload.height };
392
392
 
393
393
  // observer 已经先处理过同一尺寸时,忽略晚到的 event
394
- if (sizesEqual(this.lastObserverSize, this.latestBoxSize) || sizesEqual(this.lastAppliedSize, this.latestBoxSize)) {
394
+ if (
395
+ sizesEqual(this.lastObserverSize, this.latestBoxSize) ||
396
+ sizesEqual(this.lastAppliedSize, this.latestBoxSize)
397
+ ) {
395
398
  console.log("[app-slide] boxSizeChange skipped, observer already applied", {
396
399
  appId: this.appId,
397
400
  eventCount: this.boxSizeEventCount,
@@ -496,9 +499,10 @@ export class SlideDocsViewer {
496
499
  const { width: slideWidth, height: slideHeight } = this.slideController.slide;
497
500
  if (slideWidth && slideHeight) {
498
501
  const originSize = this.context.storage.state.originSize;
499
- const { width, height } = originSize && originSize.width > 0 && originSize.height > 0
500
- ? originSize
501
- : { width: slideWidth, height: slideHeight };
502
+ const { width, height } =
503
+ originSize && originSize.width > 0 && originSize.height > 0
504
+ ? originSize
505
+ : { width: slideWidth, height: slideHeight };
502
506
  if (width > 0 && height > 0) {
503
507
  this.whiteboardView.moveCameraToContain({
504
508
  originX: -width / 2,
package/src/index.ts CHANGED
@@ -118,6 +118,8 @@ export interface AppResult {
118
118
  scaleView: (to: number) => void;
119
119
  getViewScale: () => number | undefined;
120
120
  translateView: (offsetX: number, offsetY: number) => void;
121
+ onPptMediaPermissionRequest: (callback: () => void) => () => void;
122
+ playPptMedia: () => void;
121
123
  }
122
124
 
123
125
  const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> & {
@@ -285,28 +287,27 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> & {
285
287
  const boxState = context.getWindowManager()?.boxState;
286
288
  return boxState != null && boxState !== "normal";
287
289
  };
288
- sideEffect.add(
289
- () =>
290
- context.emitter.on("focus", (isFocused: boolean) => {
291
- if (disposed) return;
292
- if (!isLazySetupMode()) return;
293
- const controller = docsViewer?.slideController;
294
- if (!controller) return;
295
- if (!isFocused) {
296
- if (!isBlurFreezeAllowed()) return;
297
- if (!controller.isFrozen) {
298
- log("[Slide] blur freeze", context.appId);
299
- controller.freeze();
300
- }
301
- return;
302
- }
303
- if (useFreezer) {
304
- apps.focus(context.appId);
305
- } else if (controller.isFrozen) {
306
- log("[Slide] focus unfreeze", context.appId);
307
- controller.unfreeze();
290
+ sideEffect.add(() =>
291
+ context.emitter.on("focus", (isFocused: boolean) => {
292
+ if (disposed) return;
293
+ if (!isLazySetupMode()) return;
294
+ const controller = docsViewer?.slideController;
295
+ if (!controller) return;
296
+ if (!isFocused) {
297
+ if (!isBlurFreezeAllowed()) return;
298
+ if (!controller.isFrozen) {
299
+ log("[Slide] blur freeze", context.appId);
300
+ controller.freeze();
308
301
  }
309
- }),
302
+ return;
303
+ }
304
+ if (useFreezer) {
305
+ apps.focus(context.appId);
306
+ } else if (controller.isFrozen) {
307
+ log("[Slide] focus unfreeze", context.appId);
308
+ controller.unfreeze();
309
+ }
310
+ })
310
311
  );
311
312
 
312
313
  let disposed = false;
@@ -338,12 +339,11 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> & {
338
339
  const waitForFirstRender = (timeoutMs: number): Promise<boolean> =>
339
340
  new Promise<boolean>(resolve => {
340
341
  let settled = false;
341
- let pollTimer: number | undefined;
342
342
  const settle = (loaded: boolean) => {
343
343
  if (settled) return;
344
344
  settled = true;
345
345
  window.clearTimeout(timeoutTimer);
346
- if (pollTimer !== undefined) window.clearInterval(pollTimer);
346
+ window.clearInterval(pollTimer);
347
347
  resolve(loaded);
348
348
  };
349
349
  const timeoutTimer = window.setTimeout(() => settle(false), timeoutMs);
@@ -351,14 +351,21 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> & {
351
351
  // the poll only catches teardown and pre-ready render failures.
352
352
  slideControllerRef?.readyPromise.then(
353
353
  () => settle(!firstRenderFailed),
354
- () => settle(false),
354
+ () => settle(false)
355
355
  );
356
- pollTimer = window.setInterval(() => {
356
+ const pollTimer = window.setInterval(() => {
357
357
  if (disposed || firstRenderFailed) settle(false);
358
358
  }, 100);
359
359
  });
360
360
 
361
361
  const appResult: AppResult = {
362
+ onPptMediaPermissionRequest: callback => {
363
+ const slide = docsViewer?.slideController?.slide;
364
+ return slide?.onPptMediaPermissionRequest(callback) ?? (() => undefined);
365
+ },
366
+ playPptMedia: () => {
367
+ docsViewer?.slideController?.slide.playPptMedia();
368
+ },
362
369
  onScaleChanged: (cb: (scale: number) => void) => {
363
370
  if (!docsViewer) {
364
371
  return () => void 0;
@@ -487,8 +494,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> & {
487
494
  },
488
495
  };
489
496
 
490
- const setupReadyTimeout =
491
- appOptions?.setupReadyTimeout ?? DEFAULT_SLIDE_SETUP_READY_TIMEOUT;
497
+ const setupReadyTimeout = appOptions?.setupReadyTimeout ?? DEFAULT_SLIDE_SETUP_READY_TIMEOUT;
492
498
  return waitForFirstRender(setupReadyTimeout).then(() => {
493
499
  if (firstRenderFailed) {
494
500
  throw new Error("[Slide] first render failed before ready");