@plaso-infi/whiteboard-sdk 0.2.4 → 0.2.5

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,528 +1,561 @@
1
1
  import React$1, { FC, CSSProperties } from 'react';
2
2
 
3
- type PositionLike = {
4
- x: number;
5
- y: number;
6
- };
7
- type Viewbox = {
8
- left: number;
9
- top: number;
10
- right: number;
11
- bottom: number;
12
- scale: number;
13
- };
14
- type ViewRect = {
15
- x: number;
16
- y: number;
17
- width: number;
18
- height: number;
19
- };
3
+ type PositionLike = {
4
+ x: number;
5
+ y: number;
6
+ };
7
+ type Viewbox = {
8
+ left: number;
9
+ top: number;
10
+ right: number;
11
+ bottom: number;
12
+ scale: number;
13
+ };
14
+ type ViewRect = {
15
+ x: number;
16
+ y: number;
17
+ width: number;
18
+ height: number;
19
+ };
20
20
  type BorderBox = Omit<Viewbox, 'scale'>;
21
21
 
22
- type DocumentType = 'ppt' | 'pdf' | 'excel' | 'word';
22
+ type DocumentType = 'ppt' | 'pdf' | 'excel' | 'word';
23
23
  type FileType = 'image' | 'document' | 'video' | 'audio';
24
24
 
