@netless/app-slide 0.0.52 → 0.0.56

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.0.52",
3
+ "version": "0.0.56",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.es.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  ],
12
12
  "devDependencies": {
13
13
  "@netless/app-shared": "^0.1.1",
14
- "@netless/slide": "^0.1.56",
14
+ "@netless/slide": "^0.2.3",
15
15
  "@types/color-string": "^1.5.2",
16
16
  "color-string": "^1.9.0",
17
17
  "side-effect-manager": "^0.1.5",
@@ -298,6 +298,9 @@ export class DocsViewer {
298
298
  $pageNumberInput.disabled = true;
299
299
  }
300
300
  this.$pageNumberInput = $pageNumberInput;
301
+ this.sideEffect.addEventListener($pageNumberInput, "focus", () => {
302
+ $pageNumberInput.select();
303
+ });
301
304
  this.sideEffect.addEventListener($pageNumberInput, "change", () => {
302
305
  if (this.readonly) {
303
306
  return;
@@ -176,7 +176,7 @@ $namespace: $slide-namespace;
176
176
  .#{$namespace}-page-number-input {
177
177
  border: none;
178
178
  outline: none;
179
- width: 1.5em;
179
+ width: 3em;
180
180
  margin: 0;
181
181
  padding: 0 2px;
182
182
  text-align: right;
@@ -251,6 +251,7 @@ export class SlideController {
251
251
  mode: "interactive",
252
252
  resize: true,
253
253
  controller: logger.enable,
254
+ enableGlobalClick: true,
254
255
  renderOptions: {
255
256
  minFPS: 25,
256
257
  maxFPS: 30,
@@ -71,26 +71,45 @@ export class SlidePreviewer {
71
71
 
72
72
  public render() {
73
73
  this.viewer.$content.appendChild(this.renderSlideContainer());
74
- this.sideEffect.addEventListener(window, "keydown", ev => {
75
- if (this.slide) {
76
- switch (ev.key) {
77
- case "ArrowUp":
78
- case "ArrowLeft": {
79
- this.slide.prevStep();
80
- break;
81
- }
82
- case "ArrowRight":
83
- case "ArrowDown": {
84
- this.slide.nextStep();
85
- break;
86
- }
87
- default: {
88
- break;
89
- }
74
+ this.registerHotKeys(window);
75
+ }
76
+
77
+ /**
78
+ * In case you have a different window -- for example, in electron.
79
+ * Use this method to re-register hotkeys.
80
+ *
81
+ * @example
82
+ * previewer.registerHotKeys(windowLike)
83
+ */
84
+ public registerHotKeys(windowLike: Window) {
85
+ this.sideEffect.addEventListener(
86
+ windowLike,
87
+ "keydown",
88
+ this.hotkeyListener,
89
+ undefined,
90
+ "hotkey"
91
+ );
92
+ }
93
+
94
+ private hotkeyListener = (ev: KeyboardEvent) => {
95
+ if (this.slide) {
96
+ switch (ev.key) {
97
+ case "ArrowUp":
98
+ case "ArrowLeft": {
99
+ this.slide.prevStep();
100
+ break;
101
+ }
102
+ case "ArrowRight":
103
+ case "ArrowDown": {
104
+ this.slide.nextStep();
105
+ break;
106
+ }
107
+ default: {
108
+ break;
90
109
  }
91
110
  }
92
- });
93
- }
111
+ }
112
+ };
94
113
 
95
114
  public mount(taskId: string, url: string) {
96
115
  this.target.appendChild(this.renderStyle());
@@ -103,6 +122,7 @@ export class SlidePreviewer {
103
122
  mode: "local",
104
123
  resize: true,
105
124
  controller: this.debug,
125
+ enableGlobalClick: true,
106
126
  renderOptions: {
107
127
  minFPS: 25,
108
128
  maxFPS: 30,
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ export { SlidePreviewer, default as previewSlide } from "./SlidePreviewer";
23
23
 
24
24
  export type { Attributes, AddHooks, FreezableSlide };
25
25
 
26
- export const version = "0.0.52";
26
+ export const version = __APP_VERSION__;
27
27
 
28
28
  export { DefaultUrl, apps, FreezerLength, addHooks };
29
29
 
@@ -85,7 +85,15 @@ const SlideApp: NetlessApp<Attributes> = {
85
85
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
86
  (window as any).slideController = slideController;
87
87
  }
88
- slideController.readyPromise.then(options.onReady);
88
+ slideController.readyPromise.then(options.onReady).then(() => {
89
+ const room = context.getRoom();
90
+ let synced = false;
91
+ if (room && context.getIsWritable()) {
92
+ syncSceneWithSlide(room, context, slideController.slide, baseScenePath);
93
+ synced = true;
94
+ }
95
+ log("[Slide] page to", slideController.slide.slideState.currentSlideIndex, synced);
96
+ });
89
97
  return slideController;
90
98
  };
91
99