@logicflow/core 2.2.0-alpha.7 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/package.json +6 -1
  2. package/.turbo/turbo-build$colon$dev.log +0 -10
  3. package/.turbo/turbo-build.log +0 -33
  4. package/CHANGELOG.md +0 -1901
  5. package/__tests__/algorithm/egde.test.ts +0 -131
  6. package/__tests__/algorithm/index.test.ts +0 -74
  7. package/__tests__/algorithm/outline.test.ts +0 -43
  8. package/__tests__/bugs/1545-spec.test.ts +0 -42
  9. package/__tests__/event/event.test.ts +0 -22
  10. package/__tests__/history/history.test.ts +0 -28
  11. package/__tests__/logicflow.test.ts +0 -575
  12. package/__tests__/model/graphmodel.test.ts +0 -87
  13. package/__tests__/util/compatible.test.ts +0 -48
  14. package/__tests__/util/edge.test.ts +0 -224
  15. package/__tests__/util/geometry.test.ts +0 -14
  16. package/__tests__/util/graph.test.ts +0 -16
  17. package/__tests__/util/matrix.test.ts +0 -41
  18. package/__tests__/util/node.test.ts +0 -68
  19. package/__tests__/util/sampling.test.ts +0 -12
  20. package/__tests__/util/vector.test.ts +0 -50
  21. package/__tests__/util/zIndex.test.ts +0 -10
  22. package/src/LogicFlow.tsx +0 -2017
  23. package/src/algorithm/edge.ts +0 -67
  24. package/src/algorithm/index.ts +0 -70
  25. package/src/algorithm/outline.ts +0 -77
  26. package/src/algorithm/rotate.ts +0 -55
  27. package/src/common/drag.ts +0 -219
  28. package/src/common/history.ts +0 -108
  29. package/src/common/index.ts +0 -6
  30. package/src/common/keyboard.ts +0 -108
  31. package/src/common/matrix.ts +0 -122
  32. package/src/common/vector.ts +0 -93
  33. package/src/constant/index.ts +0 -179
  34. package/src/constant/theme.ts +0 -708
  35. package/src/event/event.md +0 -66
  36. package/src/event/eventArgs.ts +0 -643
  37. package/src/event/eventEmitter.ts +0 -156
  38. package/src/history/index.ts +0 -119
  39. package/src/index.less +0 -1
  40. package/src/index.ts +0 -26
  41. package/src/keyboard/index.ts +0 -112
  42. package/src/keyboard/shortcut.ts +0 -200
  43. package/src/model/BaseModel.ts +0 -250
  44. package/src/model/EditConfigModel.ts +0 -334
  45. package/src/model/GraphModel.ts +0 -1824
  46. package/src/model/NestedTransformModel.ts +0 -121
  47. package/src/model/SnaplineModel.ts +0 -256
  48. package/src/model/TransformModel.ts +0 -258
  49. package/src/model/edge/BaseEdgeModel.ts +0 -785
  50. package/src/model/edge/BezierEdgeModel.ts +0 -197
  51. package/src/model/edge/LineEdgeModel.ts +0 -36
  52. package/src/model/edge/PolylineEdgeModel.ts +0 -817
  53. package/src/model/edge/index.ts +0 -4
  54. package/src/model/index.ts +0 -9
  55. package/src/model/node/BaseNodeModel.ts +0 -959
  56. package/src/model/node/CircleNodeModel.ts +0 -91
  57. package/src/model/node/DiamondNodeModel.ts +0 -132
  58. package/src/model/node/EllipseNodeModel.ts +0 -98
  59. package/src/model/node/HtmlNodeModel.ts +0 -64
  60. package/src/model/node/PolygonNodeModel.ts +0 -152
  61. package/src/model/node/RectNodeModel.ts +0 -69
  62. package/src/model/node/TextNodeModel.ts +0 -54
  63. package/src/model/node/index.ts +0 -8
  64. package/src/options.ts +0 -150
  65. package/src/style/index.less +0 -262
  66. package/src/style/raw.ts +0 -221
  67. package/src/tool/MultipleSelectTool.tsx +0 -140
  68. package/src/tool/TextEditTool.tsx +0 -193
  69. package/src/tool/index.ts +0 -101
  70. package/src/typings.d.ts +0 -5
  71. package/src/util/animation.ts +0 -29
  72. package/src/util/browser.ts +0 -4
  73. package/src/util/compatible.ts +0 -15
  74. package/src/util/drag.ts +0 -219
  75. package/src/util/edge.ts +0 -1094
  76. package/src/util/geometry.ts +0 -154
  77. package/src/util/graph.ts +0 -46
  78. package/src/util/index.ts +0 -17
  79. package/src/util/matrix.ts +0 -129
  80. package/src/util/mobx.ts +0 -23
  81. package/src/util/node.ts +0 -543
  82. package/src/util/raf.ts +0 -28
  83. package/src/util/resize.ts +0 -606
  84. package/src/util/sampling.ts +0 -85
  85. package/src/util/theme.ts +0 -84
  86. package/src/util/uuid.ts +0 -26
  87. package/src/util/vector.ts +0 -93
  88. package/src/util/zIndex.ts +0 -6
  89. package/src/view/Anchor.tsx +0 -462
  90. package/src/view/Control.tsx +0 -510
  91. package/src/view/Graph.tsx +0 -141
  92. package/src/view/Rotate.tsx +0 -113
  93. package/src/view/behavior/dnd.ts +0 -162
  94. package/src/view/behavior/index.ts +0 -2
  95. package/src/view/behavior/snapline.ts +0 -16
  96. package/src/view/edge/AdjustPoint.tsx +0 -425
  97. package/src/view/edge/Arrow.tsx +0 -54
  98. package/src/view/edge/BaseEdge.tsx +0 -660
  99. package/src/view/edge/BezierEdge.tsx +0 -101
  100. package/src/view/edge/LineEdge.tsx +0 -81
  101. package/src/view/edge/PolylineEdge.tsx +0 -311
  102. package/src/view/edge/index.ts +0 -6
  103. package/src/view/index.ts +0 -8
  104. package/src/view/node/BaseNode.tsx +0 -585
  105. package/src/view/node/CircleNode.tsx +0 -21
  106. package/src/view/node/DiamondNode.tsx +0 -24
  107. package/src/view/node/EllipseNode.tsx +0 -22
  108. package/src/view/node/HtmlNode.tsx +0 -112
  109. package/src/view/node/PolygonNode.tsx +0 -28
  110. package/src/view/node/RectNode.tsx +0 -30
  111. package/src/view/node/TextNode.tsx +0 -39
  112. package/src/view/node/index.ts +0 -8
  113. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  114. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  115. package/src/view/overlay/CanvasOverlay.tsx +0 -290
  116. package/src/view/overlay/Grid.tsx +0 -319
  117. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  118. package/src/view/overlay/OutlineOverlay.tsx +0 -158
  119. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  120. package/src/view/overlay/ToolOverlay.tsx +0 -65
  121. package/src/view/overlay/getTransformHoc.tsx +0 -50
  122. package/src/view/overlay/gridConfig.ts +0 -103
  123. package/src/view/overlay/index.ts +0 -8
  124. package/src/view/shape/Circle.tsx +0 -41
  125. package/src/view/shape/Ellipse.tsx +0 -42
  126. package/src/view/shape/Line.tsx +0 -39
  127. package/src/view/shape/Path.tsx +0 -22
  128. package/src/view/shape/Polygon.tsx +0 -54
  129. package/src/view/shape/Polyline.tsx +0 -31
  130. package/src/view/shape/Rect.tsx +0 -44
  131. package/src/view/shape/Text.tsx +0 -168
  132. package/src/view/shape/index.ts +0 -8
  133. package/src/view/text/BaseText.tsx +0 -134
  134. package/src/view/text/LineText.tsx +0 -168
  135. package/src/view/text/index.ts +0 -2
  136. package/stats.html +0 -4842
  137. package/tsconfig.json +0 -18
