@netless/window-manager 0.4.35 → 0.4.36

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.
@@ -1,9 +1,13 @@
1
1
  ## AppContext
2
2
 
3
+ `AppContext` 是插件运行时传入的上下文
4
+ 你可以通过此对象操作 APP 的 ui, 获取当前房间的状态, 以及订阅状态的变化
5
+
3
6
  - [api](#api)
4
7
  - [view](#view)
5
8
  - [page](#page)
6
9
  - [storage](#storage)
10
+ - [ui(box)](#box)
7
11
  - [events](#events)
8
12
  - [Advanced](#Advanced)
9
13
 
@@ -234,6 +238,52 @@ manager.addApp({
234
238
  context.dispatchMagixEvent("click", { data: "data" });
235
239
  ```
236
240
 
241
+ <h2>UI (box)</h2>
242
+
243
+ box 是白板为所有应用默认创建的 UI
244
+ 应用所有可以操作的 UI 部分都在 box 范围内
245
+
246
+ - **context.getBox()**
247
+
248
+ 获取 box
249
+ 返回类型: `ReadonlyTeleBox`
250
+
251
+ - **box.mountStyles()**
252
+
253
+ 挂载样式到 `box`
254
+ 参数: `string | HTMLStyleElement`
255
+
256
+ ```js
257
+ const box = context.getBox();
258
+ box.mountStyles(`
259
+ .app-span {
260
+ color: red;
261
+ }
262
+ `)
263
+ ```
264
+
265
+ - **box.mountContent()**
266
+
267
+ 挂载元素到 `box`
268
+ 参数: `HTMLElement`
269
+
270
+ ```js
271
+ const box = context.getBox();
272
+ const content = document.createElement("div");
273
+ box.mountContent(context);
274
+ ```
275
+
276
+ - **box.mountFooter()**
277
+
278
+ 挂载元素到 `box` 的 `footer`
279
+ 参数: `HTMLElement`
280
+
281
+ ```js
282
+ const box = context.getBox();
283
+ const footer = document.createElement("div");
284
+ box.mountFooter(context);
285
+ ```
286
+
237
287
  <h2 id="events">events</h2>
238
288
 
239
289
  - **destroy**
@@ -284,6 +334,29 @@ manager.addApp({
284
334
  // { index: 0, length: 1 }
285
335
  });
286
336
  ```
337
+ - **roomStageChange**
338
+
339
+ 房间的状态变化时触发\
340
+ 比如当教具切换时
341
+
342
+ ```js
343
+ context.emitter.on("roomStageChange", stage => {
344
+ if (state.memberState) {
345
+ console.log("appliance change to", state.memberState.currentApplianceName);
346
+ }
347
+ });
348
+ ```
349
+
350
+ 或者是当前房间人数变化时
351
+
352
+ ```js
353
+ context.emitter.on("roomStageChange", stage => {
354
+ if (state.roomMembers) {
355
+ console.log("current room members change", state.roomMembers);
356
+ }
357
+ });
358
+ ```
359
+ 详细状态的介绍请参考 https://developer.netless.link/javascript-zh/home/business-state-management
287
360
 
288
361
  <h2 id="Advanced">Advanced</h2>
289
362
 
@@ -0,0 +1,31 @@
1
+ ## 如何自定义最大化 `titleBar`
2
+
3
+ 获取并订阅所有的 `box`
4
+
5
+ ```js
6
+ manager.boxManager.teleboxManager.boxes$.subscribe(boxes => {
7
+ // boxes 为所有的窗口,当窗口添加和删除时都会触发
8
+ })
9
+ ```
10
+
11
+ 切换 `box` 的 `focus`
12
+ ```js
13
+ manager.boxManager.teleBoxManager.focusBox(box)
14
+ ```
15
+
16
+ 关闭某个 `box`
17
+ ```js
18
+ manager.boxManager.teleBoxManager.remove(box)
19
+ ```
20
+
21
+ 切换最大化状态
22
+ ```js
23
+ manager.boxManager.teleBoxManager.setMaximized(false)
24
+ manager.boxManager.teleBoxManager.setMaximized(true)
25
+ ```
26
+
27
+ 切换最小化状态
28
+ ```js
29
+ manager.boxManager.teleBoxManager.setMinimized(true)
30
+ manager.boxManager.teleBoxManager.setMaximized(false)
31
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/window-manager",
3
- "version": "0.4.35",
3
+ "version": "0.4.36",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",
package/src/BoxManager.ts CHANGED
@@ -120,6 +120,14 @@ export class BoxManager {
120
120
  this.context.setAppFocus(topBox.id);
121
121
  this.focusBox({ appId: topBox.id }, false);
122
122
  }
123
+ // ppt 在最小化后刷新恢复正常大小,拿不到正确的宽高,需要手动触发一下窗口的 resize
124
+ setTimeout(() => {
125
+ this.teleBoxManager.boxes.forEach(box => {
126
+ const width = box.width;
127
+ const height = box.height;
128
+ box._size$.setValue({ width: width + 0.001, height: height + 0.001 }, true);
129
+ });
130
+ }, 100);
123
131
  }
124
132
  });
125
133
  this.teleBoxManager.events.on("maximized", maximized => {