@netless/window-manager 1.0.0-canary.3 → 1.0.0-canary.32

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.
Files changed (87) hide show
  1. package/__mocks__/white-web-sdk.ts +10 -1
  2. package/dist/index.cjs.js +120 -12
  3. package/dist/index.es.js +2284 -954
  4. package/dist/index.umd.js +120 -12
  5. package/dist/{App → src/App}/AppContext.d.ts +12 -8
  6. package/dist/{App → src/App}/AppPageStateImpl.d.ts +0 -0
  7. package/dist/{App → src/App}/AppProxy.d.ts +36 -7
  8. package/dist/{App → src/App}/MagixEvent/index.d.ts +0 -0
  9. package/dist/{App → src/App}/Storage/StorageEvent.d.ts +0 -0
  10. package/dist/{App → src/App}/Storage/index.d.ts +0 -0
  11. package/dist/{App → src/App}/Storage/typings.d.ts +0 -0
  12. package/dist/{App → src/App}/Storage/utils.d.ts +0 -0
  13. package/dist/src/App/WhiteboardView.d.ts +27 -0
  14. package/dist/{App → src/App}/index.d.ts +2 -1
  15. package/dist/src/App/type.d.ts +21 -0
  16. package/dist/{AppListener.d.ts → src/AppListener.d.ts} +0 -2
  17. package/dist/{AppManager.d.ts → src/AppManager.d.ts} +7 -6
  18. package/dist/{AttributesDelegate.d.ts → src/AttributesDelegate.d.ts} +11 -16
  19. package/dist/{BoxEmitter.d.ts → src/BoxEmitter.d.ts} +0 -0
  20. package/dist/{BoxManager.d.ts → src/BoxManager.d.ts} +10 -7
  21. package/dist/{BuiltinApps.d.ts → src/BuiltinApps.d.ts} +3 -0
  22. package/dist/{Cursor → src/Cursor}/Cursor.d.ts +0 -0
  23. package/dist/{Cursor → src/Cursor}/icons.d.ts +0 -0
  24. package/dist/{Cursor → src/Cursor}/index.d.ts +3 -3
  25. package/dist/{Helper.d.ts → src/Helper.d.ts} +4 -8
  26. package/dist/{InternalEmitter.d.ts → src/InternalEmitter.d.ts} +3 -4
  27. package/dist/{Page → src/Page}/PageController.d.ts +1 -0
  28. package/dist/{Page → src/Page}/index.d.ts +0 -0
  29. package/dist/{PageState.d.ts → src/PageState.d.ts} +0 -0
  30. package/dist/{ReconnectRefresher.d.ts → src/ReconnectRefresher.d.ts} +1 -1
  31. package/dist/{RedoUndo.d.ts → src/RedoUndo.d.ts} +0 -0
  32. package/dist/{Register → src/Register}/index.d.ts +0 -0
  33. package/dist/{Register → src/Register}/loader.d.ts +0 -0
  34. package/dist/{Register → src/Register}/storage.d.ts +0 -0
  35. package/dist/{Utils → src/Utils}/AppCreateQueue.d.ts +0 -0
  36. package/dist/{Utils → src/Utils}/Common.d.ts +1 -0
  37. package/dist/{Utils → src/Utils}/Reactive.d.ts +0 -0
  38. package/dist/{Utils → src/Utils}/RoomHacker.d.ts +0 -0
  39. package/dist/{Utils → src/Utils}/error.d.ts +0 -0
  40. package/dist/{Utils → src/Utils}/log.d.ts +0 -0
  41. package/dist/src/View/CameraSynchronizer.d.ts +18 -0
  42. package/dist/{View → src/View}/MainView.d.ts +18 -7
  43. package/dist/{View → src/View}/ViewManager.d.ts +0 -0
  44. package/dist/src/View/ViewSync.d.ts +24 -0
  45. package/dist/{callback.d.ts → src/callback.d.ts} +5 -0
  46. package/dist/{constants.d.ts → src/constants.d.ts} +8 -5
  47. package/dist/src/image.d.ts +19 -0
  48. package/dist/{index.d.ts → src/index.d.ts} +40 -14
  49. package/dist/src/shim.d.ts +11 -0
  50. package/dist/{typings.d.ts → src/typings.d.ts} +8 -2
  51. package/dist/style.css +1 -1
  52. package/docs/app-context.md +157 -25
  53. package/docs/mirgrate-to-1.0.md +28 -0
  54. package/package.json +12 -7
  55. package/playwright.config.ts +29 -0
  56. package/pnpm-lock.yaml +517 -35
  57. package/src/App/AppContext.ts +50 -28
  58. package/src/App/AppProxy.ts +266 -80
  59. package/src/App/{WhiteBoardView.ts → WhiteboardView.ts} +38 -7
  60. package/src/App/index.ts +2 -1
  61. package/src/App/type.ts +22 -0
  62. package/src/AppListener.ts +5 -21
  63. package/src/AppManager.ts +56 -43
  64. package/src/AttributesDelegate.ts +19 -19
  65. package/src/BoxManager.ts +60 -40
  66. package/src/BuiltinApps.ts +5 -0
  67. package/src/Cursor/Cursor.ts +7 -3
  68. package/src/Cursor/index.ts +7 -8
  69. package/src/Helper.ts +25 -7
  70. package/src/InternalEmitter.ts +3 -4
  71. package/src/Page/PageController.ts +1 -0
  72. package/src/PageState.ts +1 -1
  73. package/src/ReconnectRefresher.ts +7 -2
  74. package/src/Utils/Common.ts +9 -0
  75. package/src/Utils/Reactive.ts +27 -26
  76. package/src/Utils/RoomHacker.ts +3 -0
  77. package/src/View/CameraSynchronizer.ts +37 -34
  78. package/src/View/MainView.ts +108 -81
  79. package/src/View/ViewSync.ts +110 -0
  80. package/src/callback.ts +1 -0
  81. package/src/constants.ts +6 -3
  82. package/src/index.ts +141 -57
  83. package/src/style.css +3 -46
  84. package/src/typings.ts +8 -2
  85. package/vite.config.js +5 -3
  86. package/dist/App/WhiteBoardView.d.ts +0 -18
  87. package/dist/View/CameraSynchronizer.d.ts +0 -17
