@logicflow/core 2.2.1 → 2.2.3

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 (127) hide show
  1. package/README.md +32 -0
  2. package/dist/docs/api/logicflow-constructor/index.en.md +106 -0
  3. package/dist/docs/api/logicflow-constructor/index.zh.md +106 -0
  4. package/dist/docs/api/logicflow-constructor/use.en.md +61 -0
  5. package/dist/docs/api/logicflow-constructor/use.zh.md +61 -0
  6. package/dist/docs/api/logicflow-instance/canvas.en.md +197 -0
  7. package/dist/docs/api/logicflow-instance/canvas.zh.md +199 -0
  8. package/dist/docs/api/logicflow-instance/edge.en.md +273 -0
  9. package/dist/docs/api/logicflow-instance/edge.zh.md +273 -0
  10. package/dist/docs/api/logicflow-instance/edit-config.en.md +59 -0
  11. package/dist/docs/api/logicflow-instance/edit-config.zh.md +59 -0
  12. package/dist/docs/api/logicflow-instance/element.en.md +375 -0
  13. package/dist/docs/api/logicflow-instance/element.zh.md +379 -0
  14. package/dist/docs/api/logicflow-instance/event.en.md +326 -0
  15. package/dist/docs/api/logicflow-instance/event.zh.md +406 -0
  16. package/dist/docs/api/logicflow-instance/history.en.md +38 -0
  17. package/dist/docs/api/logicflow-instance/history.zh.md +38 -0
  18. package/dist/docs/api/logicflow-instance/index.en.md +41 -0
  19. package/dist/docs/api/logicflow-instance/index.zh.md +41 -0
  20. package/dist/docs/api/logicflow-instance/node.en.md +308 -0
  21. package/dist/docs/api/logicflow-instance/node.zh.md +308 -0
  22. package/dist/docs/api/logicflow-instance/register.en.md +76 -0
  23. package/dist/docs/api/logicflow-instance/register.zh.md +76 -0
  24. package/dist/docs/api/logicflow-instance/render-and-data.en.md +179 -0
  25. package/dist/docs/api/logicflow-instance/render-and-data.zh.md +181 -0
  26. package/dist/docs/api/logicflow-instance/text.en.md +60 -0
  27. package/dist/docs/api/logicflow-instance/text.zh.md +60 -0
  28. package/dist/docs/api/logicflow-instance/theme.en.md +179 -0
  29. package/dist/docs/api/logicflow-instance/theme.zh.md +179 -0
  30. package/dist/docs/api/runtime-model/edgeModel.en.md +29 -0
  31. package/dist/docs/api/runtime-model/edgeModel.zh.md +325 -0
  32. package/dist/docs/api/runtime-model/graphModel.en.md +275 -0
  33. package/dist/docs/api/runtime-model/graphModel.zh.md +1153 -0
  34. package/dist/docs/api/runtime-model/nodeModel.en.md +37 -0
  35. package/dist/docs/api/runtime-model/nodeModel.zh.md +644 -0
  36. package/dist/docs/api/type/MainTypes.en.md +598 -0
  37. package/dist/docs/api/type/MainTypes.zh.md +867 -0
  38. package/dist/docs/api/type/Theme.en.md +187 -0
  39. package/dist/docs/api/type/Theme.zh.md +187 -0
  40. package/dist/docs/api/type/canvas-types.en.md +25 -0
  41. package/dist/docs/api/type/canvas-types.zh.md +25 -0
  42. package/dist/docs/api/type/index.en.md +96 -0
  43. package/dist/docs/api/type/index.zh.md +99 -0
  44. package/dist/docs/api/type/node-types.en.md +21 -0
  45. package/dist/docs/api/type/node-types.zh.md +21 -0
  46. package/dist/docs/api/type/plugin-types.en.md +24 -0
  47. package/dist/docs/api/type/plugin-types.zh.md +24 -0
  48. package/dist/docs/index.md +11 -0
  49. package/dist/docs/tutorial/about.en.md +38 -0
  50. package/dist/docs/tutorial/about.zh.md +65 -0
  51. package/dist/docs/tutorial/advanced/dnd.en.md +62 -0
  52. package/dist/docs/tutorial/advanced/dnd.zh.md +52 -0
  53. package/dist/docs/tutorial/advanced/edge.en.md +64 -0
  54. package/dist/docs/tutorial/advanced/edge.zh.md +66 -0
  55. package/dist/docs/tutorial/advanced/keyboard.en.md +70 -0
  56. package/dist/docs/tutorial/advanced/keyboard.zh.md +67 -0
  57. package/dist/docs/tutorial/advanced/node.en.md +338 -0
  58. package/dist/docs/tutorial/advanced/node.zh.md +338 -0
  59. package/dist/docs/tutorial/advanced/react.en.md +106 -0
  60. package/dist/docs/tutorial/advanced/react.zh.md +114 -0
  61. package/dist/docs/tutorial/advanced/silent-mode.en.md +75 -0
  62. package/dist/docs/tutorial/advanced/silent-mode.zh.md +71 -0
  63. package/dist/docs/tutorial/advanced/snapline.en.md +54 -0
  64. package/dist/docs/tutorial/advanced/vue.en.md +249 -0
  65. package/dist/docs/tutorial/advanced/vue.zh.md +248 -0
  66. package/dist/docs/tutorial/ai.en.md +64 -0
  67. package/dist/docs/tutorial/ai.zh.md +64 -0
  68. package/dist/docs/tutorial/basic/background.en.md +50 -0
  69. package/dist/docs/tutorial/basic/canvas.en.md +164 -0
  70. package/dist/docs/tutorial/basic/canvas.zh.md +183 -0
  71. package/dist/docs/tutorial/basic/class.en.md +106 -0
  72. package/dist/docs/tutorial/basic/class.zh.md +103 -0
  73. package/dist/docs/tutorial/basic/edge.en.md +151 -0
  74. package/dist/docs/tutorial/basic/edge.zh.md +152 -0
  75. package/dist/docs/tutorial/basic/event.en.md +70 -0
  76. package/dist/docs/tutorial/basic/event.zh.md +66 -0
  77. package/dist/docs/tutorial/basic/grid.en.md +77 -0
  78. package/dist/docs/tutorial/basic/node.en.md +358 -0
  79. package/dist/docs/tutorial/basic/node.zh.md +318 -0
  80. package/dist/docs/tutorial/basic/theme.en.md +154 -0
  81. package/dist/docs/tutorial/basic/theme.zh.md +157 -0
  82. package/dist/docs/tutorial/extension/adapter.en.md +446 -0
  83. package/dist/docs/tutorial/extension/adapter.zh.md +429 -0
  84. package/dist/docs/tutorial/extension/bpmn-element.en.md +1427 -0
  85. package/dist/docs/tutorial/extension/bpmn-element.zh.md +1472 -0
  86. package/dist/docs/tutorial/extension/control.en.md +117 -0
  87. package/dist/docs/tutorial/extension/control.zh.md +118 -0
  88. package/dist/docs/tutorial/extension/curved-edge.en.md +46 -0
  89. package/dist/docs/tutorial/extension/curved-edge.zh.md +46 -0
  90. package/dist/docs/tutorial/extension/custom.en.md +142 -0
  91. package/dist/docs/tutorial/extension/custom.zh.md +138 -0
  92. package/dist/docs/tutorial/extension/dnd-panel.en.md +109 -0
  93. package/dist/docs/tutorial/extension/dnd-panel.zh.md +109 -0
  94. package/dist/docs/tutorial/extension/dynamic-group.en.md +606 -0
  95. package/dist/docs/tutorial/extension/dynamic-group.zh.md +606 -0
  96. package/dist/docs/tutorial/extension/group.en.md +217 -0
  97. package/dist/docs/tutorial/extension/group.zh.md +209 -0
  98. package/dist/docs/tutorial/extension/highlight.en.md +50 -0
  99. package/dist/docs/tutorial/extension/highlight.zh.md +50 -0
  100. package/dist/docs/tutorial/extension/insert-node-in-polyline.en.md +52 -0
  101. package/dist/docs/tutorial/extension/insert-node-in-polyline.zh.md +47 -0
  102. package/dist/docs/tutorial/extension/intro.en.md +72 -0
  103. package/dist/docs/tutorial/extension/intro.zh.md +95 -0
  104. package/dist/docs/tutorial/extension/label.en.md +136 -0
  105. package/dist/docs/tutorial/extension/label.zh.md +135 -0
  106. package/dist/docs/tutorial/extension/layout.en.md +156 -0
  107. package/dist/docs/tutorial/extension/layout.zh.md +156 -0
  108. package/dist/docs/tutorial/extension/menu.en.md +319 -0
  109. package/dist/docs/tutorial/extension/menu.zh.md +377 -0
  110. package/dist/docs/tutorial/extension/minimap.en.md +164 -0
  111. package/dist/docs/tutorial/extension/minimap.zh.md +180 -0
  112. package/dist/docs/tutorial/extension/node-resize.en.md +199 -0
  113. package/dist/docs/tutorial/extension/node-resize.zh.md +221 -0
  114. package/dist/docs/tutorial/extension/pool.en.md +227 -0
  115. package/dist/docs/tutorial/extension/pool.zh.md +227 -0
  116. package/dist/docs/tutorial/extension/proximity-connect.en.md +104 -0
  117. package/dist/docs/tutorial/extension/proximity-connect.zh.md +107 -0
  118. package/dist/docs/tutorial/extension/selection.en.md +166 -0
  119. package/dist/docs/tutorial/extension/selection.zh.md +150 -0
  120. package/dist/docs/tutorial/extension/snapshot.en.md +276 -0
  121. package/dist/docs/tutorial/extension/snapshot.zh.md +276 -0
  122. package/dist/docs/tutorial/get-started.en.md +501 -0
  123. package/dist/docs/tutorial/get-started.zh.md +139 -0
  124. package/dist/docs/tutorial/update.en.md +213 -0
  125. package/dist/docs/tutorial/update.zh.md +212 -0
  126. package/package.json +5 -3
  127. package/scripts/postinstall-ai-prompt.js +67 -0
