@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.
- package/CHANGELOG.md +9 -0
- package/__mocks__/white-web-sdk.ts +41 -0
- package/dist/App/AppContext.d.ts +2 -1
- package/dist/App/AppProxy.d.ts +7 -3
- package/dist/AppListener.d.ts +1 -0
- package/dist/AppManager.d.ts +2 -0
- package/dist/ContainerResizeObserver.d.ts +2 -1
- package/dist/InternalEmitter.d.ts +8 -2
- package/dist/Page/PageController.d.ts +5 -0
- package/dist/Page/index.d.ts +2 -0
- package/dist/Utils/Common.d.ts +2 -1
- package/dist/Utils/error.d.ts +3 -0
- package/dist/View/MainView.d.ts +4 -1
- package/dist/constants.d.ts +1 -0
- package/dist/index.cjs.js +12 -12
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.es.js +263 -61
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +12 -12
- package/dist/index.umd.js.map +1 -1
- package/dist/typings.d.ts +1 -0
- package/docs/advanced.md +29 -4
- package/docs/api.md +17 -0
- package/docs/app-context.md +149 -100
- package/package.json +5 -9
- package/pnpm-lock.yaml +793 -2690
- package/src/App/AppContext.ts +20 -11
- package/src/App/AppProxy.ts +61 -5
- package/src/App/Storage/index.ts +14 -8
- package/src/AppListener.ts +22 -0
- package/src/AppManager.ts +57 -24
- package/src/ContainerResizeObserver.ts +12 -1
- package/src/InternalEmitter.ts +7 -2
- package/src/Page/PageController.ts +6 -0
- package/src/Page/index.ts +18 -0
- package/src/PageState.ts +2 -1
- package/src/ReconnectRefresher.ts +4 -1
- package/src/Utils/Common.ts +14 -2
- package/src/Utils/RoomHacker.ts +2 -2
- package/src/Utils/error.ts +4 -0
- package/src/View/MainView.ts +37 -8
- package/src/constants.ts +1 -0
- package/src/index.ts +26 -1
- package/src/typings.ts +1 -0
- 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
|
-
|
100
|
+
- `freedom`
|
100
101
|
|
101
|
-
|
102
|
+
自由模式,用户可以自由放缩、移动视角
|
102
103
|
|
103
|
-
|
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>
|
package/docs/app-context.md
CHANGED
@@ -1,156 +1,205 @@
|
|
1
1
|
## AppContext
|
2
2
|
|
3
|
-
-
|
4
|
-
- [
|
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
|
-
|
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
|
-
|
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
|
-
|
33
|
+
- **context.getIsWritable()**
|
32
34
|
|
33
|
-
|
34
|
-
const scenes = context.getScenes()
|
35
|
-
```
|
35
|
+
获取当前状态是否可写
|
36
36
|
|
37
|
-
|
37
|
+
```ts
|
38
|
+
// isWritable === (room.isWritable && box.readonly)
|
39
|
+
const isWritable = context.getIsWritable();
|
40
|
+
```
|
38
41
|
|
39
|
-
|
42
|
+
- **context.getBox()**
|
40
43
|
|
41
|
-
|
42
|
-
const view = context.getView()
|
43
|
-
```
|
44
|
+
获取当前 app 的 box
|
44
45
|
|
45
|
-
|
46
|
+
```ts
|
47
|
+
const box = context.getBox();
|
46
48
|
|
47
|
-
|
49
|
+
box.$content; // box 的 main element
|
50
|
+
box.$footer;
|
51
|
+
```
|
48
52
|
|
49
|
-
|
50
|
-
// isWritable === (room.isWritable && box.readonly)
|
51
|
-
const isWritable = context.getIsWritable()
|
52
|
-
```
|
53
|
+
<h3 id="view">View</h3>
|
53
54
|
|
54
|
-
|
55
|
+
`view` 可以理解为一块白板,可以从 `context` 中拿到这个实例并挂载到 `Dom` 中
|
55
56
|
|
56
|
-
|
57
|
+
- **context.getView()**
|
57
58
|
|
58
|
-
|
59
|
-
const box = context.getBox()
|
59
|
+
获取 `view` 实例
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
```
|
61
|
+
```ts
|
62
|
+
const view = context.getView();
|
63
|
+
```
|
64
64
|
|
65
|
-
|
65
|
+
- **context.mountView()**
|
66
66
|
|
67
|
-
|
67
|
+
挂载 view 到指定 dom
|
68
68
|
|
69
|
-
```ts
|
70
|
-
context.
|
71
|
-
```
|
69
|
+
```ts
|
70
|
+
context.mountView(element);
|
71
|
+
```
|
72
72
|
|
73
|
-
|
73
|
+
- **context.getScenes()**
|
74
74
|
|
75
|
-
|
75
|
+
`scenes` 在 `addApp` 时传入 `scenePath` 会由 `WindowManager` 创建
|
76
76
|
|
77
|
-
```ts
|
78
|
-
context.
|
79
|
-
```
|
77
|
+
```ts
|
78
|
+
const scenes = context.getScenes();
|
79
|
+
```
|
80
80
|
|
81
|
-
|
81
|
+
- **context.setScenePath()**
|
82
82
|
|
83
|
-
|
84
|
-
context.addPage()
|
85
|
-
```
|
83
|
+
切换当前 `view` 到指定的 `scenePath`
|
86
84
|
|
87
|
-
|
85
|
+
```ts
|
86
|
+
context.setScenePath("/page/2");
|
87
|
+
```
|
88
88
|
|
89
|
-
```ts
|
90
|
-
context.nextPage()
|
91
|
-
```
|
92
89
|
|
93
|
-
|
90
|
+
<h3 id="page">Page</h3>
|
94
91
|
|
95
|
-
|
96
|
-
context.prevPage()
|
97
|
-
```
|
92
|
+
`Page` 是封装后 `scenes` 的一些概念
|
98
93
|
|
99
|
-
|
94
|
+
- **context.addPage()**
|
100
95
|
|
101
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
158
|
+
- **destroy**
|
111
159
|
|
112
|
-
|
113
|
-
context.emitter.on("destroy", () => {
|
114
|
-
// release your listeners
|
115
|
-
})
|
116
|
-
```
|
160
|
+
app 被关闭时发送
|
117
161
|
|
118
|
-
|
162
|
+
```ts
|
163
|
+
context.emitter.on("destroy", () => {
|
164
|
+
// release your listeners
|
165
|
+
});
|
166
|
+
```
|
119
167
|
|
120
|
-
|
168
|
+
- **writableChange**
|
121
169
|
|
122
|
-
|
123
|
-
context.emitter.on("writableChange", isWritable => {
|
124
|
-
//
|
125
|
-
})
|
126
|
-
```
|
170
|
+
白板可写状态切换时触发
|
127
171
|
|
128
|
-
|
172
|
+
```ts
|
173
|
+
context.emitter.on("writableChange", isWritable => {
|
174
|
+
//
|
175
|
+
});
|
176
|
+
```
|
129
177
|
|
130
|
-
|
178
|
+
- **focus**
|
131
179
|
|
132
|
-
|
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
|
-
|
188
|
+
- **pageStateChange**
|
140
189
|
|
141
|
-
|
190
|
+
`PageState`
|
142
191
|
|
143
|
-
```ts
|
144
|
-
type PateState {
|
145
|
-
|
146
|
-
|
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
|
-
|
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.
|
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": "
|
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/
|
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
|
-
"
|
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
|
}
|