@@ -1,66 +0,0 @@
1
- # EventCenter
2
-
3
- `eventCenter` 是 LogicFlow 内部的通讯中心,通过 `eventCenter` 来发布事件或者监听事件,以低耦合的方式使两个实例产生交互。
4
-
5
- 在开发过程中,使用 `eventCenter` 也需要遵循一些规范。
6
-
7
- ## 事件名
8
-
9
- ### 规范
10
-
11
- 命名遵循 `namespace:eventName` 的结构,同类 eventName 通过 namespace 来区分。
12
-
13
- 比如 node 和 edge 抛出的都是 click 事件,但是观察者可能是不同群体,通过 namespace 使得事件监听更精确,不容易出错。
14
-
15
- 目前 core 包中定义的 namespace 包括:
16
-
17
- - `node`:节点事件
18
- - `edge`:边事件
19
- - `anchor`:锚点事件
20
- - `blank`:画布空白区域事件
21
- - `history`:历史记录事件
22
- - `selection`:选区事件
23
-
24
- ### 开发注意
25
-
26
- 内部均通过 `eventCenter` 来抛出事件,包括以下两种情况:
27
-
28
- - `graphModel` 中通过 `this.eventCenter` 调用 `eventCenter` 对象的 `emit` 方法抛出事件。
29
- - 组件通过 `props` 获取到 `eventCenter` 实例对象,然后在组件内部调用 `eventCenter` 的 `emit` 方法来抛出事件。
30
- - 部分组件会从 `props` 中直接获取 `eventCenter` 实例
31
- - 而另一部分组件则需要从 `props` 中获取 `graphModel` 实例,然后通过 `graphModel.eventCenter` 获取 `eventCenter` 实例
32
-
33
- 用户可以通过 LogicFlow 的实例 `lf` 去监听我们抛出的事件。
34
-
35
- 如果组件内部监听了 `eventCenter` 事件,在组件销毁的时候,需要取消这些监听。
36
-
37
- ## 事件对象
38
-
39
- 在使用 `emit` 方法抛出事件时,可以传递一个对象作为第二个参数,该对象将作为对应的事件监听器的回调函数的入参。
40
-
41
- 事件对象可以包含任何与当前事件相关的信息,比如节点的 id,边的 id,原生鼠标事件对象等。
42
-
43
- 以 `node:click` 事件为例:
44
-
45
- ```ts
46
- // 抛出 node:click 事件
47
- eventCenter.emit('node:click', {
48
- data: {
49
- // 节点数据
50
- },
51
- e: MouseEvent,
52
- position: {
53
- // 鼠标点击的位置信息
54
- }
55
- });
56
-
57
- // 监听 node:click 事件
58
- eventCenter.on('node:click', (event) => {
59
- console.log(event); // event 即为抛出事件时传递的对象
60
- });
61
-
62
- // 使用解构赋值可以便捷地获取事件对象中的信息
63
- eventCenter.on('node:click', ({ data, e, position }) => {
64
- console.log(data, e, position);
65
- });
66
- ```
@@ -1,643 +0,0 @@
1
- import LogicFlow, {
2
- BaseNodeModel,
3
- BaseEdgeModel,
4
- Model,
5
- GraphModel,
6
- TransformData,
7
- TransformType,
8
- } from '..'
9
-
10
- import NodeData = LogicFlow.NodeData
11
- import EdgeData = LogicFlow.EdgeData
12
- import GraphData = LogicFlow.GraphData
13
- import AnchorConfig = Model.AnchorConfig
14
- import ClientPosition = LogicFlow.ClientPosition
15
-
16
- type ClickEventArgs = {
17
- /**
18
- * 点击后节点是否处于选中状态
19
- */
20
- isSelected: boolean
21
- /**
22
- * 是否为多选状态
23
- */
24
- isMultiple: boolean
25
- }
26
-
27
- type NodeEventArgsPick<
28
- T extends
29
- | 'preData'
30
- | 'data'
31
- | 'model'
32
- | 'e'
33
- | 'position'
34
- | 'deltaX'
35
- | 'deltaY'
36
- | 'index',
37
- > = Pick<
38
- {
39
- /**
40
- * 上一个状态的节点数据
41
- */
42
- preData: NodeData
43
- /**
44
- * 节点数据
45
- */
46
- data: NodeData
47
- /**
48
- * 节点 model
49
- */
50
- model: BaseNodeModel
51
- /**
52
- * 原生鼠标事件对象
53
- */
54
- e: MouseEvent
55
- /**
56
- * 鼠标触发点相对于画布左上角的坐标
57
- */
58
- position: ClientPosition
59
- /**
60
- * 鼠标 X轴移动的距离
61
- */
62
- deltaX: number
63
- /**
64
- * 鼠标Y轴移动的距离
65
- */
66
- deltaY: number
67
- /**
68
- * Resize 时调整的是哪个控制点
69
- */
70
- index: number
71
- },
72
- T
73
- >
74
-
75
- type TextEventArgsPick<
76
- T extends 'data' | 'e' | 'model' | 'element' | 'position',
77
- > = Pick<
78
- {
79
- // 节点数据
80
- data?: any
81
- // 原生鼠标事件对象
82
- e?: MouseEvent | FocusEvent
83
- // 文本所在元素model
84
- model?: BaseNodeModel | BaseEdgeModel | unknown
85
- // 文本dom
86
- element?: HTMLElement | null
87
- // 文本位置
88
- position?: {
89
- x: number
90
- y: number
91
- }
92
- },
93
- T
94
- >
95
-
96
- /**
97
- * 节点事件
98
- */
99
- interface NodeEventArgs {
100
- /**
101
- * 单击节点
102
- */
103
- 'node:click': NodeEventArgsPick<'data' | 'e' | 'position'> & ClickEventArgs
104
- /**
105
- * 双击节点
106
- */
107
- 'node:dbclick': NodeEventArgsPick<'data' | 'e' | 'position'>
108
- /**
109
- * 鼠标按下节点
110
- */
111
- 'node:mousedown': NodeEventArgsPick<'data' | 'e'>
112
- /**
113
- * 鼠标抬起节点
114
- */
115
- 'node:mouseup': NodeEventArgsPick<'data' | 'e'>
116
- /**
117
- * 鼠标移动节点
118
- */
119
- 'node:mousemove': NodeEventArgsPick<'data' | 'e' | 'deltaX' | 'deltaY'>
120
- /**
121
- * 鼠标进入节点
122
- */
123
- 'node:mouseenter': NodeEventArgsPick<'data' | 'e'>
124
- /**
125
- * 鼠标离开节点
126
- */
127
- 'node:mouseleave': NodeEventArgsPick<'data' | 'e'>
128
- /**
129
- * 添加节点
130
- */
131
- 'node:add': NodeEventArgsPick<'data'>
132
- /**
133
- * 删除节点
134
- */
135
- 'node:delete': NodeEventArgsPick<'data' | 'model'>
136
- /**
137
- * 添加外部拖入节点
138
- */
139
- 'node:dnd-add': NodeEventArgsPick<'data'>
140
- /**
141
- * 拖拽外部拖入节点
142
- */
143
- 'node:dnd-drag': NodeEventArgsPick<'data' | 'e'>
144
- /**
145
- * 开始拖拽节点
146
- */
147
- 'node:dragstart': NodeEventArgsPick<'data' | 'e'>
148
- /**
149
- * 拖拽节点
150
- */
151
- 'node:drag': NodeEventArgsPick<'data' | 'e' | 'deltaX' | 'deltaY'>
152
- /**
153
- * 拖拽节点结束
154
- */
155
- 'node:drop': NodeEventArgsPick<'data' | 'e'>
156
- /**
157
- * 右键点击节点
158
- */
159
- 'node:contextmenu': NodeEventArgsPick<'data' | 'e' | 'position'>
160
- /**
161
- * 节点旋转
162
- */
163
- 'node:rotate': NodeEventArgsPick<'data' | 'e' | 'model'>
164
- /**
165
- * 节点缩放
166
- */
167
- 'node:resize': NodeEventArgsPick<
168
- 'preData' | 'data' | 'model' | 'deltaX' | 'deltaY' | 'index'
169
- >
170
- /**
171
- * 元素的 properties 发生改变
172
- */
173
- 'node:properties-change': {
174
- /**
175
- * 元素的 id
176
- */
177
- id: string
178
- /**
179
- * 改变的 properties 的 key
180
- */
181
- keys: string[]
182
- /**
183
- * 改变前的 properties
184
- */
185
- preProperties: Record<string, any>
186
- /**
187
- * 改变后的 properties
188
- */
189
- properties: Record<string, any>
190
- }
191
- /**
192
- * 节点获焦
193
- */
194
- 'node:focus': NodeEventArgsPick<'data'>
195
- /**
196
- * 节点失焦
197
- */
198
- 'node:blur': NodeEventArgsPick<'data'>
199
- }
200
-
201
- type EdgeEventArgsPick<T extends 'data' | 'e' | 'position'> = Pick<
202
- {
203
- /**
204
- * 边数据
205
- */
206
- data: EdgeData
207
- /**
208
- * 原生鼠标事件对象
209
- */
210
- e: MouseEvent
211
- /**
212
- * 鼠标触发点相对于画布左上角的坐标
213
- */
214
- position: ClientPosition
215
- },
216
- T
217
- >
218
-
219
- /**
220
- * 边事件
221
- */
222
- interface EdgeEventArgs {
223
- /**
224
- * 单击边
225
- */
226
- 'edge:click': EdgeEventArgsPick<'data' | 'e' | 'position'>
227
- /**
228
- * 双击边
229
- */
230
- 'edge:dbclick': EdgeEventArgsPick<'data' | 'e' | 'position'>
231
- /**
232
- * 鼠标进入边
233
- */
234
- 'edge:mouseenter': EdgeEventArgsPick<'data' | 'e'>
235
- /**
236
- * 鼠标离开边
237
- */
238
- 'edge:mouseleave': EdgeEventArgsPick<'data' | 'e'>
239
- /**
240
- * 添加边
241
- */
242
- 'edge:add': EdgeEventArgsPick<'data'>
243
- /**
244
- * 删除边
245
- */
246
- 'edge:delete': EdgeEventArgsPick<'data'>
247
- /**
248
- * 右键点击边
249
- */
250
- 'edge:contextmenu': EdgeEventArgsPick<'data' | 'e' | 'position'>
251
- /**
252
- * 拖拽调整边
253
- */
254
- 'edge:adjust': EdgeEventArgsPick<'data'>
255
- /**
256
- * 调整边的起点/终点
257
- */
258
- 'edge:exchange-node': {
259
- data: {
260
- /**
261
- * 新的边的数据
262
- */
263
- newEdge: EdgeData
264
- /**
265
- * 旧的边的数据
266
- */
267
- oldEdge: EdgeData
268
- }
269
- }
270
- /**
271
- * 边获焦
272
- */
273
- 'edge:focus': EdgeEventArgsPick<'data'>
274
- /**
275
- * 边失焦
276
- */
277
- 'edge:blur': EdgeEventArgsPick<'data'>
278
- }
279
-
280
- /**
281
- * 文本事件
282
- */
283
- interface TextEventArgs {
284
- // 鼠标按下文本
285
- 'text:mousedown': TextEventArgsPick<'data' | 'e' | 'model'>
286
- // 开始拖拽文本
287
- 'text:dragstart': TextEventArgsPick<'data' | 'e' | 'model'>
288
- // 文本拖拽
289
- 'text:drag': TextEventArgsPick<'data' | 'e' | 'model'>
290
- // 文本拖拽结束
291
- 'text:drop': TextEventArgsPick<'data' | 'e' | 'model'>
292
- // 文本单击
293
- 'text:click': TextEventArgsPick<'data' | 'e' | 'model'>
294
- // 文本双击
295
- 'text:dbclick': TextEventArgsPick<'data' | 'e' | 'model'>
296
- // 文本失焦
297
- 'text:blur': TextEventArgsPick<'data' | 'e' | 'model' | 'element'>
298
- // 鼠标移动文本
299
- 'text:mousemove': TextEventArgsPick<'data' | 'e' | 'model'>
300
- // 鼠标抬起
301
- 'text:mouseup': TextEventArgsPick<'data' | 'e' | 'model'>
302
- // 文本获焦
303
- 'text:focus': TextEventArgsPick<'data' | 'e' | 'model' | 'element'>
304
- // 文本新增
305
- 'text:add': TextEventArgsPick<'data' | 'e' | 'model'>
306
- // 文本更新
307
- 'text:update': TextEventArgsPick<'data' | 'e' | 'model'>
308
- // 文本清空
309
- 'text:clear': TextEventArgsPick<'data' | 'e' | 'model'>
310
- // 文本删除
311
- 'text:delete': TextEventArgsPick<'data' | 'e' | 'model'>
312
- // 不允许增加文本
313
- 'text:not-allowed-add': TextEventArgsPick<'data' | 'e' | 'model'>
314
- }
315
-
316
- /**
317
- * label插件文本事件
318
- */
319
- interface TextEventArgs {
320
- // 鼠标按下文本
321
- 'label:mousedown': TextEventArgsPick<'data' | 'e' | 'model'>
322
- // 开始拖拽文本
323
- 'label:dragstart': TextEventArgsPick<'data' | 'e' | 'model'>
324
- // 文本拖拽
325
- 'label:drag': TextEventArgsPick<'data' | 'e' | 'model'>
326
- // 文本拖拽结束
327
- 'label:drop': TextEventArgsPick<'data' | 'e' | 'model'>
328
- // 文本单击
329
- 'label:click': TextEventArgsPick<'data' | 'e' | 'model'>
330
- // 文本双击
331
- 'label:dbclick': TextEventArgsPick<'data' | 'e' | 'model'>
332
- // 文本失焦
333
- 'label:blur': TextEventArgsPick<'data' | 'e' | 'model' | 'element'>
334
- // 鼠标移动文本
335
- 'label:mousemove': TextEventArgsPick<'data' | 'e' | 'model'>
336
- // 鼠标抬起
337
- 'label:mouseup': TextEventArgsPick<'data' | 'e' | 'model'>
338
- // 文本获焦
339
- 'label:focus': TextEventArgsPick<'data' | 'e' | 'model' | 'element'>
340
- // 文本新增
341
- 'label:add': TextEventArgsPick<'data' | 'e' | 'model'>
342
- // 文本更新
343
- 'label:update': TextEventArgsPick<'data' | 'e' | 'model'>
344
- // 文本清空
345
- 'label:clear': TextEventArgsPick<'data' | 'e' | 'model'>
346
- // 文本删除
347
- 'label:delete': TextEventArgsPick<'data' | 'e' | 'model'>
348
- // 文本新增
349
- 'label:should-add': TextEventArgsPick<'data' | 'e' | 'model' | 'position'>
350
- // 文本批量新增
351
- 'label:batch-add': TextEventArgsPick<'data' | 'e' | 'model'>
352
- // 文本更新
353
- 'label:should-update': TextEventArgsPick<'data' | 'e' | 'model'>
354
- // 文本删除
355
- 'label:should-delete': TextEventArgsPick<'data' | 'e' | 'model'>
356
- // 文本批量删除
357
- 'label:batch-delete': TextEventArgsPick<'data' | 'e' | 'model'>
358
- // 不允许增加文本
359
- 'label:not-allowed-add': TextEventArgsPick<'data' | 'e' | 'model'>
360
- }
361
-
362
- /**
363
- * 连线事件
364
- */
365
- interface ConnectionEventArgs {
366
- 'connection:not-allowed': {
367
- /**
368
- * 目标节点数据
369
- */
370
- data: NodeData
371
- /**
372
- * 校验信息
373
- */
374
- msg?: string
375
- }
376
- }
377
-
378
- /**
379
- * 公共事件
380
- */
381
- interface CommonEventArgs {
382
- 'element:click': {
383
- /**
384
- * 点击元素的数据(节点/边)
385
- */
386
- data: NodeData | EdgeData
387
- /**
388
- * 原生鼠标事件对象
389
- */
390
- e: MouseEvent
391
- /**
392
- * 鼠标触发点相对于画布左上角的坐标
393
- */
394
- position: ClientPosition
395
- }
396
- /**
397
- * 进行画布平移或缩放等变化操作时触发
398
- */
399
- 'graph:transform': {
400
- /**
401
- * 变换操作类型
402
- */
403
- type: TransformType
404
- /**
405
- * 变换操作后的数据
406
- */
407
- transform: TransformData
408
- }
409
- /**
410
- * 画布渲染数据后触发,即 `lf.render()` 方法被调用后触发。
411
- */
412
- 'graph:rendered': {
413
- /**
414
- * 渲染后的画布数据
415
- */
416
- data: GraphData
417
- /**
418
- * 渲染后的画布 model
419
- */
420
- graphModel: GraphModel
421
- }
422
- /**
423
- * 画布重新更新后触发. 即 lf.render(graphData)方法被调用后或者改变画布(graphModel)上的属性后触发。
424
- * 如果是主动修改某个特定属性导致画布更新,想要在画布更新后做一些操作,建议注册事件后在回调函数中及时注销该事件,或者使用once事件代替on事件。
425
- * 因为其他属性也可能导致画布更新,触发该事件。
426
- */
427
- 'graph:updated': {
428
- /**
429
- * 更新后的画布数据
430
- */
431
- data: GraphData
432
- }
433
- /**
434
- * 画布容器大小发生变化触发,为了性能考虑对事件做了防抖处理,间隔为16ms
435
- */
436
- 'graph:resize': {
437
- /**
438
- * 更新后的画布数据
439
- */
440
- target: HTMLElement
441
- contentRect: DOMRectReadOnly
442
- }
443
- }
444
-
445
- type AnchorEventArgsPick<T extends 'data' | 'e' | 'nodeModel' | 'edgeModel'> =
446
- Pick<
447
- {
448
- /**
449
- * 锚点数据
450
- */
451
- data: AnchorConfig
452
- /**
453
- * 原生鼠标事件对象
454
- */
455
- e: MouseEvent
456
- /**
457
- * 锚点所属节点的数据
458
- */
459
- nodeModel: BaseNodeModel
460
- /**
461
- * 通过拖动锚点连线添加的边的数据
462
- */
463
- edgeModel?: BaseEdgeModel
464
- },
465
- T
466
- >
467
-
468
- /**
469
- * 锚点事件
470
- */
471
- interface AnchorEventArgs {
472
- /**
473
- * anchor 锚点 click
474
- */
475
- 'anchor:click': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
476
- /**
477
- * anchor 锚点 mousedown
478
- */
479
- 'anchor:mousedown': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
480
- /**
481
- * 开始拖拽锚点
482
- */
483
- 'anchor:dragstart': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
484
- /**
485
- * 拖拽锚点
486
- */
487
- 'anchor:drag': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
488
- /**
489
- * 拖拽锚点结束,并成功添加边。
490
- * 只有在创建连线成功时才触发。用于区分手动创建的连线和自动创建的连线 `edge:add`
491
- */
492
- 'anchor:drop': AnchorEventArgsPick<'data' | 'e' | 'nodeModel' | 'edgeModel'>
493
- /**
494
- * 拖拽锚点结束,不管是否成功添加边都会触发
495
- */
496
- 'anchor:dragend': AnchorEventArgsPick<
497
- 'data' | 'e' | 'nodeModel' | 'edgeModel'
498
- >
499
- }
500
-
501
- type BlankEventArgsPick<T extends 'e' | 'position'> = Pick<
502
- {
503
- /**
504
- * 原生鼠标事件对象
505
- */
506
- e: MouseEvent
507
- /**
508
- * 鼠标触发点相对于画布左上角的坐标
509
- */
510
- position: ClientPosition
511
- },
512
- T
513
- >
514
-
515
- /**
516
- * 画布事件
517
- */
518
- interface BlankEventArgs {
519
- /**
520
- * 鼠标按下画布
521
- */
522
- 'blank:mousedown': BlankEventArgsPick<'e'>
523
- /**
524
- * 鼠标抬起画布
525
- */
526
- 'blank:mouseup': BlankEventArgsPick<'e'>
527
- /**
528
- * 鼠标移动画布
529
- */
530
- 'blank:mousemove': BlankEventArgsPick<'e'>
531
- /**
532
- * 单击画布
533
- */
534
- 'blank:click': BlankEventArgsPick<'e'>
535
- /**
536
- * 右键点击画布
537
- */
538
- 'blank:contextmenu': BlankEventArgsPick<'e' | 'position'>
539
- /**
540
- * 开始拖拽画布
541
- */
542
- 'blank:dragstart': BlankEventArgsPick<'e'>
543
- /**
544
- * 拖拽画布
545
- */
546
- 'blank:drag': BlankEventArgsPick<'e'>
547
- /**
548
- * 拖拽画布结束
549
- */
550
- 'blank:drop': BlankEventArgsPick<'e'>
551
- }
552
-
553
- interface HistoryEventArgs {
554
- /**
555
- * 历史记录变化
556
- */
557
- 'history:change': {
558
- /**
559
- * 历史数据
560
- */
561
- data: {
562
- /**
563
- * 可撤销的 graph 快照
564
- */
565
- undos: GraphData[]
566
- /**
567
- * 可重做的 graph 快照
568
- */
569
- redos: GraphData[]
570
- /**
571
- * 是否可以撤销
572
- */
573
- undoAble: boolean
574
- /**
575
- * 是否可以重做
576
- */
577
- redoAble: boolean
578
- }
579
- }
580
- }
581
-
582
- type SelectionEventArgsPick<T extends 'data' | 'e' | 'position'> = Pick<
583
- {
584
- /**
585
- * 选中元素的数据(节点/边)
586
- */
587
- data: GraphData
588
- /**
589
- * 原生鼠标事件对象
590
- */
591
- e: MouseEvent
592
- /**
593
- * 鼠标触发点相对于画布左上角的坐标
594
- */
595
- position: ClientPosition
596
- },
597
- T
598
- >
599
-
600
- /**
601
- * 选区事件
602
- */
603
- interface SelectionEventArgs {
604
- /**
605
- * 鼠标按下选区
606
- */
607
- 'selection:mousedown': SelectionEventArgsPick<'e'>
608
- /**
609
- * 开始拖拽选区
610
- */
611
- 'selection:dragstart': SelectionEventArgsPick<'e'>
612
- /**
613
- * 拖拽选区
614
- */
615
- 'selection:drag': SelectionEventArgsPick<'e'>
616
- /**
617
- * 拖拽选区结束
618
- */
619
- 'selection:drop': SelectionEventArgsPick<'e'>
620
- /**
621
- * 鼠标移动选区
622
- */
623
- 'selection:mousemove': SelectionEventArgsPick<'e' | 'position'>
624
- /**
625
- * 鼠标抬起选区
626
- */
627
- 'selection:mouseup': SelectionEventArgsPick<'e'>
628
- /**
629
- * 右键点击选区
630
- */
631
- 'selection:contextmenu': SelectionEventArgsPick<'data' | 'e' | 'position'>
632
- }
633
-
634
- // 此处主要是对事件参数进行聚合
635
- export type EventArgs = NodeEventArgs &
636
- EdgeEventArgs &
637
- ConnectionEventArgs &
638
- CommonEventArgs &
639
- AnchorEventArgs &
640
- BlankEventArgs &
641
- HistoryEventArgs &
642
- SelectionEventArgs &
643
- TextEventArgs