@netless/app-slide 0.2.7 → 0.2.10

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.7",
3
+ "version": "0.2.10",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.es.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,11 +10,10 @@
10
10
  "README-zh.md"
11
11
  ],
12
12
  "devDependencies": {
13
- "@netless/app-shared": "0.1.2",
14
- "@netless/slide": "^0.6.1",
13
+ "@netless/slide": "^0.6.5",
15
14
  "@types/color-string": "^1.5.2",
16
15
  "color-string": "^1.9.1",
17
- "side-effect-manager": "^1.1.3",
16
+ "side-effect-manager": "^1.2.1",
18
17
  "vanilla-lazyload": "^17.8.3"
19
18
  },
20
19
  "scripts": {
@@ -31,6 +31,7 @@ export const EmptyAttributes: Attributes = {
31
31
  export interface SlideControllerOptions {
32
32
  context: AppContext<Attributes, MagixEvents, AppOptions>;
33
33
  anchor: HTMLDivElement;
34
+ onRenderEnd: () => void;
34
35
  onPageChanged: (page: number) => void;
35
36
  onTransitionStart: () => void;
36
37
  onTransitionEnd: () => void;
@@ -252,7 +253,6 @@ export class SlideController {
252
253
  anchor,
253
254
  interactive: true,
254
255
  mode: "interactive",
255
- resize: true,
256
256
  controller: logger.enable,
257
257
  enableGlobalClick: true,
258
258
  renderOptions: {
@@ -54,10 +54,12 @@ export class SlideDocsViewer {
54
54
 
55
55
  public $slide!: HTMLDivElement;
56
56
  public $whiteboardView!: HTMLDivElement;
57
+ public $overlay!: HTMLDivElement;
57
58
 
58
59
  public render() {
59
60
  this.viewer.$content.appendChild(this.renderSlideContainer());
60
61
  this.viewer.$content.appendChild(this.renderWhiteboardView());
62
+ this.viewer.$content.appendChild(this.renderOverlay());
61
63
  this.sideEffect.addEventListener(window, "keydown", ev => {
62
64
  if (this.box.focus && this.slideController) {
63
65
  switch (ev.key) {
@@ -79,6 +81,15 @@ export class SlideDocsViewer {
79
81
  });
80
82
  }
81
83
 
84
+ protected renderOverlay(): HTMLDivElement {
85
+ if (!this.$overlay) {
86
+ const $overlay = document.createElement("div");
87
+ $overlay.className = this.wrapClassName("overlay");
88
+ this.$overlay = $overlay;
89
+ }
90
+ return this.$overlay;
91
+ }
92
+
82
93
  protected renderSlideContainer(): HTMLDivElement {
83
94
  if (!this.$slide) {
84
95
  const $slide = document.createElement("div");
@@ -103,6 +114,7 @@ export class SlideDocsViewer {
103
114
 
104
115
  this.slideController = this.mountSlideController({
105
116
  anchor: this.$slide,
117
+ onRenderEnd: this.onRenderEnd,
106
118
  onTransitionStart: this.viewer.setPlaying,
107
119
  onTransitionEnd: this.viewer.setPaused,
108
120
  onReady: this.refreshPages,
@@ -120,9 +132,15 @@ export class SlideDocsViewer {
120
132
 
121
133
  protected onError = ({ error }: { error: Error }) => {
122
134
  this.viewer.setPaused();
135
+ this.$overlay.textContent = `Error on slide[page=${this.slideController?.page}]: ${error.message}`;
136
+ this.$overlay.style.opacity = "1";
123
137
  logger.warn("[Slide] render error", error);
124
138
  };
125
139
 
140
+ protected onRenderEnd = () => {
141
+ this.$overlay.style.opacity = "";
142
+ };
143
+
126
144
  protected refreshPages = () => {
127
145
  if (this.slideController) {
128
146
  this.viewer.pages = createDocsViewerPages(this.slideController.slide);
@@ -9,3 +9,19 @@ $namespace: "netless-app-slide";
9
9
  z-index: 100;
10
10
  overflow: hidden;
11
11
  }
12
+
13
+ .#{$namespace}-overlay {
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ position: absolute;
18
+ z-index: 200;
19
+ top: 0;
20
+ left: 0;
21
+ width: 100%;
22
+ height: 100%;
23
+ background: rgba(255, 0, 0, 0.25);
24
+ transition: opacity 0.3s;
25
+ opacity: 0;
26
+ pointer-events: none;
27
+ }
@@ -119,7 +119,6 @@ export class SlidePreviewer {
119
119
  anchor: this.$slide,
120
120
  interactive: true,
121
121
  mode: "local",
122
- resize: true,
123
122
  controller: this.debug,
124
123
  enableGlobalClick: true,
125
124
  renderOptions: {
package/src/index.ts CHANGED
@@ -141,6 +141,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
141
141
  }
142
142
  const page = slideController.slide.slideState.currentSlideIndex;
143
143
  log("[Slide] page to", page, synced ? "(synced)" : "", "(on ready)");
144
+ slideController.slide.on("renderEnd", options.onRenderEnd);
144
145
  });
145
146
  return slideController;
146
147
  };