@flowgram-vue/renderer 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 (50) hide show
  1. package/LICENSE +22 -0
  2. package/dist/index.cjs +2933 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +721 -0
  5. package/dist/index.js +2918 -0
  6. package/dist/index.js.map +1 -0
  7. package/index.module.less +167 -0
  8. package/package.json +64 -0
  9. package/src/components/Adder.ts +107 -0
  10. package/src/components/BranchDraggableRenderer.ts +77 -0
  11. package/src/components/Collapse.ts +87 -0
  12. package/src/components/CollapseAdder.ts +94 -0
  13. package/src/components/CustomLine.ts +35 -0
  14. package/src/components/LabelsRenderer.ts +162 -0
  15. package/src/components/LinesRenderer.ts +99 -0
  16. package/src/components/MarkerActivatedArrow.ts +44 -0
  17. package/src/components/MarkerArrow.ts +44 -0
  18. package/src/components/RoundedTurningLine.ts +165 -0
  19. package/src/components/StraightLine.ts +31 -0
  20. package/src/components/utils.ts +295 -0
  21. package/src/entities/README.md +3 -0
  22. package/src/entities/flow-drag-entity.ts +267 -0
  23. package/src/entities/flow-select-config-entity.ts +114 -0
  24. package/src/entities/index.ts +8 -0
  25. package/src/entities/selector-box-config-entity.ts +88 -0
  26. package/src/env.d.ts +10 -0
  27. package/src/flow-renderer-container-module.ts +14 -0
  28. package/src/flow-renderer-contribution.ts +12 -0
  29. package/src/flow-renderer-registry.ts +155 -0
  30. package/src/flow-renderer-resize-observer.ts +56 -0
  31. package/src/hooks/use-base-color.ts +26 -0
  32. package/src/index.ts +16 -0
  33. package/src/layer-vue-provide.ts +44 -0
  34. package/src/layers/flow-context-menu-layer.ts +153 -0
  35. package/src/layers/flow-debug-layer.ts +227 -0
  36. package/src/layers/flow-drag-layer.ts +413 -0
  37. package/src/layers/flow-labels-layer.ts +100 -0
  38. package/src/layers/flow-lines-layer.ts +111 -0
  39. package/src/layers/flow-nodes-content-layer.ts +155 -0
  40. package/src/layers/flow-nodes-transform-layer.ts +151 -0
  41. package/src/layers/flow-scroll-bar-layer.ts +401 -0
  42. package/src/layers/flow-scroll-limit-layer.ts +36 -0
  43. package/src/layers/flow-selector-bounds-layer.ts +191 -0
  44. package/src/layers/flow-selector-box-layer.ts +244 -0
  45. package/src/layers/index.ts +16 -0
  46. package/src/utils/element.ts +36 -0
  47. package/src/utils/find-selected-nodes.ts +80 -0
  48. package/src/utils/index.ts +7 -0
  49. package/src/utils/scroll-bar-events.ts +13 -0
  50. package/src/utils/scroll-limit.ts +58 -0
