@flowgram-vue/document 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/LICENSE +22 -0
  2. package/dist/index.cjs +3233 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +1728 -0
  5. package/dist/index.js +3199 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +61 -0
  8. package/src/datas/flow-node-render-data.ts +227 -0
  9. package/src/datas/flow-node-transform-data.ts +337 -0
  10. package/src/datas/flow-node-transition-data.ts +182 -0
  11. package/src/datas/index.ts +8 -0
  12. package/src/entities/flow-document-transformer-entity.ts +125 -0
  13. package/src/entities/flow-node-entity.ts +415 -0
  14. package/src/entities/flow-renderer-state-entity.ts +127 -0
  15. package/src/entities/index.ts +8 -0
  16. package/src/flow-document-config.ts +42 -0
  17. package/src/flow-document-container-module.ts +33 -0
  18. package/src/flow-document-contribution.ts +22 -0
  19. package/src/flow-document-options.ts +79 -0
  20. package/src/flow-document.ts +766 -0
  21. package/src/flow-render-tree.ts +236 -0
  22. package/src/flow-virtual-tree.ts +244 -0
  23. package/src/index.ts +16 -0
  24. package/src/layout/horizontal-fixed-layout.ts +198 -0
  25. package/src/layout/index.ts +7 -0
  26. package/src/layout/vertical-fixed-layout.ts +198 -0
  27. package/src/services/flow-drag-service.ts +211 -0
  28. package/src/services/flow-group-service/flow-group-controller.ts +120 -0
  29. package/src/services/flow-group-service/flow-group-service.ts +107 -0
  30. package/src/services/flow-group-service/flow-group-utils.ts +104 -0
  31. package/src/services/flow-group-service/index.ts +7 -0
  32. package/src/services/flow-operation-base-service.ts +333 -0
  33. package/src/services/index.ts +8 -0
  34. package/src/typings/flow-group.ts +8 -0
  35. package/src/typings/flow-layout.ts +72 -0
  36. package/src/typings/flow-node-register.ts +356 -0
  37. package/src/typings/flow-operation.ts +312 -0
  38. package/src/typings/flow-transition.ts +104 -0
  39. package/src/typings/flow.ts +70 -0
  40. package/src/typings/index.ts +11 -0
  41. package/src/utils/get-default-spacing.ts +21 -0
  42. package/src/utils/index.ts +6 -0