@@ -4,8 +4,9 @@
4
4
  - [view](#view)
5
5
  - [page](#page)
6
6
  - [storage](#storage)
7
- - [events](#events)
7
+ - [实例属性](#attributes)
8
8
  - [box](#box)
9
+ - [events](#events)
9
10
  - [Advanced](#Advanced)
10
11
 
11
12
  <h2 id="api">API</h2>
@@ -75,7 +76,7 @@
75
76
  ```
76
77
 
77
78
  ```ts
78
- const view = context.createWhiteBoardView(10); // 生成带有 10 页的白板
79
+ const view = context.createWhiteBoardView({ size: 10 }); // 生成带有 10 页的白板
79
80
  ```
80
81
 
81
82
  - **WhiteBoardView**
@@ -148,6 +149,18 @@
148
149
  console.log("pageStateChange", pageState)
149
150
  })
150
151
  ```
152
+ - **setRect**
153
+
154
+ 设置白板的显示的宽高\
155
+ 在不同分辨率下会保证所有打开的窗口都能完整显示这个区域
156
+
157
+ ```ts
158
+ const view = context.createWhiteBoardView();
159
+ // 此方法建议只在插入时设置一次
160
+ if (context.isAddApp) {
161
+ view.setRect({ width: 500, height: 500 })
162
+ }
163
+ ```
151
164
 
152
165
  <h3 id="storage">storage</h3>
153
166
 
@@ -253,49 +266,88 @@
253
266
  context.dispatchMagixEvent("click", { data: "data" });
254
267
  ```
255
268
 
256
- <h2 id="events">events</h2>
269
+ <h2 id="attributes">属性</h2>
257
270
 
258
- - **destroy**
271
+ - **destroyed**
259
272
 
260
- app 被关闭时发送
273
+ 当前应用是否已经被销毁
274
+
275
+ 类型: `boolean`
261
276
 
262
277
  ```ts
263
- context.emitter.on("destroy", () => {
264
- // release your listeners
265
- });
278
+ contest.destroyed
266
279
  ```
267
280
 
268
- - **writableChange**
281
+ - **members**
282
+
283
+ 当前房间的所有用户
269
284
 
270
- 白板可写状态切换时触发
285
+ 类型: `Member[]`
271
286
 
272
287
  ```ts
273
- context.emitter.on("writableChange", isWritable => {
274
- //
275
- });
288
+ type Member = {
289
+ uid: string;
290
+ memberId: number;
291
+ memberState: MemberState;
292
+ session: string;
293
+ payload?: UserPayload;
294
+ }
276
295
  ```
277
296
 
278
- - **focus**
297
+ - **currentMember**
279
298
 
280
- 当前 app 获得焦点或者失去焦点时触发
299
+ 当前用户
300
+
301
+ 类型: `Member`
281
302
 
282
303
  ```ts
283
- context.emitter.on("focus", focus => {
284
- //
285
- });
304
+ context.currentMember
286
305
  ```
287
306
 
288
- <h2 id="Advanced">Advanced</h2>
289
307
 
290
- - **context.getView()**
308
+ <h2 id="box">box</h2>
291
309
 
292
- 获取 `view` 实例
310
+ `box` 为应用窗口本身
311
+
312
+ 类型: `ReadonlyTeleBox`
313
+
314
+ - **mountStyles()**
315
+
316
+ 挂载样式到 `box` 上
317
+
318
+ 参数: `string | HTMLStyleElement`
293
319
 
294
320
  ```ts
295
- const view = context.view;
321
+ box.mountStyles(`
322
+ .hello-world-app span {
323
+ color: red;
324
+ }
325
+ `);
296
326
  ```
297
327
 
298
- <h2 id="box">box</h2>
328
+ - **mountContent()**
329
+
330
+ 挂载元素到 `box` 中\
331
+ 推荐使用 `mountStage` 方法挂载元素到 `stage` 中
332
+
333
+ 参数: `HTMLElement`
334
+
335
+ ```ts
336
+ const app = document.createElement("div");
337
+ box.mountContent(app);
338
+ ```
339
+
340
+ - **mountStage()**
341
+
342
+ 挂载元素到 `box` 的 `contentStage` 中\
343
+ 如无特殊情况, 推荐把所有内容挂载到 `stage` 中
344
+
345
+ 参数: `HTMLElement`
346
+
347
+ ```ts
348
+ const app = document.createElement("div");
349
+ box.mountStage(app);
350
+ ```
299
351
 
300
352
  - **contentStageRect**
301
353
 
@@ -320,7 +372,87 @@
320
372
  订阅 `contextStateRect` 的变化
321
373
 
322
374
  ```ts
323
- box._contentStageRect$.subscribe(rect => {
375
+ box.onValChanged("contentStageRect", rect => {
324
376
  console.log("contentStageRect changed", rect);
325
377
  });
326
- ```
378
+ ```
379
+
380
+ - **highlightStage**
381
+
382
+ 是否高亮 `stage` 区域\
383
+ 默认为 `true`
384
+
385
+ 类型: `boolean`
386
+
387
+ - **setHighlightStage()**
388
+
389
+ 参数: `boolean`
390
+
391
+
392
+ - **$content**
393
+
394
+ 应用窗口的内容区域
395
+
396
+ 类型: `HTMLElement`
397
+
398
+ - **$footer**
399
+
400
+ 应用窗口的底部区域
401
+
402
+ 类型: `HTMLElement`
403
+
404
+ - **resizable**
405
+
406
+ 是否可以改变窗口大小
407
+
408
+ 类型: `boolean`
409
+
410
+ - **draggable**
411
+
412
+ 窗口是否可以拖动
413
+
414
+ 类型: `boolean`
415
+
416
+
417
+ <h2 id="events">events</h2>
418
+
419
+ - **destroy**
420
+
421
+ app 被关闭时发送
422
+
423
+ ```ts
424
+ context.emitter.on("destroy", () => {
425
+ // release your listeners
426
+ });
427
+ ```
428
+
429
+ - **writableChange**
430
+
431
+ 白板可写状态切换时触发
432
+
433
+ ```ts
434
+ context.emitter.on("writableChange", isWritable => {
435
+ //
436
+ });
437
+ ```
438
+
439
+ - **focus**
440
+
441
+ 当前 app 获得焦点或者失去焦点时触发
442
+
443
+ ```ts
444
+ context.emitter.on("focus", focus => {
445
+ //
446
+ });
447
+ ```
448
+
449
+
450
+ <h2 id="Advanced">Advanced</h2>
451
+
452
+ - **context.getView()**
453
+
454
+ 获取 `view` 实例
455
+
456
+ ```ts
457
+ const view = context.view;
458
+ ```
@@ -0,0 +1,28 @@
1
+ ## 迁移至 `@netless/window-manager@1.0`
2
+
3
+ ### 样式
4
+
5
+ 1.0 之前
6
+
7
+ ```html
8
+ <div class="netless-window-manager-playground">
9
+ <div class="netless-window-manager-sizer">
10
+ <div class="netless-window-manager-wrapper">
11
+ <div class="netless-window-manager-main-view"></div>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ ```
16
+
17
+ 1.0 之后
18
+
19
+ ```html
20
+ <div class="netless-window-manager-playground">
21
+ <div class="netless-window-manager-main-view"></div>
22
+ </div>
23
+ ```
24
+
25
+
26
+ ### `APP` 迁移
27
+
28
+
package/package.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@netless/window-manager",
3
- "version": "1.0.0-canary.3",
3
+ "version": "1.0.0-canary.32",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",
7
- "types": "dist/index.d.ts",
7
+ "types": "dist/src/index.d.ts",
8
8
  "repository": "netless-io/window-manager",
9
9
  "scripts": {
10
10
  "prettier": "prettier --write .",
11
- "build": "vite build && yarn type-gen",
11
+ "dev": "vite build --watch",
12
+ "build": "vite build",
12
13
  "type-gen": "tsc --emitDeclarationOnly",
13
14
  "predev": "yarn type-gen",
14
15
  "build:lib:types": "tsc --emitDeclarationOnly",
15
16
  "lint": "eslint --ext .ts,.tsx,.svelte . && prettier --check .",
16
- "test": "vitest"
17
+ "test": "vitest",
18
+ "e2e": "playwright test"
17
19
  },
18
20
  "keywords": [],
19
21
  "author": "",
@@ -23,18 +25,19 @@
23
25
  },
24
26
  "dependencies": {
25
27
  "@juggle/resize-observer": "^3.3.1",
26
- "@netless/telebox-insider": "1.0.0-alpha.9",
27
- "emittery": "^0.9.2",
28
+ "@netless/telebox-insider": "1.0.0-alpha.29",
29
+ "emittery": "^0.11.0",
28
30
  "lodash": "^4.17.21",
29
31
  "p-retry": "^4.6.1",
30
32
  "side-effect-manager": "^1.1.0",
31
33
  "uuid": "^7.0.3",
32
- "value-enhancer": "^1.2.1",
34
+ "value-enhancer": "^1.3.0",
33
35
  "video.js": ">=7"
34
36
  },
35
37
  "devDependencies": {
36
38
  "@netless/app-docs-viewer": "^0.2.9",
37
39
  "@netless/app-media-player": "0.1.0-beta.5",
40
+ "@playwright/test": "^1.23.0",
38
41
  "@rollup/plugin-commonjs": "^20.0.0",
39
42
  "@rollup/plugin-node-resolve": "^13.0.4",
40
43
  "@rollup/plugin-url": "^6.1.0",
@@ -43,6 +46,7 @@
43
46
  "@types/debug": "^4.1.7",
44
47
  "@types/lodash": "^4.14.182",
45
48
  "@types/lodash-es": "^4.17.4",
49
+ "@types/node": "^18.0.0",
46
50
  "@types/uuid": "^8.3.1",
47
51
  "@typescript-eslint/eslint-plugin": "^4.30.0",
48
52
  "@typescript-eslint/parser": "^4.30.0",
@@ -61,6 +65,7 @@
61
65
  "svelte": "^3.42.4",
62
66
  "typescript": "^4.5.5",
63
67
  "vite": "^2.5.3",
68
+ "vite-plugin-dts": "^1.2.0",
64
69
  "vitest": "^0.14.1",
65
70
  "white-web-sdk": "2.16.10"
66
71
  }
@@ -0,0 +1,29 @@
1
+ import type { PlaywrightTestConfig} from '@playwright/test';
2
+ import dotenv from "dotenv";
3
+ import path from "path";
4
+
5
+ dotenv.config({ path: path.resolve(__dirname, "example", ".env") });
6
+
7
+ const config: PlaywrightTestConfig = {
8
+ forbidOnly: !!process.env.CI,
9
+ retries: process.env.CI ? 2 : 0,
10
+ use: {
11
+ trace: 'on-first-retry',
12
+ baseURL: "http://localhost:4000",
13
+ headless: true,
14
+ },
15
+ timeout: 5 * 60 * 1000,
16
+ workers: 4,
17
+ projects: [
18
+ {
19
+ name: 'chrome',
20
+ use: {
21
+ launchOptions: {
22
+ executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
23
+ }
24
+ },
25
+ },
26
+ ],
27
+ testDir: "./e2e",
28
+ };
29
+ export default config;