@netless/window-manager 1.0.0-canary.9 → 1.0.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/LICENSE.txt +21 -0
- package/README.md +90 -64
- package/README.zh-cn.md +224 -0
- package/dist/index.d.ts +1133 -40
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/{index.es.js → index.mjs} +9480 -6984
- package/dist/index.mjs.map +1 -0
- package/dist/style.css +1 -1
- package/docs/advanced.md +55 -55
- package/docs/api.md +124 -113
- package/docs/app-context.md +248 -209
- package/docs/basic.md +25 -26
- package/docs/camera.md +19 -20
- package/docs/cn/advanced.md +137 -0
- package/docs/cn/api.md +309 -0
- package/docs/cn/app-context.md +369 -0
- package/docs/cn/basic.md +64 -0
- package/docs/cn/camera.md +53 -0
- package/docs/cn/concept.md +9 -0
- package/docs/cn/custom-max-bar.md +31 -0
- package/docs/cn/develop-app.md +94 -0
- package/docs/cn/export-pdf.md +48 -0
- package/docs/cn/migrate.md +60 -0
- package/docs/cn/replay.md +40 -0
- package/docs/concept.md +6 -5
- package/docs/custom-max-bar.md +31 -0
- package/docs/develop-app.md +22 -19
- package/docs/export-pdf.md +48 -0
- package/docs/migrate.md +25 -27
- package/docs/quickstart.md +50 -0
- package/docs/replay.md +20 -20
- package/package.json +32 -22
- package/src/App/AppContext.ts +105 -73
- package/src/App/AppPageStateImpl.ts +6 -25
- package/src/App/AppProxy.ts +41 -166
- package/src/App/MagixEvent/index.ts +38 -38
- package/src/App/Storage/StorageEvent.ts +13 -13
- package/src/App/Storage/index.ts +269 -245
- package/src/App/Storage/typings.ts +4 -2
- package/src/App/Storage/utils.ts +3 -3
- package/src/App/index.ts +0 -1
- package/src/AppListener.ts +8 -8
- package/src/AppManager.ts +88 -77
- package/src/AttributesDelegate.ts +42 -22
- package/src/BoxEmitter.ts +12 -6
- package/src/BoxManager.ts +128 -108
- package/src/ContainerResizeObserver.ts +75 -0
- package/src/Cursor/Cursor.svelte +16 -5
- package/src/Cursor/Cursor.svelte.d.ts +21 -0
- package/src/Cursor/Cursor.ts +77 -13
- package/src/Cursor/icons.ts +6 -0
- package/src/Cursor/icons2.ts +66 -0
- package/src/Cursor/index.ts +127 -26
- package/src/Helper.ts +94 -14
- package/src/InternalEmitter.ts +2 -7
- package/src/Page/index.ts +1 -1
- package/src/PageState.ts +6 -5
- package/src/ReconnectRefresher.ts +9 -4
- package/src/RedoUndo.ts +3 -3
- package/src/Register/index.ts +22 -17
- package/src/Register/loader.ts +26 -22
- package/src/Register/storage.ts +13 -13
- package/src/Utils/Common.ts +18 -14
- package/src/Utils/Reactive.ts +26 -25
- package/src/Utils/RoomHacker.ts +4 -4
- package/src/Utils/error.ts +0 -1
- package/src/View/IframeBridge.ts +680 -0
- package/src/View/MainView.ts +127 -53
- package/src/callback.ts +21 -1
- package/src/constants.ts +0 -2
- package/src/image/pencil-eraser-1.svg +3 -0
- package/src/image/pencil-eraser-2.svg +3 -0
- package/src/image/pencil-eraser-3.svg +3 -0
- package/src/index.ts +220 -83
- package/src/style.css +27 -10
- package/src/typings.ts +20 -10
- package/.prettierignore +0 -7
- package/.prettierrc.json +0 -9
- package/CHANGELOG.md +0 -196
- package/__mocks__/white-web-sdk.ts +0 -50
- package/dist/App/AppContext.d.ts +0 -76
- package/dist/App/AppPageStateImpl.d.ts +0 -21
- package/dist/App/AppProxy.d.ts +0 -86
- package/dist/App/AppViewSync.d.ts +0 -11
- package/dist/App/MagixEvent/index.d.ts +0 -29
- package/dist/App/Storage/StorageEvent.d.ts +0 -8
- package/dist/App/Storage/index.d.ts +0 -39
- package/dist/App/Storage/typings.d.ts +0 -22
- package/dist/App/Storage/utils.d.ts +0 -5
- package/dist/App/WhiteboardView.d.ts +0 -22
- package/dist/App/index.d.ts +0 -3
- package/dist/AppListener.d.ts +0 -21
- package/dist/AppManager.d.ts +0 -107
- package/dist/AttributesDelegate.d.ts +0 -80
- package/dist/BoxEmitter.d.ts +0 -34
- package/dist/BoxManager.d.ts +0 -99
- package/dist/BuiltinApps.d.ts +0 -5
- package/dist/Cursor/Cursor.d.ts +0 -39
- package/dist/Cursor/icons.d.ts +0 -3
- package/dist/Cursor/index.d.ts +0 -46
- package/dist/Helper.d.ts +0 -17
- package/dist/InternalEmitter.d.ts +0 -39
- package/dist/Page/PageController.d.ts +0 -21
- package/dist/Page/index.d.ts +0 -3
- package/dist/PageState.d.ts +0 -9
- package/dist/ReconnectRefresher.d.ts +0 -24
- package/dist/RedoUndo.d.ts +0 -18
- package/dist/Register/index.d.ts +0 -28
- package/dist/Register/loader.d.ts +0 -4
- package/dist/Register/storage.d.ts +0 -8
- package/dist/Utils/AppCreateQueue.d.ts +0 -15
- package/dist/Utils/Common.d.ts +0 -23
- package/dist/Utils/Reactive.d.ts +0 -6
- package/dist/Utils/RoomHacker.d.ts +0 -3
- package/dist/Utils/error.d.ts +0 -27
- package/dist/Utils/log.d.ts +0 -1
- package/dist/View/CameraSynchronizer.d.ts +0 -16
- package/dist/View/MainView.d.ts +0 -47
- package/dist/View/ViewManager.d.ts +0 -13
- package/dist/callback.d.ts +0 -24
- package/dist/constants.d.ts +0 -49
- package/dist/index.cjs.js +0 -46
- package/dist/index.umd.js +0 -46
- package/dist/typings.d.ts +0 -82
- package/jest.config.js +0 -27
- package/pnpm-lock.yaml +0 -6302
- package/src/App/AppViewSync.ts +0 -68
- package/src/App/WhiteboardView.ts +0 -83
- package/src/View/CameraSynchronizer.ts +0 -56
- package/vite.config.js +0 -51
- /package/docs/{qickstart.md → cn/quickstart.md} +0 -0
package/docs/camera.md
CHANGED
@@ -1,53 +1,52 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# view angle
|
2
|
+
In multi-window mode, multiple whiteboards can exist at the same time, but in most cases users only need to operate on the main whiteboard, which is `mainView`
|
3
3
|
|
4
4
|
|
5
|
-
##
|
5
|
+
## Get `camera` of `mainView`
|
6
6
|
```typescript
|
7
7
|
manager.mainView.camera
|
8
8
|
```
|
9
9
|
|
10
|
-
##
|
10
|
+
## Get `size` of `mainView`
|
11
11
|
```typescript
|
12
12
|
manager.mainView.size
|
13
13
|
```
|
14
14
|
|
15
|
-
##
|
15
|
+
## Monitor `camera` changes in `mainView`
|
16
16
|
```typescript
|
17
17
|
manager.mainView.callbacks.on("onCameraUpdated", camera => {
|
18
|
-
|
18
|
+
// updated camera
|
19
19
|
})
|
20
20
|
```
|
21
21
|
|
22
|
-
##
|
22
|
+
## Monitor the change of `size` of `mainView`
|
23
23
|
```typescript
|
24
24
|
manager.mainView.callbacks.on("onSizeUpdated", camera => {
|
25
|
-
|
25
|
+
// updated size
|
26
26
|
})
|
27
27
|
```
|
28
28
|
|
29
|
-
##
|
29
|
+
## Move `camera` via `api`
|
30
30
|
```typescript
|
31
31
|
manager.moveCamera(camera)
|
32
32
|
```
|
33
33
|
|
34
|
-
##
|
35
|
-
|
34
|
+
## Set view bounds
|
35
|
+
Limit everyone's viewing angle to a rectangle centered at world coordinates (0, 0) with a width of 1024 and a height of 768.
|
36
36
|
```typescript
|
37
37
|
manager.setCameraBound({
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
centerX: 0,
|
39
|
+
centerY: 0,
|
40
|
+
width: 1024,
|
41
|
+
height: 768,
|
42
42
|
})
|
43
43
|
```
|
44
44
|
|
45
|
-
##
|
45
|
+
## Prohibit/allow movement and scaling of `mainView` `camera`
|
46
46
|
```typescript
|
47
|
-
//
|
47
|
+
// Prohibit `camera` from moving and zooming
|
48
48
|
manager.mainView.disableCameraTransform = false
|
49
49
|
|
50
|
-
//
|
50
|
+
// restore `camera` movement, scaling
|
51
51
|
manager.mainView.disableCameraTransform = true
|
52
|
-
```
|
53
|
-
|
52
|
+
```
|
@@ -0,0 +1,137 @@
|
|
1
|
+
## 进阶使用
|
2
|
+
|
3
|
+
- 目录
|
4
|
+
- [撤销重做](#redo-undo)
|
5
|
+
- [清屏](#clean-current-scene)
|
6
|
+
- [判断是否打开某种 APP](#has-kind)
|
7
|
+
- [页面控制器](#page-control)
|
8
|
+
- [视角](#view-mode)
|
9
|
+
- [插入图片到当前app](#insert-image-to-app)
|
10
|
+
|
11
|
+
|
12
|
+
<h3 id="redo-undo">撤销重做</h3>
|
13
|
+
|
14
|
+
> 以下事件和属性都会根据 `focus` 的窗口来进行自动切换应用对象
|
15
|
+
|
16
|
+
#### 获取可以撤销/重做的步数
|
17
|
+
|
18
|
+
```ts
|
19
|
+
manager.canUndoSteps
|
20
|
+
manager.canRedoSteps
|
21
|
+
```
|
22
|
+
|
23
|
+
#### 监听可以撤销/重做的步数的变化
|
24
|
+
|
25
|
+
`canRedoStepsChange` 和 `canUndoStepsChange` 会在切换窗口时重新触发
|
26
|
+
|
27
|
+
```ts
|
28
|
+
manager.emitter.on("canUndoStepsChange", (steps: number) => {
|
29
|
+
// 可以撤销的步数更新
|
30
|
+
})
|
31
|
+
manager.emitter.on("canRedoStepsChange", (steps: number) => {
|
32
|
+
// 可以重做的步数更新
|
33
|
+
})
|
34
|
+
```
|
35
|
+
|
36
|
+
#### 撤销/重做
|
37
|
+
|
38
|
+
```ts
|
39
|
+
manager.undo() //撤销
|
40
|
+
manager.redo() // 重做
|
41
|
+
```
|
42
|
+
|
43
|
+
<br>
|
44
|
+
|
45
|
+
<h3 id="clean-current-scene">清屏</h3>
|
46
|
+
|
47
|
+
因为在多窗口模式下有多个白板, 如果想要清除当前 `focus` 的白板只需要调用
|
48
|
+
|
49
|
+
```ts
|
50
|
+
manager.cleanCurrentScene()
|
51
|
+
```
|
52
|
+
|
53
|
+
只想清理主白板的笔迹则需要
|
54
|
+
|
55
|
+
```ts
|
56
|
+
manager.mainView.cleanCurrentScene()
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
<br>
|
61
|
+
|
62
|
+
<h3 id="has-kind">判断是否打开某种 APP</h3>
|
63
|
+
|
64
|
+
```ts
|
65
|
+
manager.emitter.on("ready", () => { // ready 事件在所有 app 创建完成后触发
|
66
|
+
const apps = manager.queryAll(); // 获取所有已经打开的 App
|
67
|
+
const hasSlide = apps.some(app => app.kind === "Slide"); // 判断已经打开的 APP 中是否有 Slide
|
68
|
+
});
|
69
|
+
```
|
70
|
+
|
71
|
+
<br>
|
72
|
+
|
73
|
+
<h3 id="page-control">页面控制器</h3>
|
74
|
+
|
75
|
+
`manager` 提供了一个 `pageState` 来获取当前的 index 和总页数
|
76
|
+
|
77
|
+
```ts
|
78
|
+
manager.pageState.index // 当前的 index
|
79
|
+
manager.pageState.length // 总页数
|
80
|
+
|
81
|
+
manager.emitter.on("pageStateChange", state => {
|
82
|
+
// 当前 index 变化和总页数变化会触发此事件
|
83
|
+
});
|
84
|
+
```
|
85
|
+
|
86
|
+
上一页/下一页/添加一页
|
87
|
+
|
88
|
+
```ts
|
89
|
+
manager.nextPage()
|
90
|
+
manager.prevPage()
|
91
|
+
manager.addPage()
|
92
|
+
```
|
93
|
+
|
94
|
+
<br>
|
95
|
+
|
96
|
+
<h3 id="view-mode">视角跟随</h3>
|
97
|
+
|
98
|
+
多窗口中 `ViewMode` 有 `broadcaster` `freedom` 两种模式
|
99
|
+
|
100
|
+
- `freedom`
|
101
|
+
|
102
|
+
自由模式,用户可以自由放缩、移动视角
|
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
|
+
var imageInformation = {
|
126
|
+
uuid: uuid,
|
127
|
+
centerX: centerX,
|
128
|
+
centerY: centerY,
|
129
|
+
width: width,
|
130
|
+
height: height,
|
131
|
+
locked: false,
|
132
|
+
};
|
133
|
+
app.view.insertImage(imageInformation);
|
134
|
+
app.view.completeImageUpload(uuid, src);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
```
|
package/docs/cn/api.md
ADDED
@@ -0,0 +1,309 @@
|
|
1
|
+
# API
|
2
|
+
|
3
|
+
## 目录
|
4
|
+
- [静态方法](#static-methods)
|
5
|
+
- [`mount`](#mount)
|
6
|
+
- [`register`](#register)
|
7
|
+
- [`registered`](#registered)
|
8
|
+
- [`setContainer`](#set-container)
|
9
|
+
- [`setCollectorContainer`](#set-collector-container)
|
10
|
+
- [实例方法](#instance-methods)
|
11
|
+
- [`addApp`](#addApp)
|
12
|
+
- [`closeApp`](#closeApp)
|
13
|
+
- [`focusApp`](#focusApp)
|
14
|
+
- [`setMainViewSceneIndex`](#setMainViewSceneIndex)
|
15
|
+
- [`setBoxState`](#setBoxState)
|
16
|
+
- [`cleanCurrentScene`](#cleanCurrentScene)
|
17
|
+
- [`redo`](#redo)
|
18
|
+
- [`undo`](#undo)
|
19
|
+
- [`copy`](#copy)
|
20
|
+
- [`paste`](#paste)
|
21
|
+
- [`delete`](#delete)
|
22
|
+
- [`duplicate`](#duplicate)
|
23
|
+
- [`insertText`](#insertText)
|
24
|
+
- [`insertImage`](#insertImage)
|
25
|
+
- [`completeImageUpload`](#completeImageUpload)
|
26
|
+
- [`lockImage`](#lockImage)
|
27
|
+
- [`lockImages`](#lockImages)
|
28
|
+
- [`nextPage`](#nextPage)
|
29
|
+
- [`prevPage`](#prevPage)
|
30
|
+
- [`addPage`](#addPage)
|
31
|
+
- [`removePage`](#removePage)
|
32
|
+
- [`refresh`](#refresh)
|
33
|
+
- [`setContainerSizeRatio`](#setContainerSizeRatio)
|
34
|
+
- [实例属性](#prototypes)
|
35
|
+
- [事件回调](#events)
|
36
|
+
|
37
|
+
<br>
|
38
|
+
|
39
|
+
<h2 id="static-methods">静态方法</h2>
|
40
|
+
|
41
|
+
<h3 id="mount">WindowManager.mount</h3>
|
42
|
+
|
43
|
+
> 挂载 WindowManager
|
44
|
+
|
45
|
+
```typescript
|
46
|
+
const manager = await WindowManager.mount(
|
47
|
+
room: room,
|
48
|
+
container: document.getElementById("container")
|
49
|
+
// 完整配置见下方
|
50
|
+
);
|
51
|
+
```
|
52
|
+
|
53
|
+
参数
|
54
|
+
|
55
|
+
| name | type | default | desc |
|
56
|
+
| ---------------------- | --------------------------------------- | ------- | ---------------------------- |
|
57
|
+
| room | [require] Room | | 房间实例 |
|
58
|
+
| container | [require] HTMLElement | | 房间挂载容器 |
|
59
|
+
| containerSizeRatio | [optional] number | 9 / 16 | 多窗口区域的高宽比,默认为 9 : 16 |
|
60
|
+
| chessboard | [optional] boolean | true | 多窗口区域以外的空间显示 PS 棋盘背景,默认 true |
|
61
|
+
| collectorContainer | [optional] HTMLElement | | 用于多窗口最小化图标挂载的 dom |
|
62
|
+
| collectorStyles | [optional] Partial{CSSStyleDeclaration} | | 配置 collector 的样式 |
|
63
|
+
| overwriteStyles | [optional] string | | 用于覆盖窗口的样式 |
|
64
|
+
| cursor | [optional] boolean | false | 开启光标同步 |
|
65
|
+
| disableCameraTransform | [optional] boolean | | 禁用主白板的相机移动 |
|
66
|
+
| prefersColorScheme | [optional] string | light | auto, light, dark |
|
67
|
+
| debug | [optional] boolean | false | 打印日志信息
|
68
|
+
| applianceIcons | [optional] {ApplianceNames, string} | | 配置光标使用的教具图片 |
|
69
|
+
|
70
|
+
<h3 id="register">WindowManager.register</h3>
|
71
|
+
|
72
|
+
> 注册 `APP` 到 `WindowManager`
|
73
|
+
|
74
|
+
```typescript
|
75
|
+
WindowManager.register({
|
76
|
+
kind: "helloWorld",
|
77
|
+
src: NetlessApp,
|
78
|
+
appOptions: () => "appOptions",
|
79
|
+
addHooks: (emitter) => {
|
80
|
+
emitter.on("created", result => {
|
81
|
+
console.log("HelloWordResult", result);
|
82
|
+
});
|
83
|
+
emitter.on("focus", result => {
|
84
|
+
console.log("HelloWorld focus", result);
|
85
|
+
})
|
86
|
+
emitter.on("destroy", result => {
|
87
|
+
console.log("HelloWorld destroy", result);
|
88
|
+
})
|
89
|
+
}
|
90
|
+
})
|
91
|
+
```
|
92
|
+
|
93
|
+
<br>
|
94
|
+
|
95
|
+
<h3 id="registered">WindowManager.registered</h3>
|
96
|
+
|
97
|
+
> 获取已经注册过的 `App`
|
98
|
+
|
99
|
+
```ts
|
100
|
+
WindowManager.registered
|
101
|
+
```
|
102
|
+
|
103
|
+
<br>
|
104
|
+
|
105
|
+
<h3 id="set-container">setContainer</h3>
|
106
|
+
|
107
|
+
> 设置白板挂载容器
|
108
|
+
|
109
|
+
```typescript
|
110
|
+
WindowManager.setContainer(document.getElementById("container"));
|
111
|
+
```
|
112
|
+
|
113
|
+
<h3 id="set-container">setCollectorContainer</h3>
|
114
|
+
|
115
|
+
> 设置 `Collector` 挂载的容器
|
116
|
+
|
117
|
+
```typescript
|
118
|
+
WindowManager.setCollectorContainer(document.getElementById("collector-container"));
|
119
|
+
```
|
120
|
+
|
121
|
+
<br>
|
122
|
+
|
123
|
+
<h2 id="instance-methods">实例方法</h2>
|
124
|
+
|
125
|
+
<h3 id="addApp">addApp</h3>
|
126
|
+
|
127
|
+
> 添加 `app` 至白板
|
128
|
+
|
129
|
+
```typescript
|
130
|
+
const appId = await manager.addApp({
|
131
|
+
kind: "helloWorld"
|
132
|
+
options: { // 可选配置
|
133
|
+
scenePath: "/hello-world"
|
134
|
+
}
|
135
|
+
})
|
136
|
+
```
|
137
|
+
具体参数请参考 `APP` 本身的要求
|
138
|
+
|
139
|
+
<h3 id="closeApp">closeApp</h3>
|
140
|
+
|
141
|
+
> 关闭已经打开的 `APP`
|
142
|
+
|
143
|
+
```typescript
|
144
|
+
manager.closeApp(appId)
|
145
|
+
```
|
146
|
+
|
147
|
+
<h3 id="focusApp">focusApp</h3>
|
148
|
+
|
149
|
+
> 切换当前 `focus` 的 `app`, 并把此 `app` 置为最前
|
150
|
+
|
151
|
+
```typescript
|
152
|
+
manager.focusApp(appId)
|
153
|
+
```
|
154
|
+
|
155
|
+
<h3 id="setMainViewSceneIndex">setMainViewSceneIndex</h3>
|
156
|
+
|
157
|
+
> 设置主白板的 `SceneIndex`
|
158
|
+
|
159
|
+
```ts
|
160
|
+
manager.setMainViewSceneIndex(1)
|
161
|
+
```
|
162
|
+
|
163
|
+
<h3 id="setBoxState">setBoxState</h3>
|
164
|
+
|
165
|
+
> 设置当前的 `boxState`
|
166
|
+
|
167
|
+
```ts
|
168
|
+
manager.setBoxState("normal") // boxState: normal | maximized | minimized
|
169
|
+
```
|
170
|
+
|
171
|
+
<h3 id="cleanCurrentScene">cleanCurrentScene</h3>
|
172
|
+
|
173
|
+
> 清除当前 focus 的 view 的笔迹
|
174
|
+
|
175
|
+
```ts
|
176
|
+
manager.cleanCurrentScene()
|
177
|
+
```
|
178
|
+
|
179
|
+
<h3 id="redo">redo</h3>
|
180
|
+
|
181
|
+
> 在当前 focus 的 view 上重做上一步操作
|
182
|
+
|
183
|
+
```ts
|
184
|
+
manager.redo()
|
185
|
+
```
|
186
|
+
|
187
|
+
<h3 id="undo">undo</h3>
|
188
|
+
|
189
|
+
> 在当前 focus 的 view 上撤消上一步操作
|
190
|
+
|
191
|
+
```ts
|
192
|
+
manager.undo()
|
193
|
+
```
|
194
|
+
|
195
|
+
<h3 id="nextPage">nextPage</h3>
|
196
|
+
|
197
|
+
> 切换主白板至下一页
|
198
|
+
|
199
|
+
```ts
|
200
|
+
const success = await manager.nextPage()
|
201
|
+
if (!success) {
|
202
|
+
// 已经到了最后一页
|
203
|
+
}
|
204
|
+
```
|
205
|
+
|
206
|
+
<h3 id="prevPage">prevPage</h3>
|
207
|
+
|
208
|
+
> 切换主白板至上一页
|
209
|
+
|
210
|
+
```ts
|
211
|
+
const success = await manager.prevPage()
|
212
|
+
if (!success) {
|
213
|
+
// 已经到了第一页
|
214
|
+
}
|
215
|
+
```
|
216
|
+
|
217
|
+
<h3 id="addPage">addPage</h3>
|
218
|
+
|
219
|
+
> 在主白板添加一页
|
220
|
+
|
221
|
+
```ts
|
222
|
+
manager.addPage() // 默认在最后添加一页
|
223
|
+
manager.addPage({ after: true }) // 在当前页后添加一页
|
224
|
+
manager.addPage({ scene: { name: "page2" } }) // 传入 page 信息
|
225
|
+
```
|
226
|
+
|
227
|
+
<h3 id="removePage">removePage</h3>
|
228
|
+
|
229
|
+
> 移除一页
|
230
|
+
> 当只剩一页时, 最后一页不允许被删除
|
231
|
+
|
232
|
+
```ts
|
233
|
+
const success = await manager.removePage() // 默认删除当前页
|
234
|
+
const success = await manager.removePage(1) // 可以删除指定 index
|
235
|
+
```
|
236
|
+
|
237
|
+
<h3 id="refresh">refresh</h3>
|
238
|
+
|
239
|
+
> 刷新 `manager` 的内部状态, 用于从其他房间 `copy` `attributes`
|
240
|
+
|
241
|
+
```ts
|
242
|
+
manager.refresh()
|
243
|
+
```
|
244
|
+
|
245
|
+
<h3 id="setContainerSizeRatio">setContainerSizeRatio</h3>
|
246
|
+
|
247
|
+
> 设置白板同步区域的宽高比
|
248
|
+
|
249
|
+
```ts
|
250
|
+
manager.setContainerSizeRatio(10 / 16)
|
251
|
+
```
|
252
|
+
|
253
|
+
<br>
|
254
|
+
|
255
|
+
<h2 id="prototypes">实例属性</h2>
|
256
|
+
|
257
|
+
| name | type | default | desc |
|
258
|
+
| ------------------ | ------- | ------- | ----------------- |
|
259
|
+
| mainView | View | | 主白板 |
|
260
|
+
| mainViewSceneIndex | number | | 当前主白板的 SceneIndex |
|
261
|
+
| mainViewScenesLength | number | | mainView 的 scenes 长度 |
|
262
|
+
| boxState | string | | 当前窗口状态 |
|
263
|
+
| darkMode | boolean | | 黑夜模式 |
|
264
|
+
| prefersColorScheme | string | | 颜色主题 |
|
265
|
+
| focused | string | | focus 的 app |
|
266
|
+
| canRedoSteps | number | | 当前 focus 的 view 可以重做的步数 |
|
267
|
+
| canRedoSteps | number | | 当前 focus 的 view 可以撤销的步数 |
|
268
|
+
| sceneState | SceneState | | 兼容原本 SDK 的 sceneState 属性, 只对 mainView 生效 |
|
269
|
+
| pageState | PageState | | 组合 mainView 的 index 和 scenes 的修改 |
|
270
|
+
|
271
|
+
<br>
|
272
|
+
|
273
|
+
<h2 id="events">事件回调</h2>
|
274
|
+
|
275
|
+
```typescript
|
276
|
+
manager.emitter.on(events, listener)
|
277
|
+
```
|
278
|
+
|
279
|
+
| name | type | default | desc |
|
280
|
+
| ------------------------ | -------------- | ------- | -------------------------- |
|
281
|
+
| mainViewModeChange | ViewVisionMode | | |
|
282
|
+
| mainViewSceneIndexChange | index: number | | |
|
283
|
+
| boxStateChange | string | | normal,minimized,maximized |
|
284
|
+
| darkModeChange | boolean | | |
|
285
|
+
| prefersColorSchemeChange | string | | auto,light,dark |
|
286
|
+
| cameraStateChange | CameraState | | |
|
287
|
+
| focusedChange | string, undefined | | 当前 focus 的 appId,主白板时为 undefined |
|
288
|
+
| mainViewScenesLengthChange | number | | mainView scenes 添加或删除时触发 |
|
289
|
+
| canRedoStepsChange | number | | 当前 focus 的 view 可重做步数改变 |
|
290
|
+
| canUndoStepsChange | number | | 当前 focus 的 view 可撤销步数改变 |
|
291
|
+
| loadApp | LoadAppEvent | | 加载远程APP 事件 |
|
292
|
+
| ready | undefined | | 当所有 APP 创建完毕时触发 |
|
293
|
+
| sceneStateChange | SceneState | | 当 sceneState 修改时触发 |
|
294
|
+
| pageStateChange | PageState | | |
|
295
|
+
|
296
|
+
```ts
|
297
|
+
type LoadAppEvent = {
|
298
|
+
kind: string;
|
299
|
+
status: "start" | "success" | "failed";
|
300
|
+
reason?: string;
|
301
|
+
}
|
302
|
+
```
|
303
|
+
|
304
|
+
```ts
|
305
|
+
type PageState = {
|
306
|
+
index: number;
|
307
|
+
length: number;
|
308
|
+
}
|
309
|
+
```
|