@@ -0,0 +1,721 @@
1
+ import * as _flowgram_vue_utils from '@flowgram-vue/utils';
2
+ import { Rectangle, Disposable, CacheOriginItem, Xor, ScrollSchema } from '@flowgram-vue/utils';
3
+ import { LABEL_SIDE_TYPE, FlowNodeTransitionData, FlowNodeEntity, FlowNodeTransformData, FlowDocument, FlowDocumentTransformerEntity, FlowNodeRenderData, FlowDragService, FlowRendererStateEntity, FlowDocumentOptions, FlowNodeJSON } from '@flowgram-vue/document';
4
+ import { ConfigEntity, EntityOpts, PlaygroundDragEvent, PositionSchema, SizeSchema, Layer, PipelineRegistry, LayerRegistry, PlaygroundContainerFactory, PlaygroundConfigEntity, PlaygroundDrag, EditorStateConfigEntity, LayerOptions, ContextMenuService, SelectionService, CommandRegistry, PlaygroundConfig } from '@flowgram-vue/core';
5
+ import * as vue from 'vue';
6
+ import { Component, VNode } from 'vue';
7
+ import { throttle } from 'lodash-es';
8
+ import { ContainerModule } from 'inversify';
9
+
10
+ /**
11
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
12
+ * SPDX-License-Identifier: MIT
13
+ */
14
+
15
+ interface FlowDragEntityConfig extends EntityOpts {
16
+ }
17
+ declare enum ScrollDirection {
18
+ TOP = 0,
19
+ BOTTOM = 1,
20
+ LEFT = 2,
21
+ RIGHT = 3
22
+ }
23
+ interface CollisionRetType {
24
+ hasCollision: boolean;
25
+ labelOffsetType?: LABEL_SIDE_TYPE;
26
+ }
27
+ declare class FlowDragEntity extends ConfigEntity<FlowDragEntityConfig> {
28
+ private playgroundConfigEntity;
29
+ static type: string;
30
+ private containerX;
31
+ private containerY;
32
+ private _scrollXInterval;
33
+ private _scrollYInterval;
34
+ get hasScroll(): boolean;
35
+ constructor(conf: any);
36
+ isCollision(transition: FlowNodeTransitionData, rect: Rectangle, isBranch: boolean): CollisionRetType;
37
+ isNodeCollision(transition: FlowNodeTransitionData, rect: Rectangle, scale: number): CollisionRetType;
38
+ isBranchCollision(transition: FlowNodeTransitionData, rect: Rectangle, scale: number): CollisionRetType;
39
+ private _startScrollX;
40
+ private _stopScrollX;
41
+ private _startScrollY;
42
+ private _stopScrollY;
43
+ stopAllScroll(): void;
44
+ scrollDirection(e: MouseEvent, x: number, y: number): ScrollDirection | undefined;
45
+ dispose(): void;
46
+ }
47
+
48
+ /**
49
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
50
+ * SPDX-License-Identifier: MIT
51
+ */
52
+
53
+ interface FlowSelectConfigEntityData {
54
+ selectedNodes: FlowNodeEntity[];
55
+ }
56
+ /**
57
+ * 圈选节点相关数据存储
58
+ */
59
+ declare class FlowSelectConfigEntity extends ConfigEntity<FlowSelectConfigEntityData> {
60
+ static type: string;
61
+ boundsPadding: number;
62
+ getDefaultConfig(): FlowSelectConfigEntityData;
63
+ get selectedNodes(): FlowNodeEntity[];
64
+ /**
65
+ * 选中节点
66
+ * @param nodes
67
+ */
68
+ set selectedNodes(nodes: FlowNodeEntity[]);
69
+ /**
70
+ * 清除选中节点
71
+ */
72
+ clearSelectedNodes(): void;
73
+ /**
74
+ * 通过选择框选中节点
75
+ * @param rect
76
+ * @param transforms
77
+ */
78
+ selectFromBounds(rect: Rectangle, transforms: FlowNodeTransformData[]): void;
79
+ /**
80
+ * 获取选中节点外围的最大边框
81
+ */
82
+ getSelectedBounds(): Rectangle;
83
+ }
84
+
85
+ /**
86
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
87
+ * SPDX-License-Identifier: MIT
88
+ */
89
+
90
+ interface SelectorBoxConfigData extends PlaygroundDragEvent {
91
+ disabled?: boolean;
92
+ }
93
+ /**
94
+ * 选择框配置
95
+ */
96
+ declare class SelectorBoxConfigEntity extends ConfigEntity<SelectorBoxConfigData> {
97
+ static type: string;
98
+ get dragInfo(): PlaygroundDragEvent;
99
+ setDragInfo(info: PlaygroundDragEvent): void;
100
+ get disabled(): boolean;
101
+ set disabled(disabled: boolean);
102
+ get isStart(): boolean;
103
+ get isMoving(): boolean;
104
+ get position(): PositionSchema;
105
+ get size(): SizeSchema;
106
+ get collapsed(): boolean;
107
+ collapse(): void;
108
+ toRectangle(scale: number): Rectangle;
109
+ }
110
+
111
+ /**
112
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
113
+ * SPDX-License-Identifier: MIT
114
+ */
115
+
116
+ /**
117
+ * 监听 dom 元素的 size 变化,用于画布节点的大小变化重新计算
118
+ */
119
+ declare class FlowRendererResizeObserver {
120
+ /**
121
+ * 监听元素 size,并同步到 transform
122
+ * @param el
123
+ * @param transform
124
+ */
125
+ observe(el: HTMLElement, transform: FlowNodeTransformData): Disposable;
126
+ }
127
+
128
+ interface TransformRenderCache {
129
+ updateBounds(): void;
130
+ }
131
+ interface FlowNodesTransformLayerOptions {
132
+ renderElement?: HTMLElement | (() => HTMLElement | undefined);
133
+ }
134
+ /**
135
+ * 渲染节点位置
136
+ */
137
+ declare class FlowNodesTransformLayer extends Layer<FlowNodesTransformLayerOptions> {
138
+ readonly document: FlowDocument;
139
+ readonly resizeObserver: FlowRendererResizeObserver;
140
+ readonly documentTransformer: FlowDocumentTransformerEntity;
141
+ _transforms: FlowNodeTransformData[];
142
+ node: HTMLDivElement;
143
+ get transformVisibles(): FlowNodeTransformData[];
144
+ /**
145
+ * 监听缩放,目前采用整体缩放
146
+ * @param scale
147
+ */
148
+ onZoom(scale: number): void;
149
+ dispose(): void;
150
+ protected renderCache: _flowgram_vue_utils.CacheManager<TransformRenderCache, FlowNodeTransformData>;
151
+ private isCoordEqual;
152
+ onReady(): void;
153
+ get visibeBounds(): _flowgram_vue_utils.Rectangle[];
154
+ /**
155
+ * 更新节点的 bounds 数据
156
+ */
157
+ updateNodesBounds(): void;
158
+ autorun(): void;
159
+ private get renderElement();
160
+ }
161
+
162
+ /**
163
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
164
+ * SPDX-License-Identifier: MIT
165
+ */
166
+
167
+ declare enum FlowRendererComponentType {
168
+ VUE = 0,// vue 组件
169
+ DOM = 1,// dom 组件
170
+ TEXT = 2
171
+ }
172
+ declare enum FlowRendererKey {
173
+ NODE_RENDER = "node-render",// 节点渲染
174
+ ADDER = "adder",// 添加按钮渲染
175
+ COLLAPSE = "collapse",// 节点展开收起标签(包含展开态和收起态)
176
+ BRANCH_ADDER = "branch-adder",// 分支添加按钮
177
+ TRY_CATCH_COLLAPSE = "try-catch-collapse",// 错误处理分支整体收起
178
+ DRAG_NODE = "drag-node",// 拖拽节点
179
+ DRAGGABLE_ADDER = "draggable-adder",// 拖拽可被拖入
180
+ DRAG_HIGHLIGHT_ADDER = "drag-highlight-adder",// 拖拽高亮
181
+ DRAG_BRANCH_HIGHLIGHT_ADDER = "drag-branch-highlight-adder",// 分支拖拽添加高亮
182
+ SELECTOR_BOX_POPOVER = "selector-box-popover",// 选择框右上角菜单
183
+ /**
184
+ * @deprecated
185
+ */
186
+ CONTEXT_MENU_POPOVER = "context-menu-popover",// 右键菜单
187
+ SUB_CANVAS = "sub-canvas",// 子画布渲染
188
+ SLOT_ADDER = "slot-adder",// 插槽添加按钮
189
+ SLOT_LABEL = "slot-label",// 插槽标签
190
+ SLOT_COLLAPSE = "slot-collapse",// 插槽收起按钮渲染
191
+ ARROW_RENDERER = "arrow-renderer",// 工作流线条箭头渲染器
192
+ MARKER_ARROW = "marker-arrow",// loop 的默认箭头
193
+ MARKER_ACTIVATE_ARROW = "marker-active-arrow"
194
+ }
195
+ declare enum FlowTextKey {
196
+ LOOP_END_TEXT = "loop-end-text",// 文案:循环结束
197
+ LOOP_TRAVERSE_TEXT = "loop-traverse-text",// 文案:循环遍历
198
+ LOOP_WHILE_TEXT = "loop-while-text",// 文案:满足条件时
199
+ TRY_START_TEXT = "try-start-text",// 文案:监控开始
200
+ TRY_END_TEXT = "try-end-text",// 文案:监控结束
201
+ CATCH_TEXT = "catch-text"
202
+ }
203
+ interface FlowRendererComponent {
204
+ type: FlowRendererComponentType;
205
+ renderer: Component | ((props?: any) => any);
206
+ }
207
+ /**
208
+ * 命令分类
209
+ */
210
+ declare enum FlowRendererCommandCategory {
211
+ SELECTOR_BOX = "SELECTOR_BOX"
212
+ }
213
+ declare class FlowRendererRegistry {
214
+ private componentsMap;
215
+ private textMap;
216
+ private contribs;
217
+ readonly pipeline: PipelineRegistry;
218
+ init(): void;
219
+ /**
220
+ * 注册 组件数据
221
+ */
222
+ registerRendererComponents(renderKey: FlowRendererKey | string, comp: FlowRendererComponent): void;
223
+ registerVueComponent(renderKey: FlowRendererKey | string, renderer: Component | ((props: any) => any)): void;
224
+ /**
225
+ * 注册文案
226
+ */
227
+ registerText(configs: Record<FlowTextKey | string, string>): void;
228
+ getText(textKey: string): string | undefined;
229
+ /**
230
+ * TODO: support memo
231
+ */
232
+ getRendererComponent(renderKey: FlowRendererKey | string): FlowRendererComponent;
233
+ tryToGetRendererComponent(renderKey: FlowRendererKey | string): FlowRendererComponent | undefined;
234
+ /**
235
+ * 注册画布层
236
+ */
237
+ registerLayers(...layerRegistries: LayerRegistry[]): void;
238
+ /**
239
+ * 根据配置注册画布
240
+ * @param layerRegistry
241
+ * @param options
242
+ */
243
+ registerLayer<P extends Layer = Layer>(layerRegistry: LayerRegistry<Layer>, options?: P['options']): void;
244
+ }
245
+
246
+ interface NodePortal extends CacheOriginItem {
247
+ id: string;
248
+ Portal: Component;
249
+ }
250
+ /**
251
+ * 渲染节点内容
252
+ */
253
+ declare class FlowNodesContentLayer extends Layer {
254
+ readonly document: FlowDocument;
255
+ readonly rendererRegistry: FlowRendererRegistry;
256
+ readonly playgroundContainer: PlaygroundContainerFactory;
257
+ readonly documentTransformer: FlowDocumentTransformerEntity;
258
+ _renderStates: FlowNodeRenderData[];
259
+ get renderStatesVisible(): FlowNodeRenderData[];
260
+ private renderMemoCache;
261
+ node: HTMLDivElement;
262
+ getPortalRenderer(data: FlowNodeRenderData): Component;
263
+ /**
264
+ * 监听缩放,目前采用整体缩放
265
+ * @param scale
266
+ */
267
+ onZoom(scale: number): void;
268
+ dispose(): void;
269
+ protected vuePortals: _flowgram_vue_utils.CacheManager<NodePortal, FlowNodeRenderData>;
270
+ onReady(): void;
271
+ /**
272
+ * 监听readonly和 disabled 状态 并刷新layer, 并刷新节点
273
+ */
274
+ onReadonlyOrDisabledChange(): void;
275
+ getPortals(): NodePortal[];
276
+ render(): vue.VNode<vue.RendererNode, vue.RendererElement, {
277
+ [key: string]: any;
278
+ }> | null;
279
+ }
280
+
281
+ declare class FlowLinesLayer extends Layer {
282
+ readonly document: FlowDocument;
283
+ protected readonly dragService: FlowDragService;
284
+ readonly rendererRegistry: FlowRendererRegistry;
285
+ readonly playgroundContainer: PlaygroundContainerFactory;
286
+ node: HTMLDivElement;
287
+ readonly documentTransformer: FlowDocumentTransformerEntity;
288
+ readonly flowRenderState: FlowRendererStateEntity;
289
+ /**
290
+ * 监听 transition 变化
291
+ */
292
+ _transitions: FlowNodeTransitionData[];
293
+ get transitions(): FlowNodeTransitionData[];
294
+ /**
295
+ * 可视区域变化
296
+ */
297
+ onViewportChange: ReturnType<typeof throttle>;
298
+ onZoom(): void;
299
+ onReady(): void;
300
+ get viewBox(): string;
301
+ render(): VNode<vue.RendererNode, vue.RendererElement, {
302
+ [key: string]: any;
303
+ }> | null;
304
+ }
305
+
306
+ declare class FlowLabelsLayer extends Layer {
307
+ readonly document: FlowDocument;
308
+ readonly rendererRegistry: FlowRendererRegistry;
309
+ readonly playgroundContainer: PlaygroundContainerFactory;
310
+ readonly documentOptions?: FlowDocumentOptions;
311
+ node: HTMLDivElement;
312
+ readonly documentTransformer: FlowDocumentTransformerEntity;
313
+ readonly flowRenderState: FlowRendererStateEntity;
314
+ /**
315
+ * 监听 transition 变化
316
+ */
317
+ _transitions: FlowNodeTransitionData[];
318
+ get transitions(): FlowNodeTransitionData[];
319
+ /**
320
+ * 监听缩放,目前采用整体缩放
321
+ * @param scale
322
+ */
323
+ onZoom(scale: number): void;
324
+ /**
325
+ * 可视区域变化
326
+ */
327
+ onViewportChange: ReturnType<typeof throttle>;
328
+ onReady(): void;
329
+ /**
330
+ * 监听readonly和 disabled 状态 并刷新layer, 并刷新
331
+ */
332
+ onReadonlyOrDisabledChange(): void;
333
+ render(): VNode<vue.RendererNode, vue.RendererElement, {
334
+ [key: string]: any;
335
+ }> | null;
336
+ }
337
+
338
+ /**
339
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
340
+ * SPDX-License-Identifier: MIT
341
+ */
342
+
343
+ /**
344
+ * 调试用,会绘出所有节点的边界
345
+ */
346
+ declare class FlowDebugLayer extends Layer {
347
+ readonly document: FlowDocument;
348
+ readonly documentTransformer: FlowDocumentTransformerEntity;
349
+ _transforms: FlowNodeTransformData[];
350
+ get transforms(): FlowNodeTransformData[];
351
+ node: HTMLElement;
352
+ viewport: HTMLDivElement;
353
+ boundsNodes: HTMLDivElement;
354
+ pointsNodes: HTMLDivElement;
355
+ versionNodes: HTMLDivElement;
356
+ /**
357
+ * ?debug=xxxx, 则返回 xxxx
358
+ */
359
+ filterKey: string;
360
+ protected originLine: HTMLDivElement;
361
+ domCache: WeakMap<FlowNodeTransformData, {
362
+ color: string;
363
+ bbox: HTMLDivElement;
364
+ version: HTMLDivElement;
365
+ input: HTMLDivElement;
366
+ output: HTMLDivElement;
367
+ }>;
368
+ onReady(): void;
369
+ onScroll(): void;
370
+ onResize(): void;
371
+ onZoom(scale: number): void;
372
+ createBounds(transform: FlowNodeTransformData, color: string, depth: number): void;
373
+ /**
374
+ * 显示 viewport 可滚动区域
375
+ */
376
+ renderScrollViewportBounds(): void;
377
+ autorun(): void;
378
+ }
379
+
380
+ /**
381
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
382
+ * SPDX-License-Identifier: MIT
383
+ */
384
+ /**
385
+ * 滚动条点击事件监听
386
+ */
387
+ declare const ScrollBarEvents: unique symbol;
388
+ interface ScrollBarEvents {
389
+ dragStart: () => void;
390
+ }
391
+
392
+ /**
393
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
394
+ * SPDX-License-Identifier: MIT
395
+ */
396
+
397
+ declare enum ScrollBarVisibility {
398
+ Show = "show",
399
+ Hidden = "hidden"
400
+ }
401
+ interface ScrollBarOptions {
402
+ /**
403
+ * 显示滚动条的时机,可选常驻或滚动时显示
404
+ */
405
+ showScrollBars: 'whenScrolling' | 'always';
406
+ getBounds(): Rectangle;
407
+ }
408
+ /**
409
+ * 渲染滚动条 layer
410
+ */
411
+ declare class FlowScrollBarLayer extends Layer<ScrollBarOptions> {
412
+ readonly events?: ScrollBarEvents;
413
+ flowDocument?: FlowDocument;
414
+ protected playgroundConfigEntity: PlaygroundConfigEntity;
415
+ readonly rightScrollBar: HTMLDivElement;
416
+ readonly rightScrollBarBlock: HTMLDivElement;
417
+ readonly bottomScrollBar: HTMLDivElement;
418
+ readonly bottomScrollBarBlock: HTMLDivElement;
419
+ private mostLeft;
420
+ private mostRight;
421
+ private mostTop;
422
+ private mostBottom;
423
+ private viewportWidth;
424
+ private viewportHeight;
425
+ private width;
426
+ private height;
427
+ private scrollBottomWidth;
428
+ private scrollRightHeight;
429
+ private scale;
430
+ private sum;
431
+ private initialScrollX;
432
+ private initialScrollY;
433
+ private hideTimeout;
434
+ get clientViewportWidth(): number;
435
+ get clientViewportHeight(): number;
436
+ get viewportFullWidth(): number;
437
+ get viewportFullHeight(): number;
438
+ get viewportMoveWidth(): number;
439
+ get viewportMoveHeight(): number;
440
+ getToLeft(scrollX: number): number;
441
+ getToTop(scrollY: number): number;
442
+ clickRightScrollBar(e: MouseEvent): void;
443
+ clickBottomScrollBar(e: MouseEvent): void;
444
+ onBoardingToast(): void;
445
+ protected bottomGrabDragger: PlaygroundDrag<undefined>;
446
+ protected rightGrabDragger: PlaygroundDrag<undefined>;
447
+ protected changeScrollBarVisibility(scrollBar: HTMLDivElement, status: ScrollBarVisibility): void;
448
+ onReady(): void;
449
+ autorun(): void;
450
+ }
451
+
452
+ type StartDragProps = {
453
+ dragEntities?: FlowNodeEntity[];
454
+ } & Xor<{
455
+ dragStartEntity: FlowNodeEntity;
456
+ }, {
457
+ dragJSON: FlowNodeJSON;
458
+ isBranch?: boolean;
459
+ onCreateNode: (json: FlowNodeJSON, dropEntity: FlowNodeEntity) => Promise<FlowNodeEntity>;
460
+ }>;
461
+ interface FlowDragOptions {
462
+ onDrop?: (opts: {
463
+ dragNodes: FlowNodeEntity[];
464
+ dropNode: FlowNodeEntity;
465
+ }) => void;
466
+ canDrop?: (opts: {
467
+ dropNode: FlowNodeEntity;
468
+ isBranch?: boolean;
469
+ } & Xor<{
470
+ dragNodes: FlowNodeEntity[];
471
+ }, {
472
+ dragJSON: FlowNodeJSON;
473
+ }>) => boolean;
474
+ }
475
+ /**
476
+ * 监听节点的激活状态
477
+ */
478
+ declare class FlowDragLayer extends Layer<FlowDragOptions> {
479
+ readonly document: FlowDocument;
480
+ readonly flowDragService: FlowDragService;
481
+ readonly playgroundContainer: PlaygroundContainerFactory;
482
+ transforms: FlowNodeTransformData[];
483
+ protected editorStateConfig: EditorStateConfigEntity;
484
+ protected playgroundConfigEntity: PlaygroundConfigEntity;
485
+ protected flowDragConfigEntity: FlowDragEntity;
486
+ protected flowRenderStateEntity: FlowRendererStateEntity;
487
+ protected selectConfigEntity: FlowSelectConfigEntity;
488
+ private initialPosition;
489
+ private disableDragScroll;
490
+ private dragJSON?;
491
+ private onCreateNode?;
492
+ dragOffset: {
493
+ x: number;
494
+ y: number;
495
+ };
496
+ get transitions(): FlowNodeTransitionData[];
497
+ readonly rendererRegistry: FlowRendererRegistry;
498
+ get dragStartEntity(): FlowNodeEntity | undefined;
499
+ set dragStartEntity(entity: FlowNodeEntity | undefined);
500
+ get dragEntities(): FlowNodeEntity[];
501
+ set dragEntities(entities: FlowNodeEntity[]);
502
+ private dragNodeComp;
503
+ containerRef: {
504
+ current: HTMLDivElement | null;
505
+ };
506
+ draggingNodeMask: HTMLDivElement;
507
+ protected isGrab(): boolean;
508
+ setDraggingStatus(status: boolean): void;
509
+ dragEnable(e: MouseEvent): boolean;
510
+ handleMouseMove(event: MouseEvent): void;
511
+ handleMouseUp(): Promise<void>;
512
+ protected _dragger: PlaygroundDrag<undefined>;
513
+ /**
514
+ * 开始拖拽事件
515
+ * @param e
516
+ */
517
+ startDrag(e: {
518
+ clientX: number;
519
+ clientY: number;
520
+ }, { dragStartEntity: startEntityFromProps, dragEntities, dragJSON, isBranch, onCreateNode, }: StartDragProps, options?: {
521
+ dragOffsetX?: number;
522
+ dragOffsetY?: number;
523
+ disableDragScroll?: boolean;
524
+ }): Promise<void>;
525
+ onReady(): void;
526
+ dispose(): void;
527
+ render(): vue.VNode<vue.RendererNode, vue.RendererElement, {
528
+ [key: string]: any;
529
+ }>;
530
+ }
531
+
532
+ interface FlowSelectorBoxOptions extends LayerOptions {
533
+ /**
534
+ * 默认不提供则为点击空白地方可以框选
535
+ * @param e
536
+ * @param entity
537
+ */
538
+ canSelect?: (e: MouseEvent, entity: SelectorBoxConfigEntity) => boolean;
539
+ }
540
+ /**
541
+ * 流程选择框
542
+ */
543
+ declare class FlowSelectorBoxLayer extends Layer<FlowSelectorBoxOptions> {
544
+ protected flowDocument: FlowDocument;
545
+ readonly contextMenuService: ContextMenuService;
546
+ protected playgroundConfigEntity: PlaygroundConfigEntity;
547
+ readonly selectionService: SelectionService;
548
+ protected selectorBoxConfigEntity: SelectorBoxConfigEntity;
549
+ protected selectConfigEntity: FlowSelectConfigEntity;
550
+ protected editorStateConfig: EditorStateConfigEntity;
551
+ readonly node: HTMLDivElement;
552
+ /**
553
+ * 选择框
554
+ */
555
+ protected selectorBox: _flowgram_vue_utils.CacheManager<_flowgram_vue_utils.DOMCache, _flowgram_vue_utils.CacheOriginItem>;
556
+ /**
557
+ * 用于遮挡鼠标,避免触发 hover
558
+ */
559
+ protected selectorBoxBlock: _flowgram_vue_utils.CacheManager<_flowgram_vue_utils.DOMCache, _flowgram_vue_utils.CacheOriginItem>;
560
+ protected transformVisibles: FlowNodeTransformData[];
561
+ /**
562
+ * 拖动选择框
563
+ */
564
+ protected selectboxDragger: PlaygroundDrag<undefined>;
565
+ onReady(): void;
566
+ isEnabled(): boolean;
567
+ /**
568
+ * Destroy
569
+ */
570
+ dispose(): void;
571
+ protected updateSelectorBox(selector: SelectorBoxConfigEntity): void;
572
+ private nodeSelectable;
573
+ }
574
+
575
+ interface SelectorBoxPopoverProps {
576
+ bounds: Rectangle;
577
+ config: PlaygroundConfig;
578
+ flowSelectConfig: FlowSelectConfigEntity;
579
+ commandRegistry: CommandRegistry;
580
+ children?: VNode | VNode[];
581
+ }
582
+ interface FlowSelectorBoundsLayerOptions extends LayerOptions {
583
+ ignoreOneSelect?: boolean;
584
+ ignoreChildrenLength?: boolean;
585
+ boundsPadding?: number;
586
+ disableBackground?: boolean;
587
+ backgroundClassName?: string;
588
+ foregroundClassName?: string;
589
+ SelectorBoxPopover?: Component;
590
+ CustomBoundsRenderer?: Component;
591
+ }
592
+ /**
593
+ * 流程节点被框选后的边界区域渲染
594
+ */
595
+ declare class FlowSelectorBoundsLayer extends Layer<FlowSelectorBoundsLayerOptions> {
596
+ readonly rendererRegistry: FlowRendererRegistry;
597
+ readonly commandRegistry: CommandRegistry;
598
+ readonly playgroundContainer: PlaygroundContainerFactory;
599
+ protected flowSelectConfigEntity: FlowSelectConfigEntity;
600
+ protected editorStateConfig: EditorStateConfigEntity;
601
+ protected selectorBoxConfigEntity: SelectorBoxConfigEntity;
602
+ /**
603
+ * 需要监听节点的展开和收起状态,重新绘制边框
604
+ */
605
+ renderStates: FlowNodeRenderData[];
606
+ _transforms: FlowNodeTransformData[];
607
+ readonly node: HTMLDivElement;
608
+ readonly selectBoundsBackground: HTMLDivElement;
609
+ onReady(): void;
610
+ onZoom(scale: number): void;
611
+ onViewportChange(): void;
612
+ isEnabled(): boolean;
613
+ render(): VNode<vue.RendererNode, vue.RendererElement, {
614
+ [key: string]: any;
615
+ }> | null;
616
+ }
617
+
618
+ /**
619
+ * 流程右键菜单
620
+ */
621
+ declare class FlowContextMenuLayer extends Layer {
622
+ readonly commandRegistry: CommandRegistry;
623
+ readonly rendererRegistry: FlowRendererRegistry;
624
+ readonly contextMenuService: ContextMenuService;
625
+ readonly playgroundContainer: PlaygroundContainerFactory;
626
+ protected flowSelectConfigEntity: FlowSelectConfigEntity;
627
+ readonly selectionService: SelectionService;
628
+ protected playgroundConfigEntity: PlaygroundConfigEntity;
629
+ protected editorStateConfig: EditorStateConfigEntity;
630
+ protected selectorBoxConfigEntity: SelectorBoxConfigEntity;
631
+ readonly node: HTMLDivElement;
632
+ readonly nodeRef: {
633
+ current: {
634
+ setVisible: (v: boolean) => void;
635
+ } | null;
636
+ };
637
+ isEnabled(): boolean;
638
+ onReady(): void;
639
+ onScroll(): void;
640
+ onZoom(): void;
641
+ /**
642
+ * Destroy
643
+ */
644
+ dispose(): void;
645
+ /**
646
+ * 渲染工具栏
647
+ */
648
+ renderCommandMenus(): VNode[];
649
+ render(): VNode<vue.RendererNode, vue.RendererElement, {
650
+ [key: string]: any;
651
+ }>;
652
+ }
653
+
654
+ /**
655
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
656
+ * SPDX-License-Identifier: MIT
657
+ */
658
+
659
+ /**
660
+ * 控制滚动边界
661
+ */
662
+ declare class FlowScrollLimitLayer extends Layer {
663
+ readonly document: FlowDocument;
664
+ getInitScroll(): ScrollSchema;
665
+ onReady(): void;
666
+ }
667
+
668
+ /**
669
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
670
+ * SPDX-License-Identifier: MIT
671
+ */
672
+
673
+ declare const FlowRendererContribution: unique symbol;
674
+ interface FlowRendererContribution {
675
+ registerRenderer?(registry: FlowRendererRegistry): void;
676
+ }
677
+
678
+ /**
679
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
680
+ * SPDX-License-Identifier: MIT
681
+ */
682
+
683
+ declare const FlowRendererContainerModule: ContainerModule;
684
+
685
+ /**
686
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
687
+ * SPDX-License-Identifier: MIT
688
+ */
689
+ declare const MARK_ARROW_ID = "$marker_arrow$";
690
+
691
+ /**
692
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
693
+ * SPDX-License-Identifier: MIT
694
+ */
695
+ declare const MARK_ACTIVATED_ARROW_ID = "$marker_arrow_activated$";
696
+
697
+ /**
698
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
699
+ * SPDX-License-Identifier: MIT
700
+ */
701
+
702
+ declare function useBaseColor(): {
703
+ baseColor: string;
704
+ baseActivatedColor: string;
705
+ };
706
+
707
+ /**
708
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
709
+ * SPDX-License-Identifier: MIT
710
+ */
711
+
712
+ interface PropsType {
713
+ data: FlowNodeTransitionData;
714
+ rendererRegistry: FlowRendererRegistry;
715
+ isViewportVisible: (bounds: Rectangle) => boolean;
716
+ linesSave: VNode[];
717
+ dragService: FlowDragService;
718
+ }
719
+ declare function createLines(props: PropsType): void;
720
+
721
+ export { type CollisionRetType, FlowContextMenuLayer, FlowDebugLayer, FlowDragEntity, FlowDragLayer, type FlowDragOptions, FlowLabelsLayer, FlowLinesLayer, FlowNodesContentLayer, FlowNodesTransformLayer, type FlowNodesTransformLayerOptions, FlowRendererCommandCategory, type FlowRendererComponent, FlowRendererComponentType, FlowRendererContainerModule, FlowRendererContribution, FlowRendererKey, FlowRendererRegistry, FlowScrollBarLayer, FlowScrollLimitLayer, FlowSelectConfigEntity, FlowSelectorBoundsLayer, type FlowSelectorBoundsLayerOptions, FlowSelectorBoxLayer, type FlowSelectorBoxOptions, FlowTextKey, MARK_ACTIVATED_ARROW_ID, MARK_ARROW_ID, ScrollBarEvents, type ScrollBarOptions, type SelectorBoxConfigData, SelectorBoxConfigEntity, type SelectorBoxPopoverProps, createLines, useBaseColor };