25
- type WebsdkEngineType = {
26
- customFoldableTools?: SdkPluginSlotType[];
27
- customBottomRightTools?: SdkBottomRightPluginSlotType[];
28
- };
29
- type ComponentProps = {
30
- iconClassName?: string;
31
- };
32
- /**
33
- * 提供给外部放置右下方自定义工具的插件,可参考该声明书写你的代码
34
- */
35
- type SdkBottomRightPluginSlotType = {
36
- /** 插件 key,需要保证唯一 */
37
- key: string;
38
- /** 插件名称,会给予 hover tooltip 展示字段名,不存在则不展示 */
39
- name?: string;
40
- /** 图标,可以是自定义组件也可以是画布提供的 svg */
41
- icon: string | FC<ComponentProps>;
42
- /** 点击行为 */
43
- onClick?: CB;
44
- /** 类名 */
45
- className?: string;
46
- /** 样式 */
47
- style?: CSSProperties;
48
- };
49
- /** 在使用画布插件提供给外部的插件 UI 容器,如果需要插件在画布右上方出现功能入口,可以参考本类型声明来书写你的插件代码 */
50
- type SdkPluginSlotType = {
51
- /** 画布 svg 通用使用规范名称 */
52
- icon: string;
53
- /** 插件名称,会给予 hover tooltip 展示字段名 */
54
- name: string;
55
- /** 插件 key,需要保证唯一 */
56
- key: string;
57
- /**
58
- * 可以基于画布自带的 popup 面板进行插件内容的承载;在给入这个配置组件后,
59
- * 在画布点击插件入口时,会自动弹出 popup 来承载这个配置组件
60
- */
61
- SubWinContent?: React.FC<{
62
- closeSubWin: CB;
63
- } & any>;
64
- };
65
- interface InfiSdkPluginType {
66
- pluginId: string;
67
- /** 插件初始化逻辑,可以选择在这里加载 SdkPluginSlotType 来在画布右上角显示你的插件 */
68
- init(): void;
69
- /** 插件销毁逻辑,该方法在画布销毁时会被自动执行 */
70
- destroy(): void;
71
- }
72
- interface ISdkPluginConstructor {
73
- new (websdkEngine: WebsdkEngineType): InfiSdkPluginType;
74
- }
75
- type InfiWebSdkPlugin = {
76
- pluginConstructor: ISdkPluginConstructor;
77
- beforeInit?: (plugin: InfiSdkPluginType) => void;
25
+ type WebsdkEngineType = {
26
+ customFoldableTools?: SdkPluginSlotType[];
27
+ customBottomRightTools?: SdkBottomRightPluginSlotType[];
28
+ };
29
+ type ComponentProps = {
30
+ iconClassName?: string;
31
+ };
32
+ /**
33
+ * 提供给外部放置右下方自定义工具的插件,可参考该声明书写你的代码
34
+ */
35
+ type SdkBottomRightPluginSlotType = {
36
+ /** 插件 key,需要保证唯一 */
37
+ key: string;
38
+ /** 插件名称,会给予 hover tooltip 展示字段名,不存在则不展示 */
39
+ name?: string;
40
+ /** 图标,可以是自定义组件也可以是画布提供的 svg */
41
+ icon: string | FC<ComponentProps>;
42
+ /** 点击行为 */
43
+ onClick?: CB;
44
+ /** 类名 */
45
+ className?: string;
46
+ /** 样式 */
47
+ style?: CSSProperties;
48
+ };
49
+ /** 在使用画布插件提供给外部的插件 UI 容器,如果需要插件在画布右上方出现功能入口,可以参考本类型声明来书写你的插件代码 */
50
+ type SdkPluginSlotType = {
51
+ /** 画布 svg 通用使用规范名称 */
52
+ icon: string;
53
+ /** 插件名称,会给予 hover tooltip 展示字段名 */
54
+ name: string;
55
+ /** 插件 key,需要保证唯一 */
56
+ key: string;
57
+ /**
58
+ * 可以基于画布自带的 popup 面板进行插件内容的承载;在给入这个配置组件后,
59
+ * 在画布点击插件入口时,会自动弹出 popup 来承载这个配置组件
60
+ */
61
+ SubWinContent?: React.FC<{
62
+ closeSubWin: CB;
63
+ } & any>;
64
+ };
65
+ interface InfiSdkPluginType {
66
+ pluginId: string;
67
+ /** 插件初始化逻辑,可以选择在这里加载 SdkPluginSlotType 来在画布右上角显示你的插件 */
68
+ init(): void;
69
+ /** 插件销毁逻辑,该方法在画布销毁时会被自动执行 */
70
+ destroy(): void;
71
+ }
72
+ interface ISdkPluginConstructor {
73
+ new (websdkEngine: WebsdkEngineType): InfiSdkPluginType;
74
+ }
75
+ type InfiWebSdkPlugin = {
76
+ pluginConstructor: ISdkPluginConstructor;
77
+ beforeInit?: (plugin: InfiSdkPluginType) => void;
78
78
  };
79
79
 
80
- type ToolBarType = 'sticker' | 'template' | 'shapes' | 'upload' | 'stickyNote' | 'draw' | 'frame' | 'connectLine' | 'table' | 'timer' | 'mindMap' | 'text' | 'comment' | 'webpage' | 'kanban';
81
- interface InfiUserInfoT {
82
- loginName: string;
83
- userName: string;
84
- avatarUrl?: string;
85
- }
86
- type PreDownloadInfo = any;
87
- type DownloadConfigT = {
88
- enable: boolean;
89
- fileEnable?: boolean;
90
- imageEnable?: boolean;
91
- preCheck?: (event: string) => Promise<PreDownloadInfo>;
92
- };
93
- type FullToolBarWidgetsConfigs = {
94
- meeting: boolean;
95
- boardMemberList: boolean;
96
- cursor: boolean;
97
- frameListBar: boolean;
98
- timer?: boolean;
99
- laser?: boolean;
100
- ai: boolean;
101
- miniMap: boolean;
102
- fullscreen: boolean;
103
- helpCenter: boolean;
104
- search: boolean;
105
- download: boolean;
106
- optionBarVisible?: boolean;
107
- floatBarVisible?: boolean;
108
- titleBarVisible?: boolean;
109
- toolBarVisible?: boolean;
110
- bottomLeftBarVisible?: boolean;
111
- bottomRightBarVisible?: boolean;
112
- toolbarConfig?: Partial<Record<ToolBarType, boolean>>;
113
- };
114
- type HistoryType = 'browser' | 'hash';
115
- type RouteConfigT = {
116
- /** 设置路由history的类型(默认为browser)*/
117
- historyType: HistoryType;
118
- /** 路由中指定标识画布唯一性的字段,用于判断是否是跳转至本画布内的其他元素*/
119
- boardCompositeKey?: string[];
120
- };
121
- type ToolBarWidgetsConfigsT = Partial<FullToolBarWidgetsConfigs>;
122
- /** 获取白板 websdk 实例的配置参数 */
123
- interface GetSdkInstanceConfigs {
124
- /** 当前白板的用户信息 */
125
- userInfo: InfiUserInfoT;
126
- editable?: boolean;
127
- /** 用以挂载白板 DOM 的 HTML DOM 元素, 白板相关元素会自动 appendChild 至这个元素之内 */
128
- containerDom: HTMLDivElement;
129
- /** 是否应用上一次用户偏好(背景设置、工具栏顺序、视野、颜料色板) */
130
- preferenceConfigs?: object;
131
- /** 画布天然提供若干 UI 插槽,分别位于画布页面的左上角与右上角,目前仅支持基于 React 实现 */
132
- uiSlots?: {
133
- /**
134
- * 画布左上角的标题栏插槽,React 组件 maxHeight 为 48px; 与画布自带的搜索、下载等 UI 毗邻
135
- * 通常可以用于展示 logo 或呈现 “返回” 按键等。
136
- */
137
- titleSlot?: React.ReactNode;
138
- /**
139
- * 画布右上角的 UI 插槽,React 组件 maxHeight 为 48px; 与画布自身的在线成员展示等 UI 毗邻
140
- */
141
- topRightSlot?: React.ReactNode;
142
- };
143
- /** 画布初始化后默认的行为 */
144
- defaultBehaviors?: {
145
- /** 默认显示帧框列表 */
146
- showFrameList?: boolean;
147
- /** 默认进入帧框播放模式 */
148
- presentationMode?: boolean;
149
- /** 默认启用激光笔 */
150
- laserMode?: boolean;
151
- /** 默认的画布网格设置,会被用户自己的使用习惯数据覆盖 */
152
- defaultGrid?: GridType;
153
- };
154
- /** 进入画布时,如果给入该值,则会向 x:0, y:0 处插入模板内容,并尝试移动视野至该位置 */
155
- initTemplate?: string | {
156
- templateId: string;
157
- select?: boolean;
158
- show?: boolean;
159
- };
160
- customizeUploaders?: CustomizeUploader;
161
- /**
162
- * 画布内各项功能开关:可以显示/隐藏部分功能的 UI 入口
163
- * - toolbarConfig:用于配置左侧工具栏中显示的工具,不配置时显示默认工具
164
- */
165
- toolbarWidgetsConfigs?: ToolBarWidgetsConfigsT;
166
- /**
167
- * 文件下载配置,enable表示文件下载功能是否开启,preCheck用于获取自定义的文件下载签名
168
- */
169
- downloadConfig?: DownloadConfigT;
170
- /**
171
- * 文件上传配置
172
- */
173
- uploadConfig?: {
174
- /** 是否启用动态ppt */
175
- enableDynamicPPT?: boolean;
176
- };
177
- /** 向画布内注入拆件能力,插件可以在画布内部显示, */
178
- plugins?: InfiWebSdkPlugin[];
179
- /**
180
- * @deprecated 画布环境配置;因画布 websdk 处于早期试用阶段,
181
- * 尚提供可以切换不同的画布侧环境的配置项入口。后期会移除该配置项,websdk 仅能使用线上环境
182
- */
183
- env?: 'prod' | 'dev' | 'test';
184
- getElementLink?: (encodeId: string, id: string) => string;
185
- /** 链接跳转,返回值为string表示跳转元素id */
186
- gotoLink?: (link: string) => string | undefined;
187
- /**
188
- * 路由配置,包括设置路由history的类型(默认为browser)、标识画布唯一性的search联合字段(默认为所有search字段)等
189
- */
190
- routeConfig?: RouteConfigT;
191
- /** 获取画布连接参数的请求函数,画布连接参数为初始化 & 链接服务器使用的加密字符串, 内含应用、白板、用户等信息 */
192
- getQueryString: () => Promise<string>;
193
- /** 获取AI 鉴权所必要参数 boardId, userId, appid, ts, sign, key */
194
- getAiCheckInfo?: () => Promise<AiCheckInfo>;
195
- /**
196
- * 启用画布影子链接能力,影子链接会额外建立一条链接,用以将其他 recordId 对应画布内的内容同步到当前的画布中
197
- * 但需要注意的是,通过影子链接同步过来的元素全部都都处于静止状态,无法选中,无法编辑,但是可以进行文档翻页等
198
- * 非常基本的交互
199
- */
200
- getShadowBoardQuery?: () => Promise<string>;
201
- /** 基于 loginName 获取该用户的用户名与头像 url 的方法,由用户提供,方法返回的用户信息用以于白板内作展示 */
202
- getUsersInfo: (loginNames: string[]) => Promise<InfiUserInfoT[]>;
203
- }
204
- type CustomizeUploader = {
205
- loaders: {
206
- icon: string;
207
- mainText: string;
208
- desc: string;
209
- key: string;
210
- }[];
211
- onUploadTrigger: (key: string, closeContainerCB: CB) => unknown;
212
- onCloseUpload: () => void;
213
- };
214
- /**
215
- * 获取白板sdk对象方法的返回值类型,值为对象形式
216
- * * 对象内 code 值如果为 0, 则表示白板初始化参数验证完毕, payload 为 websdk 的对象实例
217
- * * 对象内 code 如果不为 0, 则表示白板初始化失败,payload 为错误提示消息
218
- */
219
- type GetSdkInstanceReturnType = Promise<{
220
- code: 0;
221
- payload: InfiWebsdkInstanceType;
222
- } | {
223
- code: 1;
224
- payload: string;
225
- }>;
226
- interface AiCheckInfo {
227
- /** AI操作次数 */
228
- inPackageRemain: number;
229
- /** 其他来源AI操作次数,比如团队购买次数 */
230
- outPackageRemain: number;
231
- /** 鉴权信息,boardId,userId,appid,ts,sign,key,modal?,event? */
232
- extraInfo: AiCheckExtraInfo | {
233
- [x: string]: unknown;
234
- };
235
- }
236
- type AiCheckExtraInfo = {
237
- /**
238
- * 应用 ID,可于开发者门户/应用管理中查看 appId。使用白板 sdk 的必要参数之一。如若错误则不能使用白板
239
- *
240
- * **注:**
241
- * 此信息为敏感信息,请尽量不要写在前端项目中
242
- */
243
- appId: string;
244
- /** 登入的用户 ID,同一 userId,画布侧会视为同一个用户 */
245
- userId: string;
246
- /** 白板 ID,用于唯一标识画布 */
247
- boardId: string;
248
- /** 当前时间戳。*/
249
- ts: number;
250
- /** 16 位 uuid,用于标识本次操作 */
251
- key: string;
252
- /**
253
- * 通过加密算法加密的 AI 鉴权所需参数
254
- *
255
- * **注:**
256
- * 请尽量让服务端生成该参数,在前端代码中生成该参数相当于直接暴露了加密算法
257
- **/
258
- sign: string;
259
- /** 事件类型,AI 鉴权场景就是默认值 'ai' */
260
- event: string;
261
- /** 大数据模型,当前默认值 wenxin' */
262
- model: string;
80
+ type ToolBarType = 'sticker' | 'template' | 'shapes' | 'upload' | 'stickyNote' | 'draw' | 'frame' | 'connectLine' | 'table' | 'timer' | 'mindMap' | 'text' | 'comment' | 'webpage' | 'kanban';
81
+ interface InfiUserInfoT {
82
+ loginName: string;
83
+ userName: string;
84
+ avatarUrl?: string;
85
+ }
86
+ type PreDownloadInfo = any;
87
+ type DownloadConfigT = {
88
+ enable: boolean;
89
+ fileEnable?: boolean;
90
+ imageEnable?: boolean;
91
+ preCheck?: (event: string) => Promise<PreDownloadInfo>;
92
+ };
93
+ type FullToolBarWidgetsConfigs = {
94
+ meeting: boolean;
95
+ boardMemberList: boolean;
96
+ cursor: boolean;
97
+ frameListBar: boolean;
98
+ timer?: boolean;
99
+ laser?: boolean;
100
+ ai: boolean;
101
+ miniMap: boolean;
102
+ fullscreen: boolean;
103
+ helpCenter: boolean;
104
+ search: boolean;
105
+ download: boolean;
106
+ optionBarVisible?: boolean;
107
+ floatBarVisible?: boolean;
108
+ titleBarVisible?: boolean;
109
+ toolBarVisible?: boolean;
110
+ bottomLeftBarVisible?: boolean;
111
+ bottomRightBarVisible?: boolean;
112
+ toolbarConfig?: Partial<Record<ToolBarType, boolean>>;
113
+ };
114
+ type HistoryType = 'browser' | 'hash';
115
+ type RouteConfigT = {
116
+ /** 设置路由history的类型(默认为browser)*/
117
+ historyType: HistoryType;
118
+ /** 路由中指定标识画布唯一性的字段,用于判断是否是跳转至本画布内的其他元素*/
119
+ boardCompositeKey?: string[];
120
+ };
121
+ type ToolBarWidgetsConfigsT = Partial<FullToolBarWidgetsConfigs>;
122
+ /** 获取白板 websdk 实例的配置参数 */
123
+ interface GetSdkInstanceConfigs {
124
+ /** 当前白板的用户信息 */
125
+ userInfo: InfiUserInfoT;
126
+ editable?: boolean;
127
+ /** 用以挂载白板 DOM 的 HTML DOM 元素, 白板相关元素会自动 appendChild 至这个元素之内 */
128
+ containerDom: HTMLDivElement;
129
+ /** 是否应用上一次用户偏好(背景设置、工具栏顺序、视野、颜料色板) */
130
+ preferenceConfigs?: object;
131
+ /** 画布天然提供若干 UI 插槽,分别位于画布页面的左上角与右上角,目前仅支持基于 React 实现 */
132
+ uiSlots?: {
133
+ /**
134
+ * 画布左上角的标题栏插槽,React 组件 maxHeight 为 48px; 与画布自带的搜索、下载等 UI 毗邻
135
+ * 通常可以用于展示 logo 或呈现 “返回” 按键等。
136
+ */
137
+ titleSlot?: React.ReactNode;
138
+ /**
139
+ * 画布右上角的 UI 插槽,React 组件 maxHeight 为 48px; 与画布自身的在线成员展示等 UI 毗邻
140
+ */
141
+ topRightSlot?: React.ReactNode;
142
+ };
143
+ /** 画布初始化后默认的行为 */
144
+ defaultBehaviors?: {
145
+ /** 默认显示帧框列表 */
146
+ showFrameList?: boolean;
147
+ /** 默认进入帧框播放模式 */
148
+ presentationMode?: boolean;
149
+ /** 默认启用激光笔 */
150
+ laserMode?: boolean;
151
+ /** 默认的画布网格设置,会被用户自己的使用习惯数据覆盖 */
152
+ defaultGrid?: GridType;
153
+ };
154
+ /** 进入画布时,如果给入该值,则会向 x:0, y:0 处插入模板内容,并尝试移动视野至该位置 */
155
+ initTemplate?: string | {
156
+ templateId: string;
157
+ select?: boolean;
158
+ show?: boolean;
159
+ };
160
+ customizeUploaders?: CustomizeUploader;
161
+ /**
162
+ * 画布内各项功能开关:可以显示/隐藏部分功能的 UI 入口
163
+ * - toolbarConfig:用于配置左侧工具栏中显示的工具,不配置时显示默认工具
164
+ */
165
+ toolbarWidgetsConfigs?: ToolBarWidgetsConfigsT;
166
+ /**
167
+ * 文件下载配置,enable表示文件下载功能是否开启,preCheck用于获取自定义的文件下载签名
168
+ */
169
+ downloadConfig?: DownloadConfigT;
170
+ /**
171
+ * 文件上传配置
172
+ */
173
+ uploadConfig?: {
174
+ /** 是否启用动态ppt */
175
+ enableDynamicPPT?: boolean;
176
+ };
177
+ /** 向画布内注入拆件能力,插件可以在画布内部显示, */
178
+ plugins?: InfiWebSdkPlugin[];
179
+ /**
180
+ * @deprecated 画布环境配置;因画布 websdk 处于早期试用阶段,
181
+ * 尚提供可以切换不同的画布侧环境的配置项入口。后期会移除该配置项,websdk 仅能使用线上环境
182
+ */
183
+ env?: 'prod' | 'dev' | 'test';
184
+ getElementLink?: (encodeId: string, id: string) => string;
185
+ /** 链接跳转,返回值为string表示跳转元素id */
186
+ gotoLink?: (link: string) => string | undefined;
187
+ /**
188
+ * 路由配置,包括设置路由history的类型(默认为browser)、标识画布唯一性的search联合字段(默认为所有search字段)等
189
+ */
190
+ routeConfig?: RouteConfigT;
191
+ /** 获取画布连接参数的请求函数,画布连接参数为初始化 & 链接服务器使用的加密字符串, 内含应用、白板、用户等信息 */
192
+ getQueryString: () => Promise<string>;
193
+ /** 获取AI 鉴权所必要参数 boardId, userId, appid, ts, sign, key */
194
+ getAiCheckInfo?: () => Promise<AiCheckInfo>;
195
+ /**
196
+ * 启用画布影子链接能力,影子链接会额外建立一条链接,用以将其他 recordId 对应画布内的内容同步到当前的画布中
197
+ * 但需要注意的是,通过影子链接同步过来的元素全部都都处于静止状态,无法选中,无法编辑,但是可以进行文档翻页等
198
+ * 非常基本的交互
199
+ */
200
+ getShadowBoardQuery?: () => Promise<string>;
201
+ /** 基于 loginName 获取该用户的用户名与头像 url 的方法,由用户提供,方法返回的用户信息用以于白板内作展示 */
202
+ getUsersInfo: (loginNames: string[]) => Promise<InfiUserInfoT[]>;
203
+ }
204
+ type CustomizeUploader = {
205
+ loaders: {
206
+ icon: string;
207
+ mainText: string;
208
+ desc: string;
209
+ key: string;
210
+ }[];
211
+ onUploadTrigger: (key: string, closeContainerCB: CB) => unknown;
212
+ onCloseUpload: () => void;
213
+ };
214
+ /**
215
+ * 获取白板sdk对象方法的返回值类型,值为对象形式
216
+ * * 对象内 code 值如果为 0, 则表示白板初始化参数验证完毕, payload 为 websdk 的对象实例
217
+ * * 对象内 code 如果不为 0, 则表示白板初始化失败,payload 为错误提示消息
218
+ */
219
+ type GetSdkInstanceReturnType = Promise<{
220
+ code: 0;
221
+ payload: InfiWebsdkInstanceType;
222
+ } | {
223
+ code: 1;
224
+ payload: string;
225
+ }>;
226
+ interface AiCheckInfo {
227
+ /** AI操作次数 */
228
+ inPackageRemain: number;
229
+ /** 其他来源AI操作次数,比如团队购买次数 */
230
+ outPackageRemain: number;
231
+ /** 鉴权信息,boardId,userId,appid,ts,sign,key,modal?,event? */
232
+ extraInfo: AiCheckExtraInfo | {
233
+ [x: string]: unknown;
234
+ };
235
+ }
236
+ type AiCheckExtraInfo = {
237
+ /**
238
+ * 应用 ID,可于开发者门户/应用管理中查看 appId。使用白板 sdk 的必要参数之一。如若错误则不能使用白板
239
+ *
240
+ * **注:**
241
+ * 此信息为敏感信息,请尽量不要写在前端项目中
242
+ */
243
+ appId: string;
244
+ /** 登入的用户 ID,同一 userId,画布侧会视为同一个用户 */
245
+ userId: string;
246
+ /** 白板 ID,用于唯一标识画布 */
247
+ boardId: string;
248
+ /** 当前时间戳。*/
249
+ ts: number;
250
+ /** 16 位 uuid,用于标识本次操作 */
251
+ key: string;
252
+ /**
253
+ * 通过加密算法加密的 AI 鉴权所需参数
254
+ *
255
+ * **注:**
256
+ * 请尽量让服务端生成该参数,在前端代码中生成该参数相当于直接暴露了加密算法
257
+ **/
258
+ sign: string;
259
+ /** 事件类型,AI 鉴权场景就是默认值 'ai' */
260
+ event: string;
261
+ /** 大数据模型,当前默认值 wenxin' */
262
+ model: string;
263
263
  };
264
264
 
265
- declare enum GridType {
266
- NONE = 0,
267
- LINE = 1,
268
- DOT = 2
269
- }
270
- type ElementMetaData = {
271
- id: string;
272
- elementType: number;
273
- position: PositionLike;
274
- size: {
275
- width: number;
276
- height: number;
277
- };
278
- scale: number;
279
- };
280
- type InsertImageType = {
281
- /** 图片文件 */
282
- file: File;
283
- /** 屏幕位置 */
284
- screenPosition?: PositionLike;
285
- /** 文件大小 */
286
- size?: {
287
- width: number;
288
- height: number;
289
- };
290
- /** 是否根据画布比例自动缩放 */
291
- autoSize?: boolean;
292
- };
293
- /** websdk 实例类型声明接口 */
294
- interface InfiWebsdkInstanceType {
295
- /**
296
- * 设置是否可以编辑
297
- * @param couldEdit true: 可编辑; false: 只读
298
- */
299
- enableEdit: (couldEdit: boolean) => void;
300
- /**
301
- * 变更白板的画布视野
302
- * @param view 白板绘制区域
303
- * @param option 变更视野配置项
304
- * @description
305
- * - left、right、top、bottom:视野左右上下最小边距
306
- * - duration:显示变更所需时间,如果填入有效值,则画面会平滑过渡到目标视野, 如果填 0 ,则会立即完成视野变更
307
- * @returns {Promise<boolean>} 表示视野变更完成,返回值为false表示当前为强制跟随视野状态,无法主动变更视野
308
- */
309
- slideToView: (view: ViewRect, option?: {
310
- left?: number;
311
- top?: number;
312
- right?: number;
313
- bottom?: number;
314
- duration?: number;
315
- }) => Promise<boolean>;
316
- /**
317
- * 向白板中插入图片
318
- * @param url 图片文件url地址
319
- * @param name 图片文件名称
320
- */
321
- insertImage(url: string, name: string): void;
322
- /**
323
- * 向白板中插入图片文件
324
- * @param imageInfo 图片文件信息
325
- * @return 插入成功后返回元素id
326
- */
327
- insertImage(imageInfo: InsertImageType): Promise<string | null | undefined>;
328
- /**
329
- * 向白板中插入文档,支持ppt、pdf、excel、word类型
330
- * @param url 文档文件url地址
331
- * @param name 文档文件名称
332
- * @param docType 文档类型, 包括:"ppt" | "pdf" | "excel" | "word"
333
- */
334
- insertDocument: (url: string, name: string, docType: DocumentType) => void;
335
- /**
336
- * 向白板中插入视频
337
- * @param url 视频文件url地址
338
- * @param name 视频文件名称
339
- */
340
- insertVideo: (url: string, name: string) => void;
341
- /**
342
- * 向白板中插入音频
343
- * @param url 音频文件url
344
- * @param name 音频文件名称
345
- */
346
- insertAudio: (url: string, name: string) => void;
347
- /** 获取当前白板的画布视野信息 */
348
- getCurrentViewData: () => Viewbox | undefined;
349
- /**
350
- * 启用/关闭演讲者模式
351
- * @param en 启用/关闭
352
- */
353
- enablePresentation: (en?: boolean) => void;
354
- /**
355
- * 启用/关闭激光笔
356
- * @param en 启用/关闭
357
- */
358
- enableLaser: (en?: boolean) => void;
359
- /** 启用/关闭帧框列表 */
360
- toggleFrameListPanel: () => void;
361
- /** 唤出历史记录面板 */
362
- toggleHistoryPanel: () => void;
363
- /** 修改画板背景 */
364
- changeGridType: (gridType: GridType) => void;
365
- /** 设置跳转元素 */
366
- setAnchorElement: (anchorElement?: string) => void;
367
- /**
368
- * 于白板内显示 toast 消息
369
- * @param message 消息
370
- * @param duration 显示时长,经过该时长后 toast 消息消失
371
- * @return Promise fulfill 表示消息已经消失
372
- */
373
- showToast: (message: string, duration: number) => Promise<void>;
374
- /**
375
- * 注册白板事件监听器
376
- * TBD: 初期先暴露一些基本事件,比如白板已初始化完毕、白板已销毁完毕等事件
377
- * @param evtName 事件名
378
- * @param cb 回调函数
379
- * @returns 取消注册执行函数
380
- */
381
- on: <T extends keyof WebsdkEventTypeMap>(evtName: T, cb: (param: WebsdkEventTypeMap[T]) => void) => () => void;
382
- /**
383
- * 取消注册白板事件监听器
384
- * @param evtName 事件名
385
- * @param cb 回调函数
386
- */
387
- off: <T extends keyof WebsdkEventTypeMap>(evtName: T, cb: (param: WebsdkEventTypeMap[T]) => void) => void;
388
- /**
389
- * 基于影子链接能力获取一次其他画布内用户的视野信息
390
- * 注:使用此能力需要首先启用影子链接能力
391
- */
392
- requestShadowUserViewData(loginName: string): Promise<ShadowViewDataT | null>;
393
- /** 设置画布的可见区域, 区域外的元素全部不可见 */
394
- setViewClip(rect: ViewRect): void;
395
- /** 设置画布的聚焦区域,聚焦后,画布的移动和缩放都会在聚焦区域内执行,而不是随意改变 */
396
- focusBorderBox(box: BorderBox): void;
397
- /** 获取当前画布中全体元素的元数据信息,包括位置、大小等 */
398
- getElementsMetaData(): ElementMetaData[] | undefined;
399
- /**
400
- * 基于文档元素 id 导出 pdf
401
- * @description**注: 给入的元素 id 务必是文档类元素的 id (elementType === 8)**
402
- * 导出的 pdf 文件会携带画布内的编辑信息,如图形、文本、便签等
403
- * @param {string} [cornerWatermark] 文档元素每页右下角的角标图片 url (非必填)
404
- */
405
- exportPdfFromDocElement(id: string, cornerWatermark: string): Promise<void>;
406
- /** 销毁白板 sdk 实例 */
407
- destroy: () => Promise<void>;
408
- }
409
- type ShadowViewDataT = {
410
- viewData?: [number, number, number, number];
411
- };
412
- type WebsdkEventTypeMap = {
413
- /** 白板未完成初始化 */
414
- not_initialized: void;
415
- /** 已连接至白板服务器 */
416
- connected: void;
417
- /** 白板服务器连接中 */
418
- connecting: void;
419
- /** 白板服务器连接失败 */
420
- connect_failed: void;
421
- /** 白板内部错误 */
422
- internal_error: void;
423
- /** 因当前白板未处于连接状态,api 调用无效 */
424
- api_call_rejected: void;
425
- /** 白板资源准备完成,可以进行工具操作 */
426
- resource_ready: void;
427
- /** 演讲模式状态更新 */
428
- presentation_change: boolean;
429
- };
430
- /** Infi 白板 websdk 全局对象,引入 min.js 后即会挂载至 window 对象上 */
431
- interface InfiWebSdkType {
432
- /**
433
- * 获取白板sdk对象
434
- * @param getQueryString 白板初始化 & 链接服务器使用的加密字符串, 内涵应用、白板、用户等信息,
435
- * 推荐于服务端进行生成,当链接重连但是被白板服务器拒绝后,会自动使用 getQueryString 方法生成新的 queryString 并发起重连
436
- * @param configs 白板初始化所需要的配置参数
437
- */
438
- getSdkInstance: (configs: GetSdkInstanceConfigs) => GetSdkInstanceReturnType;
439
- readonly version: string;
265
+ declare enum GridType {
266
+ NONE = 0,
267
+ LINE = 1,
268
+ DOT = 2
269
+ }
270
+ type ElementMetaData = {
271
+ id: string;
272
+ elementType: number;
273
+ position: PositionLike;
274
+ size: {
275
+ width: number;
276
+ height: number;
277
+ };
278
+ scale: number;
279
+ };
280
+ type InsertImageType = {
281
+ /** 图片文件 */
282
+ file: File;
283
+ /** 屏幕位置 */
284
+ screenPosition?: PositionLike;
285
+ /** 文件大小 */
286
+ size?: {
287
+ width: number;
288
+ height: number;
289
+ };
290
+ /** 是否根据画布比例自动缩放 */
291
+ autoSize?: boolean;
292
+ };
293
+ /** websdk 实例类型声明接口 */
294
+ interface InfiWebsdkInstanceType {
295
+ /**
296
+ * 设置是否可以编辑
297
+ * @param couldEdit true: 可编辑; false: 只读
298
+ */
299
+ enableEdit: (couldEdit: boolean) => void;
300
+ /**
301
+ * 变更白板的画布视野
302
+ * @param view 白板绘制区域
303
+ * @param option 变更视野配置项
304
+ * @description
305
+ * - left、right、top、bottom:视野左右上下最小边距
306
+ * - duration:显示变更所需时间,如果填入有效值,则画面会平滑过渡到目标视野, 如果填 0 ,则会立即完成视野变更
307
+ * @returns {Promise<boolean>} 表示视野变更完成,返回值为false表示当前为强制跟随视野状态,无法主动变更视野
308
+ */
309
+ slideToView: (view: ViewRect, option?: {
310
+ left?: number;
311
+ top?: number;
312
+ right?: number;
313
+ bottom?: number;
314
+ duration?: number;
315
+ }) => Promise<boolean>;
316
+ /**
317
+ * 向白板中插入图片
318
+ * @param url 图片文件url地址
319
+ * @param name 图片文件名称
320
+ */
321
+ insertImage(url: string, name: string): void;
322
+ /**
323
+ * 向白板中插入图片文件
324
+ * @param imageInfo 图片文件信息
325
+ * @return 插入成功后返回元素id
326
+ */
327
+ insertImage(imageInfo: InsertImageType): Promise<string | null | undefined>;
328
+ /**
329
+ * 向白板中插入文档,支持ppt、pdf、excel、word类型
330
+ * @param url 文档文件url地址
331
+ * @param name 文档文件名称
332
+ * @param docType 文档类型, 包括:"ppt" | "pdf" | "excel" | "word"
333
+ */
334
+ insertDocument: (url: string, name: string, docType: DocumentType) => void;
335
+ /**
336
+ * 向白板中插入视频
337
+ * @param url 视频文件url地址
338
+ * @param name 视频文件名称
339
+ */
340
+ insertVideo: (url: string, name: string) => void;
341
+ /**
342
+ * 向白板中插入音频
343
+ * @param url 音频文件url
344
+ * @param name 音频文件名称
345
+ */
346
+ insertAudio: (url: string, name: string) => void;
347
+ /** 获取当前白板的画布视野信息 */
348
+ getCurrentViewData: () => Viewbox | undefined;
349
+ /**
350
+ * 启用/关闭演讲者模式
351
+ * @param en 启用/关闭
352
+ */
353
+ enablePresentation: (en?: boolean) => void;
354
+ /**
355
+ * 启用/关闭激光笔
356
+ * @param en 启用/关闭
357
+ */
358
+ enableLaser: (en?: boolean) => void;
359
+ /** 启用/关闭帧框列表 */
360
+ toggleFrameListPanel: () => void;
361
+ /** 唤出历史记录面板 */
362
+ toggleHistoryPanel: () => void;
363
+ /** 修改画板背景 */
364
+ changeGridType: (gridType: GridType) => void;
365
+ /** 设置跳转元素 */
366
+ setAnchorElement: (anchorElement?: string) => void;
367
+ /**
368
+ * 于白板内显示 toast 消息
369
+ * @param message 消息
370
+ * @param duration 显示时长,经过该时长后 toast 消息消失
371
+ * @return Promise fulfill 表示消息已经消失
372
+ */
373
+ showToast: (message: string, duration: number) => Promise<void>;
374
+ /**
375
+ * 注册白板事件监听器
376
+ * TBD: 初期先暴露一些基本事件,比如白板已初始化完毕、白板已销毁完毕等事件
377
+ * @param evtName 事件名
378
+ * @param cb 回调函数
379
+ * @returns 取消注册执行函数
380
+ */
381
+ on: <T extends keyof WebsdkEventTypeMap>(evtName: T, cb: (param: WebsdkEventTypeMap[T]) => void) => () => void;
382
+ /**
383
+ * 取消注册白板事件监听器
384
+ * @param evtName 事件名
385
+ * @param cb 回调函数
386
+ */
387
+ off: <T extends keyof WebsdkEventTypeMap>(evtName: T, cb: (param: WebsdkEventTypeMap[T]) => void) => void;
388
+ /**
389
+ * 基于影子链接能力获取一次其他画布内用户的视野信息
390
+ * 注:使用此能力需要首先启用影子链接能力
391
+ */
392
+ requestShadowUserViewData(loginName: string): Promise<ShadowViewDataT | null>;
393
+ /** 设置画布的可见区域, 区域外的元素全部不可见 */
394
+ setViewClip(rect: ViewRect): void;
395
+ /** 设置画布的聚焦区域,聚焦后,画布的移动和缩放都会在聚焦区域内执行,而不是随意改变 */
396
+ focusBorderBox(box: BorderBox): void;
397
+ /** 获取当前画布中全体元素的元数据信息,包括位置、大小等 */
398
+ getElementsMetaData(): ElementMetaData[] | undefined;
399
+ /**
400
+ * 基于文档元素 id 导出 pdf
401
+ * @description**注: 给入的元素 id 务必是文档类元素的 id (elementType === 8)**
402
+ * 导出的 pdf 文件会携带画布内的编辑信息,如图形、文本、便签等
403
+ * @param {string} [cornerWatermark] 文档元素每页右下角的角标图片 url (非必填)
404
+ */
405
+ exportPdfFromDocElement(id: string, cornerWatermark: string): Promise<void>;
406
+ /**
407
+ * 基于用户信息,强制跟随用户。如果当前已经处于强制跟随其他人员的情况下,则会切换跟随目标
408
+ * @param loginName 用户在画布内的 userId
409
+ * @param connectId 用户当前使用的连接 id,即便是相同 loginName 的用户,在不同的 tab 页中连入相同画布时,connectId 也是不同的
410
+ * @param forceFollowHintMsg 强制跟随情况下,跟随者尝试移动画布视野时弹出的提示消息
411
+ */
412
+ forceFollowUser(config: {
413
+ loginName: string;
414
+ connectId?: string;
415
+ forceFollowHintMsg: string;
416
+ }): void;
417
+ /** 停止当前的强制跟随行为,如果当前并非强制跟随状态,则尝试停止当前的普通跟随行为 */
418
+ stopCurForceFollowing(): void;
419
+ /**
420
+ * 基于 recordId 获取其他画布内的元素信息、及包围盒大小
421
+ * **注: 获取到的信息由于服务端限制,可能没有办法做到实时数据,很可能是几分钟前的画布内容**
422
+ * @returns 非法访问情况下,return null
423
+ * @returns recordId 不存在情况下,elementsInfo 为空数组
424
+ */
425
+ requestElementsInfoByRecordId(recordId: string): Promise<{
426
+ approximateSize: {
427
+ width: number;
428
+ height: number;
429
+ };
430
+ elementsInfo: any[];
431
+ } | null>;
432
+ /** 于指定位置粘贴元素信息, 执行后会自动选中并显示新创建的元素 */
433
+ useElementsInfo(info: any[], position: PositionLike): Promise<void>;
434
+ /** 销毁白板 sdk 实例 */
435
+ destroy: () => Promise<void>;
436
+ }
437
+ type ShadowViewDataT = {
438
+ viewData?: [number, number, number, number];
439
+ };
440
+ type WebsdkEventTypeMap = {
441
+ /** 白板未完成初始化 */
442
+ not_initialized: void;
443
+ /** 已连接至白板服务器 */
444
+ connected: void;
445
+ /** 白板服务器连接中 */
446
+ connecting: void;
447
+ /** 白板服务器连接失败 */
448
+ connect_failed: void;
449
+ /** 白板内部错误 */
450
+ internal_error: void;
451
+ /** 因当前白板未处于连接状态,api 调用无效 */
452
+ api_call_rejected: void;
453
+ /** 白板资源准备完成,可以进行工具操作 */
454
+ resource_ready: void;
455
+ /** 演讲模式状态更新 */
456
+ presentation_change: boolean;
457
+ /** 连接状态更新,上报连接的 loginName,与当前连接的 connectId,可以基于这两个值来跟随用户 */
458
+ connectInfoUpdated: {
459
+ loginName: string;
460
+ connectId: string;
461
+ };
462
+ };
463
+ /** Infi 白板 websdk 全局对象,引入 min.js 后即会挂载至 window 对象上 */
464
+ interface InfiWebSdkType {
465
+ /**
466
+ * 获取白板sdk对象
467
+ * @param getQueryString 白板初始化 & 链接服务器使用的加密字符串, 内涵应用、白板、用户等信息,
468
+ * 推荐于服务端进行生成,当链接重连但是被白板服务器拒绝后,会自动使用 getQueryString 方法生成新的 queryString 并发起重连
469
+ * @param configs 白板初始化所需要的配置参数
470
+ */
471
+ getSdkInstance: (configs: GetSdkInstanceConfigs) => GetSdkInstanceReturnType;
472
+ readonly version: string;
440
473
  }
441
474
 
442
475
  declare const InfiWebsdk: InfiWebSdkType;
443
476
 
444
- /**
445
- * 根据文件后缀获取文件类型
446
- * @param ext
447
- * @returns
448
- */
449
- declare function getFileType(ext: string): FileType | undefined;
450
- /**
451
- * 根据文档后缀获取文档类型
452
- * @param ext
453
- * @returns
454
- */
477
+ /**
478
+ * 根据文件后缀获取文件类型
479
+ * @param ext
480
+ * @returns
481
+ */
482
+ declare function getFileType(ext: string): FileType | undefined;
483
+ /**
484
+ * 根据文档后缀获取文档类型
485
+ * @param ext
486
+ * @returns
487
+ */
455
488
  declare function getDocumentType(ext: string): DocumentType | undefined;
456
489
 
457
490
  declare const FULL_TOOLBAR_CONFIG: Record<ToolBarType, boolean>;
458
491
 
459
492
  declare const Setting: React$1.FC;
460
493
 
461
- type PropT = {
462
- className?: string;
463
- style?: React$1.CSSProperties;
464
- title?: string;
465
- icon: string;
466
- onClick?: any;
467
- [key: string]: any;
468
- };
494
+ type PropT = {
495
+ className?: string;
496
+ style?: React$1.CSSProperties;
497
+ title?: string;
498
+ icon: string;
499
+ onClick?: any;
500
+ [key: string]: any;
501
+ };
469
502
  declare const SvgIcon: React$1.FC<PropT>;
470
503
 
471
- type HoverTipPropsT = {
472
- content: string;
473
- placement?: 'top' | 'left' | 'bottom' | 'right' | 'leftBottom';
474
- /** hoverTip 的样式数据 */
475
- className?: string;
476
- rootClass?: string;
477
- /** 是否允许显示,默认为 true */
478
- allowShow?: boolean;
479
- customStyle?: CSSProperties;
480
- tipContainerStyle?: CSSProperties;
481
- children: React$1.ReactNode;
482
- };
483
- type HoverTipRefT = {
484
- rootRef: HTMLDivElement | null;
485
- };
486
- /** 注意:仅在pc端使用 */
504
+ type HoverTipPropsT = {
505
+ content: string;
506
+ placement?: 'top' | 'left' | 'bottom' | 'right' | 'leftBottom';
507
+ /** hoverTip 的样式数据 */
508
+ className?: string;
509
+ rootClass?: string;
510
+ /** 是否允许显示,默认为 true */
511
+ allowShow?: boolean;
512
+ customStyle?: CSSProperties;
513
+ tipContainerStyle?: CSSProperties;
514
+ children: React$1.ReactNode;
515
+ };
516
+ type HoverTipRefT = {
517
+ rootRef: HTMLDivElement | null;
518
+ };
519
+ /** 注意:仅在pc端使用 */
487
520
  declare const HoverTip: React$1.ForwardRefExoticComponent<HoverTipPropsT & React$1.RefAttributes<HoverTipRefT>>;
488
521
 
489
- interface Icon {
490
- [key: string]: string;
491
- }
492
- declare class SvgManager {
493
- /**
494
- * 一般用于在项目初始化的时候统一加载资源,功能跟 add 方法一样
495
- * 存在的意义是增加语义化
496
- * @param icons svg 的id和内容的map
497
- */
498
- static load(icons: Icon): void;
499
- /**
500
- * 批量添加svg资源,如果在当前 svgContainer 发现 id 相等的<symbol>内容会被替换
501
- * 如果想要全局替换请使用 replace 方法
502
- * @param icons svg 的id和内容的map
503
- * @param svgContainer 想要查找替换的svg symbol容器,如果没有传尝试寻找 id 为 plaso-websdk-svg-container 的容器,如果没有找到会 使用 plaso-websdk-svg-container 为 id 创建
504
- */
505
- static add(icons: Icon, svgContainer?: SVGElement): void;
506
- /**
507
- * 替换当前svg资源中的某些svg内容,没有找到匹配的会被丢弃,如果要添加请调用 add 方法
508
- * @param icons svg 的id和内容的map
509
- * @param svgContainer 想要查找替换的svg symbol容器
510
- * @returns undefined
511
- */
512
- static replace(icons: Icon, svgContainer?: SVGElement): void;
513
- /**
514
- * 生成 symbol map
515
- * @param icons icons svg 的id和内容的map
516
- * @returns Icon
517
- */
518
- static createSymbolMap(icons: {
519
- [type: string]: string;
520
- }): {};
521
- static createSgvSymbol(id: string, content: string): string;
522
- private static _createSvgContainer;
523
- private static _createDomByHtmlString;
524
- private static _findBodySvgContainer;
525
- private static _isSymbol;
522
+ interface Icon {
523
+ [key: string]: string;
524
+ }
525
+ declare class SvgManager {
526
+ /**
527
+ * 一般用于在项目初始化的时候统一加载资源,功能跟 add 方法一样
528
+ * 存在的意义是增加语义化
529
+ * @param icons svg 的id和内容的map
530
+ */
531
+ static load(icons: Icon): void;
532
+ /**
533
+ * 批量添加svg资源,如果在当前 svgContainer 发现 id 相等的<symbol>内容会被替换
534
+ * 如果想要全局替换请使用 replace 方法
535
+ * @param icons svg 的id和内容的map
536
+ * @param svgContainer 想要查找替换的svg symbol容器,如果没有传尝试寻找 id 为 plaso-websdk-svg-container 的容器,如果没有找到会 使用 plaso-websdk-svg-container 为 id 创建
537
+ */
538
+ static add(icons: Icon, svgContainer?: SVGElement): void;
539
+ /**
540
+ * 替换当前svg资源中的某些svg内容,没有找到匹配的会被丢弃,如果要添加请调用 add 方法
541
+ * @param icons svg 的id和内容的map
542
+ * @param svgContainer 想要查找替换的svg symbol容器
543
+ * @returns undefined
544
+ */
545
+ static replace(icons: Icon, svgContainer?: SVGElement): void;
546
+ /**
547
+ * 生成 symbol map
548
+ * @param icons icons svg 的id和内容的map
549
+ * @returns Icon
550
+ */
551
+ static createSymbolMap(icons: {
552
+ [type: string]: string;
553
+ }): {};
554
+ static createSgvSymbol(id: string, content: string): string;
555
+ private static _createSvgContainer;
556
+ private static _createDomByHtmlString;
557
+ private static _findBodySvgContainer;
558
+ private static _isSymbol;
526
559
  }
527
560
 
528
561
  export { type ComponentProps, type CustomizeUploader, FULL_TOOLBAR_CONFIG, type GetSdkInstanceConfigs, GridType, HoverTip, type InfiSdkPluginType, type InfiUserInfoT, type InfiWebSdkPlugin, type InfiWebsdkInstanceType, type SdkBottomRightPluginSlotType, type SdkPluginSlotType, Setting, SvgIcon, SvgManager, type ToolBarType, type WebsdkEngineType, InfiWebsdk as default, getDocumentType, getFileType };