@netless/window-manager 0.4.24 → 0.4.27-canary.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/__mocks__/white-web-sdk.ts +41 -0
  3. package/dist/App/AppContext.d.ts +2 -1
  4. package/dist/App/AppProxy.d.ts +7 -3
  5. package/dist/AppListener.d.ts +1 -0
  6. package/dist/AppManager.d.ts +2 -0
  7. package/dist/ContainerResizeObserver.d.ts +2 -1
  8. package/dist/InternalEmitter.d.ts +8 -2
  9. package/dist/Page/PageController.d.ts +5 -0
  10. package/dist/Page/index.d.ts +2 -0
  11. package/dist/Utils/Common.d.ts +2 -1
  12. package/dist/Utils/error.d.ts +3 -0
  13. package/dist/View/MainView.d.ts +4 -1
  14. package/dist/constants.d.ts +1 -0
  15. package/dist/index.cjs.js +12 -12
  16. package/dist/index.cjs.js.map +1 -1
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.es.js +263 -61
  19. package/dist/index.es.js.map +1 -1
  20. package/dist/index.umd.js +12 -12
  21. package/dist/index.umd.js.map +1 -1
  22. package/dist/typings.d.ts +1 -0
  23. package/docs/advanced.md +29 -4
  24. package/docs/api.md +17 -0
  25. package/docs/app-context.md +149 -100
  26. package/package.json +5 -9
  27. package/pnpm-lock.yaml +793 -2690
  28. package/src/App/AppContext.ts +20 -11
  29. package/src/App/AppProxy.ts +61 -5
  30. package/src/App/Storage/index.ts +14 -8
  31. package/src/AppListener.ts +22 -0
  32. package/src/AppManager.ts +57 -24
  33. package/src/ContainerResizeObserver.ts +12 -1
  34. package/src/InternalEmitter.ts +7 -2
  35. package/src/Page/PageController.ts +6 -0
  36. package/src/Page/index.ts +18 -0
  37. package/src/PageState.ts +2 -1
  38. package/src/ReconnectRefresher.ts +4 -1
  39. package/src/Utils/Common.ts +14 -2
  40. package/src/Utils/RoomHacker.ts +2 -2
  41. package/src/Utils/error.ts +4 -0
  42. package/src/View/MainView.ts +37 -8
  43. package/src/constants.ts +1 -0
  44. package/src/index.ts +26 -1
  45. package/src/typings.ts +1 -0
  46. package/vite.config.js +9 -1
package/dist/typings.d.ts CHANGED
@@ -74,3 +74,4 @@ export type { ReadonlyTeleBox, TeleBoxRect };
74
74
  export type { SceneState, SceneDefinition, View, AnimationMode, Displayer, Room, Player };
75
75
  export type { Storage, StorageStateChangedEvent, StorageStateChangedListener } from "./App/Storage";
76
76
  export * from "./Page";