@@ -0,0 +1,379 @@
1
+ ---
2
+ nav: API
3
+ group:
4
+ title: LogicFlow 实例
5
+ order: 2
6
+ title: 元素相关
7
+ toc: content
8
+ order: 4
9
+ ---
10
+
11
+ 本页汇总 LogicFlow 实例中面向节点与边等元素的批量操作、选择控制与属性更新方法。
12
+
13
+ ### addElements
14
+
15
+ 批量添加节点和边。
16
+
17
+ **签名**
18
+
19
+ ```ts
20
+ addElements(data: GraphData): void
21
+ ```
22
+
23
+ **参数**
24
+
25
+ | 名称 | 类型 | 必传 | 说明 |
26
+ | :--- | :--- | :--- | :--- |
27
+ | `data` | [`GraphData`](../type/MainTypes.zh.md#graphdata画布数据) | 是 | 批量添加的节点与边数据。 |
28
+
29
+ **示例**
30
+
31
+ ```ts
32
+ lf.addElements({
33
+ nodes: [{ id: 'node_1', type: 'rect', x: 100, y: 100 }],
34
+ edges: [],
35
+ });
36
+ ```
37
+
38
+ ### selectElementById
39
+
40
+ 选中指定图形元素。
41
+
42
+ **签名**
43
+
44
+ ```ts
45
+ selectElementById(id: string, multiple?: boolean, toFront?: boolean): BaseNodeModel | BaseEdgeModel
46
+ ```
47
+
48
+ **参数**
49
+
50
+ | 名称 | 类型 | 必传 | 说明 |
51
+ | :--- | :--- | :--- | :--- |
52
+ | `id` | `string` | 是 | 节点或边 ID。 |
53
+ | `multiple` | `boolean` | 否 | 是否多选;`true` 时保留已有选中项。 |
54
+ | `toFront` | `boolean` | 否 | 是否将选中元素置顶。 |
55
+
56
+ **返回值**
57
+
58
+ | 类型 | 说明 |
59
+ | :--- | :--- |
60
+ | `BaseNodeModel \| BaseEdgeModel` | 选中的元素 model。 |
61
+
62
+ **示例**
63
+
64
+ ```ts
65
+ lf.selectElementById('node_1', true, true);
66
+ ```
67
+
68
+ ### deselectElementById
69
+
70
+ 取消指定元素的选中状态。
71
+
72
+ **签名**
73
+
74
+ ```ts
75
+ deselectElementById(id: string): void
76
+ ```
77
+
78
+ **参数**
79
+
80
+ | 名称 | 类型 | 必传 | 说明 |
81
+ | :--- | :--- | :--- | :--- |
82
+ | `id` | `string` | 是 | 元素 ID。 |
83
+
84
+ **示例**
85
+
86
+ ```ts
87
+ lf.deselectElementById('node_1');
88
+ ```
89
+
90
+ ### getSelectElements
91
+
92
+ 获取当前选中的所有元素数据。
93
+
94
+ **签名**
95
+
96
+ ```ts
97
+ getSelectElements(isIgnoreCheck?: boolean): GraphConfigData
98
+ ```
99
+
100
+ **参数**
101
+
102
+ | 名称 | 类型 | 必传 | 说明 |
103
+ | :--- | :--- | :--- | :--- |
104
+ | `isIgnoreCheck` | `boolean` | 否 | 是否包含 source/target 未被选中的边,默认包含。 |
105
+
106
+ **返回值**
107
+
108
+ | 类型 | 说明 |
109
+ | :--- | :--- |
110
+ | [`GraphConfigData`](../type/MainTypes.zh.md#graphconfigdata流程图渲染数据类型) | 当前选中元素数据。 |
111
+
112
+ **示例**
113
+
114
+ ```ts
115
+ lf.getSelectElements(false);
116
+ ```
117
+
118
+ ### clearSelectElements
119
+
120
+ 取消所有元素的选中状态。
121
+
122
+ **签名**
123
+
124
+ ```ts
125
+ clearSelectElements(): void
126
+ ```
127
+
128
+ **示例**
129
+
130
+ ```ts
131
+ lf.clearSelectElements();
132
+ ```
133
+
134
+ ### getModelById
135
+
136
+ 按节点或边 ID 获取对应 model。
137
+
138
+ **签名**
139
+
140
+ ```ts
141
+ getModelById(id: string): BaseNodeModel | BaseEdgeModel | undefined
142
+ ```
143
+
144
+ **参数**
145
+
146
+ | 名称 | 类型 | 必传 | 说明 |
147
+ | :--- | :--- | :--- | :--- |
148
+ | `id` | `string` | 是 | 节点或边 ID。 |
149
+
150
+ **返回值**
151
+
152
+ | 类型 | 说明 |
153
+ | :--- | :--- |
154
+ | `BaseNodeModel \| BaseEdgeModel \| undefined` | 元素 model;不存在时返回 `undefined`。 |
155
+
156
+ **示例**
157
+
158
+ ```ts
159
+ lf.getModelById('node_id');
160
+ lf.getModelById('edge_id');
161
+ ```
162
+
163
+ ### getDataById
164
+
165
+ 按节点或边 ID 获取对应数据。
166
+
167
+ **签名**
168
+
169
+ ```ts
170
+ getDataById(id: string): NodeConfig | EdgeConfig | undefined
171
+ ```
172
+
173
+ **参数**
174
+
175
+ | 名称 | 类型 | 必传 | 说明 |
176
+ | :--- | :--- | :--- | :--- |
177
+ | `id` | `string` | 是 | 节点或边 ID。 |
178
+
179
+ **返回值**
180
+
181
+ | 类型 | 说明 |
182
+ | :--- | :--- |
183
+ | [`NodeConfig`](../type/MainTypes.zh.md#nodeconfig节点配置) \| [`EdgeConfig`](../type/MainTypes.zh.md#edgeconfig边配置) \| `undefined` | 元素数据;不存在时返回 `undefined`。 |
184
+
185
+ ### deleteElement
186
+
187
+ 删除节点或边元素。
188
+
189
+ **签名**
190
+
191
+ ```ts
192
+ deleteElement(id: string): boolean
193
+ ```
194
+
195
+ **参数**
196
+
197
+ | 名称 | 类型 | 必传 | 说明 |
198
+ | :--- | :--- | :--- | :--- |
199
+ | `id` | `string` | 是 | 节点或边 ID。 |
200
+
201
+ **返回值**
202
+
203
+ | 类型 | 说明 |
204
+ | :--- | :--- |
205
+ | `boolean` | 是否删除成功。 |
206
+
207
+ **示例**
208
+
209
+ ```ts
210
+ lf.deleteElement('node_id');
211
+ ```
212
+
213
+ ### setElementZIndex
214
+
215
+ 设置元素 zIndex。
216
+
217
+ **签名**
218
+
219
+ ```ts
220
+ setElementZIndex(id: string, zIndex: string | number): void
221
+ ```
222
+
223
+ **参数**
224
+
225
+ | 名称 | 类型 | 必传 | 说明 |
226
+ | :--- | :--- | :--- | :--- |
227
+ | `id` | `string` | 是 | 节点或边 ID。 |
228
+ | `zIndex` | `string \| number` | 是 | 可传数字或 `top` / `bottom`。 |
229
+
230
+ **示例**
231
+
232
+ ```ts
233
+ lf.setElementZIndex('element_id', 'top');
234
+ ```
235
+
236
+ ### getAreaElement
237
+
238
+ 获取指定 DOM 区域内的元素集合。
239
+
240
+ **签名**
241
+
242
+ ```ts
243
+ getAreaElement(
244
+ leftTopPoint: PointTuple,
245
+ rightBottomPoint: PointTuple,
246
+ wholeEdge?: boolean,
247
+ wholeNode?: boolean,
248
+ ignoreHideElement?: boolean
249
+ ): (BaseNodeModel | BaseEdgeModel)[]
250
+ ```
251
+
252
+ **参数**
253
+
254
+ | 名称 | 类型 | 必传 | 说明 |
255
+ | :--- | :--- | :--- | :--- |
256
+ | `leftTopPoint` | `PointTuple` | 是 | 区域左上点。 |
257
+ | `rightBottomPoint` | `PointTuple` | 是 | 区域右下点。 |
258
+ | `wholeEdge` | `boolean` | 否 | 是否要求整条边都在区域内。 |
259
+ | `wholeNode` | `boolean` | 否 | 是否要求整个节点都在区域内。 |
260
+ | `ignoreHideElement` | `boolean` | 否 | 是否忽略隐藏元素。 |
261
+
262
+ **返回值**
263
+
264
+ | 类型 | 说明 |
265
+ | :--- | :--- |
266
+ | `(BaseNodeModel \| BaseEdgeModel)[]` | 命中区域的元素 model 列表。 |
267
+
268
+ **示例**
269
+
270
+ ```ts
271
+ lf.getAreaElement([100, 100], [500, 500]);
272
+ ```
273
+
274
+ ### setProperties
275
+
276
+ 设置节点或边的自定义属性。
277
+
278
+ **签名**
279
+
280
+ ```ts
281
+ setProperties(id: string, properties: Record<string, unknown>): void
282
+ ```
283
+
284
+ **参数**
285
+
286
+ | 名称 | 类型 | 必传 | 说明 |
287
+ | :--- | :--- | :--- | :--- |
288
+ | `id` | `string` | 是 | 节点或边 ID。 |
289
+ | `properties` | `Record<string, unknown>` | 是 | 自定义属性对象。 |
290
+
291
+ **示例**
292
+
293
+ ```ts
294
+ lf.setProperties('aF2Md2P23moN2gasd', {
295
+ isRollbackNode: true,
296
+ });
297
+ ```
298
+
299
+ ### getProperties
300
+
301
+ 获取节点或边的自定义属性。
302
+
303
+ **签名**
304
+
305
+ ```ts
306
+ getProperties(id: string): Record<string, any>
307
+ ```
308
+
309
+ **参数**
310
+
311
+ | 名称 | 类型 | 必传 | 说明 |
312
+ | :--- | :--- | :--- | :--- |
313
+ | `id` | `string` | 是 | 节点或边 ID。 |
314
+
315
+ **返回值**
316
+
317
+ | 类型 | 说明 |
318
+ | :--- | :--- |
319
+ | `Record<string, any>` | 自定义属性对象。 |
320
+
321
+ **示例**
322
+
323
+ ```ts
324
+ lf.getProperties('id');
325
+ ```
326
+
327
+ ### deleteProperty
328
+
329
+ 删除节点或边的指定属性键。
330
+
331
+ **签名**
332
+
333
+ ```ts
334
+ deleteProperty(id: string, key: string): void
335
+ ```
336
+
337
+ **参数**
338
+
339
+ | 名称 | 类型 | 必传 | 说明 |
340
+ | :--- | :--- | :--- | :--- |
341
+ | `id` | `string` | 是 | 节点或边 ID。 |
342
+ | `key` | `string` | 是 | 要删除的属性键名。 |
343
+
344
+ **示例**
345
+
346
+ ```ts
347
+ lf.deleteProperty('aF2Md2P23moN2gasd', 'isRollbackNode');
348
+ ```
349
+
350
+ ### updateAttributes
351
+
352
+ 修改元素 model 属性;该方法内部调用 `graphModel` 的同名能力。
353
+
354
+ :::warning{title=注意}
355
+ 此方法慎用,除非您对 LogicFlow 内部有足够了解。
356
+ 大多数情况下,请优先使用 `setProperties`、`updateText`、`changeNodeId` 等更高层方法。
357
+ 例如直接使用该方法修改节点 `id`,可能导致连接到此节点的边出现 `sourceNodeId` 无法匹配的问题。
358
+ :::
359
+
360
+ **签名**
361
+
362
+ ```ts
363
+ updateAttributes(id: string, attributes: object): void
364
+ ```
365
+
366
+ 更多说明参考 [`graphModel.updateAttributes`](../runtime-model/graphModel.zh.md#updateattributes)。
367
+
368
+ **参数**
369
+
370
+ | 名称 | 类型 | 必传 | 说明 |
371
+ | :--- | :--- | :--- | :--- |
372
+ | `id` | `string` | 是 | 元素 ID。 |
373
+ | `attributes` | `object` | 是 | 要更新的 model 属性。 |
374
+
375
+ **示例**
376
+
377
+ ```ts
378
+ lf.updateAttributes('node_id_1', { radius: 4 });
379
+ ```
@@ -0,0 +1,326 @@
1
+ ---
2
+ nav: API
3
+ group:
4
+ title: LogicFlow Instance
5
+ order: 2
6
+ title: Events
7
+ toc: content
8
+ order: 7
9
+ ---
10
+
11
+ <style>
12
+ table td:first-of-type {
13
+ word-break: normal;
14
+ }
15
+ </style>
16
+
17
+ LogicFlow exposes an event bus so your code can react to diagram interactions. For narrative examples, see the guide [Events](../../tutorial/basic/event.en.md).
18
+
19
+ ## Event APIs
20
+
21
+ ### on
22
+
23
+ Subscribe to one or many events (comma-separated names).
24
+
25
+ **Parameters**
26
+
27
+ | Name | Type | Required | Default | Description |
28
+ | :------- | :------------ | :--- | :----- | :----------------------------------- |
29
+ | evt | string | Yes | - | Event name(s). |
30
+ | callback | EventCallback | Yes | - | Handler. |
31
+
32
+ **Example**
33
+
34
+ ```ts
35
+ lf.on('node:click', (data) => {
36
+ console.log('node clicked', data);
37
+ });
38
+
39
+ lf.on('node:click,edge:click', (data) => {
40
+ console.log('element clicked', data);
41
+ });
42
+
43
+ lf.on('node:drag', ({ data }) => {
44
+ console.log('dragging', data.id, data.x, data.y);
45
+ });
46
+
47
+ lf.on('blank:click', ({ e }) => {
48
+ console.log('blank click', e.x, e.y);
49
+ });
50
+ ```
51
+
52
+ **Notes**
53
+
54
+ - Multiple listeners stack for the same event.
55
+ - Payload shape depends on the specific event.
56
+
57
+ ### off
58
+
59
+ Remove a listener; pass the same function reference used with `on`.
60
+
61
+ **Parameters**
62
+
63
+ | Name | Type | Required | Default | Description |
64
+ | :------- | :------------ | :--- | :----- | :----------------------------------- |
65
+ | evt | string | Yes | - | Event name(s). |
66
+ | callback | EventCallback | Yes | - | Handler to remove. |
67
+
68
+ **Example**
69
+
70
+ ```ts
71
+ const handleNodeClick = (data) => {
72
+ console.log('node clicked', data);
73
+ };
74
+
75
+ lf.on('node:click', handleNodeClick);
76
+ lf.off('node:click', handleNodeClick);
77
+ lf.off('node:click,edge:click', handleNodeClick);
78
+ ```
79
+
80
+ ### once
81
+
82
+ Like `on`, but the handler fires once and is removed automatically.
83
+
84
+ **Parameters**
85
+
86
+ | Name | Type | Required | Default | Description |
87
+ | :------- | :------------ | :--- | :----- | :----------------------------------- |
88
+ | evt | string | Yes | - | Event name(s). |
89
+ | callback | EventCallback | Yes | - | Handler. |
90
+
91
+ **Example**
92
+
93
+ ```ts
94
+ lf.once('node:click', (data) => {
95
+ console.log('first click only', data);
96
+ });
97
+
98
+ lf.once('graph:rendered', (data) => {
99
+ console.log('rendered', data);
100
+ });
101
+ ```
102
+
103
+ ### emit
104
+
105
+ Manually dispatch an event (mostly for custom channels).
106
+
107
+ **Parameters**
108
+
109
+ | Name | Type | Required | Default | Description |
110
+ | :-------- | :-------- | :--- | :----- | :------- |
111
+ | evt | string | Yes | - | Event name. |
112
+ | eventArgs | EventArgs | Yes | - | Payload. |
113
+
114
+ **Example**
115
+
116
+ ```ts
117
+ lf.emit('custom:event', {
118
+ type: 'custom:event',
119
+ data: {
120
+ message: 'Hello World',
121
+ },
122
+ });
123
+
124
+ lf.on('custom:event', (data) => {
125
+ console.log(data);
126
+ });
127
+
128
+ lf.emit('node:click', {
129
+ type: 'node:click',
130
+ data: lf.getNodeDataById('node_1'),
131
+ });
132
+ ```
133
+
134
+ Avoid emitting built-in events unless you understand side effects.
135
+
136
+ ## Event index
137
+
138
+ ## Node events
139
+
140
+ | Event | Description | Payload highlights |
141
+ | :-------------------------------------------- | :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
142
+ | element:click | Element click | data, e, position |
143
+ | node:click | Node click | data, e, position |
144
+ | node:dbclick | Node double click | data, e, position |
145
+ | node:mousedown | Mouse down on node | data, e |
146
+ | node:mouseup | Mouse up on node | data, e |
147
+ | node:mousemove | Mouse move on node | data, e |
148
+ | node:mouseenter | Pointer enters node | data, e |
149
+ | node:mouseleave | Pointer leaves node | data, e |
150
+ | node:delete | Node removed | data |
151
+ | node:add | Node added | data |
152
+ | node:dnd-add | External drag-and-drop completed | data |
153
+ | node:dnd-drag | External drag in progress | data, e |
154
+ | node:dragstart | Node drag start | data, e |
155
+ | node:drag | Node dragging | data, e |
156
+ | node:drop | Node drag end | data, e |
157
+ | node:contextmenu | Context menu on node | data, e, position |
158
+ | node:resize<Badge>2.0</Badge> | Resize handles | preData, data, model, deltaX, deltaY, index |
159
+ | node:properties-change<Badge>2.0</Badge> | `properties` mutation | id, keys, preProperties, properties |
160
+
161
+ Payload reference:
162
+
163
+ | Field | Type | Meaning |
164
+ | :------- | :--------- | :------------------------------------------------------------------------------------------------------------- |
165
+ | data | Object | Node data fields ([data properties](../runtime-model/nodeModel.en.md#data-properties)). |
166
+ | e | MouseEvent | Native mouse event. |
167
+ | position | Object | Canvas coordinates (same shape as [`getPointByClient`](./canvas.en.md#getpointbyclient)). |
168
+
169
+ ## Edge events
170
+
171
+ | Event | Description | Payload highlights |
172
+ | :--------------------- | :---------------- | :---------------- |
173
+ | element:click | Element click | data, e, position |
174
+ | edge:click | Edge click | data, e, position |
175
+ | edge:dbclick | Edge double click | data, e |
176
+ | edge:mouseenter | Pointer enters edge | data, e |
177
+ | edge:mouseleave | Pointer leaves edge | data, e |
178
+ | edge:add | Edge created | data |
179
+ | edge:delete | Edge removed | data |
180
+ | edge:contextmenu | Context menu on edge | data, e, position |
181
+ | edge:adjust | Polyline/endpoint adjusted | data |
182
+ | edge:exchange-node | Edge endpoints swapped | data |
183
+ | connection:not-allowed | Validation rejected a link | data, msg |
184
+
185
+ | Field | Type | Meaning |
186
+ | :------- | :--------- | :------------------------------------------------------------------------------------------------------------- |
187
+ | data | Object | Edge data ([data properties](../runtime-model/edgeModel.en.md#data-properties)). |
188
+ | e | MouseEvent | Native mouse event. |
189
+ | position | Object | Canvas coordinates ([`getPointByClient`](./canvas.en.md#getpointbyclient)). |
190
+ | msg | string | Validation message when connection fails. |
191
+
192
+ ## Anchor events
193
+
194
+ | Event | Description | Payload |
195
+ | :--------------- | :------------------------------------------------------------------------------------------------------ | :---------------------------- |
196
+ | anchor:dragstart | Manual edge creation started | data, e, nodeModel |
197
+ | anchor:drop | Edge successfully created from anchor drag | data, e, nodeModel, edgeModel |
198
+ | anchor:drag | Anchor drag move | data, e, nodeModel |
199
+ | anchor:dragend | Anchor gesture finished (success or cancel) | data, e, nodeModel |
200
+
201
+ | Field | Type | Meaning |
202
+ | :-------- | :--------- | :----------------- |
203
+ | data | Object | Anchor payload. |
204
+ | e | MouseEvent | Native mouse event. |
205
+ | nodeModel | Object | Owner node model. |
206
+
207
+ ## Canvas events
208
+
209
+ | Event | Description | Payload |
210
+ | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- |
211
+ | blank:mousedown | Canvas mouse down | e |
212
+ | blank:mousemove | Canvas mouse move | e |
213
+ | blank:mouseup | Canvas mouse up | e |
214
+ | blank:click | Canvas click | e |
215
+ | blank:contextmenu | Canvas context menu | e, position |
216
+ | blank:dragstart | Canvas drag start | e |
217
+ | blank:drag | Canvas dragging | e |
218
+ | blank:drop | Canvas drag end | e |
219
+ | text:update | Label text updated | data |
220
+ | graph:transform | Pan/zoom changed | data |
221
+ | graph:rendered | After `lf.render` completes (`v1.1.0`) | graphData |
222
+ | graph:updated | Any graph refresh (`v2.0.0`) | - |
223
+
224
+ | Field | Type | Meaning |
225
+ | :------- | :--------- | :------------------------------------------------------------------------------------------------------------- |
226
+ | e | MouseEvent | Native mouse event. |
227
+ | position | Object | Canvas coordinates ([`getPointByClient`](./canvas.en.md#getpointbyclient)). |
228
+
229
+ ## History events
230
+
231
+ The history plugin emits when undo/redo stacks change.
232
+
233
+ | Event | Description | Payload |
234
+ | :------------- | :------- | :------- |
235
+ | history:change | Stack snapshot updated | data |
236
+
237
+ | Field | Type | Meaning |
238
+ | :------- | :------ | :------------------ |
239
+ | undos | Array | Undo snapshots. |
240
+ | redos | Array | Redo snapshots. |
241
+ | undoAble | boolean | Undo available. |
242
+ | redoAble | boolean | Redo available. |
243
+
244
+ ## Selection events
245
+
246
+ Emitted when marquee / multi-select plugins manipulate regions.
247
+
248
+ | Event | Description | Payload |
249
+ | :-------------------- | :------------- | :------------- |
250
+ | selection:selected | Box selection finished | Selected elements |
251
+ | selection:mousedown | Selection mouse down | e |
252
+ | selection:dragstart | Selection drag start | e |
253
+ | selection:drag | Selection dragging | e |
254
+ | selection:drop | Selection drag end | e |
255
+ | selection:mousemove | Selection pointer move | e, position |
256
+ | selection:mouseup | Selection mouse up | e |
257
+ | selection:contextmenu | Selection context menu | e |
258
+
259
+ ## Text events
260
+
261
+ Inline text editing gestures.
262
+
263
+ | Event | Description | Payload |
264
+ | :------------- | :------------------- | :---------------------- |
265
+ | text:mousedown | Mouse down on text | e, data |
266
+ | text:dragstart | Start dragging label | e, data |
267
+ | text:drag | Dragging label | e, data |
268
+ | text:drop | Drop label | e, data |
269
+ | text:click | Click text | e |
270
+ | text:dbclick | Double click text | e |
271
+ | text:blur | Editor blurred | e |
272
+ | text:mousemove | Move inside editor | e, data, deltaX, deltaY |
273
+ | text:mouseup | Mouse up inside editor | e, data |
274
+ | text:update | Content updated | data |
275
+
276
+ ## Plugin-specific events
277
+
278
+ ### DndPanel
279
+
280
+ | Event | Description | Payload |
281
+ | :-------------------- | :--------------- | :------- |
282
+ | dnd:panel-dbclick | Palette double click | e, data |
283
+ | dnd:panel-click | Palette click | e, data |
284
+ | dnd:panel-contextmenu | Palette context menu | e, data |
285
+
286
+ ### MiniMap
287
+
288
+ | Event | Description | Payload |
289
+ | :------------ | :--------------- | :------- |
290
+ | miniMap:close | Mini map hidden | - |
291
+
292
+ ### SelectionSelect
293
+
294
+ | Event | Description | Payload |
295
+ | :---------------------- | :------------------------------------- | :------------------------------------------------------------------- |
296
+ | selection:selected-area | Marquee bounds | topLeft, bottomRight |
297
+ | selection:drop | Mouse up with hits | e |
298
+ | selection:selected | Selection committed | elements, topLeft, bottomRight |
299
+
300
+ ### DynamicGroup / Group
301
+
302
+ | Event | Description | Payload |
303
+ | :-------------------------------------------- | :-------------------------------- | :-------------------------------------------- |
304
+ | group:add-node | Child added | data, childId |
305
+ | group:remove-node | Child removed | data, childId |
306
+ | group:not-allowed | Join rejected | group, node |
307
+ | dynamicGroup:collapse<Badge>2.1.0</Badge> | Collapse toggled | collapse, nodeModel |
308
+
309
+ ### Highlight
310
+
311
+ | Event | Description | Payload |
312
+ | :------------------- | :-------------------------------- | :------------------- |
313
+ | highlight:single | Single-element highlight | data |
314
+ | highlight:neighbours | Neighbour highlight | data, relateElements |
315
+ | highlight:path | Path highlight | data, relateElements |
316
+
317
+ ### Label
318
+
319
+ | Event | Description | Payload |
320
+ | :-------------- | :------------------- | :---------------------- |
321
+ | label:mousedown | Mouse down | e, data |
322
+ | label:dragstart | Drag start | e, data |
323
+ | label:drag | Dragging | e, data |
324
+ | label:drop | Drop | e, data |
325
+ | label:mousemove | Move inside label | e, data, deltaX, deltaY |
326
+ | label:mouseup | Mouse up | e, data |