@netless/app-slide 0.2.105-beta.3 → 0.2.106-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/main.cjs.js +1 -1
- package/dist/main.cjs.js.map +1 -1
- package/dist/main.es.js +12 -5
- package/dist/main.es.js.map +1 -1
- package/dist/main.iife.js +1 -1
- package/dist/main.iife.js.map +1 -1
- package/package.json +2 -2
- package/src/DocsViewer/ResizableContainer.ts +2 -0
- package/src/SlideDocsViewer/index.ts +9 -5
- package/src/index.ts +33 -27
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netless/app-slide",
|
|
3
|
-
"version": "0.2.
|
|
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.
|
|
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 (
|
|
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 } =
|
|
500
|
-
|
|
501
|
-
|
|
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
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
if (!
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
|
|
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");
|