77
+ export * from "./Utils/error";
package/docs/advanced.md CHANGED
@@ -6,6 +6,7 @@
6
6
  - [判断是否打开某种 APP](#has-kind)
7
7
  - [页面控制器](#page-control)
8
8
  - [视角](#view-mode)
9
+ - [插入图片到当前app](#insert-image-to-app)
9
10
 
10
11
 
11
12
  <h3 id="redo-undo">撤销重做</h3>
@@ -94,10 +95,34 @@ manager.addPage()
94
95
 
95
96
  <h3 id="view-mode">视角跟随</h3>
96
97
 
97
- `ViewMode` 有 `broadcaster` `freedom` 两种模式
98
+ 多窗口中 `ViewMode` 有 `broadcaster` `freedom` 两种模式
98
99
 
99
- 可写权限默认进去为 `broadcaster` 并且互相操作并跟随视角
100
+ - `freedom`
100
101
 
101
- 当 `room` 设置 `Writable` 为 `false` 时此时只能跟随视角并不能广播视角
102
+ 自由模式,用户可以自由放缩、移动视角
102
103
 
103
- 在 `room` 的 `isWritable` 设置为 `false` 后想重新跟随视角可以通过设置为 `broadcaster` 跟随
104
+ 即便房间里有主播,主播也无法影响用户的视角
105
+
106
+ - `broadcaster`
107
+
108
+ 主播模式, 操作时其他人的视角都会跟随我
109
+
110
+ 同时其他为 `broadcaster` 模式的人也会影响我的视角
111
+
112
+ 在 `isWritable` 为 `false` 时只会跟随其他 `broadcaster` 的视角
113
+
114
+ <br>
115
+
116
+ <h3 id="insert-image-to-app">插入图片到当前 app</h3>
117
+
118
+ ```ts
119
+ // 判断当前是否为最大化
120
+ if (manager.boxState === "maximized") {
121
+ // `focused` 的值的会根据当前 focus 的 app 不同而变化
122
+ const app = manager.queryOne(manager.focused)
123
+ // 有 view 的 app 才可以插入图片, 像是 视频,音频之类的 app 是没有 view 的
124
+ if (app.view) {
125
+ app.view.insertImage()
126
+ }
127
+ }
128
+ ```
package/docs/api.md CHANGED
@@ -28,6 +28,7 @@
28
28
  - [`prevPage`](#prevPage)
29
29
  - [`addPage`](#addPage)
30
30
  - [`refresh`](#refresh)
31
+ - [`setContainerSizeRatio`](#setContainerSizeRatio)
31
32
  - [实例属性](#prototypes)
32
33
  - [事件回调](#events)
33
34
 
@@ -213,6 +214,14 @@ manager.addPage({ after: true }) // 在当前页后添加一页
213
214
  manager.addPage({ scene: { name: "page2" } }) // 传入 page 信息
214
215
  ```
215
216
 
217
+ <h3 id="removePage">removePage</h3>
218
+
219
+ > 移除一页
220
+
221
+ ```ts
222
+ const success = await manager.removePage(1)
223
+ ```
224
+
216
225
  <h3 id="refresh">refresh</h3>
217
226
 
218
227
  > 刷新 `manager` 的内部状态, 用于从其他房间 `copy` `attributes`
@@ -221,6 +230,14 @@ manager.addPage({ scene: { name: "page2" } }) // 传入 page 信息
221
230
  manager.refresh()
222
231
  ```
223
232
 
233
+ <h3 id="setContainerSizeRatio">setContainerSizeRatio</h3>
234
+
235
+ > 设置白板同步区域的宽高比
236
+
237
+ ```ts
238
+ manager.setContainerSizeRatio(10 / 16)
239
+ ```
240
+
224
241
  <br>
225
242
 
226
243
  <h2 id="prototypes">实例属性</h2>
@@ -1,156 +1,205 @@
1
1
  ## AppContext
2
2
 
3
- - [api](#api)
4
- - [events](#events)
3
+ - [api](#api)
4
+ - [view](#view)
5
+ - [page](#page)
6
+ - [storage](#storage)
7
+ - [events](#events)
5
8
 
6
9
  <h2 id="api">API</h2>
7
10
 
8
- ### appId
11
+ - **context.appId**
9
12
 
10
- 插入 `app` 时生成的唯一 ID
13
+ 插入 `app` 时生成的唯一 ID
11
14
 
12
- ```ts
13
- const appId = context.appId
14
- ```
15
+ ```ts
16
+ const appId = context.appId;
17
+ ```
15
18
 
16
- ### getDisplayer
19
+ - **context.getDisplayer()**
17
20
 
18
- 在默认情况下 `Displayer` 为白板的 `room` 实例
21
+ 在默认情况下 `Displayer` 为白板的 `room` 实例
19
22
 
20
- 回放时则为 `Player` 实例
23
+ 回放时则为 `Player` 实例
21
24
 
22
- ```ts
23
- const displayer = context.getDisplayer()
25
+ ```ts
26
+ const displayer = context.getDisplayer();
24
27
 
25
- assert(displayer, room) // 互动房间
26
- assert(displayer, player) // 回放房间
27
- ```
28
+ assert(displayer, room); // 互动房间
29
+ assert(displayer, player); // 回放房间
30
+ ```
28
31
 
29
- ### getScenes
30
32
 
31
- `scenes` 在 `addApp` 时传入 `scenePath` 会由 `WindowManager` 创建
33
+ - **context.getIsWritable()**
32
34
 
33
- ```ts
34
- const scenes = context.getScenes()
35
- ```
35
+ 获取当前状态是否可写
36
36
 
37
- ### getView
37
+ ```ts
38
+ // isWritable === (room.isWritable && box.readonly)
39
+ const isWritable = context.getIsWritable();
40
+ ```
38
41
 
39
- `View` 为白板中一块可标注部分
42
+ - **context.getBox()**
40
43
 
41
- ```ts
42
- const view = context.getView()
43
- ```
44
+ 获取当前 app 的 box
44
45
 
45
- ### getIsWritable
46
+ ```ts
47
+ const box = context.getBox();
46
48
 
47
- 获取当前状态是否可写
49
+ box.$content; // box 的 main element
50
+ box.$footer;
51
+ ```
48
52
 
49
- ```ts
50
- // isWritable === (room.isWritable && box.readonly)
51
- const isWritable = context.getIsWritable()
52
- ```
53
+ <h3 id="view">View</h3>
53
54
 
54
- ### getBox
55
+ `view` 可以理解为一块白板,可以从 `context` 中拿到这个实例并挂载到 `Dom` 中
55
56
 
56
- 获取当前 app 的 box
57
+ - **context.getView()**
57
58
 
58
- ```ts
59
- const box = context.getBox()
59
+ 获取 `view` 实例
60
60
 
61
- box.$content // box 的 main element
62
- box.$footer
63
- ```
61
+ ```ts
62
+ const view = context.getView();
63
+ ```
64
64
 
65
- ### setScenePath
65
+ - **context.mountView()**
66
66
 
67
- 切换当前 `view` `scenePath`
67
+ 挂载 view 到指定 dom
68
68
 
69
- ```ts
70
- context.setScenePath("/page/2")
71
- ```
69
+ ```ts
70
+ context.mountView(element);
71
+ ```
72
72
 
73
- ### mountView
73
+ - **context.getScenes()**
74
74
 
75
- 挂载 view 到指定 dom
75
+ `scenes` `addApp` 时传入 `scenePath` 会由 `WindowManager` 创建
76
76
 
77
- ```ts
78
- context.mountView(ref)
79
- ```
77
+ ```ts
78
+ const scenes = context.getScenes();
79
+ ```
80
80
 
81
- ### addPage
81
+ - **context.setScenePath()**
82
82
 
83
- ```ts
84
- context.addPage()
85
- ```
83
+ 切换当前 `view` 到指定的 `scenePath`
86
84
 
87
- ### nextPage
85
+ ```ts
86
+ context.setScenePath("/page/2");
87
+ ```
88
88
 
89
- ```ts
90
- context.nextPage()
91
- ```
92
89
 
93
- ### prevPage
90
+ <h3 id="page">Page</h3>
94
91
 
95
- ```ts
96
- context.prevPage()
97
- ```
92
+ `Page` 是封装后 `scenes` 的一些概念
98
93
 
99
- ### pageState
94
+ - **context.addPage()**
100
95
 
101
- ```ts
102
- context.pageState
103
- ```
96
+ 添加一页至 `view`
104
97
 
98
+ ```ts
99
+ context.addPage() // 默认在最后添加一页
100
+ context.addPage({ after: true }) // 在当前页后添加一页
101
+ context.addPage({ scene: { name: "page2" } }) // 传入 page 信息
102
+ ```
105
103
 
106
- <h2 id="events">events</h2>
104
+ - **context.nextPage()**
105
+
106
+ 上一页
107
+
108
+ ```ts
109
+ context.nextPage();
110
+ ```
111
+
112
+ - **context.prevPage()**
113
+
114
+ 下一页
115
+
116
+ ```ts
117
+ context.prevPage();
118
+ ```
119
+
120
+ - **context.pageState**
121
+
122
+ 获取当前所在的 `index` 和一共有多少页
123
+
124
+ ```ts
125
+ context.pageState;
126
+ // {
127
+ // index: number,
128
+ // length: number,
129
+ // }
130
+ ```
131
+
132
+ <h3 id="storage">storage</h3>
133
+
134
+ 存储和同步状态,以及发送事件的一系列集合
107
135
 
108
- ### destroy
136
+ - **context.storage**
137
+
138
+ 默认创建的 storage 实例
139
+
140
+ ```ts
141
+ context.storage
142
+ ```
143
+
144
+ - **createStorage()**
145
+
146
+ 同时你也可以创建多个 `storage` 实例
147
+
148
+ ```ts
149
+ const defaultState = { count: 0 } // 可选
150
+ const storage = context.createStorage("store1", defaultState);
151
+ ```
152
+
153
+
154
+
155
+
156
+ <h2 id="events">events</h2>
109
157
 
110
- app 被关闭时发送的事件
158
+ - **destroy**
111
159
 
112
- ```ts
113
- context.emitter.on("destroy", () => {
114
- // release your listeners
115
- })
116
- ```
160
+ app 被关闭时发送
117
161
 
118
- ### writableChange
162
+ ```ts
163
+ context.emitter.on("destroy", () => {
164
+ // release your listeners
165
+ });
166
+ ```
119
167
 
120
- 白板可写状态切换时触发
168
+ - **writableChange**
121
169
 
122
- ```ts
123
- context.emitter.on("writableChange", isWritable => {
124
- //
125
- })
126
- ```
170
+ 白板可写状态切换时触发
127
171
 
128
- ### focus
172
+ ```ts
173
+ context.emitter.on("writableChange", isWritable => {
174
+ //
175
+ });
176
+ ```
129
177
 
130
- 当前 app 获得焦点或者失去焦点时触发
178
+ - **focus**
131
179
 
132
- ```ts
133
- context.emitter.on("focus", focus => {
134
- //
135
- })
136
- ```
180
+ 当前 app 获得焦点或者失去焦点时触发
137
181
 
182
+ ```ts
183
+ context.emitter.on("focus", focus => {
184
+ //
185
+ });
186
+ ```
138
187
 
139
- ### pageStateChange
188
+ - **pageStateChange**
140
189
 
141
- #### PageState
190
+ `PageState`
142
191
 
143
- ```ts
144
- type PateState {
145
- index: number;
146
- length: number;
147
- }
148
- ```
192
+ ```ts
193
+ type PateState {
194
+ index: number;
195
+ length: number;
196
+ }
197
+ ```
149
198
 
150
- 当前页数和总页数变化时触发
199
+ 当前页数和总页数变化时触发
151
200
 
152
- ```ts
153
- context.emitter.on("pageStateChange", pageState => {
154
- // { index: 0, length: 1 }
155
- })
156
- ```
201
+ ```ts
202
+ context.emitter.on("pageStateChange", pageState => {
203
+ // { index: 0, length: 1 }
204
+ });
205
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/window-manager",
3
- "version": "0.4.24",
3
+ "version": "0.4.27-canary.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",
@@ -13,7 +13,7 @@
13
13
  "predev": "yarn type-gen",
14
14
  "build:lib:types": "tsc --emitDeclarationOnly",
15
15
  "lint": "eslint --ext .ts,.tsx,.svelte . && prettier --check .",
16
- "test": "jest --config=./jest.config.js"
16
+ "test": "vitest"
17
17
  },
18
18
  "keywords": [],
19
19
  "author": "",
@@ -40,7 +40,7 @@
40
40
  "@sveltejs/vite-plugin-svelte": "^1.0.0-next.22",
41
41
  "@tsconfig/svelte": "^2.0.1",
42
42
  "@types/debug": "^4.1.7",
43
- "@types/jest": "^27.4.1",
43
+ "@types/lodash": "^4.14.182",
44
44
  "@types/lodash-es": "^4.17.4",
45
45
  "@types/uuid": "^8.3.1",
46
46
  "@typescript-eslint/eslint-plugin": "^4.30.0",
@@ -50,20 +50,16 @@
50
50
  "eslint": "^7.32.0",
51
51
  "eslint-config-prettier": "^8.3.0",
52
52
  "eslint-plugin-svelte3": "^3.2.0",
53
- "jest": "^27.5.1",
54
- "jest-canvas-mock": "^2.3.1",
55
- "jest-fetch-mock": "^3.0.3",
56
- "jest-transform-stub": "^2.0.0",
53
+ "jsdom": "^19.0.0",
57
54
  "less": "^4.1.1",
58
55
  "prettier": "^2.3.2",
59
56
  "prettier-plugin-svelte": "^2.4.0",
60
57
  "rollup-plugin-analyzer": "^4.0.0",
61
58
  "rollup-plugin-styles": "^3.14.1",
62
59
  "svelte": "^3.42.4",
63
- "svelte-jester": "^2.3.2",
64
- "ts-jest": "^27.1.4",
65
60
  "typescript": "^4.5.5",
66
61
  "vite": "^2.5.3",
62
+ "vitest": "^0.12.4",
67
63
  "white-web-sdk": "2.16.10"
68
64
  }
69
65
  }