@8btc/whiteboard 0.0.20-alpha.4 → 0.0.20-alpha.40
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/dist/adapter/maze.d.ts +41 -0
- package/dist/adapter/maze.js +225 -136
- package/dist/{const-CNw7pZuI.js → const-B6DtCQRi.js} +12 -5
- package/dist/index.css +1 -1
- package/dist/index.d.ts +823 -533
- package/dist/index.js +7264 -17864
- package/dist/maze.d.ts +829 -535
- package/package.json +24 -11
package/dist/index.d.ts
CHANGED
|
@@ -1,25 +1,47 @@
|
|
|
1
1
|
import { default as default_2 } from 'konva';
|
|
2
|
+
import { Editor } from '@tiptap/core';
|
|
2
3
|
import { JSX } from 'react/jsx-runtime';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
import { Transformer as Transformer_2 } from 'konva/lib/shapes/Transformer';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 箭头节点配置
|
|
9
|
+
*/
|
|
10
|
+
declare type ArrowNodeConfig = BaseNodeConfig & default_2.ArrowConfig & Partial<NodeStyle> & {
|
|
11
|
+
$_type: "arrow";
|
|
12
|
+
};
|
|
3
13
|
|
|
4
14
|
declare interface BaseNodeConfig {
|
|
5
15
|
id: string;
|
|
6
16
|
x: number;
|
|
7
17
|
y: number;
|
|
18
|
+
visible?: boolean;
|
|
19
|
+
$_listening?: boolean;
|
|
8
20
|
}
|
|
9
21
|
|
|
22
|
+
/**
|
|
23
|
+
* 笔刷节点配置(自由绘制)
|
|
24
|
+
*/
|
|
25
|
+
declare type BrushNodeConfig = BaseNodeConfig & default_2.LineConfig & Partial<NodeStyle> & {
|
|
26
|
+
$_type: "brush";
|
|
27
|
+
points: number[];
|
|
28
|
+
};
|
|
29
|
+
|
|
10
30
|
/**
|
|
11
31
|
* CanvasApi 是面向外部使用的公开 API 类
|
|
12
32
|
* 继承自 CanvasCore,只暴露必要的公开方法
|
|
13
33
|
*/
|
|
14
34
|
export declare class CanvasApi extends CanvasCore {
|
|
35
|
+
#private;
|
|
36
|
+
constructor(el: HTMLDivElement, options?: ConstructorParameters<typeof CanvasCore>[1]);
|
|
37
|
+
dispose(): void;
|
|
15
38
|
/**
|
|
16
39
|
* 获取所有可用的工具类型
|
|
17
40
|
*/
|
|
18
|
-
getAvailableTools():
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
setToolType(type: ToolType): void;
|
|
41
|
+
getAvailableTools(): Array<{
|
|
42
|
+
type: ToolType;
|
|
43
|
+
meta?: Record<string, any>;
|
|
44
|
+
}>;
|
|
23
45
|
/**
|
|
24
46
|
* 手动创建多个节点
|
|
25
47
|
* 如果你不知道自己在干什么,请使用更高层的封装方法,如 createImageNode
|
|
@@ -41,584 +63,852 @@ export declare class CanvasApi extends CanvasCore {
|
|
|
41
63
|
y: number;
|
|
42
64
|
}): void;
|
|
43
65
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @param
|
|
46
|
-
* @returns DataURL
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
66
|
+
* 导出指定图片节点的底图、笔刷透明图和合成图
|
|
67
|
+
* @param imageId - 图片节点 ID
|
|
68
|
+
* @returns { base, brushOnly, composite } 三张 DataURL,若图片不存在返回 null
|
|
69
|
+
*/
|
|
70
|
+
exportImageWithBrush(imageId: string, options?: {
|
|
71
|
+
pixelRatio?: number;
|
|
72
|
+
}): {
|
|
73
|
+
base: string;
|
|
74
|
+
brushOnly: string;
|
|
75
|
+
composite: string;
|
|
76
|
+
} | null;
|
|
77
|
+
/**
|
|
78
|
+
* 删除指定图片节点关联的所有笔刷节点
|
|
79
|
+
* @param imageId - 图片节点 ID
|
|
80
|
+
*/
|
|
81
|
+
clearImageBrushNodes(imageId: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* 导出全部图形为图片
|
|
84
|
+
* @param options - 导出配置
|
|
85
|
+
* @returns DataURL 格式的图片数据
|
|
86
|
+
*/
|
|
87
|
+
exportAsImage(options?: {
|
|
88
|
+
pixelRatio?: number;
|
|
89
|
+
mimeType?: string;
|
|
90
|
+
quality?: number;
|
|
91
|
+
}): string;
|
|
92
|
+
/**
|
|
93
|
+
* 导出当前选区为图片
|
|
94
|
+
* @param options - 导出配置
|
|
95
|
+
* @returns DataURL 格式的图片数据,如果没有选区则返回 null
|
|
96
|
+
*/
|
|
97
|
+
exportSelectionAsImage(options?: {
|
|
98
|
+
pixelRatio?: number;
|
|
99
|
+
mimeType?: string;
|
|
100
|
+
quality?: number;
|
|
101
|
+
padding?: number;
|
|
102
|
+
}): string | null;
|
|
103
|
+
/**
|
|
104
|
+
* 导出带有标注的图片节点为图片
|
|
105
|
+
* @param id - 图片节点 ID
|
|
106
|
+
* @returns DataURL 格式的图片数据,如果节点或者 marker 不存在则返回 null
|
|
107
|
+
*/
|
|
108
|
+
exportImageWithMarker(id: string, options?: {
|
|
109
|
+
pixelRatio?: number;
|
|
110
|
+
mimeType?: string;
|
|
111
|
+
quality?: number;
|
|
112
|
+
markerScale?: number;
|
|
113
|
+
}): string | null;
|
|
114
|
+
/**
|
|
115
|
+
* 删除当前选中的节点
|
|
116
|
+
* 如果删除的是 image 节点,会同步删除所有关联的 image-marker
|
|
117
|
+
*/
|
|
118
|
+
deleteSelectedNodes(): void;
|
|
119
|
+
/**
|
|
120
|
+
* 对指定图片节点(或当前选中节点)进入裁剪模式
|
|
121
|
+
* @param id - 图片节点 ID,不传则使用当前选中节点
|
|
122
|
+
*/
|
|
123
|
+
startImageCrop(id?: string): void;
|
|
124
|
+
/**
|
|
125
|
+
* 确认裁剪并退出裁剪模式(保存结果)
|
|
126
|
+
* @param id - 图片节点 ID,不传则使用当前选中节点
|
|
127
|
+
*/
|
|
128
|
+
confirmImageCrop(id?: string): void;
|
|
129
|
+
/**
|
|
130
|
+
* 重置指定图片节点(或当前选中节点)的裁剪,还原为完整图片
|
|
131
|
+
* @param id - 图片节点 ID,不传则使用当前选中节点
|
|
132
|
+
*/
|
|
133
|
+
resetImageCrop(id?: string): void;
|
|
134
|
+
/**
|
|
135
|
+
* 设置裁剪模式下底图的缩放倍数(≥1,以裁剪框中心为锚点)
|
|
136
|
+
* @param id - 图片节点 ID
|
|
137
|
+
* @param scale - 缩放倍数
|
|
138
|
+
*/
|
|
139
|
+
setCropOverlayScale(id: string, scale: number): void;
|
|
140
|
+
/**
|
|
141
|
+
* 设置裁剪模式下底图的透明度(0~1)
|
|
142
|
+
* @param id - 图片节点 ID
|
|
143
|
+
* @param opacity - 透明度值
|
|
144
|
+
*/
|
|
145
|
+
setCropOverlayOpacity(id: string, opacity: number): void;
|
|
146
|
+
/**
|
|
147
|
+
* 选中指定节点
|
|
148
|
+
* @param nodeIds - 要选中的节点 ID 数组,不传则取消所有选中
|
|
149
|
+
* @param multiSelect - 是否多选(追加到已选中节点),默认 false
|
|
150
|
+
*/
|
|
151
|
+
selectNodes(nodeIds?: string[], multiSelect?: boolean): void;
|
|
152
|
+
/**
|
|
153
|
+
* 更新节点样式属性
|
|
154
|
+
* @param nodeIds - 要更新的节点 ID 数组
|
|
155
|
+
* @param config - 要更新的属性配置
|
|
156
|
+
*/
|
|
157
|
+
updateNodes(nodeIds: string[], config: Partial<NodeConfig>): void;
|
|
158
|
+
/**
|
|
159
|
+
* 更新选中节点的样式属性
|
|
160
|
+
* @param config - 要更新的属性配置
|
|
161
|
+
*/
|
|
162
|
+
updateSelectedNodes(config: Partial<NodeConfig>): void;
|
|
163
|
+
/**
|
|
164
|
+
* 删除指定的节点
|
|
165
|
+
* 如果删除的是 image 节点,会同步删除所有关联的 image-marker
|
|
166
|
+
* @param nodeIds - 要删除的节点 ID 数组
|
|
167
|
+
* @returns 被删除的节点数据数组
|
|
168
|
+
*/
|
|
169
|
+
deleteNodes(nodeIds: string[]): NodeConfig[];
|
|
170
|
+
/**
|
|
171
|
+
* 将节点移动到最上层
|
|
172
|
+
*/
|
|
173
|
+
moveNodesToTop(nodeIds: string[]): void;
|
|
174
|
+
/**
|
|
175
|
+
* 将节点移动到最下层
|
|
176
|
+
*/
|
|
177
|
+
moveNodesToBottom(nodeIds: string[]): void;
|
|
178
|
+
moveNodesUp(nodeIds: string[]): void;
|
|
179
|
+
moveNodesDown(nodeIds: string[]): void;
|
|
180
|
+
/**
|
|
181
|
+
* 按照给定的 ID 数组顺序重新排列节点
|
|
182
|
+
* 数组中的第一个节点将位于最底层,最后一个节点位于最顶层
|
|
183
|
+
* @param nodeIds - 节点 ID 数组,按从底层到顶层的顺序排列
|
|
184
|
+
*/
|
|
185
|
+
reorderNodes(nodeIds: string[]): void;
|
|
186
|
+
/**
|
|
187
|
+
* 滚动到内容区域
|
|
188
|
+
* - 如果提供了 nodeIds,将指定的节点居中显示
|
|
189
|
+
* - 如果没有提供 nodeIds 但有选中的节点,将选中节点居中显示
|
|
190
|
+
* - 如果没有选中节点,将所有内容居中显示
|
|
191
|
+
* @param options - 配置选项
|
|
192
|
+
* @param options.padding - 内容周围的留白,默认 50px
|
|
193
|
+
* @param options.scale - 是否自动调整缩放以适应内容,默认 false
|
|
194
|
+
* @param options.nodeIds - 要滚动到的节点 ID 数组
|
|
195
|
+
*/
|
|
196
|
+
scrollToContent(options?: {
|
|
197
|
+
padding?: number;
|
|
198
|
+
scale?: boolean;
|
|
199
|
+
nodeIds?: string[];
|
|
200
|
+
}): void;
|
|
201
|
+
/**
|
|
202
|
+
* 导出当前状态
|
|
203
|
+
*/
|
|
204
|
+
save(): CanvasSnapshot;
|
|
205
|
+
/**
|
|
206
|
+
* 从状态中恢复画布
|
|
207
|
+
*/
|
|
208
|
+
restore(state: CanvasSnapshot): void;
|
|
209
|
+
/**
|
|
210
|
+
* 聚焦到指定节点
|
|
211
|
+
* 选中指定的节点并滚动到这些节点的位置
|
|
212
|
+
* @param nodeIds - 要聚焦的节点 ID 数组
|
|
213
|
+
* @param options - 滚动配置选项
|
|
214
|
+
* @param options.padding - 内容周围的留白,默认 50px
|
|
215
|
+
* @param options.scale - 是否自动调整缩放以适应内容,默认 false
|
|
216
|
+
*/
|
|
217
|
+
focusNodes(nodeIds: string[], options?: {
|
|
218
|
+
padding?: number;
|
|
219
|
+
scale?: boolean;
|
|
220
|
+
}): void;
|
|
221
|
+
/**
|
|
222
|
+
* 切换指定节点的可见性
|
|
223
|
+
* @param nodeId - 要切换可见性的节点 ID
|
|
224
|
+
*/
|
|
225
|
+
toggleNodeVisibility(nodeId: string): void;
|
|
226
|
+
/**
|
|
227
|
+
* 切换指定节点的锁定状态
|
|
228
|
+
* 锁定的节点无法被选中和交互(listening = false)
|
|
229
|
+
* @param nodeId - 要切换锁定状态的节点 ID
|
|
230
|
+
*/
|
|
231
|
+
toggleNodeLock(nodeId: string): void;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
declare class CanvasCore extends CanvasStore {
|
|
235
|
+
#private;
|
|
236
|
+
isEditingText: boolean;
|
|
237
|
+
constructor(el: HTMLDivElement, options?: {
|
|
238
|
+
state?: CanvasSnapshot;
|
|
239
|
+
theme?: Theme;
|
|
240
|
+
});
|
|
241
|
+
/**
|
|
242
|
+
* 获取当前主题
|
|
243
|
+
*/
|
|
244
|
+
getTheme(): Theme;
|
|
245
|
+
/**
|
|
246
|
+
* 设置主题并重新渲染
|
|
247
|
+
*/
|
|
248
|
+
setTheme(theme: Theme): void;
|
|
249
|
+
/**
|
|
250
|
+
* 获取 CanvasStage 实例
|
|
251
|
+
*/
|
|
252
|
+
getCanvasStage(): CanvasStage;
|
|
253
|
+
/**
|
|
254
|
+
* 获取 CanvasTransformer 实例
|
|
255
|
+
*/
|
|
256
|
+
getCanvasTransformer(): CanvasTransformer;
|
|
257
|
+
/**
|
|
258
|
+
* 获取 Konva.Transformer 实例
|
|
259
|
+
*/
|
|
260
|
+
getTransformer(): Transformer_2;
|
|
261
|
+
/**
|
|
262
|
+
* 获取 Konva.Stage 实例
|
|
263
|
+
*/
|
|
264
|
+
getStage(): default_2.Stage;
|
|
265
|
+
/**
|
|
266
|
+
* 获取 Stage 容器元素
|
|
267
|
+
*/
|
|
268
|
+
getContainer(): HTMLDivElement;
|
|
269
|
+
/**
|
|
270
|
+
* 获取主图层
|
|
271
|
+
*/
|
|
272
|
+
getMainLayer(): default_2.Layer;
|
|
273
|
+
/**
|
|
274
|
+
* 获取当前工具类型
|
|
275
|
+
*/
|
|
276
|
+
getToolType(): ToolType;
|
|
277
|
+
/**
|
|
278
|
+
* 获取当前工具的元数据
|
|
279
|
+
*/
|
|
280
|
+
getToolMeta(): Record<string, any> | undefined;
|
|
281
|
+
/**
|
|
282
|
+
* 设置当前工具类型(内部使用)
|
|
283
|
+
*
|
|
284
|
+
* toolMeta 是一个可选的对象,可以包含与当前工具相关的任何额外信息。例如,在绘制图形时,toolMeta 可以包含初始位置、颜色、线条样式等信息。这样,在处理工具逻辑时,就可以访问这些元数据来实现更复杂的行为。
|
|
285
|
+
*
|
|
286
|
+
* - polygon 工具可以在 toolMeta 中包含一个 $_shape 字段,指示要绘制的多边形形状(如 triangle、rectangle、pentagon 等),以便在创建草稿节点时生成对应形状的点数据。
|
|
287
|
+
*/
|
|
288
|
+
setToolType(type: ToolType, toolMeta?: any): void;
|
|
289
|
+
/**
|
|
290
|
+
* 根据 ID 获取 Canvas 节点实例
|
|
291
|
+
*/
|
|
292
|
+
getCanvasNodeById(id: string): CanvasNode | null;
|
|
293
|
+
/**
|
|
294
|
+
* 设置是否可拖拽(内部使用)
|
|
295
|
+
*/
|
|
296
|
+
protected setDraggable(draggable: boolean): void;
|
|
297
|
+
/* Excluded from this release type: _setCursor */
|
|
298
|
+
/* Excluded from this release type: _resetCursor */
|
|
299
|
+
/**
|
|
300
|
+
* 获取当前 Stage 缩放比例
|
|
301
|
+
*/
|
|
302
|
+
getStageScale(): number;
|
|
303
|
+
/* Excluded from this release type: _updateViewport */
|
|
304
|
+
protected createNodes(nodes: NodeConfig[], addToHistory: boolean): void;
|
|
305
|
+
/**
|
|
306
|
+
* 创建图片标注节点(内部使用)
|
|
307
|
+
*/
|
|
308
|
+
protected createImageMarkerNode(parentImageId: string, startPosition: {
|
|
309
|
+
x: number;
|
|
310
|
+
y: number;
|
|
311
|
+
}, endPosition: {
|
|
312
|
+
x: number;
|
|
313
|
+
y: number;
|
|
314
|
+
}, imageBounds: {
|
|
315
|
+
x: number;
|
|
316
|
+
y: number;
|
|
317
|
+
width: number;
|
|
318
|
+
height: number;
|
|
319
|
+
}): void;
|
|
320
|
+
/* Excluded from this release type: _findImageAtPosition */
|
|
321
|
+
/* Excluded from this release type: _setDrawingPosition */
|
|
322
|
+
/* Excluded from this release type: _updateDrawingPosition */
|
|
323
|
+
/* Excluded from this release type: _createDraftNode */
|
|
324
|
+
/* Excluded from this release type: _updateDraftNode */
|
|
325
|
+
/* Excluded from this release type: _appendBrushPoint */
|
|
326
|
+
/* Excluded from this release type: _finalizeDraftNode */
|
|
327
|
+
/* Excluded from this release type: _createTextNodeAtDrawingPosition */
|
|
328
|
+
/* Excluded from this release type: _createSelectRect */
|
|
329
|
+
_updateSelectRect(): void;
|
|
330
|
+
/* Excluded from this release type: _finalizeSelectRect */
|
|
331
|
+
/* Excluded from this release type: _selectNodes */
|
|
332
|
+
/* Excluded from this release type: deleteNodes */
|
|
333
|
+
/* Excluded from this release type: deleteSelectedNodes */
|
|
334
|
+
/* Excluded from this release type: _getKeyboardEl */
|
|
335
|
+
/**
|
|
336
|
+
* 销毁 canvas
|
|
337
|
+
*/
|
|
338
|
+
dispose(): void;
|
|
339
|
+
/* Excluded from this release type: _rebuildStateAfterNodeChange */
|
|
340
|
+
/**
|
|
341
|
+
* 实现父类的状态同步方法
|
|
342
|
+
* 当 undo/redo 时被调用
|
|
343
|
+
*/
|
|
344
|
+
protected _renderCanvas(state: CanvasSnapshot): void;
|
|
345
|
+
_showContextMenu(data: {
|
|
346
|
+
x: number;
|
|
347
|
+
y: number;
|
|
348
|
+
clientX: number;
|
|
349
|
+
clientY: number;
|
|
350
|
+
targetIds: string[];
|
|
351
|
+
}): void;
|
|
352
|
+
_syncNodesZIndexToStore(): void;
|
|
353
|
+
_registerTextEditor(editor: Editor): void;
|
|
354
|
+
_unregisterTextEditor(): void;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* 状态事件类型定义
|
|
359
|
+
*/
|
|
360
|
+
declare type CanvasEvents = {
|
|
361
|
+
"state:change": CanvasSnapshot;
|
|
362
|
+
"state:undo": CanvasSnapshot;
|
|
363
|
+
"state:redo": CanvasSnapshot;
|
|
364
|
+
"state:reset": CanvasSnapshot;
|
|
365
|
+
"viewport:change": CanvasSnapshot["viewport"];
|
|
366
|
+
"viewport:scale:change": number;
|
|
367
|
+
"transformer:positionChange": TransformerPosition | null;
|
|
368
|
+
"toolType:change": {
|
|
369
|
+
type: CanvasSnapshot["toolType"];
|
|
370
|
+
meta?: Record<string, any>;
|
|
371
|
+
};
|
|
372
|
+
"theme:change": Theme;
|
|
373
|
+
"nodes:created": NodeConfig[];
|
|
374
|
+
"nodes:deleted": NodeConfig[];
|
|
375
|
+
"nodes:selected": string[];
|
|
376
|
+
"contextmenu:show": {
|
|
377
|
+
x: number;
|
|
378
|
+
y: number;
|
|
379
|
+
clientX: number;
|
|
380
|
+
clientY: number;
|
|
381
|
+
targetIds: string[];
|
|
382
|
+
};
|
|
383
|
+
"nodes:sorted": string[];
|
|
384
|
+
"texteditor:register": any;
|
|
385
|
+
"texteditor:unregister": void;
|
|
386
|
+
/** 进入裁剪模式:携带裁剪框在容器内的初始位置(px) */
|
|
387
|
+
"crop:start": {
|
|
388
|
+
nodeId: string;
|
|
389
|
+
x: number;
|
|
390
|
+
y: number;
|
|
391
|
+
width: number;
|
|
392
|
+
height: number;
|
|
393
|
+
};
|
|
394
|
+
/** 退出裁剪模式 */
|
|
395
|
+
"crop:end": {
|
|
396
|
+
nodeId: string;
|
|
397
|
+
};
|
|
398
|
+
/** 裁剪框位置/尺寸更新(用于同步工具栏位置) */
|
|
399
|
+
"crop:frameChange": {
|
|
400
|
+
nodeId: string;
|
|
401
|
+
x: number;
|
|
402
|
+
y: number;
|
|
403
|
+
width: number;
|
|
404
|
+
height: number;
|
|
405
|
+
};
|
|
406
|
+
};
|
|
132
407
|
|
|
133
|
-
declare
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
*
|
|
153
|
-
*/
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
*
|
|
187
|
-
*/
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
408
|
+
export declare interface CanvasNode {
|
|
409
|
+
getID(): string;
|
|
410
|
+
getElement(): default_2.Shape | default_2.Group;
|
|
411
|
+
getConfig(): NodeConfig;
|
|
412
|
+
syncConfigFromElement(): void;
|
|
413
|
+
update(config: Partial<NodeConfig>): void;
|
|
414
|
+
destroy(): void;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export declare interface CanvasSnapshot {
|
|
418
|
+
viewport: Viewport;
|
|
419
|
+
toolType: ToolType;
|
|
420
|
+
toolMeta?: any;
|
|
421
|
+
selectedNodeIds?: string[];
|
|
422
|
+
nodes?: NodeConfig[];
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* CanvasStage 封装了 Konva.Stage 的核心功能
|
|
427
|
+
* 提供视口管理、事件处理、拖拽和缩放等能力
|
|
428
|
+
*/
|
|
429
|
+
declare class CanvasStage {
|
|
430
|
+
#private;
|
|
431
|
+
constructor(core: CanvasCore, config: StageConfig);
|
|
432
|
+
/**
|
|
433
|
+
* 获取原生 Konva.Stage 实例
|
|
434
|
+
*/
|
|
435
|
+
getStage(): default_2.Stage;
|
|
436
|
+
/**
|
|
437
|
+
* 获取当前视口状态
|
|
438
|
+
*/
|
|
439
|
+
getViewport(): ViewportState;
|
|
440
|
+
/**
|
|
441
|
+
* 设置视口(包括位置、缩放和尺寸)
|
|
442
|
+
*/
|
|
443
|
+
setViewport(viewport: Partial<ViewportState>): void;
|
|
444
|
+
/**
|
|
445
|
+
* 设置是否可拖拽
|
|
446
|
+
*/
|
|
447
|
+
setDraggable(draggable: boolean): void;
|
|
448
|
+
/**
|
|
449
|
+
* 设置光标样式
|
|
450
|
+
*/
|
|
451
|
+
setCursor(cursor: string): void;
|
|
452
|
+
/**
|
|
453
|
+
* 重置光标样式
|
|
454
|
+
*/
|
|
455
|
+
resetCursor(): void;
|
|
456
|
+
destroy(): void;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* CanvasStore 类负责管理画布的状态
|
|
461
|
+
* 包括历史记录(past/present/future)和状态监听
|
|
462
|
+
*/
|
|
463
|
+
declare abstract class CanvasStore {
|
|
464
|
+
#private;
|
|
465
|
+
constructor(initialState: CanvasSnapshot);
|
|
466
|
+
/**
|
|
467
|
+
* 获取当前状态
|
|
468
|
+
*/
|
|
469
|
+
getState(): CanvasSnapshot;
|
|
470
|
+
/**
|
|
471
|
+
* 获取完整历史状态
|
|
472
|
+
*/
|
|
473
|
+
getHistory(): HistoryState<CanvasSnapshot>;
|
|
474
|
+
/**
|
|
475
|
+
* 是否可以撤销
|
|
476
|
+
*/
|
|
477
|
+
canUndo(): boolean;
|
|
478
|
+
/**
|
|
479
|
+
* 是否可以重做
|
|
480
|
+
*/
|
|
481
|
+
canRedo(): boolean;
|
|
482
|
+
/**
|
|
483
|
+
* 订阅状态事件
|
|
484
|
+
*/
|
|
485
|
+
on<K extends keyof CanvasEvents>(event: K, handler: (data: CanvasEvents[K]) => void): void;
|
|
486
|
+
/**
|
|
487
|
+
* 取消订阅状态事件
|
|
488
|
+
*/
|
|
489
|
+
off<K extends keyof CanvasEvents>(event: K, handler: (data: CanvasEvents[K]) => void): void;
|
|
490
|
+
/* Excluded from this release type: _emit */
|
|
491
|
+
/**
|
|
492
|
+
* 撤销操作
|
|
493
|
+
*/
|
|
494
|
+
undo(): void;
|
|
495
|
+
/**
|
|
496
|
+
* 重做操作
|
|
497
|
+
*/
|
|
498
|
+
redo(): void;
|
|
499
|
+
/**
|
|
500
|
+
* 重置历史记录
|
|
501
|
+
*/
|
|
502
|
+
resetHistory(): void;
|
|
503
|
+
/**
|
|
504
|
+
* 更新状态
|
|
505
|
+
* @param partial - 部分状态更新
|
|
506
|
+
* @param addToHistory - 是否添加到历史记录
|
|
507
|
+
*/
|
|
508
|
+
protected _updateState(partial: Partial<CanvasSnapshot>, addToHistory: boolean): void;
|
|
509
|
+
/**
|
|
510
|
+
* 同步状态到 canvas 系统(由子类实现)
|
|
511
|
+
* @param _state - 要同步的状态
|
|
512
|
+
*/
|
|
513
|
+
protected abstract _renderCanvas(_state: CanvasSnapshot): void;
|
|
514
|
+
/**
|
|
515
|
+
* 清理资源
|
|
516
|
+
*/
|
|
517
|
+
protected _dispose(): void;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* CanvasTransformer 封装了 Konva.Transformer 的核心功能
|
|
522
|
+
* 提供变换器管理、位置计算、事件处理等能力
|
|
523
|
+
*/
|
|
524
|
+
declare class CanvasTransformer {
|
|
525
|
+
#private;
|
|
526
|
+
constructor(core: CanvasCore, config?: TransformerConfig);
|
|
527
|
+
/**
|
|
528
|
+
* 获取原生 Konva.Transformer 实例
|
|
529
|
+
*/
|
|
530
|
+
getTransformer(): default_2.Transformer;
|
|
531
|
+
/**
|
|
532
|
+
* 获取 Transformer 的位置信息
|
|
533
|
+
*/
|
|
534
|
+
getPosition(): TransformerPosition | null;
|
|
535
|
+
/**
|
|
536
|
+
* 设置要变换的节点
|
|
537
|
+
*/
|
|
538
|
+
setNodes(nodes: default_2.Node[]): void;
|
|
539
|
+
/**
|
|
540
|
+
* 获取当前变换的节点
|
|
541
|
+
*/
|
|
542
|
+
getNodes(): default_2.Node[];
|
|
543
|
+
/**
|
|
544
|
+
* 清除所有节点
|
|
545
|
+
*/
|
|
546
|
+
clearNodes(): void;
|
|
547
|
+
/**
|
|
548
|
+
* emit Transformer 位置
|
|
549
|
+
*/
|
|
550
|
+
emitPositionChange(): void;
|
|
551
|
+
/**
|
|
552
|
+
* 销毁 Transformer
|
|
553
|
+
*/
|
|
554
|
+
destroy(): void;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
export declare interface ContextMenuItem {
|
|
558
|
+
label: string;
|
|
559
|
+
action: () => void;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
export declare interface ContextMenuState {
|
|
201
563
|
x: number;
|
|
202
564
|
y: number;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
/* Excluded from this release type: _findImageAtPosition */
|
|
207
|
-
/* Excluded from this release type: _setDrawingPosition */
|
|
208
|
-
/* Excluded from this release type: _updateDrawingPosition */
|
|
209
|
-
/* Excluded from this release type: _createDraftNode */
|
|
210
|
-
/* Excluded from this release type: _updateDraftNode */
|
|
211
|
-
/* Excluded from this release type: _finalizeDraftNode */
|
|
212
|
-
/* Excluded from this release type: _createTextNodeAtDrawingPosition */
|
|
213
|
-
/* Excluded from this release type: _createSelectRect */
|
|
214
|
-
_updateSelectRect(): void;
|
|
215
|
-
/* Excluded from this release type: _finalizeSelectRect */
|
|
216
|
-
/* Excluded from this release type: _selectNodes */
|
|
217
|
-
/* Excluded from this release type: deleteNodes */
|
|
218
|
-
/* Excluded from this release type: deleteSelectedNodes */
|
|
219
|
-
/**
|
|
220
|
-
* 销毁 canvas
|
|
221
|
-
*/
|
|
222
|
-
dispose(): void;
|
|
223
|
-
/* Excluded from this release type: _rebuildStateAfterNodeChange */
|
|
565
|
+
items: ContextMenuItem[];
|
|
566
|
+
}
|
|
567
|
+
|
|
224
568
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
569
|
+
* 图片裁剪变换数据
|
|
570
|
+
* 描述图像位图在裁剪区域内的位置、缩放和旋转
|
|
227
571
|
*/
|
|
228
|
-
|
|
229
|
-
_showContextMenu(data: {
|
|
230
|
-
x: number;
|
|
231
|
-
y: number;
|
|
232
|
-
clientX: number;
|
|
233
|
-
clientY: number;
|
|
234
|
-
targetIds: string[];
|
|
235
|
-
}): void;
|
|
236
|
-
_syncNodesZIndexToStore(): void;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* 状态事件类型定义
|
|
241
|
-
*/
|
|
242
|
-
declare type CanvasEvents = {
|
|
243
|
-
"state:change": CanvasSnapshot;
|
|
244
|
-
"state:undo": CanvasSnapshot;
|
|
245
|
-
"state:redo": CanvasSnapshot;
|
|
246
|
-
"state:reset": CanvasSnapshot;
|
|
247
|
-
"viewport:change": CanvasSnapshot["viewport"];
|
|
248
|
-
"viewport:scale:change": number;
|
|
249
|
-
"transformer:positionChange": TransformerPosition | null;
|
|
250
|
-
"toolType:change": CanvasSnapshot["toolType"];
|
|
251
|
-
"theme:change": Theme;
|
|
252
|
-
"nodes:created": NodeConfig[];
|
|
253
|
-
"nodes:deleted": NodeConfig[];
|
|
254
|
-
"nodes:selected": string[];
|
|
255
|
-
"contextmenu:show": {
|
|
572
|
+
declare type CropTransform = {
|
|
256
573
|
x: number;
|
|
257
574
|
y: number;
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
575
|
+
width: number;
|
|
576
|
+
height: number;
|
|
577
|
+
rotation: number;
|
|
578
|
+
scaleX: number;
|
|
579
|
+
scaleY: number;
|
|
261
580
|
};
|
|
262
|
-
"nodes:sorted": string[];
|
|
263
|
-
};
|
|
264
581
|
|
|
265
|
-
export declare
|
|
266
|
-
getID(): string;
|
|
267
|
-
getElement(): default_2.Shape | default_2.Group;
|
|
268
|
-
getConfig(): NodeConfig;
|
|
269
|
-
syncConfigFromElement(): void;
|
|
270
|
-
update(config: Partial<NodeConfig>): void;
|
|
271
|
-
destroy(): void;
|
|
272
|
-
}
|
|
582
|
+
export declare const DARK_THEME: Theme;
|
|
273
583
|
|
|
274
|
-
export declare
|
|
275
|
-
viewport: Viewport;
|
|
276
|
-
toolType: ToolType;
|
|
277
|
-
selectedNodeIds?: string[];
|
|
278
|
-
nodes?: NodeConfig[];
|
|
279
|
-
}
|
|
584
|
+
export declare const DEFAULT_THEME: Theme;
|
|
280
585
|
|
|
281
|
-
/**
|
|
282
|
-
* CanvasStage 封装了 Konva.Stage 的核心功能
|
|
283
|
-
* 提供视口管理、事件处理、拖拽和缩放等能力
|
|
284
|
-
*/
|
|
285
|
-
declare class CanvasStage {
|
|
286
|
-
#private;
|
|
287
|
-
constructor(core: CanvasCore, config: StageConfig);
|
|
288
|
-
/**
|
|
289
|
-
* 获取原生 Konva.Stage 实例
|
|
290
|
-
*/
|
|
291
|
-
getStage(): default_2.Stage;
|
|
292
|
-
/**
|
|
293
|
-
* 获取当前视口状态
|
|
294
|
-
*/
|
|
295
|
-
getViewport(): ViewportState;
|
|
296
|
-
/**
|
|
297
|
-
* 设置视口(包括位置、缩放和尺寸)
|
|
298
|
-
*/
|
|
299
|
-
setViewport(viewport: Partial<ViewportState>): void;
|
|
300
|
-
/**
|
|
301
|
-
* 设置是否可拖拽
|
|
302
|
-
*/
|
|
303
|
-
setDraggable(draggable: boolean): void;
|
|
304
|
-
/**
|
|
305
|
-
* 设置光标样式
|
|
306
|
-
*/
|
|
307
|
-
setCursor(cursor: string): void;
|
|
308
|
-
/**
|
|
309
|
-
* 重置光标样式
|
|
310
|
-
*/
|
|
311
|
-
resetCursor(): void;
|
|
312
586
|
/**
|
|
313
|
-
*
|
|
587
|
+
* 椭圆节点配置
|
|
314
588
|
*/
|
|
315
|
-
|
|
316
|
-
|
|
589
|
+
declare type EllipseNodeConfig = BaseNodeConfig & default_2.EllipseConfig & Partial<NodeStyle> & {
|
|
590
|
+
$_type: "ellipse";
|
|
591
|
+
};
|
|
317
592
|
|
|
318
|
-
/**
|
|
319
|
-
* CanvasStore 类负责管理画布的状态
|
|
320
|
-
* 包括历史记录(past/present/future)和状态监听
|
|
321
|
-
*/
|
|
322
|
-
declare abstract class CanvasStore {
|
|
323
|
-
#private;
|
|
324
|
-
constructor(initialState: CanvasSnapshot);
|
|
325
|
-
/**
|
|
326
|
-
* 获取当前状态
|
|
327
|
-
*/
|
|
328
|
-
getState(): CanvasSnapshot;
|
|
329
|
-
/**
|
|
330
|
-
* 获取完整历史状态
|
|
331
|
-
*/
|
|
332
|
-
getHistory(): HistoryState<CanvasSnapshot>;
|
|
333
|
-
/**
|
|
334
|
-
* 是否可以撤销
|
|
335
|
-
*/
|
|
336
|
-
canUndo(): boolean;
|
|
337
|
-
/**
|
|
338
|
-
* 是否可以重做
|
|
339
|
-
*/
|
|
340
|
-
canRedo(): boolean;
|
|
341
|
-
/**
|
|
342
|
-
* 订阅状态事件
|
|
343
|
-
*/
|
|
344
|
-
on<K extends keyof CanvasEvents>(event: K, handler: (data: CanvasEvents[K]) => void): void;
|
|
345
|
-
/**
|
|
346
|
-
* 取消订阅状态事件
|
|
347
|
-
*/
|
|
348
|
-
off<K extends keyof CanvasEvents>(event: K, handler: (data: CanvasEvents[K]) => void): void;
|
|
349
|
-
/* Excluded from this release type: _emit */
|
|
350
593
|
/**
|
|
351
|
-
*
|
|
594
|
+
* 字体替换选区节点配置
|
|
352
595
|
*/
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
596
|
+
declare type FontReplaceNodeConfig = BaseNodeConfig & default_2.RectConfig & Partial<NodeStyle> & {
|
|
597
|
+
$_type: "font-replace";
|
|
598
|
+
width: number;
|
|
599
|
+
height: number;
|
|
600
|
+
$_parentId: string;
|
|
601
|
+
$_relativeBox: {
|
|
602
|
+
start: {
|
|
603
|
+
ratioX: number;
|
|
604
|
+
ratioY: number;
|
|
605
|
+
};
|
|
606
|
+
end: {
|
|
607
|
+
ratioX: number;
|
|
608
|
+
ratioY: number;
|
|
609
|
+
};
|
|
610
|
+
};
|
|
611
|
+
$_status: "selecting" | "confirming" | "processing" | "done" | "error";
|
|
612
|
+
$_bounds?: {
|
|
613
|
+
x: number;
|
|
614
|
+
y: number;
|
|
615
|
+
width: number;
|
|
616
|
+
height: number;
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
declare type HistoryState<T> = {
|
|
621
|
+
past: T[];
|
|
622
|
+
present: T;
|
|
623
|
+
future: T[];
|
|
624
|
+
};
|
|
378
625
|
|
|
379
|
-
/**
|
|
380
|
-
* CanvasTransformer 封装了 Konva.Transformer 的核心功能
|
|
381
|
-
* 提供变换器管理、位置计算、事件处理等能力
|
|
382
|
-
*/
|
|
383
|
-
declare class CanvasTransformer {
|
|
384
|
-
#private;
|
|
385
|
-
constructor(core: CanvasCore, config?: TransformerConfig);
|
|
386
|
-
/**
|
|
387
|
-
* 获取原生 Konva.Transformer 实例
|
|
388
|
-
*/
|
|
389
|
-
getTransformer(): default_2.Transformer;
|
|
390
626
|
/**
|
|
391
|
-
*
|
|
627
|
+
* HTML 节点配置
|
|
392
628
|
*/
|
|
393
|
-
|
|
629
|
+
export declare type HtmlNodeConfig = BaseNodeConfig & default_2.RectConfig & Partial<NodeStyle> & {
|
|
630
|
+
$_type: "html";
|
|
631
|
+
$_actualType: string;
|
|
632
|
+
$_htmlContent: string;
|
|
633
|
+
};
|
|
634
|
+
|
|
394
635
|
/**
|
|
395
|
-
*
|
|
636
|
+
* 图片笔刷节点配置(仅在绑定图片范围内涂抹)
|
|
396
637
|
*/
|
|
397
|
-
|
|
638
|
+
declare type ImageBrushNodeConfig = BaseNodeConfig & default_2.LineConfig & Partial<NodeStyle> & {
|
|
639
|
+
$_type: "image-brush";
|
|
640
|
+
points: number[];
|
|
641
|
+
$_imageId: string;
|
|
642
|
+
$_imageBounds: {
|
|
643
|
+
x: number;
|
|
644
|
+
y: number;
|
|
645
|
+
width: number;
|
|
646
|
+
height: number;
|
|
647
|
+
};
|
|
648
|
+
};
|
|
649
|
+
|
|
398
650
|
/**
|
|
399
|
-
*
|
|
651
|
+
* 图片标注节点配置
|
|
400
652
|
*/
|
|
401
|
-
|
|
653
|
+
export declare type ImageMarkerNodeConfig = BaseNodeConfig & default_2.RectConfig & Partial<NodeStyle> & {
|
|
654
|
+
$_type: "image-marker";
|
|
655
|
+
width: number;
|
|
656
|
+
height: number;
|
|
657
|
+
$_markerNumber: number;
|
|
658
|
+
$_parentId: string;
|
|
659
|
+
$_relativeBox: {
|
|
660
|
+
start: {
|
|
661
|
+
ratioX: number;
|
|
662
|
+
ratioY: number;
|
|
663
|
+
};
|
|
664
|
+
end: {
|
|
665
|
+
ratioX: number;
|
|
666
|
+
ratioY: number;
|
|
667
|
+
};
|
|
668
|
+
};
|
|
669
|
+
$_bounds?: {
|
|
670
|
+
x: number;
|
|
671
|
+
y: number;
|
|
672
|
+
width: number;
|
|
673
|
+
height: number;
|
|
674
|
+
};
|
|
675
|
+
};
|
|
676
|
+
|
|
402
677
|
/**
|
|
403
|
-
*
|
|
404
|
-
*/
|
|
405
|
-
|
|
678
|
+
* 图片节点配置
|
|
679
|
+
*/
|
|
680
|
+
export declare type ImageNodeConfig = BaseNodeConfig & Omit<default_2.ImageConfig, "image"> & Partial<NodeStyle> & {
|
|
681
|
+
$_type: "image";
|
|
682
|
+
$_imageUrl: string;
|
|
683
|
+
$_cropTransform?: CropTransform | null;
|
|
684
|
+
$_applyBlurFilter?: boolean;
|
|
685
|
+
$_applyBrightnessFilter?: boolean;
|
|
686
|
+
$_applyRGBFilter?: boolean;
|
|
687
|
+
$_applyHSLFilter?: boolean;
|
|
688
|
+
red?: number;
|
|
689
|
+
green?: number;
|
|
690
|
+
blue?: number;
|
|
691
|
+
hue?: number;
|
|
692
|
+
saturation?: number;
|
|
693
|
+
luminance?: number;
|
|
694
|
+
image?: CanvasImageSource | undefined;
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
export declare const NODE_NAMES: {
|
|
698
|
+
nodeRoot: string;
|
|
699
|
+
selectable: string;
|
|
700
|
+
rect: string;
|
|
701
|
+
image: string;
|
|
702
|
+
imageMarker: string;
|
|
703
|
+
html: string;
|
|
704
|
+
text: string;
|
|
705
|
+
richText: string;
|
|
706
|
+
video: string;
|
|
707
|
+
star: string;
|
|
708
|
+
ellipse: string;
|
|
709
|
+
polygon: string;
|
|
710
|
+
arrow: string;
|
|
711
|
+
brush: string;
|
|
712
|
+
imageBrush: string;
|
|
713
|
+
fontReplace: string;
|
|
714
|
+
};
|
|
715
|
+
|
|
406
716
|
/**
|
|
407
|
-
*
|
|
717
|
+
* 节点配置联合类型(判别联合)
|
|
718
|
+
* 根据 $_type 字段可以自动推断出对应节点的特定字段
|
|
408
719
|
*/
|
|
409
|
-
|
|
720
|
+
export declare type NodeConfig = RectangleNodeConfig | ImageNodeConfig | ImageMarkerNodeConfig | HtmlNodeConfig | TextNodeConfig | RichTextNodeConfig | VideoNodeConfig | StarNodeConfig | EllipseNodeConfig | PolygonNodeConfig | ArrowNodeConfig | BrushNodeConfig | ImageBrushNodeConfig | FontReplaceNodeConfig;
|
|
721
|
+
|
|
410
722
|
/**
|
|
411
|
-
*
|
|
723
|
+
* 根据节点类型获取对应的配置类型
|
|
724
|
+
* @example NodeConfigByType<"image"> = ImageNodeConfig
|
|
412
725
|
*/
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
export declare interface ContextMenuItem {
|
|
417
|
-
label: string;
|
|
418
|
-
action: () => void;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
export declare interface ContextMenuState {
|
|
422
|
-
x: number;
|
|
423
|
-
y: number;
|
|
424
|
-
items: ContextMenuItem[];
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
export declare const DARK_THEME: Theme;
|
|
726
|
+
export declare type NodeConfigByType<T extends NodeType> = Extract<NodeConfig, {
|
|
727
|
+
$_type: T;
|
|
728
|
+
}>;
|
|
428
729
|
|
|
429
|
-
|
|
730
|
+
declare interface NodeStyle {
|
|
731
|
+
$_strokeColor: ThemeKeysStartingWith<"theme.stroke-color."> | string;
|
|
732
|
+
$_fillColor: ThemeKeysStartingWith<"theme.fill-color."> | string;
|
|
733
|
+
}
|
|
430
734
|
|
|
431
|
-
declare type
|
|
432
|
-
past: T[];
|
|
433
|
-
present: T;
|
|
434
|
-
future: T[];
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* HTML 节点配置
|
|
439
|
-
*/
|
|
440
|
-
export declare type HtmlNodeConfig = BaseNodeConfig & default_2.RectConfig & Partial<NodeStyle> & {
|
|
441
|
-
$_type: "html";
|
|
442
|
-
$_actualType: string;
|
|
443
|
-
$_htmlContent: string;
|
|
444
|
-
};
|
|
735
|
+
export declare type NodeType = "rectangle" | "image" | "image-marker" | "html" | "text" | "rich-text" | "video" | "star" | "ellipse" | "polygon" | "arrow" | "brush" | "image-brush" | "font-replace";
|
|
445
736
|
|
|
446
|
-
/**
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
height: number;
|
|
453
|
-
$_markerNumber: number;
|
|
454
|
-
$_parentId: string;
|
|
455
|
-
$_relativeBox: {
|
|
456
|
-
start: {
|
|
457
|
-
ratioX: number;
|
|
458
|
-
ratioY: number;
|
|
459
|
-
};
|
|
460
|
-
end: {
|
|
461
|
-
ratioX: number;
|
|
462
|
-
ratioY: number;
|
|
463
|
-
};
|
|
737
|
+
/**
|
|
738
|
+
* 多边形节点配置
|
|
739
|
+
*/
|
|
740
|
+
declare type PolygonNodeConfig = BaseNodeConfig & default_2.LineConfig & Partial<NodeStyle> & {
|
|
741
|
+
$_type: "polygon";
|
|
742
|
+
$_shape: "triangle" | "diamond" | "hexagon";
|
|
464
743
|
};
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* 矩形节点配置
|
|
747
|
+
*/
|
|
748
|
+
export declare type RectangleNodeConfig = BaseNodeConfig & default_2.RectConfig & Partial<NodeStyle> & {
|
|
749
|
+
$_type: "rectangle";
|
|
468
750
|
width: number;
|
|
469
751
|
height: number;
|
|
470
752
|
};
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
/**
|
|
474
|
-
* 图片节点配置
|
|
475
|
-
*/
|
|
476
|
-
export declare type ImageNodeConfig = BaseNodeConfig & Omit<default_2.ImageConfig, "image"> & Partial<NodeStyle> & {
|
|
477
|
-
$_type: "image";
|
|
478
|
-
$_imageUrl: string;
|
|
479
|
-
image?: CanvasImageSource | undefined;
|
|
480
|
-
};
|
|
481
|
-
|
|
482
|
-
export declare const NODE_NAMES: {
|
|
483
|
-
nodeRoot: string;
|
|
484
|
-
selectable: string;
|
|
485
|
-
rect: string;
|
|
486
|
-
image: string;
|
|
487
|
-
imageMarker: string;
|
|
488
|
-
html: string;
|
|
489
|
-
text: string;
|
|
490
|
-
richText: string;
|
|
491
|
-
video: string;
|
|
492
|
-
};
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* 节点配置联合类型(判别联合)
|
|
496
|
-
* 根据 $_type 字段可以自动推断出对应节点的特定字段
|
|
497
|
-
*/
|
|
498
|
-
export declare type NodeConfig = RectangleNodeConfig | ImageNodeConfig | ImageMarkerNodeConfig | HtmlNodeConfig | TextNodeConfig | RichTextNodeConfig | VideoNodeConfig;
|
|
499
|
-
|
|
500
|
-
/**
|
|
501
|
-
* 根据节点类型获取对应的配置类型
|
|
502
|
-
* @example NodeConfigByType<"image"> = ImageNodeConfig
|
|
503
|
-
*/
|
|
504
|
-
export declare type NodeConfigByType<T extends NodeType> = Extract<NodeConfig, {
|
|
505
|
-
$_type: T;
|
|
506
|
-
}>;
|
|
507
|
-
|
|
508
|
-
declare interface NodeStyle {
|
|
509
|
-
$_strokeColor: ThemeKeysStartingWith<"theme.stroke-color."> | string;
|
|
510
|
-
$_fillColor: ThemeKeysStartingWith<"theme.fill-color."> | string;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
export declare type NodeType = "rectangle" | "image" | "image-marker" | "html" | "text" | "rich-text" | "video";
|
|
514
753
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
$_type: "rectangle";
|
|
520
|
-
width: number;
|
|
521
|
-
height: number;
|
|
522
|
-
};
|
|
754
|
+
declare type RichTextNodeConfig = BaseNodeConfig & default_2.ImageConfig & Partial<NodeStyle> & {
|
|
755
|
+
$_type: "rich-text";
|
|
756
|
+
$_htmlContent: string;
|
|
757
|
+
};
|
|
523
758
|
|
|
524
|
-
declare type
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
759
|
+
declare type StageConfig = {
|
|
760
|
+
container: HTMLDivElement;
|
|
761
|
+
width: number;
|
|
762
|
+
height: number;
|
|
763
|
+
draggable?: boolean;
|
|
764
|
+
className?: string;
|
|
765
|
+
};
|
|
528
766
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
};
|
|
767
|
+
/**
|
|
768
|
+
* 星形节点配置
|
|
769
|
+
*/
|
|
770
|
+
export declare type StarNodeConfig = BaseNodeConfig & default_2.StarConfig & Partial<NodeStyle> & {
|
|
771
|
+
$_type: "star";
|
|
772
|
+
};
|
|
536
773
|
|
|
537
|
-
declare type TextNodeConfig = BaseNodeConfig & default_2.TextConfig & Partial<NodeStyle> & {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
};
|
|
774
|
+
declare type TextNodeConfig = BaseNodeConfig & default_2.TextConfig & Partial<NodeStyle> & {
|
|
775
|
+
$_type: "text";
|
|
776
|
+
text: string;
|
|
777
|
+
};
|
|
541
778
|
|
|
542
|
-
export declare interface Theme {
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
}
|
|
779
|
+
export declare interface Theme {
|
|
780
|
+
"theme.select-rect-border": string;
|
|
781
|
+
"theme.select-rect-fill": string;
|
|
782
|
+
"theme.image-marker-color": string;
|
|
783
|
+
"theme.stroke-color.1": string;
|
|
784
|
+
"theme.stroke-color.2": string;
|
|
785
|
+
"theme.stroke-color.3": string;
|
|
786
|
+
"theme.stroke-color.4": string;
|
|
787
|
+
"theme.stroke-color.5": string;
|
|
788
|
+
"theme.stroke-color.6": string;
|
|
789
|
+
"theme.fill-color.1": string;
|
|
790
|
+
"theme.fill-color.2": string;
|
|
791
|
+
"theme.fill-color.3": string;
|
|
792
|
+
"theme.fill-color.4": string;
|
|
793
|
+
"theme.fill-color.5": string;
|
|
794
|
+
"theme.fill-color.6": string;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
export declare const THEME_PRESETS: {
|
|
798
|
+
readonly default: Theme;
|
|
799
|
+
readonly dark: Theme;
|
|
800
|
+
};
|
|
559
801
|
|
|
560
|
-
|
|
561
|
-
readonly default: Theme;
|
|
562
|
-
readonly dark: Theme;
|
|
563
|
-
};
|
|
802
|
+
declare type ThemeKeysStartingWith<Prefix extends string> = Extract<keyof Theme, `${Prefix}${string}`>;
|
|
564
803
|
|
|
565
|
-
declare type
|
|
804
|
+
export declare type ThemePreset = keyof typeof THEME_PRESETS;
|
|
566
805
|
|
|
567
|
-
export declare
|
|
806
|
+
export declare function TipTapBubbleMenu({ api, renderTextColorPicker }: TipTapBubbleMenuProps): JSX.Element | null;
|
|
568
807
|
|
|
569
|
-
|
|
808
|
+
declare interface TipTapBubbleMenuProps {
|
|
809
|
+
api: CanvasApi | null;
|
|
810
|
+
/**
|
|
811
|
+
* 自定义文字颜色选择器。传入一个接收 editor 的 render 函数,
|
|
812
|
+
* 返回的 ReactNode 会替换默认的 TextColorPopover。
|
|
813
|
+
* 可用于注入外部的 HSV 调色盘(如 react-colorful)。
|
|
814
|
+
*/
|
|
815
|
+
renderTextColorPicker?: (editor: Editor) => ReactNode;
|
|
816
|
+
}
|
|
570
817
|
|
|
571
|
-
declare type
|
|
572
|
-
rotateEnabled?: boolean;
|
|
573
|
-
ignoreStroke?: boolean;
|
|
574
|
-
anchorSize?: number;
|
|
575
|
-
borderDash?: number[];
|
|
576
|
-
anchorCornerRadius?: number;
|
|
577
|
-
padding?: number;
|
|
578
|
-
};
|
|
818
|
+
export declare type ToolType = "select" | "hand" | "rectangle" | "star" | "image-marker" | "text" | "rich-text" | "ellipse" | "polygon" | "arrow" | "brush" | "image-brush" | "font-replace";
|
|
579
819
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
rotation?: number;
|
|
589
|
-
}
|
|
820
|
+
declare type TransformerConfig = {
|
|
821
|
+
rotateEnabled?: boolean;
|
|
822
|
+
ignoreStroke?: boolean;
|
|
823
|
+
anchorSize?: number;
|
|
824
|
+
borderDash?: number[];
|
|
825
|
+
anchorCornerRadius?: number;
|
|
826
|
+
padding?: number;
|
|
827
|
+
};
|
|
590
828
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
829
|
+
/**
|
|
830
|
+
* 变换器(Transformer)位置信息
|
|
831
|
+
*/
|
|
832
|
+
declare interface TransformerPosition {
|
|
833
|
+
x: number;
|
|
834
|
+
y: number;
|
|
835
|
+
width: number;
|
|
836
|
+
height: number;
|
|
837
|
+
rotation?: number;
|
|
838
|
+
}
|
|
595
839
|
|
|
596
|
-
declare
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
image?: CanvasImageSource | undefined;
|
|
601
|
-
};
|
|
840
|
+
export declare function useContextMenu(api: CanvasApi | null): {
|
|
841
|
+
contextMenu: ContextMenuState | null;
|
|
842
|
+
closeContextMenu: () => void;
|
|
843
|
+
};
|
|
602
844
|
|
|
603
|
-
declare
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
845
|
+
declare type VideoNodeConfig = BaseNodeConfig & Omit<default_2.ImageConfig, "image"> & Partial<NodeStyle> & {
|
|
846
|
+
$_type: "video";
|
|
847
|
+
$_videoUrl: string;
|
|
848
|
+
$_coverUrl: string;
|
|
849
|
+
image?: CanvasImageSource | undefined;
|
|
850
|
+
};
|
|
608
851
|
|
|
609
|
-
declare
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
height?: number;
|
|
615
|
-
};
|
|
852
|
+
declare interface Viewport {
|
|
853
|
+
x: number;
|
|
854
|
+
y: number;
|
|
855
|
+
scale: number;
|
|
856
|
+
}
|
|
616
857
|
|
|
617
|
-
|
|
858
|
+
declare type ViewportState = {
|
|
859
|
+
x: number;
|
|
860
|
+
y: number;
|
|
861
|
+
scale: number;
|
|
862
|
+
width?: number;
|
|
863
|
+
height?: number;
|
|
864
|
+
};
|
|
618
865
|
|
|
619
|
-
declare
|
|
620
|
-
setApi?: (core: CanvasApi) => void;
|
|
621
|
-
theme?: Theme;
|
|
622
|
-
}
|
|
866
|
+
export declare function Whiteboard({ setApi, theme }: WhiteboardProps): JSX.Element;
|
|
623
867
|
|
|
624
|
-
|
|
868
|
+
declare interface WhiteboardProps {
|
|
869
|
+
setApi?: (core: CanvasApi) => void;
|
|
870
|
+
theme?: Theme;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
export { }
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
declare module "@tiptap/core" {
|
|
877
|
+
interface Commands<ReturnType> {
|
|
878
|
+
fontSize: {
|
|
879
|
+
setFontSize: (size: string) => ReturnType;
|
|
880
|
+
unsetFontSize: () => ReturnType;
|
|
881
|
+
};
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
declare module "@tiptap/core" {
|
|
887
|
+
interface Commands<ReturnType> {
|
|
888
|
+
lineHeight: {
|
|
889
|
+
setLineHeight: (lineHeight: string) => ReturnType;
|
|
890
|
+
unsetLineHeight: () => ReturnType;
|
|
891
|
+
};
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
declare module "@tiptap/core" {
|
|
897
|
+
interface Commands<ReturnType> {
|
|
898
|
+
letterSpacing: {
|
|
899
|
+
setLetterSpacing: (spacing: string) => ReturnType;
|
|
900
|
+
unsetLetterSpacing: () => ReturnType;
|
|
901
|
+
};
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
declare module "@tiptap/core" {
|
|
907
|
+
interface Commands<ReturnType> {
|
|
908
|
+
nodeBackground: {
|
|
909
|
+
setNodeBackgroundColor: (backgroundColor: string) => ReturnType;
|
|
910
|
+
unsetNodeBackgroundColor: () => ReturnType;
|
|
911
|
+
toggleNodeBackgroundColor: (backgroundColor: string) => ReturnType;
|
|
912
|
+
};
|
|
913
|
+
}
|
|
914
|
+
}
|