@@ -0,0 +1,1728 @@
1
+ import * as _flowgram_vue_utils from '@flowgram-vue/utils';
2
+ import { Disposable, Emitter, IPoint, Rectangle, Event, PaddingSchema, SizeSchema as SizeSchema$1, ScrollSchema, PositionSchema as PositionSchema$1, DisposableCollection } from '@flowgram-vue/utils';
3
+ import { EntityManager, EntityDataRegistry, EntityData, SizeSchema, TransformData, PositionSchema, Entity, EntityOpts, ConfigEntity, OriginSchema } from '@flowgram-vue/core';
4
+ import { ContainerModule } from 'inversify';
5
+
6
+ /**
7
+ * 存储节点的 tree 结构信息
8
+ * 策略是 "重修改轻查询",即修改时候做的事情更多,查询都通过指针来操作
9
+ */
10
+ declare class FlowVirtualTree<T extends {
11
+ id: string;
12
+ flowNodeType?: FlowNodeType;
13
+ }> implements Disposable {
14
+ readonly root: T;
15
+ protected onTreeChangeEmitter: Emitter<void>;
16
+ /**
17
+ * tree 结构变化时候触发
18
+ */
19
+ onTreeChange: _flowgram_vue_utils.Event<void>;
20
+ protected map: Map<T, FlowVirtualTree.NodeInfo<T>>;
21
+ constructor(root: T);
22
+ dispose(): void;
23
+ getInfo(node: T): FlowVirtualTree.NodeInfo<T>;
24
+ clear(): void;
25
+ cloneMap(): Map<T, FlowVirtualTree.NodeInfo<T>>;
26
+ clone(): FlowVirtualTree<T>;
27
+ remove(node: T, withChildren?: boolean): void;
28
+ addChild(parent: T, child: T, index?: number): T;
29
+ moveChilds(parent: T, childs: T[], index?: number): T[];
30
+ getById(id: string): T | undefined;
31
+ /**
32
+ * 插入节点到后边
33
+ * @param before
34
+ * @param after
35
+ */
36
+ insertAfter(before: T, after: T): void;
37
+ removeParent(node: T): void;
38
+ private _removeChildren;
39
+ getParent(node: T): T | undefined;
40
+ getPre(node: T): T | undefined;
41
+ getNext(node: T): T | undefined;
42
+ getChildren(node: T): T[];
43
+ traverse(fn: (node: T, depth: number, index: number) => boolean | void, node?: T, depth?: number, index?: number): boolean | void;
44
+ /**
45
+ * 通知文档树结构更新
46
+ */
47
+ fireTreeChange(): void;
48
+ get size(): number;
49
+ toString(showType?: boolean): string;
50
+ }
51
+ declare namespace FlowVirtualTree {
52
+ interface NodeInfo<T> {
53
+ parent?: T;
54
+ next?: T;
55
+ pre?: T;
56
+ children: T[];
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
62
+ * SPDX-License-Identifier: MIT
63
+ */
64
+
65
+ /**
66
+ * Render Tree 会只读模式,不具备操作 tree 结构元素
67
+ */
68
+ declare class FlowRenderTree<T extends FlowNodeEntity> extends FlowVirtualTree<T> {
69
+ readonly root: T;
70
+ protected originTree: FlowVirtualTree<T>;
71
+ protected document: FlowDocument;
72
+ /**
73
+ * 折叠的节点
74
+ * @protected
75
+ */
76
+ protected nodesCollapsed: Set<T>;
77
+ constructor(root: T, originTree: FlowVirtualTree<T>, document: FlowDocument);
78
+ isCollapsed(node: T): boolean;
79
+ get collapsedNodeList(): T[];
80
+ /**
81
+ * 折叠元素
82
+ * @param node
83
+ * @param collapsed
84
+ */
85
+ setCollapsed(node: T, collapsed: boolean): void;
86
+ /**
87
+ *
88
+ */
89
+ openNodeInsideCollapsed(node: T): void;
90
+ /**
91
+ * 更新结束节点等位置信息,分支里如果全是结束节点则要做相应的偏移
92
+ */
93
+ updateRenderStruct(): void;
94
+ /**
95
+ * 隐藏收起节点
96
+ */
97
+ protected hideCollapsed(): void;
98
+ isNodeEnd(node: T): boolean;
99
+ /**
100
+ * 优化精简分支线
101
+ * - 结束节点拉直分支线
102
+ */
103
+ protected refineBranch(block: T): void;
104
+ protected dragNextNodesToBlock(toBlock: T, next: T): void;
105
+ getInfo(node: T): FlowVirtualTree.NodeInfo<T>;
106
+ getOriginInfo(node: T): FlowVirtualTree.NodeInfo<T>;
107
+ getCollapsedChildren(node: T): T[];
108
+ remove(): void;
109
+ addChild(): T;
110
+ insertAfter(): void;
111
+ removeParent(): void;
112
+ }
113
+
114
+ /**
115
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
116
+ * SPDX-License-Identifier: MIT
117
+ */
118
+
119
+ declare const FlowDocumentOptions: unique symbol;
120
+ /**
121
+ * 流程画布配置
122
+ */
123
+ interface FlowDocumentOptions {
124
+ /**
125
+ * 布局,默认 垂直布局
126
+ */
127
+ defaultLayout?: string;
128
+ /**
129
+ * 所有节点的默认展开状态
130
+ */
131
+ allNodesDefaultExpanded?: boolean;
132
+ toNodeJSON?(node: FlowNodeEntity): FlowNodeJSON;
133
+ fromNodeJSON?(node: FlowNodeEntity, json: FlowNodeJSON, isFirstCreate: boolean): void;
134
+ constants?: Record<string, any>;
135
+ formatNodeLines?: (node: FlowNodeEntity, lines: FlowTransitionLine[]) => FlowTransitionLine[];
136
+ formatNodeLabels?: (node: FlowNodeEntity, lines: FlowTransitionLabel[]) => FlowTransitionLabel[];
137
+ preNodeCreate?: (node: FlowNodeEntity) => void;
138
+ /**
139
+ * 获取默认的节点配置
140
+ */
141
+ getNodeDefaultRegistry?: (type: FlowNodeType) => FlowNodeRegistry;
142
+ }
143
+ declare const FlowDocumentOptionsDefault: FlowDocumentOptions;
144
+ /**
145
+ * 支持外部 constants 自定义的 key 枚举
146
+ */
147
+ declare const ConstantKeys: {
148
+ /**
149
+ * loop 底部留白
150
+ */
151
+ INLINE_SPACING_BOTTOM: string;
152
+ /**
153
+ * inlineBlocks 的 inlineTop
154
+ * loop 循环线条上边距
155
+ */
156
+ INLINE_BLOCKS_INLINE_SPACING_TOP: string;
157
+ /**
158
+ * inlineBlocks 的 inlineBottom
159
+ * loop 循环线条的下边距
160
+ *
161
+ */
162
+ INLINE_BLOCKS_INLINE_SPACING_BOTTOM: string;
163
+ /***
164
+ * 线条、label 默认颜色
165
+ */
166
+ BASE_COLOR: string;
167
+ /***
168
+ * 线条、label 激活后的颜色
169
+ */
170
+ BASE_ACTIVATED_COLOR: string;
171
+ /**
172
+ * Branch bottom margin
173
+ * 分支下边距
174
+ */
175
+ INLINE_BLOCKS_PADDING_TOP: string;
176
+ NODE_SPACING: string;
177
+ BRANCH_SPACING: string;
178
+ ROUNDED_LINE_RADIUS: string;
179
+ ROUNDED_LINE_X_RADIUS: string;
180
+ ROUNDED_LINE_Y_RADIUS: string;
181
+ INLINE_BLOCKS_PADDING_BOTTOM: string;
182
+ COLLAPSED_SPACING: string;
183
+ HOVER_AREA_WIDTH: string;
184
+ };
185
+
186
+ /**
187
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
188
+ * SPDX-License-Identifier: MIT
189
+ */
190
+
191
+ declare const FlowDocumentContribution: unique symbol;
192
+ interface FlowDocumentContribution<T extends FlowDocument = FlowDocument> {
193
+ /**
194
+ * 注册
195
+ * @param document
196
+ */
197
+ registerDocument?(document: T): void;
198
+ /**
199
+ * 加载数据
200
+ * @param document
201
+ */
202
+ loadDocument?(document: T): Promise<void>;
203
+ }
204
+
205
+ /**
206
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
207
+ * SPDX-License-Identifier: MIT
208
+ */
209
+ declare const FlowDocumentConfigDefaultData: unique symbol;
210
+ /**
211
+ * 用于文档扩展配置
212
+ */
213
+ declare class FlowDocumentConfig {
214
+ private _data;
215
+ private onDataChangeEmitter;
216
+ readonly onChange: _flowgram_vue_utils.Event<string>;
217
+ constructor(_data?: Record<string, any>);
218
+ get(key: string): any;
219
+ set(key: string, value: any): void;
220
+ registerConfigs(config: Record<string, any>): void;
221
+ }
222
+
223
+ type FlowDocumentProvider = () => FlowDocument;
224
+ declare const FlowDocumentProvider: unique symbol;
225
+ /**
226
+ * 流程整个文档数据
227
+ */
228
+ declare class FlowDocument<T = FlowDocumentJSON> implements Disposable {
229
+ protected entityManager: EntityManager;
230
+ readonly config: FlowDocumentConfig;
231
+ /**
232
+ * 流程画布配置项
233
+ */
234
+ options: FlowDocumentOptions;
235
+ protected contributions: FlowDocumentContribution[];
236
+ protected registers: Map<FlowNodeType, FlowNodeRegistry<FlowNodeMeta>>;
237
+ private nodeRegistryCache;
238
+ protected nodeDataRegistries: EntityDataRegistry[];
239
+ protected layouts: FlowLayout[];
240
+ protected currentLayoutKey: string;
241
+ protected onNodeUpdateEmitter: Emitter<{
242
+ node: FlowNodeEntity;
243
+ /**
244
+ * use 'json' instead
245
+ * @deprecated
246
+ */
247
+ data: FlowNodeJSON;
248
+ json: FlowNodeJSON;
249
+ }>;
250
+ protected onNodeCreateEmitter: Emitter<{
251
+ node: FlowNodeEntity;
252
+ /**
253
+ * use 'json' instead
254
+ * @deprecated
255
+ */
256
+ data: FlowNodeJSON;
257
+ json: FlowNodeJSON;
258
+ }>;
259
+ protected onNodeDisposeEmitter: Emitter<{
260
+ node: FlowNodeEntity;
261
+ }>;
262
+ protected onLayoutChangeEmitter: Emitter<FlowLayout>;
263
+ readonly onNodeUpdate: _flowgram_vue_utils.Event<{
264
+ node: FlowNodeEntity;
265
+ /**
266
+ * use 'json' instead
267
+ * @deprecated
268
+ */
269
+ data: FlowNodeJSON;
270
+ json: FlowNodeJSON;
271
+ }>;
272
+ readonly onNodeCreate: _flowgram_vue_utils.Event<{
273
+ node: FlowNodeEntity;
274
+ /**
275
+ * use 'json' instead
276
+ * @deprecated
277
+ */
278
+ data: FlowNodeJSON;
279
+ json: FlowNodeJSON;
280
+ }>;
281
+ readonly onNodeDispose: _flowgram_vue_utils.Event<{
282
+ node: FlowNodeEntity;
283
+ }>;
284
+ readonly onLayoutChange: _flowgram_vue_utils.Event<FlowLayout>;
285
+ private _disposed;
286
+ root: FlowNodeEntity;
287
+ /**
288
+ * 原始的 tree 结构
289
+ */
290
+ originTree: FlowVirtualTree<FlowNodeEntity>;
291
+ transformer: FlowDocumentTransformerEntity;
292
+ /**
293
+ * 渲染相关的全局轧辊台
294
+ */
295
+ renderState: FlowRendererStateEntity;
296
+ /**
297
+ * 渲染后的 tree 结构
298
+ */
299
+ renderTree: FlowRenderTree<FlowNodeEntity>;
300
+ /**
301
+ *
302
+ */
303
+ get disposed(): boolean;
304
+ init(): void;
305
+ /**
306
+ * 从数据初始化 O(n)
307
+ * @param json
308
+ */
309
+ /**
310
+ * 加载数据,可以被重载
311
+ * @param json 文档数据更新
312
+ * @param fireRender 是否要触发渲染,默认 true
313
+ */
314
+ fromJSON(json: FlowDocumentJSON | any, fireRender?: boolean): void;
315
+ get layout(): FlowLayout;
316
+ load(): Promise<void>;
317
+ get loading(): boolean;
318
+ /**
319
+ * 触发 render
320
+ */
321
+ fireRender(): void;
322
+ /**
323
+ * 从指定节点的下一个节点新增
324
+ * @param fromNode
325
+ * @param json
326
+ */
327
+ addFromNode(fromNode: FlowNodeEntity | string, json: FlowNodeJSON): FlowNodeEntity;
328
+ removeNode(node: FlowNodeEntity | string): void;
329
+ /**
330
+ * 添加节点,如果节点已经存在则不会重复创建
331
+ * @param data
332
+ * @param addedNodes
333
+ */
334
+ addNode(data: AddNodeData, addedNodes?: FlowNodeEntity[]): FlowNodeEntity;
335
+ addBlocksAsChildren(parent: FlowNodeEntity, blocks: FlowNodeJSON[], addedNodes?: FlowNodeEntity[]): void;
336
+ /**
337
+ * block 格式:
338
+ * node: (最原始的 id)
339
+ * blockIcon
340
+ * inlineBlocks
341
+ * block
342
+ * blockOrderIcon
343
+ * block
344
+ * blockOrderIcon
345
+ * @param node
346
+ * @param blocks
347
+ * @param addedNodes
348
+ */
349
+ addInlineBlocks(node: FlowNodeEntity, blocks: FlowNodeJSON[], addedNodes?: FlowNodeEntity[]): FlowNodeEntity[];
350
+ /**
351
+ * 添加单个 block
352
+ * @param target
353
+ * @param blockData
354
+ * @param addedNodes
355
+ * @param parent 默认去找 $inlineBlocks$
356
+ */
357
+ addBlock(target: FlowNodeEntity | string, blockData: FlowNodeJSON, addedNodes?: FlowNodeEntity[], parent?: FlowNodeEntity, index?: number): FlowNodeEntity;
358
+ /**
359
+ * 根据 id 获取节点
360
+ * @param id
361
+ */
362
+ getNode(id: string): FlowNodeEntity | undefined;
363
+ /**
364
+ * 注册节点
365
+ * @param registries
366
+ */
367
+ registerFlowNodes<T extends FlowNodeRegistry<any>>(...registries: T[]): void;
368
+ /**
369
+ * Check node extend
370
+ * @param currentType
371
+ * @param extendType
372
+ */
373
+ isExtend(currentType: FlowNodeType, extendType: FlowNodeType): boolean;
374
+ /**
375
+ * Check node type
376
+ * @param currentType
377
+ * @param extendType
378
+ */
379
+ isTypeOrExtendType(currentType: FlowNodeType, extendType: FlowNodeType): boolean;
380
+ /**
381
+ * 导出数据,可以重载
382
+ */
383
+ toJSON(): T | any;
384
+ /**
385
+ * @deprecated
386
+ * use `getNodeRegistry` instead
387
+ */
388
+ getNodeRegister<T extends FlowNodeRegistry = FlowNodeRegistry>(type: FlowNodeType, originParent?: FlowNodeEntity): T;
389
+ getNodeRegistry<T extends FlowNodeRegistry = FlowNodeRegistry>(type: FlowNodeType, originParent?: FlowNodeEntity): T;
390
+ /**
391
+ * 节点注入数据
392
+ * @param nodeDatas
393
+ */
394
+ registerNodeDatas(...nodeDatas: EntityDataRegistry[]): void;
395
+ /**
396
+ * traverse all nodes, O(n)
397
+ * R
398
+ * |
399
+ * +---1
400
+ * | |
401
+ * | +---1.1
402
+ * | |
403
+ * | +---1.2
404
+ * | |
405
+ * | +---1.3
406
+ * | | |
407
+ * | | +---1.3.1
408
+ * | | |
409
+ * | | +---1.3.2
410
+ * | |
411
+ * | +---1.4
412
+ * |
413
+ * +---2
414
+ * |
415
+ * +---2.1
416
+ *
417
+ * sort: [1, 1.1, 1.2, 1.3, 1.3.1, 1.3.2, 1.4, 2, 2.1]
418
+ * @param fn
419
+ * @param node
420
+ * @param depth
421
+ * @return isBreak
422
+ */
423
+ traverse(fn: (node: FlowNodeEntity, depth: number, index: number) => boolean | void, node?: FlowNodeEntity, depth?: number): boolean | void;
424
+ get size(): number;
425
+ hasNode(nodeId: string): boolean;
426
+ getAllNodes(): FlowNodeEntity[];
427
+ toString(showType?: boolean): string;
428
+ /**
429
+ * 返回需要渲染的数据
430
+ */
431
+ getRenderDatas<T extends EntityData>(dataRegistry: EntityDataRegistry<T>, containHiddenNodes?: boolean): T[];
432
+ toNodeJSON(node: FlowNodeEntity): FlowNodeJSON;
433
+ /**
434
+ * 移动节点
435
+ * @param param0
436
+ * @returns
437
+ */
438
+ moveNodes({ dropNodeId, sortNodeIds, inside, }: {
439
+ dropNodeId: string;
440
+ sortNodeIds: string[];
441
+ inside?: boolean;
442
+ }): void;
443
+ /**
444
+ * 移动子节点
445
+ * @param param0
446
+ * @returns
447
+ */
448
+ moveChildNodes({ toParentId, toIndex, nodeIds, }: {
449
+ toParentId: string;
450
+ nodeIds: string[];
451
+ toIndex: number;
452
+ }): void;
453
+ /**
454
+ * 注册布局
455
+ * @param layout
456
+ */
457
+ registerLayout(layout: FlowLayout): void;
458
+ /**
459
+ * 更新布局
460
+ * @param layoutKey
461
+ */
462
+ setLayout(layoutKey: string): void;
463
+ /**
464
+ * 切换垂直或水平布局
465
+ */
466
+ toggleFixedLayout(): void;
467
+ dispose(): void;
468
+ }
469
+
470
+ interface FlowNodeRenderSchema {
471
+ addable: boolean;
472
+ expandable: boolean;
473
+ collapsed?: boolean;
474
+ expanded: boolean;
475
+ activated: boolean;
476
+ hovered: boolean;
477
+ dragging: boolean;
478
+ stackIndex: number;
479
+ extInfo?: Record<string, any>;
480
+ }
481
+ /**
482
+ * 节点渲染状态相关数据
483
+ */
484
+ declare class FlowNodeRenderData extends EntityData<FlowNodeRenderSchema> {
485
+ static type: string;
486
+ entity: FlowNodeEntity;
487
+ private _node?;
488
+ protected onExtInfoChangeEmitter: Emitter<{
489
+ newInfo: any;
490
+ oldInfo: any;
491
+ }>;
492
+ readonly onExtInfoChange: _flowgram_vue_utils.Event<{
493
+ newInfo: any;
494
+ oldInfo: any;
495
+ }>;
496
+ get key(): string;
497
+ getDefaultData(): FlowNodeRenderSchema;
498
+ updateExtInfo(info: Record<string, any>, fullUpdate?: boolean): void;
499
+ getExtInfo(): Record<string, any> | undefined;
500
+ constructor(entity: FlowNodeEntity);
501
+ get addable(): boolean;
502
+ get expandable(): boolean;
503
+ get draggable(): boolean;
504
+ get expanded(): boolean;
505
+ set expanded(expanded: boolean);
506
+ toggleExpand(): void;
507
+ mouseLeaveTimeout?: ReturnType<typeof setTimeout>;
508
+ toggleMouseEnter(silent?: boolean): void;
509
+ toggleMouseLeave(silent?: boolean): void;
510
+ get hidden(): boolean;
511
+ set hovered(hovered: boolean);
512
+ get hovered(): boolean;
513
+ get dragging(): boolean;
514
+ set dragging(dragging: boolean);
515
+ set activated(activated: boolean);
516
+ get activated(): boolean;
517
+ get stackIndex(): number;
518
+ set stackIndex(index: number);
519
+ get lineActivated(): boolean;
520
+ get node(): HTMLDivElement;
521
+ dispose(): void;
522
+ }
523
+
524
+ interface FlowNodeTransformSchema {
525
+ size: SizeSchema;
526
+ }
527
+ declare class FlowNodeTransformData extends EntityData<FlowNodeTransformSchema> {
528
+ static type: string;
529
+ entity: FlowNodeEntity;
530
+ transform: TransformData;
531
+ renderState: FlowNodeRenderData;
532
+ localDirty: boolean;
533
+ get origin(): _flowgram_vue_utils.OriginSchema;
534
+ get key(): string;
535
+ getDefaultData(): FlowNodeTransformSchema;
536
+ constructor(entity: FlowNodeEntity);
537
+ /**
538
+ * 获取节点是否展开
539
+ */
540
+ get collapsed(): boolean;
541
+ set collapsed(collapsed: boolean);
542
+ /**
543
+ * 获取节点的大小
544
+ */
545
+ get size(): SizeSchema;
546
+ get position(): PositionSchema;
547
+ set position(position: PositionSchema);
548
+ set size(size: SizeSchema);
549
+ get inputPoint(): IPoint;
550
+ get defaultInputPoint(): IPoint;
551
+ get defaultOutputPoint(): IPoint;
552
+ get outputPoint(): IPoint;
553
+ /**
554
+ * 原点的最左偏移
555
+ */
556
+ get originDeltaX(): number;
557
+ /**
558
+ * 原点 y 轴偏移
559
+ */
560
+ get originDeltaY(): number;
561
+ /**
562
+ * 绝对坐标 bbox, 不包含自身的 spacing(marginBottom), 但是包含 inlineSpacing 和 子节点的 spacing
563
+ */
564
+ get bounds(): Rectangle;
565
+ get boundsWithPadding(): Rectangle;
566
+ get isContainer(): boolean;
567
+ /**
568
+ * 相对坐标 bbox, 这里的 localBounds 会加入 padding 一起算
569
+ */
570
+ get localBounds(): Rectangle;
571
+ get padding(): _flowgram_vue_utils.PaddingSchema;
572
+ setParentTransform(transform?: FlowNodeTransformData): void;
573
+ get spacing(): number;
574
+ get inlineSpacingPre(): number;
575
+ get inlineSpacingAfter(): number;
576
+ get minInlineBlockSpacing(): number;
577
+ get children(): FlowNodeTransformData[];
578
+ /**
579
+ * 上一个节点的 transform 数据
580
+ */
581
+ get pre(): FlowNodeTransformData | undefined;
582
+ get originParent(): FlowNodeTransformData | undefined;
583
+ get isFirst(): boolean;
584
+ get isLast(): boolean;
585
+ get lastChild(): FlowNodeTransformData | undefined;
586
+ get firstChild(): FlowNodeTransformData | undefined;
587
+ /**
588
+ * 下一个节点的 transform 数据
589
+ */
590
+ get next(): FlowNodeTransformData | undefined;
591
+ /**
592
+ * parent 节点的 transform 数据
593
+ */
594
+ get parent(): FlowNodeTransformData | undefined;
595
+ }
596
+
597
+ interface FlowNodeTransitionSchema {
598
+ }
599
+ declare const drawLineToNext: (transition: FlowNodeTransitionData) => {
600
+ type: FlowTransitionLineEnum;
601
+ from: _flowgram_vue_utils.IPoint;
602
+ to: _flowgram_vue_utils.IPoint;
603
+ }[];
604
+ declare const drawLineToBottom: (transition: FlowNodeTransitionData) => {
605
+ type: FlowTransitionLineEnum;
606
+ from: _flowgram_vue_utils.IPoint;
607
+ to: _flowgram_vue_utils.IPoint;
608
+ }[];
609
+ declare class FlowNodeTransitionData extends EntityData<FlowNodeTransitionSchema> {
610
+ static type: string;
611
+ entity: FlowNodeEntity;
612
+ transform: FlowNodeTransformData;
613
+ renderData: FlowNodeRenderData;
614
+ getDefaultData(): FlowNodeTransitionSchema;
615
+ formatLines(lines: FlowTransitionLine[]): FlowTransitionLine[];
616
+ formatLabels(labels: FlowTransitionLabel[]): FlowTransitionLabel[];
617
+ get lines(): FlowTransitionLine[];
618
+ get labels(): FlowTransitionLabel[];
619
+ constructor(entity: FlowNodeEntity);
620
+ get collapsed(): boolean;
621
+ get isNodeEnd(): boolean;
622
+ }
623
+
624
+ /**
625
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
626
+ * SPDX-License-Identifier: MIT
627
+ */
628
+
629
+ interface FlowNodeEntityConfig extends EntityOpts {
630
+ document: FlowDocument;
631
+ flowNodeType: FlowNodeType;
632
+ originParent?: FlowNodeEntity;
633
+ meta?: FlowNodeMeta;
634
+ }
635
+ interface FlowNodeInitData {
636
+ originParent?: FlowNodeEntity;
637
+ parent?: FlowNodeEntity;
638
+ hidden?: boolean;
639
+ meta?: FlowNodeMeta;
640
+ index?: number;
641
+ }
642
+ declare class FlowNodeEntity extends Entity<FlowNodeEntityConfig> {
643
+ private _memoLocalCache;
644
+ private _memoGlobalCache;
645
+ static type: string;
646
+ private _registerCache?;
647
+ private _metaCache?;
648
+ metaFromJSON?: FlowNodeMeta;
649
+ /**
650
+ * 真实的父节点,条件块在内部会创建一些空的块节点,这些块需要关联它真实的父亲节点
651
+ */
652
+ originParent?: FlowNodeEntity;
653
+ flowNodeType: FlowNodeType;
654
+ /**
655
+ * 是否隐藏
656
+ */
657
+ private _hidden;
658
+ index: number;
659
+ /**
660
+ * 文档引用
661
+ */
662
+ document: FlowDocument;
663
+ constructor(conf: FlowNodeEntityConfig);
664
+ initData(initConf: FlowNodeInitData): void;
665
+ get isStart(): boolean;
666
+ get isFirst(): boolean;
667
+ get isLast(): boolean;
668
+ /**
669
+ * 子节点采用水平布局
670
+ */
671
+ get isInlineBlocks(): boolean;
672
+ /**
673
+ * 水平节点
674
+ */
675
+ get isInlineBlock(): boolean;
676
+ /**
677
+ * 节点结束标记
678
+ * - 当前节点是结束节点
679
+ * - 当前节点最后一个节点包含结束标记
680
+ * - 当前节点为 inlineBlock,每一个 block 包含结束标记
681
+ *
682
+ * 由子元素确定,因此使用 memoLocal
683
+ */
684
+ get isNodeEnd(): boolean;
685
+ /**
686
+ * 添加 子节点
687
+ *
688
+ * @param child 插入节点
689
+ */
690
+ addChild(child: FlowNodeEntity, index?: number): void;
691
+ get hasChild(): boolean;
692
+ get pre(): FlowNodeEntity | undefined;
693
+ get next(): FlowNodeEntity | undefined;
694
+ get parent(): FlowNodeEntity | undefined;
695
+ getNodeRegistry<M extends FlowNodeRegistry = FlowNodeRegistry & {
696
+ meta: FlowNodeMeta;
697
+ }>(): M;
698
+ /**
699
+ * @deprecated
700
+ * use getNodeRegistry instead
701
+ */
702
+ getNodeRegister<M extends FlowNodeRegistry = FlowNodeRegistry>(): M;
703
+ getNodeMeta<M extends FlowNodeMeta = FlowNodeMeta>(): M & Required<FlowNodeMeta>;
704
+ /**
705
+ * 获取所有子节点,包含 child 及其所有兄弟节点
706
+ */
707
+ get allChildren(): FlowNodeEntity[];
708
+ /**
709
+ * 获取所有收起的子节点,包含 child 及其所有兄弟节点
710
+ */
711
+ get allCollapsedChildren(): FlowNodeEntity[];
712
+ /**
713
+ *
714
+ * Get child blocks
715
+ *
716
+ * use `blocks` instead
717
+ * @deprecated
718
+ */
719
+ get collapsedChildren(): FlowNodeEntity[];
720
+ /**
721
+ * Get child blocks
722
+ */
723
+ get blocks(): FlowNodeEntity[];
724
+ /**
725
+ * Get last block
726
+ */
727
+ get lastBlock(): FlowNodeEntity | undefined;
728
+ /**
729
+ * use `lastBlock` instead
730
+ */
731
+ get lastCollapsedChild(): FlowNodeEntity | undefined;
732
+ /**
733
+ * 获取子节点,如果子节点收起来,则会返回 空数组
734
+ */
735
+ get children(): FlowNodeEntity[];
736
+ get lastChild(): FlowNodeEntity | undefined;
737
+ get firstChild(): FlowNodeEntity | undefined;
738
+ memoLocal<T>(key: string, fn: () => T): T;
739
+ memoGlobal<T>(key: string, fn: () => T): T;
740
+ clearMemoGlobal(): void;
741
+ clearMemoLocal(): void;
742
+ get childrenLength(): number;
743
+ get collapsed(): boolean;
744
+ set collapsed(collapsed: boolean);
745
+ get hidden(): boolean;
746
+ openInsideCollapsed(): void;
747
+ /**
748
+ * 可以重载
749
+ */
750
+ getJSONData(): any;
751
+ /**
752
+ * 生成 JSON
753
+ * @param newId
754
+ */
755
+ toJSON(): FlowNodeJSON;
756
+ get isVertical(): boolean;
757
+ /**
758
+ * 修改节点扩展信息
759
+ * @param info
760
+ */
761
+ updateExtInfo<T extends Record<string, any> = Record<string, any>>(extInfo: T, fullUpdate?: boolean): void;
762
+ /**
763
+ * 获取节点扩展信息
764
+ */
765
+ getExtInfo<T extends Record<string, any> = Record<string, any>>(): T;
766
+ get onExtInfoChange(): Event<{
767
+ newInfo: any;
768
+ oldInfo: any;
769
+ }>;
770
+ /**
771
+ * 获取渲染数据
772
+ */
773
+ get renderData(): FlowNodeRenderData;
774
+ /**
775
+ * 获取位置大小数据
776
+ */
777
+ get transform(): FlowNodeTransformData;
778
+ /**
779
+ * 获取节点的位置及大小矩形
780
+ */
781
+ get bounds(): Rectangle;
782
+ /**
783
+ * Check node extend type
784
+ */
785
+ isExtend(parentType: FlowNodeType): boolean;
786
+ /**
787
+ * Check node type
788
+ * @param parentType
789
+ */
790
+ isTypeOrExtendType(parentType: FlowNodeType): boolean;
791
+ }
792
+ declare namespace FlowNodeEntity {
793
+ function is(obj: Entity): obj is FlowNodeEntity;
794
+ }
795
+
796
+ interface FlowDocumentTransformerEntityConfig extends EntityOpts {
797
+ document: FlowDocument;
798
+ }
799
+ /**
800
+ * 用于通知所有 layer 更新
801
+ */
802
+ declare class FlowDocumentTransformerEntity extends ConfigEntity<{
803
+ loading: boolean;
804
+ treeVersion: number;
805
+ }, FlowDocumentTransformerEntityConfig> {
806
+ static type: string;
807
+ protected onRefreshEmitter: Emitter<void>;
808
+ protected lastTransformVersion: number;
809
+ protected lastTreeVersion: number;
810
+ document: FlowDocument;
811
+ readonly onRefresh: _flowgram_vue_utils.Event<void>;
812
+ constructor(conf: FlowDocumentTransformerEntityConfig);
813
+ getDefaultConfig(): {
814
+ loading: boolean;
815
+ treeVersion: number;
816
+ };
817
+ get loading(): boolean;
818
+ set loading(loading: boolean);
819
+ /**
820
+ * 更新矩阵结构 (这个只有在树结构变化时候才会触发,如:添加节点、删除节点、改变位置节点)
821
+ */
822
+ updateTransformsTree(): void;
823
+ clear(): void;
824
+ isTreeDirty(): boolean;
825
+ /**
826
+ * 刷新节点的相对偏移
827
+ */
828
+ refresh(): void;
829
+ }
830
+
831
+ /**
832
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
833
+ * SPDX-License-Identifier: MIT
834
+ */
835
+
836
+ interface FlowRendererStateEntityConfig extends EntityOpts {
837
+ }
838
+ interface FlowRendererState {
839
+ nodeHoveredId?: string;
840
+ nodeDroppingId?: string;
841
+ nodeDragStartId?: string;
842
+ nodeDragIds?: string[];
843
+ nodeDragIdsWithChildren?: string[];
844
+ dragLabelSide?: LABEL_SIDE_TYPE;
845
+ dragging?: boolean;
846
+ isBranch?: boolean;
847
+ }
848
+ /**
849
+ * 渲染相关的全局状态管理
850
+ */
851
+ declare class FlowRendererStateEntity extends ConfigEntity<FlowRendererState, FlowRendererStateEntityConfig> {
852
+ static type: string;
853
+ getDefaultConfig(): {};
854
+ constructor(conf: FlowRendererStateEntityConfig);
855
+ getNodeHovered(): FlowNodeEntity | undefined;
856
+ setNodeHovered(node: FlowNodeEntity | undefined): void;
857
+ get dragging(): boolean | undefined;
858
+ setDragging(dragging: boolean): void;
859
+ get isBranch(): boolean | undefined;
860
+ setIsBranch(isBranch: boolean): void;
861
+ getDragLabelSide(): LABEL_SIDE_TYPE | undefined;
862
+ setDragLabelSide(dragLabelSide?: LABEL_SIDE_TYPE): void;
863
+ getNodeDroppingId(): string | undefined;
864
+ setNodeDroppingId(nodeDroppingId?: string): void;
865
+ getDragStartEntity(): FlowNodeEntity | undefined;
866
+ setDragStartEntity(node?: FlowNodeEntity): void;
867
+ getDragEntities(): FlowNodeEntity[];
868
+ setDragEntities(nodes: FlowNodeEntity[]): void;
869
+ onNodeHoveredChange(fn: (hoveredNode: FlowNodeEntity | undefined) => void, debounceTime?: number): Disposable;
870
+ }
871
+
872
+ /**
873
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
874
+ * SPDX-License-Identifier: MIT
875
+ */
876
+
877
+ declare enum FlowTransitionLineEnum {
878
+ STRAIGHT_LINE = 0,// 直线
879
+ DIVERGE_LINE = 1,// 分支线 (一种 ROUNDED_LINE)
880
+ MERGE_LINE = 2,// 汇聚线 (一种 ROUNDED_LINE)
881
+ ROUNDED_LINE = 3,// 自定义圆角转弯线
882
+ CUSTOM_LINE = 4,// 自定义,用于处理循环节点等自定义线条
883
+ DRAGGING_LINE = 5
884
+ }
885
+ interface Vertex extends IPoint {
886
+ radiusX?: number;
887
+ radiusY?: number;
888
+ moveX?: number;
889
+ moveY?: number;
890
+ /**
891
+ * Strategy for handling arc curvature when space is insufficient, defaults to compress
892
+ */
893
+ radiusOverflow?: 'compress' | 'truncate';
894
+ }
895
+ interface FlowTransitionLine {
896
+ type: FlowTransitionLineEnum;
897
+ from: IPoint;
898
+ to: IPoint;
899
+ vertices?: Vertex[];
900
+ arrow?: boolean;
901
+ renderKey?: string;
902
+ isHorizontal?: boolean;
903
+ isDraggingLine?: boolean;
904
+ activated?: boolean;
905
+ side?: LABEL_SIDE_TYPE;
906
+ style?: Record<string, string | number | undefined>;
907
+ lineId?: string;
908
+ }
909
+ declare enum FlowTransitionLabelEnum {
910
+ ADDER_LABEL = 0,// 添加按钮
911
+ TEXT_LABEL = 1,// 文本标签
912
+ COLLAPSE_LABEL = 2,// 复合节点收起的展开标签
913
+ COLLAPSE_ADDER_LABEL = 3,// 复合节点收起 + 加号复合标签
914
+ CUSTOM_LABEL = 4,// 自定义,用于处理循环节点等自定义标签
915
+ BRANCH_DRAGGING_LABEL = 5
916
+ }
917
+ interface FlowTransitionLabel {
918
+ type: FlowTransitionLabelEnum;
919
+ renderKey?: string;
920
+ offset: IPoint;
921
+ width?: number;
922
+ rotate?: string;
923
+ /**
924
+ * Anchor point for positioning, relative to the label's bounding box
925
+ * 重心偏移量,相对于标签边界框
926
+ *
927
+ * Format: [x, y] / 格式:[x, y]
928
+ * Default Value: [0.5, 0.5] indicates center / 默认值:[0.5, 0.5] 表示居中
929
+ */
930
+ origin?: [number, number];
931
+ props?: Record<string, any>;
932
+ labelId?: string;
933
+ }
934
+ interface AdderProps {
935
+ node: FlowNodeEntity;
936
+ from: FlowNodeEntity;
937
+ to: FlowNodeEntity;
938
+ renderTo: FlowNodeEntity;
939
+ [key: string]: any;
940
+ }
941
+ interface CollapseProps {
942
+ node: FlowNodeEntity;
943
+ collapseNode: FlowNodeEntity;
944
+ activateNode?: FlowNodeEntity;
945
+ forceVisible?: boolean;
946
+ [key: string]: any;
947
+ }
948
+ interface CustomLabelProps {
949
+ node: FlowNodeEntity;
950
+ [key: string]: any;
951
+ }
952
+ interface CollapseAdderProps extends AdderProps, CollapseProps {
953
+ [key: string]: any;
954
+ }
955
+ interface DragNodeProps {
956
+ node: FlowNodeEntity;
957
+ }
958
+
959
+ /**
960
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
961
+ * SPDX-License-Identifier: MIT
962
+ */
963
+
964
+ declare enum FlowLayoutDefault {
965
+ VERTICAL_FIXED_LAYOUT = "vertical-fixed-layout",// 垂直固定布局
966
+ HORIZONTAL_FIXED_LAYOUT = "horizontal-fixed-layout"
967
+ }
968
+ declare namespace FlowLayoutDefault {
969
+ function isVertical(layout: FlowLayout): boolean;
970
+ }
971
+ declare const FlowLayoutContribution: unique symbol;
972
+ interface FlowLayoutContribution {
973
+ onAfterUpdateLocalTransform?: (transform: FlowNodeTransformData, layout: FlowLayout) => void;
974
+ }
975
+ declare const FlowLayout: unique symbol;
976
+ /**
977
+ * 流程布局算法
978
+ */
979
+ interface FlowLayout {
980
+ /**
981
+ * 布局名字
982
+ */
983
+ name: string;
984
+ /**
985
+ * 布局切换时候触发
986
+ */
987
+ reload?(): void;
988
+ /**
989
+ * 更新布局
990
+ */
991
+ update(): void;
992
+ /**
993
+ * 获取节点的 padding 数据
994
+ * @param node
995
+ */
996
+ getPadding(node: FlowNodeEntity): PaddingSchema;
997
+ /**
998
+ * 获取默认滚动 目前用在 scroll-limit-layer
999
+ * @param contentSize
1000
+ */
1001
+ getInitScroll(contentSize: SizeSchema$1): ScrollSchema;
1002
+ /**
1003
+ * 获取默认输入点
1004
+ */
1005
+ getDefaultInputPoint(node: FlowNodeEntity): IPoint;
1006
+ /**
1007
+ * 获取默认输出点
1008
+ */
1009
+ getDefaultOutputPoint(node: FlowNodeEntity): IPoint;
1010
+ /**
1011
+ * 获取默认远点
1012
+ */
1013
+ getDefaultNodeOrigin(): IPoint;
1014
+ }
1015
+
1016
+ /**
1017
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1018
+ * SPDX-License-Identifier: MIT
1019
+ */
1020
+
1021
+ /**
1022
+ * 节点渲染相关配置信息,可扩展
1023
+ */
1024
+ interface FlowNodeMeta {
1025
+ isStart?: boolean;
1026
+ addable?: boolean;
1027
+ expandable?: boolean;
1028
+ draggable?: boolean | ((node: FlowNodeEntity) => boolean);
1029
+ selectable?: boolean | ((node: FlowNodeEntity, mousePos?: PositionSchema$1) => boolean);
1030
+ deleteDisable?: boolean;
1031
+ copyDisable?: boolean;
1032
+ addDisable?: boolean;
1033
+ hidden?: boolean;
1034
+ size?: SizeSchema;
1035
+ autoResizeDisable?: boolean;
1036
+ /**
1037
+ * @deprecated 使用 NodeRegister.getOrigin 代替
1038
+ */
1039
+ origin?: OriginSchema;
1040
+ defaultExpanded?: boolean;
1041
+ defaultCollapsed?: boolean;
1042
+ spacing?: number | ((transform: FlowNodeTransformData) => number);
1043
+ padding?: PaddingSchema | ((transform: FlowNodeTransformData) => PaddingSchema);
1044
+ inlineSpacingPre?: number | ((transform: FlowNodeTransformData) => number);
1045
+ inlineSpacingAfter?: number | ((transform: FlowNodeTransformData) => number);
1046
+ renderKey?: string;
1047
+ isInlineBlocks?: boolean | ((node: FlowNodeEntity) => boolean);
1048
+ minInlineBlockSpacing?: number | ((node: FlowNodeTransformData) => number);
1049
+ isNodeEnd?: boolean;
1050
+ [key: string]: any;
1051
+ }
1052
+ /**
1053
+ * spacing default key 值
1054
+ */
1055
+ declare const DefaultSpacingKey: {
1056
+ /**
1057
+ * 普通节点间距。垂直 / 水平
1058
+ */
1059
+ NODE_SPACING: string;
1060
+ /**
1061
+ * 分支节点间距
1062
+ */
1063
+ BRANCH_SPACING: string;
1064
+ /**
1065
+ * 圆弧线条拐角 radius
1066
+ */
1067
+ ROUNDED_LINE_RADIUS: string;
1068
+ /**
1069
+ * 圆弧线条 x radius
1070
+ */
1071
+ ROUNDED_LINE_X_RADIUS: string;
1072
+ /**
1073
+ * 圆弧线条 y radius
1074
+ */
1075
+ ROUNDED_LINE_Y_RADIUS: string;
1076
+ /**
1077
+ * dynamicSplit block list 下部留白间距,因为有两个拐弯,所以翻一倍
1078
+ */
1079
+ INLINE_BLOCKS_PADDING_BOTTOM: string;
1080
+ /**
1081
+ * 复合节点距离上个节点的距离
1082
+ * 条件分支菱形下边和分支的距离
1083
+ */
1084
+ COLLAPSED_SPACING: string;
1085
+ /**
1086
+ * width of hover area
1087
+ */
1088
+ HOVER_AREA_WIDTH: string;
1089
+ };
1090
+ /**
1091
+ * 默认一些间隔参数
1092
+ */
1093
+ declare const DEFAULT_SPACING: {
1094
+ [DefaultSpacingKey.NODE_SPACING]: number;
1095
+ [DefaultSpacingKey.BRANCH_SPACING]: number;
1096
+ [DefaultSpacingKey.INLINE_BLOCKS_PADDING_BOTTOM]: number;
1097
+ [DefaultSpacingKey.COLLAPSED_SPACING]: number;
1098
+ [DefaultSpacingKey.ROUNDED_LINE_RADIUS]: number;
1099
+ [DefaultSpacingKey.ROUNDED_LINE_X_RADIUS]: number;
1100
+ [DefaultSpacingKey.ROUNDED_LINE_Y_RADIUS]: number;
1101
+ [DefaultSpacingKey.HOVER_AREA_WIDTH]: number;
1102
+ NULL: number;
1103
+ /**
1104
+ * @deprecated use 'BRANCH_SPACING' instead
1105
+ */
1106
+ MARGIN_RIGHT: number;
1107
+ INLINE_BLOCK_PADDING_BOTTOM: number;
1108
+ INLINE_BLOCKS_PADDING_TOP: number;
1109
+ MIN_INLINE_BLOCK_SPACING: number;
1110
+ MIN_INLINE_BLOCK_SPACING_HORIZONTAL: number;
1111
+ };
1112
+ /**
1113
+ * 拖拽种类枚举
1114
+ * 1. 节点拖拽
1115
+ * 2. 分支拖拽
1116
+ */
1117
+ declare enum DRAGGING_TYPE {
1118
+ NODE = "node",
1119
+ BRANCH = "branch"
1120
+ }
1121
+ /**
1122
+ * 拖拽分支 Adder、Line 类型
1123
+ */
1124
+ declare enum LABEL_SIDE_TYPE {
1125
+ PRE_BRANCH = "pre_branch",
1126
+ NORMAL_BRANCH = "normal_branch"
1127
+ }
1128
+ /**
1129
+ * 默认节点大小
1130
+ */
1131
+ declare const DEFAULT_SIZE: {
1132
+ width: number;
1133
+ height: number;
1134
+ };
1135
+ /**
1136
+ * 默认 meta 配置
1137
+ */
1138
+ declare const DEFAULT_FLOW_NODE_META: (nodeType: FlowNodeType, document: FlowDocument) => FlowNodeMeta;
1139
+ /**
1140
+ * 节点注册
1141
+ */
1142
+ interface FlowNodeRegistry<M extends FlowNodeMeta = FlowNodeMeta> {
1143
+ /**
1144
+ * 从另外一个注册扩展
1145
+ */
1146
+ extend?: string;
1147
+ /**
1148
+ * 节点类型
1149
+ */
1150
+ type: FlowNodeType;
1151
+ /**
1152
+ * 节点注册的数据,可以理解为 ECS 里的 Component, 这里可以配置自定义数据
1153
+ */
1154
+ dataRegistries?: EntityDataRegistry[];
1155
+ /**
1156
+ * 节点画布相关初始化配置信息,会覆盖 DEFAULT_FLOW_NODE_META
1157
+ */
1158
+ meta?: Partial<M>;
1159
+ /**
1160
+ * 自定义创建节点,可以自定义节点的树形结构
1161
+ * 返回新加入的节点,这样才能统计缓存
1162
+ *
1163
+ * @action 使用该方法,在创建时候将会忽略 json blocks 数据,而是交给适用节点自己处理 json 逻辑
1164
+ */
1165
+ onCreate?: (node: FlowNodeEntity, json: FlowNodeJSON) => FlowNodeEntity[] | void;
1166
+ /**
1167
+ * 添加子 block,一般用于分支的动态添加
1168
+ */
1169
+ onBlockChildCreate?: (node: FlowNodeEntity, json: FlowNodeJSON, addedNodes?: FlowNodeEntity[]) => FlowNodeEntity;
1170
+ /**
1171
+ * 创建线条
1172
+ */
1173
+ getLines?: (transition: FlowNodeTransitionData, layout: FlowLayout) => FlowTransitionLine[];
1174
+ /**
1175
+ * 创建 label
1176
+ */
1177
+ getLabels?: (transition: FlowNodeTransitionData, layout: FlowLayout) => FlowTransitionLabel[];
1178
+ /**
1179
+ * 调整子节点的线条,优先级高于子节点本身的 getLines
1180
+ */
1181
+ getChildLines?: (transition: FlowNodeTransitionData, layout: FlowLayout) => FlowTransitionLine[];
1182
+ /**
1183
+ * 调整子节点的 Labels,优先级高于子节点本身的 getLabels
1184
+ */
1185
+ getChildLabels?: (transition: FlowNodeTransitionData, layout: FlowLayout) => FlowTransitionLabel[];
1186
+ /**
1187
+ * 自定义输入节点
1188
+ */
1189
+ getInputPoint?: (transform: FlowNodeTransformData, layout: FlowLayout) => IPoint;
1190
+ /**
1191
+ * 自定义输出节点
1192
+ */
1193
+ getOutputPoint?: (transform: FlowNodeTransformData, layoutKey: FlowLayout) => IPoint;
1194
+ /**
1195
+ * 获取当前节点 Position 偏移量,偏移量计算只能使用已经计算完的数据,如上一个节点或者子节点,不然会造成 o(n^2) 复杂度
1196
+ *
1197
+ * 1. 切记不要用当前节点的 localBounds(相对位置 bbox),因为 delta 计算发生在 localBounds 计算之前
1198
+ * 2. 切记不要用 bounds(绝对位置 bbox, 会触发所有父节点绝对位置计算), bounds 只能在最终 render 时候使用
1199
+ * 3. 可以用 pre 节点 和 子节点的 localBounds 或者 size 数据,因为子节点是先算的
1200
+ * 4. 可以用当前节点的 size (所有子节点的最大 bbox), 这是已经确定下来的
1201
+ */
1202
+ getDelta?: (transform: FlowNodeTransformData, layout: FlowLayout) => IPoint | undefined;
1203
+ /**
1204
+ * 动态获取原点,会覆盖 meta.origin
1205
+ */
1206
+ getOrigin?(transform: FlowNodeTransformData, layout: FlowLayout): IPoint;
1207
+ /**
1208
+ * 原点 X 偏移
1209
+ * @param transform
1210
+ */
1211
+ getOriginDeltaX?: (transform: FlowNodeTransformData, layout: FlowLayout) => number;
1212
+ /**
1213
+ * 原点 Y 偏移
1214
+ * @param transform
1215
+ */
1216
+ getOriginDeltaY?: (transform: FlowNodeTransformData, layout: FlowLayout) => number;
1217
+ /**
1218
+ * 通过 parent 计算当前节点的偏移,规则同 getDelta
1219
+ */
1220
+ getChildDelta?: (childBlock: FlowNodeTransformData, layout: FlowLayout) => IPoint | undefined;
1221
+ /**
1222
+ * 在当前节点布局完成后调用,可以对布局做更精细的调整
1223
+ */
1224
+ onAfterUpdateLocalTransform?: (transform: FlowNodeTransformData, layout: FlowLayout) => void;
1225
+ /**
1226
+ * 子节点的 registry 覆盖,这里通过 originParent 来查找
1227
+ */
1228
+ extendChildRegistries?: FlowNodeRegistry[];
1229
+ /**
1230
+ * @deprecated
1231
+ * 自定义子节点添加逻辑
1232
+ * @param node 节点
1233
+ * @param json 添加的节点 JSON
1234
+ * @param options 其它配置
1235
+ * @returns
1236
+ */
1237
+ addChild?: (node: FlowNodeEntity, json: FlowNodeJSON, options?: {
1238
+ hidden?: boolean;
1239
+ index?: number;
1240
+ }) => FlowNodeEntity;
1241
+ /**
1242
+ * 内部用于继承逻辑判断,不要使用
1243
+ */
1244
+ __extends__?: FlowNodeType[];
1245
+ /**
1246
+ * 扩展注册器
1247
+ */
1248
+ [key: string]: any;
1249
+ }
1250
+ declare namespace FlowNodeRegistry {
1251
+ function mergeChildRegistries(r1?: FlowNodeRegistry[], r2?: FlowNodeRegistry[]): FlowNodeRegistry[];
1252
+ function merge(registry1: FlowNodeRegistry, registry2: FlowNodeRegistry, finalType: FlowNodeType): FlowNodeRegistry;
1253
+ function extend(registry: FlowNodeRegistry, extendRegistries: FlowNodeRegistry[]): FlowNodeRegistry;
1254
+ }
1255
+
1256
+ /**
1257
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1258
+ * SPDX-License-Identifier: MIT
1259
+ */
1260
+
1261
+ type FlowNodeType = string | number;
1262
+ /**
1263
+ * Flow node json data
1264
+ */
1265
+ interface FlowNodeJSON {
1266
+ id: string;
1267
+ type?: FlowNodeBaseType | FlowNodeSplitType | FlowNodeType;
1268
+ data?: Record<string, any>;
1269
+ meta?: FlowNodeMeta;
1270
+ blocks?: FlowNodeJSON[];
1271
+ }
1272
+ type FlowDocumentJSON = {
1273
+ nodes: FlowNodeJSON[];
1274
+ };
1275
+ declare enum FlowNodeBaseType {
1276
+ START = "start",// 开始节点
1277
+ DEFAULT = "default",// 默认节点类型
1278
+ ROOT = "root",// 根节点
1279
+ EMPTY = "empty",// 空节点,宽和高为 0
1280
+ INLINE_BLOCKS = "inlineBlocks",// 所有块合并为 InlineBlocks
1281
+ BLOCK_ICON = "blockIcon",// 图标节点,如条件分支的头部的 菱形图标
1282
+ BLOCK = "block",// 块节点
1283
+ BLOCK_ORDER_ICON = "blockOrderIcon",// 带顺序的图标节点,一般为 block 第一个分支节点
1284
+ GROUP = "group",// 分组节点
1285
+ END = "end",// 结束节点
1286
+ BREAK = "break",// 分支结束
1287
+ CONDITION = "condition",// 可以连接多条线的条件判断节点,目前只支持横向布局
1288
+ SUB_CANVAS = "subCanvas",// 自由布局子画布
1289
+ MULTI_INPUTS = "multiInputs",// 多输入
1290
+ MULTI_OUTPUTS = "multiOutputs",// 多输出
1291
+ INPUT = "input",// 输入节点
1292
+ OUTPUT = "output",// 输出节点
1293
+ SLOT = "slot",// 插槽节点
1294
+ SLOT_BLOCK = "slotBlock"
1295
+ }
1296
+ declare enum FlowNodeSplitType {
1297
+ SIMPLE_SPLIT = "simpleSplit",// 无 BlockOrderIcon
1298
+ DYNAMIC_SPLIT = "dynamicSplit",// 动态分支
1299
+ STATIC_SPLIT = "staticSplit"
1300
+ }
1301
+ declare enum FlowDocumentConfigEnum {
1302
+ END_NODES_REFINE_BRANCH = "END_NODES_REFINE_BRANCH"
1303
+ }
1304
+ declare const FLOW_DEFAULT_HIDDEN_TYPES: FlowNodeType[];
1305
+ type AddNodeData = FlowNodeJSON & {
1306
+ originParent?: FlowNodeEntity;
1307
+ parent?: FlowNodeEntity;
1308
+ hidden?: boolean;
1309
+ index?: number;
1310
+ };
1311
+
1312
+ /**
1313
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1314
+ * SPDX-License-Identifier: MIT
1315
+ */
1316
+
1317
+ declare enum OperationType {
1318
+ addFromNode = "addFromNode",
1319
+ deleteFromNode = "deleteFromNode",
1320
+ addBlock = "addBlock",
1321
+ deleteBlock = "deleteBlock",
1322
+ createGroup = "createGroup",
1323
+ ungroup = "ungroup",
1324
+ moveNodes = "moveNodes",
1325
+ moveBlock = "moveBlock",
1326
+ moveChildNodes = "moveChildNodes",
1327
+ addNodes = "addNodes",
1328
+ deleteNodes = "deleteNodes",
1329
+ addChildNode = "addChildNode",
1330
+ deleteChildNode = "deleteChildNode",
1331
+ addNode = "addNode",
1332
+ deleteNode = "deleteNode"
1333
+ }
1334
+ interface AddOrDeleteFromNodeOperationValue {
1335
+ fromId: string;
1336
+ data: FlowNodeJSON;
1337
+ }
1338
+ interface AddOrDeleteNodeOperationValue {
1339
+ fromId: string;
1340
+ data: FlowNodeJSON;
1341
+ }
1342
+ interface AddFromNodeOperation {
1343
+ type: OperationType.addFromNode;
1344
+ value: AddOrDeleteFromNodeOperationValue;
1345
+ }
1346
+ interface DeleteFromNodeOperation {
1347
+ type: OperationType.deleteFromNode;
1348
+ value: AddOrDeleteFromNodeOperationValue;
1349
+ }
1350
+ interface AddOrDeleteBlockValue {
1351
+ targetId: string;
1352
+ index?: number;
1353
+ blockData: FlowNodeJSON;
1354
+ parentId?: string;
1355
+ }
1356
+ interface createOrUngroupValue {
1357
+ targetId: string;
1358
+ groupId: string;
1359
+ nodeIds: string[];
1360
+ }
1361
+ interface AddBlockOperation {
1362
+ type: OperationType.addBlock;
1363
+ value: AddOrDeleteBlockValue;
1364
+ }
1365
+ interface DeleteBlockOperation {
1366
+ type: OperationType.deleteBlock;
1367
+ value: AddOrDeleteBlockValue;
1368
+ }
1369
+ interface CreateGroupOperation {
1370
+ type: OperationType.createGroup;
1371
+ value: createOrUngroupValue;
1372
+ }
1373
+ interface UngroupOperation {
1374
+ type: OperationType.ungroup;
1375
+ value: createOrUngroupValue;
1376
+ }
1377
+ interface MoveNodesOperationValue {
1378
+ fromId: string;
1379
+ toId: string;
1380
+ nodeIds: string[];
1381
+ }
1382
+ interface MoveNodesOperation {
1383
+ type: OperationType.moveNodes;
1384
+ value: MoveNodesOperationValue;
1385
+ }
1386
+ interface AddOrDeleteNodesOperationValue {
1387
+ fromId: string;
1388
+ nodes: FlowNodeJSON[];
1389
+ }
1390
+ interface AddNodesOperation {
1391
+ type: OperationType.addNodes;
1392
+ value: AddOrDeleteNodesOperationValue;
1393
+ }
1394
+ interface DeleteNodesOperation {
1395
+ type: OperationType.deleteNodes;
1396
+ value: AddOrDeleteNodesOperationValue;
1397
+ }
1398
+ interface MoveChildNodesOperationValue {
1399
+ nodeIds: string[];
1400
+ fromParentId: string;
1401
+ fromIndex: number;
1402
+ toParentId: string;
1403
+ toIndex: number;
1404
+ }
1405
+ type MoveBlockOperationValue = {
1406
+ nodeId: string;
1407
+ fromParentId: string;
1408
+ fromIndex: number;
1409
+ toParentId: string;
1410
+ toIndex: number;
1411
+ };
1412
+ interface MoveBlockOperation {
1413
+ type: OperationType.moveBlock;
1414
+ value: MoveBlockOperationValue;
1415
+ }
1416
+ interface MoveChildNodesOperation {
1417
+ type: OperationType.moveChildNodes;
1418
+ value: MoveChildNodesOperationValue;
1419
+ }
1420
+ interface AddChildNodeOperation {
1421
+ type: OperationType.addChildNode;
1422
+ value: AddOrDeleteChildNodeValue;
1423
+ }
1424
+ interface DeleteChildNodeOperation {
1425
+ type: OperationType.deleteChildNode;
1426
+ value: AddOrDeleteChildNodeValue;
1427
+ }
1428
+ interface AddOrDeleteChildNodeValue {
1429
+ data: FlowNodeJSON;
1430
+ parentId?: string;
1431
+ index?: number;
1432
+ originParentId?: string;
1433
+ hidden?: boolean;
1434
+ }
1435
+ interface AddNodeOperation {
1436
+ type: OperationType.addNode;
1437
+ value: AddOrDeleteNodeValue;
1438
+ }
1439
+ interface DeleteNodeOperation {
1440
+ type: OperationType.deleteNode;
1441
+ value: AddOrDeleteNodeValue;
1442
+ }
1443
+ interface AddOrDeleteNodeValue {
1444
+ data: FlowNodeJSON;
1445
+ parentId?: string;
1446
+ index?: number;
1447
+ hidden?: boolean;
1448
+ }
1449
+ type FlowOperation = AddFromNodeOperation | DeleteFromNodeOperation | AddBlockOperation | DeleteBlockOperation | CreateGroupOperation | UngroupOperation | MoveNodesOperation | AddNodesOperation | DeleteNodesOperation | MoveBlockOperation | AddChildNodeOperation | DeleteChildNodeOperation | MoveChildNodesOperation | AddNodeOperation | DeleteNodeOperation;
1450
+ type FlowNodeEntityOrId = string | FlowNodeEntity;
1451
+ type AddNodeConfig = {
1452
+ parent?: FlowNodeEntityOrId;
1453
+ hidden?: boolean;
1454
+ index?: number;
1455
+ };
1456
+ /**
1457
+ * 添加block时的配置
1458
+ */
1459
+ interface AddBlockConfig {
1460
+ parent?: FlowNodeEntity;
1461
+ index?: number;
1462
+ }
1463
+ /**
1464
+ * 移动节点时的配置
1465
+ */
1466
+ interface MoveNodeConfig {
1467
+ parent?: FlowNodeEntityOrId;
1468
+ index?: number;
1469
+ }
1470
+ /**
1471
+ * 节点添加事件
1472
+ */
1473
+ interface OnNodeAddEvent {
1474
+ node: FlowNodeEntity;
1475
+ data: AddNodeData;
1476
+ }
1477
+ /**
1478
+ * 节点移动事件
1479
+ */
1480
+ interface OnNodeMoveEvent {
1481
+ node: FlowNodeEntity;
1482
+ fromParent: FlowNodeEntity;
1483
+ fromIndex: number;
1484
+ toParent: FlowNodeEntity;
1485
+ toIndex: number;
1486
+ }
1487
+ interface FlowOperationBaseService extends Disposable {
1488
+ /**
1489
+ * 执行操作
1490
+ * @param operation 可序列化的操作
1491
+ * @returns 操作返回
1492
+ */
1493
+ apply(operation: FlowOperation): any;
1494
+ /**
1495
+ * 添加节点,如果节点已经存在则不会重复创建
1496
+ * @param nodeJSON 节点数据
1497
+ * @param config 配置
1498
+ * @returns 成功添加的节点
1499
+ */
1500
+ addNode(nodeJSON: FlowNodeJSON, config?: AddNodeConfig): FlowNodeEntity;
1501
+ /**
1502
+ * 基于某一个起始节点往后面添加
1503
+ * @param fromNode 起始节点
1504
+ * @param nodeJSON 添加的节点JSON
1505
+ */
1506
+ addFromNode(fromNode: FlowNodeEntityOrId, nodeJSON: FlowNodeJSON): FlowNodeEntity;
1507
+ /**
1508
+ * 删除节点
1509
+ * @param node 节点
1510
+ * @returns
1511
+ */
1512
+ deleteNode(node: FlowNodeEntityOrId): void;
1513
+ /**
1514
+ * 批量删除节点
1515
+ * @param nodes
1516
+ */
1517
+ deleteNodes(nodes: FlowNodeEntityOrId[]): void;
1518
+ /**
1519
+ * 添加块(分支)
1520
+ * @param target 目标
1521
+ * @param blockJSON 块数据
1522
+ * @param config 配置
1523
+ * @returns
1524
+ */
1525
+ addBlock(target: FlowNodeEntityOrId, blockJSON: FlowNodeJSON, config?: AddBlockConfig): FlowNodeEntity;
1526
+ /**
1527
+ * 移动节点
1528
+ * @param node 被移动的节点
1529
+ * @param config 移动节点配置
1530
+ */
1531
+ moveNode(node: FlowNodeEntityOrId, config?: MoveNodeConfig): void;
1532
+ /**
1533
+ * 拖拽节点
1534
+ * @param param0
1535
+ * @returns
1536
+ */
1537
+ dragNodes({ dropNode, nodes }: {
1538
+ dropNode: FlowNodeEntity;
1539
+ nodes: FlowNodeEntity[];
1540
+ }): void;
1541
+ /**
1542
+ * 添加节点的回调
1543
+ */
1544
+ onNodeAdd: Event<OnNodeAddEvent>;
1545
+ /**
1546
+ * 节点移动的回调
1547
+ */
1548
+ onNodeMove: Event<OnNodeMoveEvent>;
1549
+ }
1550
+ declare const FlowOperationBaseService: unique symbol;
1551
+
1552
+ /**
1553
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1554
+ * SPDX-License-Identifier: MIT
1555
+ */
1556
+ interface FlowGroupJSON {
1557
+ nodeIDs: string[];
1558
+ }
1559
+
1560
+ /**
1561
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1562
+ * SPDX-License-Identifier: MIT
1563
+ */
1564
+
1565
+ declare const FlowDocumentContainerModule: ContainerModule;
1566
+
1567
+ /**
1568
+ * 拖拽相关操作
1569
+ * 外部实现抽象类
1570
+ */
1571
+ declare class FlowDragService {
1572
+ protected document: FlowDocument;
1573
+ protected operationService: FlowOperationBaseService;
1574
+ protected entityManager: EntityManager;
1575
+ protected onDropEmitter: Emitter<{
1576
+ dropNode: FlowNodeEntity;
1577
+ dragNodes: FlowNodeEntity[];
1578
+ dragJSON?: FlowNodeJSON;
1579
+ }>;
1580
+ readonly onDrop: _flowgram_vue_utils.Event<{
1581
+ dropNode: FlowNodeEntity;
1582
+ dragNodes: FlowNodeEntity[];
1583
+ dragJSON?: FlowNodeJSON;
1584
+ }>;
1585
+ get renderState(): FlowRendererStateEntity;
1586
+ get dragStartNode(): FlowNodeEntity;
1587
+ get dragNodes(): FlowNodeEntity[];
1588
+ get dropNodeId(): string | undefined;
1589
+ get isDragBranch(): boolean;
1590
+ get nodeDragIdsWithChildren(): string[];
1591
+ get dragging(): boolean;
1592
+ get labelSide(): LABEL_SIDE_TYPE | undefined;
1593
+ /**
1594
+ * 放置到目标分支
1595
+ */
1596
+ dropBranch(): void;
1597
+ /**
1598
+ * 移动并且创建节点
1599
+ * Move and create node
1600
+ */
1601
+ dropCreateNode(json: FlowNodeJSON, onCreateNode?: (json: FlowNodeJSON, dropEntity: FlowNodeEntity) => Promise<FlowNodeEntity>): Promise<void>;
1602
+ /**
1603
+ * 移动到目标节点
1604
+ */
1605
+ dropNode(): void;
1606
+ /**
1607
+ * 拖拽是否可以释放在该节点后面
1608
+ */
1609
+ isDroppableNode(node: FlowNodeEntity): boolean;
1610
+ /**
1611
+ * 拖拽分支是否可以释放在该分支
1612
+ * @param node 拖拽的分支节点
1613
+ * @param side 分支的前面还是后面
1614
+ */
1615
+ isDroppableBranch(node: FlowNodeEntity, side?: LABEL_SIDE_TYPE): boolean;
1616
+ }
1617
+
1618
+ /**
1619
+ * 操作服务
1620
+ */
1621
+ declare class FlowOperationBaseServiceImpl implements FlowOperationBaseService {
1622
+ protected entityManager: EntityManager;
1623
+ protected document: FlowDocument;
1624
+ protected onNodeAddEmitter: Emitter<OnNodeAddEvent>;
1625
+ readonly onNodeAdd: _flowgram_vue_utils.Event<OnNodeAddEvent>;
1626
+ protected toDispose: DisposableCollection;
1627
+ private onNodeMoveEmitter;
1628
+ readonly onNodeMove: _flowgram_vue_utils.Event<OnNodeMoveEvent>;
1629
+ protected init(): void;
1630
+ addNode(nodeJSON: FlowNodeJSON, config?: AddNodeConfig): FlowNodeEntity;
1631
+ addFromNode(fromNode: FlowNodeEntityOrId, nodeJSON: FlowNodeJSON): FlowNodeEntity;
1632
+ deleteNode(node: FlowNodeEntityOrId): void;
1633
+ deleteNodes(nodes: FlowNodeEntityOrId[]): void;
1634
+ addBlock(target: FlowNodeEntityOrId, blockJSON: FlowNodeJSON, config?: AddBlockConfig): FlowNodeEntity;
1635
+ moveNode(node: FlowNodeEntityOrId, config?: MoveNodeConfig): void;
1636
+ /**
1637
+ * 拖拽节点
1638
+ * @param param0
1639
+ * @returns
1640
+ */
1641
+ dragNodes({ dropNode, nodes }: {
1642
+ dropNode: FlowNodeEntity;
1643
+ nodes: FlowNodeEntity[];
1644
+ }): any;
1645
+ /**
1646
+ * 执行操作
1647
+ * @param operation 可序列化的操作
1648
+ * @returns 操作返回
1649
+ */
1650
+ apply(operation: FlowOperation): any;
1651
+ /**
1652
+ * 事务执行
1653
+ * @param transaction
1654
+ */
1655
+ transact(transaction: () => void): void;
1656
+ dispose(): void;
1657
+ protected toId(node: FlowNodeEntityOrId): string;
1658
+ protected toNodeEntity(node: FlowNodeEntityOrId): FlowNodeEntity | undefined;
1659
+ protected getNodeIndex(node: FlowNodeEntityOrId): number;
1660
+ protected doMoveNode(node: FlowNodeEntity, newParent: FlowNodeEntity, index: number): void;
1661
+ }
1662
+
1663
+ /**
1664
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1665
+ * SPDX-License-Identifier: MIT
1666
+ */
1667
+
1668
+ /** 分组控制器 */
1669
+ declare class FlowGroupController {
1670
+ readonly groupNode: FlowNodeEntity;
1671
+ private constructor();
1672
+ get nodes(): FlowNodeEntity[];
1673
+ get collapsed(): boolean;
1674
+ collapse(): void;
1675
+ expand(): void;
1676
+ /** 获取分组外围的最大边框 */
1677
+ get bounds(): Rectangle;
1678
+ /** 是否是开始节点 */
1679
+ isStartNode(node?: FlowNodeEntity): boolean;
1680
+ /** 是否是结束节点 */
1681
+ isEndNode(node?: FlowNodeEntity): boolean;
1682
+ set note(note: string);
1683
+ get note(): string;
1684
+ set noteHeight(height: number);
1685
+ get noteHeight(): number;
1686
+ get positionConfig(): Record<string, number>;
1687
+ private set collapsed(value);
1688
+ set hovered(hovered: boolean);
1689
+ get hovered(): boolean;
1690
+ static create(groupNode?: FlowNodeEntity): FlowGroupController | undefined;
1691
+ }
1692
+
1693
+ /**
1694
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1695
+ * SPDX-License-Identifier: MIT
1696
+ */
1697
+
1698
+ declare class FlowGroupService {
1699
+ readonly entityManager: EntityManager;
1700
+ readonly operationService: FlowOperationBaseService;
1701
+ /** 创建分组节点 */
1702
+ createGroup(nodes: FlowNodeEntity[]): FlowNodeEntity | undefined;
1703
+ /** 删除分组 */
1704
+ deleteGroup(groupNode: FlowNodeEntity): void;
1705
+ /** 取消分组 */
1706
+ ungroup(groupNode: FlowNodeEntity): void;
1707
+ /** 返回所有分组节点 */
1708
+ getAllGroups(): FlowGroupController[];
1709
+ /** 获取分组控制器*/
1710
+ groupController(group: FlowNodeEntity): FlowGroupController | undefined;
1711
+ static validate(nodes: FlowNodeEntity[]): boolean;
1712
+ }
1713
+
1714
+ /**
1715
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
1716
+ * SPDX-License-Identifier: MIT
1717
+ */
1718
+
1719
+ /**
1720
+ *
1721
+ * @param node 节点 entity
1722
+ * @param key 从 DocumentOptions 里获取 constants 的 key
1723
+ * @param defaultSpacing 默认从 DEFAULT_SPACING 获取 spacing,也可以外部传入默认值
1724
+ * @returns
1725
+ */
1726
+ declare const getDefaultSpacing: (node: FlowNodeEntity, key: string, defaultSpacing?: number) => any;
1727
+
1728
+ export { type AddBlockConfig, type AddBlockOperation, type AddChildNodeOperation, type AddFromNodeOperation, type AddNodeConfig, type AddNodeData, type AddNodeOperation, type AddNodesOperation, type AddOrDeleteBlockValue, type AddOrDeleteChildNodeValue, type AddOrDeleteFromNodeOperationValue, type AddOrDeleteNodeOperationValue, type AddOrDeleteNodeValue, type AddOrDeleteNodesOperationValue, type AdderProps, type CollapseAdderProps, type CollapseProps, ConstantKeys, type CreateGroupOperation, type CustomLabelProps, DEFAULT_FLOW_NODE_META, DEFAULT_SIZE, DEFAULT_SPACING, DRAGGING_TYPE, DefaultSpacingKey, type DeleteBlockOperation, type DeleteChildNodeOperation, type DeleteFromNodeOperation, type DeleteNodeOperation, type DeleteNodesOperation, type DragNodeProps, FLOW_DEFAULT_HIDDEN_TYPES, FlowDocument, FlowDocumentConfig, FlowDocumentConfigDefaultData, FlowDocumentConfigEnum, FlowDocumentContainerModule, FlowDocumentContribution, type FlowDocumentJSON, FlowDocumentOptions, FlowDocumentOptionsDefault, FlowDocumentProvider, FlowDocumentTransformerEntity, FlowDragService, FlowGroupController, type FlowGroupJSON, FlowGroupService, FlowLayout, FlowLayoutContribution, FlowLayoutDefault, FlowNodeBaseType, FlowNodeEntity, type FlowNodeEntityConfig, type FlowNodeEntityOrId, type FlowNodeInitData, type FlowNodeJSON, type FlowNodeMeta, FlowNodeRegistry, FlowNodeRenderData, type FlowNodeRenderSchema, FlowNodeSplitType, FlowNodeTransformData, type FlowNodeTransformSchema, FlowNodeTransitionData, type FlowNodeTransitionSchema, type FlowNodeType, type FlowOperation, FlowOperationBaseService, FlowOperationBaseServiceImpl, FlowRendererStateEntity, type FlowTransitionLabel, FlowTransitionLabelEnum, type FlowTransitionLine, FlowTransitionLineEnum, FlowVirtualTree, LABEL_SIDE_TYPE, type MoveBlockOperation, type MoveBlockOperationValue, type MoveChildNodesOperation, type MoveChildNodesOperationValue, type MoveNodeConfig, type MoveNodesOperation, type MoveNodesOperationValue, type OnNodeAddEvent, type OnNodeMoveEvent, OperationType, type UngroupOperation, type Vertex, type createOrUngroupValue, drawLineToBottom, drawLineToNext, getDefaultSpacing };