@flowgram.ai/fixed-layout-core 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +77 -37
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +50 -10
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/esm/index.js
CHANGED
|
@@ -550,7 +550,7 @@ var StartRegistry = {
|
|
|
550
550
|
// src/activities/try-catch.ts
|
|
551
551
|
import {
|
|
552
552
|
FlowLayoutDefault as FlowLayoutDefault6,
|
|
553
|
-
FlowNodeBaseType as
|
|
553
|
+
FlowNodeBaseType as FlowNodeBaseType12
|
|
554
554
|
} from "@flowgram.ai/document";
|
|
555
555
|
|
|
556
556
|
// src/activities/try-catch-extends/catch-block.ts
|
|
@@ -851,13 +851,41 @@ var TryBlockRegistry = {
|
|
|
851
851
|
};
|
|
852
852
|
|
|
853
853
|
// src/activities/try-catch-extends/try-slot.ts
|
|
854
|
-
import {
|
|
854
|
+
import { FlowTransitionLabelEnum as FlowTransitionLabelEnum8 } from "@flowgram.ai/document";
|
|
855
855
|
var TrySlotRegistry = {
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
856
|
+
type: "trySlot" /* TRY_SLOT */,
|
|
857
|
+
meta: {
|
|
858
|
+
inlineSpacingAfter: 16,
|
|
859
|
+
spacing: 0,
|
|
860
|
+
size: {
|
|
861
|
+
width: 16,
|
|
862
|
+
height: 0
|
|
863
|
+
}
|
|
864
|
+
},
|
|
865
|
+
onAfterUpdateLocalTransform(transform) {
|
|
866
|
+
if (transform.entity.isVertical) {
|
|
867
|
+
transform.data.size = {
|
|
868
|
+
width: 16,
|
|
869
|
+
height: 0
|
|
870
|
+
};
|
|
871
|
+
} else {
|
|
872
|
+
transform.data.size = {
|
|
873
|
+
width: 0,
|
|
874
|
+
height: 16
|
|
875
|
+
};
|
|
876
|
+
}
|
|
877
|
+
transform.transform.update({
|
|
878
|
+
size: transform.data.size
|
|
879
|
+
});
|
|
880
|
+
},
|
|
881
|
+
getLabels(transition) {
|
|
882
|
+
return [
|
|
883
|
+
{
|
|
884
|
+
offset: transition.transform.bounds.center,
|
|
885
|
+
type: FlowTransitionLabelEnum8.ADDER_LABEL
|
|
886
|
+
}
|
|
887
|
+
];
|
|
888
|
+
}
|
|
861
889
|
};
|
|
862
890
|
|
|
863
891
|
// src/activities/try-catch.ts
|
|
@@ -890,7 +918,7 @@ var TryCatchRegistry = {
|
|
|
890
918
|
const addedNodes = [];
|
|
891
919
|
const tryCatchIconNode = document.addNode({
|
|
892
920
|
id: `$tryCatchIcon$${node.id}`,
|
|
893
|
-
type:
|
|
921
|
+
type: FlowNodeBaseType12.BLOCK_ICON,
|
|
894
922
|
originParent: node,
|
|
895
923
|
parent: node
|
|
896
924
|
});
|
|
@@ -901,13 +929,15 @@ var TryCatchRegistry = {
|
|
|
901
929
|
parent: node
|
|
902
930
|
});
|
|
903
931
|
const tryBlockNode = document.addNode({
|
|
904
|
-
id:
|
|
932
|
+
id: tryBlock.id,
|
|
905
933
|
type: "tryBlock" /* TRY_BLOCK */,
|
|
906
934
|
originParent: node,
|
|
907
|
-
parent: mainBlockNode
|
|
935
|
+
parent: mainBlockNode,
|
|
936
|
+
data: tryBlock.data
|
|
908
937
|
});
|
|
909
938
|
const trySlotNode = document.addNode({
|
|
910
|
-
id: tryBlock.id
|
|
939
|
+
id: `$trySlot$${tryBlock.id}`,
|
|
940
|
+
hidden: true,
|
|
911
941
|
type: "trySlot" /* TRY_SLOT */,
|
|
912
942
|
// 占位节点
|
|
913
943
|
originParent: node,
|
|
@@ -926,8 +956,17 @@ var TryCatchRegistry = {
|
|
|
926
956
|
trySlotNode,
|
|
927
957
|
catchInlineBlocksNode
|
|
928
958
|
);
|
|
959
|
+
(tryBlock.blocks || []).forEach((blockData) => {
|
|
960
|
+
document.addNode(
|
|
961
|
+
{
|
|
962
|
+
...blockData,
|
|
963
|
+
parent: tryBlockNode
|
|
964
|
+
},
|
|
965
|
+
addedNodes
|
|
966
|
+
);
|
|
967
|
+
});
|
|
929
968
|
catchBlocks.forEach((blockData) => {
|
|
930
|
-
|
|
969
|
+
document.addBlock(node, blockData, addedNodes);
|
|
931
970
|
});
|
|
932
971
|
return addedNodes;
|
|
933
972
|
},
|
|
@@ -943,11 +982,12 @@ var TryCatchRegistry = {
|
|
|
943
982
|
id: blockData.id,
|
|
944
983
|
type: "catchBlock" /* CATCH_BLOCK */,
|
|
945
984
|
originParent: node,
|
|
946
|
-
parent
|
|
985
|
+
parent,
|
|
986
|
+
data: blockData.data
|
|
947
987
|
});
|
|
948
988
|
const blockOrderIcon = node.document.addNode({
|
|
949
989
|
id: `$blockOrderIcon$${blockData.id}`,
|
|
950
|
-
type:
|
|
990
|
+
type: FlowNodeBaseType12.BLOCK_ORDER_ICON,
|
|
951
991
|
originParent: node,
|
|
952
992
|
parent: block
|
|
953
993
|
});
|
|
@@ -983,7 +1023,7 @@ var TryCatchRegistry = {
|
|
|
983
1023
|
* icon 节点
|
|
984
1024
|
*/
|
|
985
1025
|
{
|
|
986
|
-
type:
|
|
1026
|
+
type: FlowNodeBaseType12.BLOCK_ICON,
|
|
987
1027
|
meta: {
|
|
988
1028
|
spacing: 54 /* INLINE_SPACING_TOP */
|
|
989
1029
|
},
|
|
@@ -1003,8 +1043,8 @@ var TryCatchRegistry = {
|
|
|
1003
1043
|
import { Point as Point5 } from "@flowgram.ai/utils";
|
|
1004
1044
|
import { FlowTextKey as FlowTextKey3 } from "@flowgram.ai/renderer";
|
|
1005
1045
|
import {
|
|
1006
|
-
FlowNodeBaseType as
|
|
1007
|
-
FlowTransitionLabelEnum as
|
|
1046
|
+
FlowNodeBaseType as FlowNodeBaseType14,
|
|
1047
|
+
FlowTransitionLabelEnum as FlowTransitionLabelEnum11,
|
|
1008
1048
|
getDefaultSpacing as getDefaultSpacing6,
|
|
1009
1049
|
ConstantKeys as ConstantKeys5
|
|
1010
1050
|
} from "@flowgram.ai/document";
|
|
@@ -1080,7 +1120,7 @@ var LoopRightEmptyBlockRegistry = {
|
|
|
1080
1120
|
};
|
|
1081
1121
|
|
|
1082
1122
|
// src/activities/loop-extends/loop-empty-branch.ts
|
|
1083
|
-
import { FlowTransitionLabelEnum as
|
|
1123
|
+
import { FlowTransitionLabelEnum as FlowTransitionLabelEnum9 } from "@flowgram.ai/document";
|
|
1084
1124
|
var LoopEmptyBranchRegistry = {
|
|
1085
1125
|
type: "loopEmptyBranch" /* LOOP_EMPTY_BRANCH */,
|
|
1086
1126
|
meta: {
|
|
@@ -1097,7 +1137,7 @@ var LoopEmptyBranchRegistry = {
|
|
|
1097
1137
|
if (isVertical) {
|
|
1098
1138
|
return [
|
|
1099
1139
|
{
|
|
1100
|
-
type:
|
|
1140
|
+
type: FlowTransitionLabelEnum9.ADDER_LABEL,
|
|
1101
1141
|
offset: {
|
|
1102
1142
|
x: currentTransform.inputPoint.x,
|
|
1103
1143
|
y: currentTransform.bounds.center.y + 8
|
|
@@ -1108,7 +1148,7 @@ var LoopEmptyBranchRegistry = {
|
|
|
1108
1148
|
}
|
|
1109
1149
|
return [
|
|
1110
1150
|
{
|
|
1111
|
-
type:
|
|
1151
|
+
type: FlowTransitionLabelEnum9.ADDER_LABEL,
|
|
1112
1152
|
offset: {
|
|
1113
1153
|
x: currentTransform.bounds.center.x + 8,
|
|
1114
1154
|
y: currentTransform.inputPoint.y
|
|
@@ -1138,14 +1178,14 @@ var LoopEmptyBranchRegistry = {
|
|
|
1138
1178
|
import { Point as Point4 } from "@flowgram.ai/utils";
|
|
1139
1179
|
import { FlowTextKey as FlowTextKey2 } from "@flowgram.ai/renderer";
|
|
1140
1180
|
import {
|
|
1141
|
-
FlowNodeBaseType as
|
|
1142
|
-
FlowTransitionLabelEnum as
|
|
1181
|
+
FlowNodeBaseType as FlowNodeBaseType13,
|
|
1182
|
+
FlowTransitionLabelEnum as FlowTransitionLabelEnum10,
|
|
1143
1183
|
FlowTransitionLineEnum as FlowTransitionLineEnum5,
|
|
1144
1184
|
getDefaultSpacing as getDefaultSpacing5,
|
|
1145
1185
|
ConstantKeys as ConstantKeys4
|
|
1146
1186
|
} from "@flowgram.ai/document";
|
|
1147
1187
|
var LoopInlineBlocksNodeRegistry = {
|
|
1148
|
-
type:
|
|
1188
|
+
type: FlowNodeBaseType13.INLINE_BLOCKS,
|
|
1149
1189
|
meta: {
|
|
1150
1190
|
inlineSpacingPre: (node) => {
|
|
1151
1191
|
const inlineBlocksInlineSpacingTop = getDefaultSpacing5(
|
|
@@ -1218,7 +1258,7 @@ var LoopInlineBlocksNodeRegistry = {
|
|
|
1218
1258
|
const rightBlockTransform = currentTransform.children[1];
|
|
1219
1259
|
if (transition.entity.originParent?.id.startsWith("while_")) {
|
|
1220
1260
|
labels.push({
|
|
1221
|
-
type:
|
|
1261
|
+
type: FlowTransitionLabelEnum10.TEXT_LABEL,
|
|
1222
1262
|
renderKey: FlowTextKey2.LOOP_WHILE_TEXT,
|
|
1223
1263
|
rotate: isVertical ? "" : "-90deg",
|
|
1224
1264
|
offset: isVertical ? {
|
|
@@ -1231,7 +1271,7 @@ var LoopInlineBlocksNodeRegistry = {
|
|
|
1231
1271
|
});
|
|
1232
1272
|
} else {
|
|
1233
1273
|
labels.push({
|
|
1234
|
-
type:
|
|
1274
|
+
type: FlowTransitionLabelEnum10.TEXT_LABEL,
|
|
1235
1275
|
renderKey: FlowTextKey2.LOOP_TRAVERSE_TEXT,
|
|
1236
1276
|
// rotate: isVertical ? '' : '-90deg',
|
|
1237
1277
|
offset: isVertical ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.center.y + 5 } : { x: currentTransform.bounds.center.x + 5, y: leftBlockTransform.inputPoint.y }
|
|
@@ -1275,14 +1315,14 @@ var LoopRegistry = {
|
|
|
1275
1315
|
const loopBlocks = json.blocks || [];
|
|
1276
1316
|
const loopIconNode = document.addNode({
|
|
1277
1317
|
id: `$blockIcon$${node.id}`,
|
|
1278
|
-
type:
|
|
1318
|
+
type: FlowNodeBaseType14.BLOCK_ICON,
|
|
1279
1319
|
originParent: node,
|
|
1280
1320
|
parent: node
|
|
1281
1321
|
});
|
|
1282
1322
|
const loopInlineBlocks = document.addNode({
|
|
1283
1323
|
id: `$inlineBlocks$${node.id}`,
|
|
1284
1324
|
hidden: true,
|
|
1285
|
-
type:
|
|
1325
|
+
type: FlowNodeBaseType14.INLINE_BLOCKS,
|
|
1286
1326
|
originParent: node,
|
|
1287
1327
|
parent: node
|
|
1288
1328
|
});
|
|
@@ -1296,7 +1336,7 @@ var LoopRegistry = {
|
|
|
1296
1336
|
const loopBlockNode = document.addNode({
|
|
1297
1337
|
id: `$block$${node.id}`,
|
|
1298
1338
|
hidden: true,
|
|
1299
|
-
type:
|
|
1339
|
+
type: FlowNodeBaseType14.BLOCK,
|
|
1300
1340
|
// : LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,
|
|
1301
1341
|
originParent: node,
|
|
1302
1342
|
parent: loopInlineBlocks
|
|
@@ -1334,7 +1374,7 @@ var LoopRegistry = {
|
|
|
1334
1374
|
return [
|
|
1335
1375
|
// 循环结束
|
|
1336
1376
|
{
|
|
1337
|
-
type:
|
|
1377
|
+
type: FlowTransitionLabelEnum11.TEXT_LABEL,
|
|
1338
1378
|
renderKey: FlowTextKey3.LOOP_END_TEXT,
|
|
1339
1379
|
// 循环 label 垂直样式展示,而非 rotate 旋转文案
|
|
1340
1380
|
props: isVertical ? void 0 : {
|
|
@@ -1347,7 +1387,7 @@ var LoopRegistry = {
|
|
|
1347
1387
|
offset: Point5.move(currentTransform.outputPoint, isVertical ? { y: -26 } : { x: -26 })
|
|
1348
1388
|
},
|
|
1349
1389
|
{
|
|
1350
|
-
type:
|
|
1390
|
+
type: FlowTransitionLabelEnum11.ADDER_LABEL,
|
|
1351
1391
|
offset: currentTransform.outputPoint
|
|
1352
1392
|
}
|
|
1353
1393
|
];
|
|
@@ -1381,7 +1421,7 @@ var LoopRegistry = {
|
|
|
1381
1421
|
},
|
|
1382
1422
|
extendChildRegistries: [
|
|
1383
1423
|
{
|
|
1384
|
-
type:
|
|
1424
|
+
type: FlowNodeBaseType14.BLOCK_ICON,
|
|
1385
1425
|
meta: {
|
|
1386
1426
|
spacing: LoopSpacings.LOOP_BLOCK_ICON_SPACING
|
|
1387
1427
|
}
|
|
@@ -1404,9 +1444,9 @@ var LoopRegistry = {
|
|
|
1404
1444
|
};
|
|
1405
1445
|
|
|
1406
1446
|
// src/activities/root.ts
|
|
1407
|
-
import { DEFAULT_SPACING as DEFAULT_SPACING7, FlowNodeBaseType as
|
|
1447
|
+
import { DEFAULT_SPACING as DEFAULT_SPACING7, FlowNodeBaseType as FlowNodeBaseType15 } from "@flowgram.ai/document";
|
|
1408
1448
|
var RootRegistry = {
|
|
1409
|
-
type:
|
|
1449
|
+
type: FlowNodeBaseType15.ROOT,
|
|
1410
1450
|
meta: {
|
|
1411
1451
|
spacing: DEFAULT_SPACING7.NULL,
|
|
1412
1452
|
hidden: true
|
|
@@ -1421,13 +1461,13 @@ var RootRegistry = {
|
|
|
1421
1461
|
|
|
1422
1462
|
// src/activities/empty.ts
|
|
1423
1463
|
import {
|
|
1424
|
-
FlowNodeBaseType as
|
|
1425
|
-
FlowTransitionLabelEnum as
|
|
1464
|
+
FlowNodeBaseType as FlowNodeBaseType16,
|
|
1465
|
+
FlowTransitionLabelEnum as FlowTransitionLabelEnum12,
|
|
1426
1466
|
ConstantKeys as ConstantKeys6,
|
|
1427
1467
|
getDefaultSpacing as getDefaultSpacing7
|
|
1428
1468
|
} from "@flowgram.ai/document";
|
|
1429
1469
|
var EmptyRegistry = {
|
|
1430
|
-
type:
|
|
1470
|
+
type: FlowNodeBaseType16.EMPTY,
|
|
1431
1471
|
meta: {
|
|
1432
1472
|
spacing: (node) => {
|
|
1433
1473
|
const spacing = getDefaultSpacing7(node.entity, ConstantKeys6.NODE_SPACING);
|
|
@@ -1440,7 +1480,7 @@ var EmptyRegistry = {
|
|
|
1440
1480
|
return [
|
|
1441
1481
|
{
|
|
1442
1482
|
offset: transition.transform.bounds,
|
|
1443
|
-
type:
|
|
1483
|
+
type: FlowTransitionLabelEnum12.ADDER_LABEL
|
|
1444
1484
|
}
|
|
1445
1485
|
];
|
|
1446
1486
|
}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fixed-layout-container-module.ts","../../src/flow-registers.ts","../../src/activities/end.ts","../../src/activities/dynamic-split.ts","../../src/activities/static-split.ts","../../src/activities/block.ts","../../src/activities/inline-blocks.ts","../../src/activities/block-icon.ts","../../src/activities/block-order-icon.ts","../../src/activities/start.ts","../../src/activities/try-catch.ts","../../src/activities/try-catch-extends/catch-block.ts","../../src/activities/try-catch-extends/catch-inline-blocks.ts","../../src/activities/try-catch-extends/main-inline-blocks.ts","../../src/activities/try-catch-extends/try-block.ts","../../src/activities/try-catch-extends/try-slot.ts","../../src/activities/loop.ts","../../src/activities/loop-extends/constants.ts","../../src/activities/loop-extends/loop-left-empty-block.ts","../../src/activities/loop-extends/loop-right-empty-block.ts","../../src/activities/loop-extends/loop-empty-branch.ts","../../src/activities/loop-extends/loop-inline-blocks.ts","../../src/activities/root.ts","../../src/activities/empty.ts","../../src/index.ts"],"sourcesContent":["import { ContainerModule } from 'inversify';\nimport { FlowRendererContribution } from '@flowgram.ai/renderer';\nimport { FlowDocumentContribution } from '@flowgram.ai/document';\nimport { PlaygroundContribution } from '@flowgram.ai/core';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FlowRegisters } from './flow-registers';\n\nexport const FixedLayoutContainerModule = new ContainerModule(bind => {\n bindContributions(bind, FlowRegisters, [\n FlowDocumentContribution,\n FlowRendererContribution,\n PlaygroundContribution,\n ]);\n});\n","import { injectable } from 'inversify';\nimport {\n FlowLabelsLayer,\n FlowLinesLayer,\n FlowNodesContentLayer,\n FlowNodesTransformLayer,\n type FlowRendererContribution,\n type FlowRendererRegistry,\n FlowScrollBarLayer,\n FlowScrollLimitLayer,\n} from '@flowgram.ai/renderer';\nimport {\n type FlowDocument,\n type FlowDocumentContribution,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n} from '@flowgram.ai/document';\nimport { type PlaygroundContribution, PlaygroundLayer } from '@flowgram.ai/core';\n\nimport { EndRegistry } from './activities/end';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n InlineBlocksRegistry,\n LoopRegistry,\n RootRegistry,\n StartRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n} from './activities';\n\n@injectable()\nexport class FlowRegisters\n implements FlowDocumentContribution, FlowRendererContribution, PlaygroundContribution\n{\n /**\n * 注册数据层\n * @param document\n */\n registerDocument(document: FlowDocument) {\n /**\n * 注册节点 (ECS - Entity)\n */\n document.registerFlowNodes(\n RootRegistry, // 根节点\n StartRegistry, // 开始节点\n DynamicSplitRegistry, // 动态分支(并行、排他)\n StaticSplitRegistry, // 静态分支(审批)\n BlockRegistry, // 单条 block 注册\n InlineBlocksRegistry, // 多个 block 组成的 block 列表\n BlockIconRegistry, // icon 节点,如条件分支的菱形图标\n BlockOrderIconRegistry, // 带顺序的图标节点,一般为 block 第一个分支节点\n TryCatchRegistry, // TryCatch\n EndRegistry, // 结束节点\n LoopRegistry, // 循环节点\n EmptyRegistry // 占位节点\n );\n /**\n * 注册节点数据 (ECS - Component)\n */\n document.registerNodeDatas(\n FlowNodeRenderData, // 渲染节点相关数据\n FlowNodeTransitionData, // 线条绘制数据\n FlowNodeTransformData // 坐标计算数据\n );\n }\n\n /**\n * 注册渲染层\n * @param renderer\n */\n registerRenderer(renderer: FlowRendererRegistry) {\n /**\n * 注册 layer (ECS - System)\n */\n renderer.registerLayers(\n FlowNodesTransformLayer, // 节点位置渲染\n FlowNodesContentLayer, // 节点内容渲染\n FlowLinesLayer, // 线条渲染\n FlowLabelsLayer, // Label 渲染\n PlaygroundLayer, // 画布基础层,提供缩放、手势等能力\n FlowScrollLimitLayer, // 控制滚动范围\n FlowScrollBarLayer // 滚动条\n );\n }\n\n /**\n * 画布开始渲染 (hook)\n */\n onReady(): void {}\n\n /**\n * 画布销毁 (hook)\n */\n onDispose(): void {}\n}\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 结束节点\n */\nexport const EndRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.END,\n meta: {\n draggable: false,\n isNodeEnd: true,\n selectable: false,\n copyDisable: true,\n },\n // 结束节点没有出边和 label\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 可以动态添加分支的分支节点\n * dynamicSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const DynamicSplitRegistry: FlowNodeRegistry = {\n type: FlowNodeSplitType.DYNAMIC_SPLIT,\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) =>\n node.collapsed && node.entity.collapsedChildren.length > 1 ? 21 : 0,\n // 判断是否有分支节点\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return node.children.length === 1 ? spacing : spacing / 2;\n },\n },\n getLabels(transition) {\n if (transition.isNodeEnd) {\n return [];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: transition.transform.outputPoint,\n },\n ];\n },\n onCreate(node, json) {\n return node.document.addInlineBlocks(node, json.blocks || []);\n },\n getInputPoint(transform) {\n // block icon\n return transform.firstChild?.inputPoint || transform.defaultInputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 没有分支节点\n const noInlineBlocks = transform.children.length === 1;\n const lastChildOutput = transform.lastChild?.outputPoint;\n const spacing = getDefaultSpacing(transform.entity, ConstantKeys.NODE_SPACING);\n\n if (isVertical) {\n return {\n x: lastChildOutput ? lastChildOutput.x : transform.bounds.center.x,\n y: transform.bounds.bottom + (noInlineBlocks ? spacing / 2 : 0),\n };\n }\n\n return {\n x: transform.bounds.right + (noInlineBlocks ? spacing / 2 : 0),\n y: lastChildOutput ? lastChildOutput.y : transform.bounds.center.y,\n };\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n const parentId = `$inlineBlocks$${node.id}`;\n let parent = document.getNode(parentId);\n if (!parent) {\n parent = document.addNode({\n id: parentId,\n type: 'inlineBlocks',\n originParent: node,\n parent: node,\n });\n }\n return document.addBlock(node, json, undefined, undefined, index);\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry, FlowNodeSplitType } from '@flowgram.ai/document';\n\n/**\n * 不能动态添加分支的分支节点\n * staticSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const StaticSplitRegistry: FlowNodeRegistry = {\n extend: FlowNodeSplitType.DYNAMIC_SPLIT,\n type: FlowNodeSplitType.STATIC_SPLIT,\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n getLabels() {\n return [];\n },\n },\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram.ai/document';\n\n/**\n * block, block 的输入输出点由子节点决定\n */\nexport const BlockRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingAfter: DEFAULT_SPACING.INLINE_BLOCK_PADDING_BOTTOM,\n hidden: true,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n const lines: FlowTransitionLine[] = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: currentTransform.parent!.inputPoint,\n to: currentTransform.inputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n ];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 分支拖拽场景线条 push\n // 当有其余分支的时候,绘制一条两个分支之间的线条\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n }\n }\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: currentTransform.outputPoint,\n to: currentTransform.parent!.outputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n\n return lines;\n },\n getInputPoint(trans) {\n const child = trans.firstChild;\n return child ? child.inputPoint : trans.defaultInputPoint;\n },\n getOutputPoint(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const child = trans.lastChild;\n if (isVertical) {\n return {\n x: child ? child.outputPoint.x : trans.bounds.bottomCenter.x,\n y: trans.bounds.bottom,\n };\n }\n return {\n x: trans.bounds.right,\n y: child ? child.outputPoint.y : trans.bounds.rightCenter.y,\n };\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const draggingLabel = [];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 获取两个分支节点中间点作为拖拽标签插入位置\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftX - currentOffsetRightX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftY - currentOffsetRightY,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: node,\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowNodeTransformData,\n type FlowNodeTransitionData,\n FlowTransitionLabelEnum,\n FlowLayoutDefault,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 水平 Block 的偏移\n */\nexport const InlineBlocksRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n hidden: true,\n spacing: (node) => getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING),\n isInlineBlocks: true,\n inlineSpacingPre: DEFAULT_SPACING.INLINE_BLOCKS_PADDING_TOP,\n inlineSpacingAfter: (node) =>\n getDefaultSpacing(node.entity, ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM),\n },\n /**\n * 控制子分支的间距\n * @param child\n */\n getChildDelta(child, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n if (isVertical) {\n const leftSpacing = preTransform.size.width + preTransform.originDeltaX;\n\n // 如果小于最小宽度,偏移最小宽度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - leftSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaX\n );\n\n return {\n // 这里需要加上原点的偏移量,并加上水平间距\n x: preBounds.right + delta,\n y: 0,\n };\n } else {\n const bottomSpacing = preTransform.size.height + preTransform.originDeltaY;\n\n // 如果小于最小高度,偏移最小高度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - bottomSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaY\n );\n\n return {\n x: 0,\n // 这里需要加上原点的偏移量,并加上垂直间距\n y: preBounds.bottom + delta,\n };\n }\n }\n return {\n x: 0,\n y: 0,\n };\n },\n /**\n * 控制条件分支居中布局\n * @param trans\n */\n getDelta(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const { pre, collapsed } = trans;\n\n if (collapsed) {\n return { x: 0, y: 0 };\n }\n\n if (isVertical) {\n const preCenter = pre!.localBounds.center.x;\n const firstBlockX = trans.firstChild?.transform.position.x || 0;\n const lastBlockX = trans.lastChild?.transform.position.x || 0;\n const currentCenter = (lastBlockX - firstBlockX) / 2;\n\n return {\n x: preCenter - currentCenter,\n y: 0,\n };\n }\n const preCenter = pre!.localBounds.center.y;\n const firstBlockY = trans.firstChild?.transform.position.y || 0;\n const lastBlockY = trans.lastChild?.transform.position.y || 0;\n const currentCenter = (lastBlockY - firstBlockY) / 2;\n\n return {\n x: 0,\n y: preCenter - currentCenter,\n };\n },\n getLabels(transition) {\n return getBranchAdderLabel(transition);\n },\n getLines() {\n return [];\n },\n // 和前序节点对齐\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n};\n\n/**\n * inlineBlocks 获取 BranchAdder 和展开 label\n */\nexport function getBranchAdderLabel(transition: FlowNodeTransitionData) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 收起时展示收起 label\n if (currentTransform.collapsed) {\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n activateNode: transition.entity.pre,\n },\n },\n ];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n}\n","import { Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 图标占位节点,如条件分支的菱形图标\n */\nexport const BlockIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: 20, // 占位节点下边偏小\n // 条件分支 icon 默认的高度比较高,在流程里下边有文字\n size: { width: 250, height: 84 },\n },\n /**\n * 是一个占位节点,后续要加上 label 展开收起的图标\n */\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n // 为节点,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n return [];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n props: {\n collapseNode: transition.entity.parent,\n activateNode: transition.entity,\n },\n },\n ];\n },\n};\n","import { IPoint, Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 带顺序的图标节点,一般为 block 第一个分支节点\n * - 只有一个分支时,不需要展开收起\n */\nexport const BlockOrderIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n meta: {\n spacing: 40,\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const currentOutput = currentTransform.outputPoint;\n const nextTransform = currentTransform.next;\n const parentTransform = currentTransform.parent;\n\n // 为空分支,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n const parentOutput = parentTransform?.outputPoint as IPoint;\n return [\n {\n offset: parentOutput,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n offset: nextTransform\n ? Point.getMiddlePoint(currentOutput, nextTransform.inputPoint)\n : Point.move(\n currentOutput,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n // 收起展开复合按钮\n type: FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,\n props: {\n activateNode: transition.entity,\n collapseNode: transition.entity.parent,\n },\n },\n ];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 开始节点\n */\nexport const StartRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.START,\n meta: {\n isStart: true,\n draggable: false,\n selectable: false, // 触发器等开始节点不能被框选\n deleteDisable: true, // 禁止删除\n copyDisable: true, // 禁止copy\n addDisable: true, // 禁止添加\n },\n};\n","import {\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n} from '@flowgram.ai/document';\n\nimport {\n CatchBlockRegistry,\n CatchInlineBlocksRegistry,\n MainInlineBlocksRegistry,\n TryBlockRegistry,\n TryCatchSpacings,\n TryCatchTypeEnum,\n TrySlotRegistry,\n} from './try-catch-extends';\n\n/**\n * try catch 节点\n */\nexport const TryCatchRegistry: FlowNodeRegistry = {\n type: 'tryCatch',\n meta: {\n hidden: true,\n inlineSpacingAfter: TryCatchSpacings.INLINE_SPACING_BOTTOM,\n },\n /**\n * 结构\n * tryCatch\n * - tryCatchIcon\n * - mainInlineBlocks\n * - tryBlock // try 分支\n * - trySlot // 空节点用来占位,try 分支一开始没有节点\n * - catchInlineBlocks\n * - catchBlock // catch 分支 1\n * - blockOrderIcon\n * - node1\n * - catchBlock // catch 分支 2\n * - blockOrderIcon\n * - node 2\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const [tryBlock, ...catchBlocks] = json.blocks || [];\n const addedNodes: FlowNodeEntity[] = [];\n const tryCatchIconNode = document.addNode({\n id: `$tryCatchIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const mainBlockNode = document.addNode({\n id: `$mainInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const tryBlockNode = document.addNode({\n id: `$tryBlock$${tryBlock.id}`,\n type: TryCatchTypeEnum.TRY_BLOCK,\n originParent: node,\n parent: mainBlockNode,\n });\n const trySlotNode = document.addNode({\n id: tryBlock.id,\n type: TryCatchTypeEnum.TRY_SLOT, // 占位节点\n originParent: node,\n parent: tryBlockNode,\n });\n const catchInlineBlocksNode = document.addNode({\n id: `$catchInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n originParent: node,\n parent: mainBlockNode,\n });\n addedNodes.push(\n tryCatchIconNode,\n mainBlockNode,\n tryBlockNode,\n trySlotNode,\n catchInlineBlocksNode\n );\n catchBlocks.forEach((blockData) => {\n node.document.addBlock(node, blockData, addedNodes);\n });\n return addedNodes;\n },\n /**\n * 添加 catch 分支\n * @param node\n * @param blockData\n * @param addedNodes\n */\n onBlockChildCreate(node, blockData, addedNodes) {\n const parent = node.document.getNode(`$catchInlineBlocks$${node.id}`);\n const block = node.document.addNode({\n id: blockData.id,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n originParent: node,\n parent,\n });\n // 分支开始节点\n const blockOrderIcon = node.document.addNode({\n id: `$blockOrderIcon$${blockData.id}`,\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n originParent: node,\n parent: block,\n });\n if (blockData.blocks) {\n node.document.addBlocksAsChildren(block, blockData.blocks || [], addedNodes);\n }\n addedNodes?.push(block, blockOrderIcon);\n return block;\n },\n getInputPoint(transform) {\n const tryCatchIcon = transform.firstChild!;\n // 使用图标的 inputPoint\n return tryCatchIcon.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const tryCatchIcon = transform.firstChild!;\n if (isVertical) {\n return {\n x: tryCatchIcon.inputPoint.x,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: tryCatchIcon.inputPoint.y,\n };\n },\n /**\n * tryCatch 子节点配置\n */\n extendChildRegistries: [\n /**\n * icon 节点\n */\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: TryCatchSpacings.INLINE_SPACING_TOP,\n },\n getLabels() {\n return [];\n },\n },\n MainInlineBlocksRegistry,\n CatchInlineBlocksRegistry,\n TryBlockRegistry,\n CatchBlockRegistry,\n TrySlotRegistry,\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLineEnum,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支\n */\nexport const CatchBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const parentPoint = transform.parent!;\n const { inputPoint, outputPoint } = transform;\n let parentInputPoint;\n if (isVertical) {\n parentInputPoint = {\n x: parentPoint.inputPoint.x,\n y: parentPoint.inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n } else {\n parentInputPoint = {\n x: parentPoint.inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: parentPoint.inputPoint.y,\n };\n }\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: parentInputPoint,\n to: inputPoint,\n },\n ];\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n let mergePoint;\n if (isVertical) {\n mergePoint = {\n x: parentPoint.outputPoint.x,\n y: parentPoint.bounds.bottom,\n };\n } else {\n mergePoint = {\n x: parentPoint.bounds.right,\n y: parentPoint.outputPoint.y,\n };\n }\n\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: outputPoint,\n to: mergePoint,\n });\n }\n\n return lines;\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支列表\n */\nexport const CatchInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingPre: DEFAULT_SPACING.NULL,\n // inlineSpacingAfter: DEFAULT_SPACING.NULL,\n },\n getDelta() {\n return undefined;\n },\n getLines(transition) {\n const { transform } = transition;\n const mainInlineBlocks = transform.parent!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: mainInlineBlocks.pre!.outputPoint,\n to: transform.inputPoint,\n },\n ];\n\n if (!transform.entity.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: transform.outputPoint,\n to: mainInlineBlocks.outputPoint,\n });\n }\n\n return lines;\n },\n getOriginDeltaX(transform) {\n const { firstChild } = transform;\n if (!firstChild) return 0;\n return firstChild.originDeltaX;\n },\n getLabels(transition) {\n const { inputPoint } = transition.transform;\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 实际输入点\n const actualInputPoint = {\n x: isVertical ? inputPoint.x : inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: isVertical ? inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING : inputPoint.y,\n };\n\n if (currentTransform.collapsed) {\n return [];\n }\n\n // branch adder 节点\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: actualInputPoint,\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n },\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 因为是左偏移,所以用第一条 catch 分支\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return firstCatchBlock.inputPoint;\n }\n return isVertical ? transform.bounds.topCenter : transform.bounds.rightCenter;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return isVertical\n ? {\n x: firstCatchBlock!.outputPoint?.x,\n y: transform.bounds.bottom,\n }\n : {\n x: transform.bounds.right,\n y: firstCatchBlock!.outputPoint?.y,\n };\n }\n return isVertical ? transform.bounds.bottomCenter : transform.bounds.rightCenter;\n },\n};\n","import { FlowRendererKey, FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeTransformData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * 主 BLOCK\n */\nexport const MainInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: TryCatchSpacings.MAIN_INLINE_SPACING_TOP,\n inlineSpacingAfter: TryCatchSpacings.MAIN_INLINE_SPACING_BOTTOM,\n },\n getLines(transition) {\n const { transform } = transition;\n const tryBranch = transform.firstChild!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: tryBranch.outputPoint,\n to: transform.originParent!.outputPoint,\n },\n ];\n\n return lines;\n },\n getLabels(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const catchInlineBlocks = transform.children[1]!;\n const errLabelX = isVertical\n ? (transform.parent!.outputPoint.x + catchInlineBlocks.inputPoint.x) / 2\n : transform.inputPoint.x - TryCatchSpacings.INLINE_SPACING_TOP;\n const errLabelY = isVertical\n ? transform.inputPoint.y - TryCatchSpacings.INLINE_SPACING_TOP\n : (transform.parent!.outputPoint.y + catchInlineBlocks.inputPoint.y) / 2;\n\n const errorLabelX = errLabelX;\n const errorLabelY = errLabelY;\n return [\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_START_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.inputPoint.x + TryCatchSpacings.TRY_START_LABEL_DELTA,\n y: isVertical\n ? transform.inputPoint.y + TryCatchSpacings.TRY_START_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_END_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.originParent!.outputPoint.x + TryCatchSpacings.TRY_END_LABEL_DELTA,\n y: isVertical\n ? transform.originParent!.outputPoint.y + TryCatchSpacings.TRY_END_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n // 错误分支收起\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.TRY_CATCH_COLLAPSE,\n offset: {\n x: errorLabelX,\n y: errorLabelY,\n },\n props: {\n node: transform.lastChild?.entity,\n },\n },\n ];\n },\n getInputPoint(transform) {\n const tryBlock = transform.firstChild!;\n return tryBlock.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const tryBlock = transform.firstChild!;\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: tryBlock.outputPoint.x,\n y: transform.bounds.bottom + TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n }\n return {\n x: transform.bounds.right + TryCatchSpacings.CATCH_INLINE_SPACING,\n y: tryBlock.outputPoint.y,\n };\n },\n getDelta() {\n return undefined;\n },\n getChildDelta(child, layout) {\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n // try 分支和 catch 分支的最小间距不低于 minInlineBlockSpacing\n let delta = 0;\n if (isVertical) {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaX + DEFAULT_SPACING.MARGIN_RIGHT\n );\n } else {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaY + DEFAULT_SPACING.MARGIN_RIGHT\n );\n }\n\n return {\n // 分支只有两个所以这里可以写死间隔宽度\n x: isVertical ? preBounds.right + delta : 0,\n y: isVertical ? 0 : preBounds.bottom + delta,\n };\n }\n return {\n x: 0,\n y: 0,\n };\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 分支\n */\nexport const TryBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.TRY_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 占位节点\n */\nexport const TrySlotRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.EMPTY,\n type: TryCatchTypeEnum.TRY_SLOT,\n // getLabels() {\n // return []\n // },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport {\n LoopEmptyBranchRegistry,\n LoopInlineBlocksNodeRegistry,\n LoopLeftEmptyBlockRegistry,\n LoopRightEmptyBlockRegistry,\n LoopSpacings,\n LoopTypeEnum,\n} from './loop-extends';\n\n/**\n * 循环节点\n */\nexport const LoopRegistry: FlowNodeRegistry = {\n type: 'loop',\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) => {\n if (node.collapsed) {\n return LoopSpacings.COLLAPSE_INLINE_SPACING_BOTTOM;\n }\n const inlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_SPACING_BOTTOM\n );\n return inlineSpacingBottom;\n },\n spacing: LoopSpacings.SPACING,\n },\n /**\n * - loopNode\n * - loopBlockIcon\n * - loopInlineBlocks\n * - loopEmptyBlock 左侧占位区域\n * - loopBlock\n * - xxx\n * - xxx\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const loopBlocks = json.blocks || [];\n\n const loopIconNode = document.addNode({\n id: `$blockIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const loopInlineBlocks = document.addNode({\n id: `$inlineBlocks$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const loopEmptyBlockNode = document.addNode({\n id: `$loopLeftEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n\n const loopBlockNode = document.addNode({\n id: `$block$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.BLOCK, // : LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n const loopBranch = document.addNode({\n id: `$loopRightEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n originParent: node,\n parent: loopBlockNode,\n });\n const otherNodes: FlowNodeEntity[] = [];\n loopBlocks.forEach((b) =>\n document.addNode(\n {\n ...b,\n type: b.type!,\n parent: loopBlockNode,\n },\n otherNodes\n )\n );\n\n return [\n loopIconNode,\n loopEmptyBlockNode,\n loopInlineBlocks,\n loopBlockNode,\n loopBranch,\n ...otherNodes,\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n return [\n // 循环结束\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_END_TEXT,\n // 循环 label 垂直样式展示,而非 rotate 旋转文案\n props: isVertical\n ? undefined\n : {\n style: {\n maxWidth: '20px',\n lineHeight: '12px',\n whiteSpace: 'pre-wrap',\n },\n },\n offset: Point.move(currentTransform.outputPoint, isVertical ? { y: -26 } : { x: -26 }),\n },\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: currentTransform.outputPoint,\n },\n ];\n },\n // 和前序节点对齐\n getInputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: LoopSpacings.LOOP_BLOCK_ICON_SPACING,\n },\n },\n LoopLeftEmptyBlockRegistry,\n LoopEmptyBranchRegistry,\n LoopRightEmptyBlockRegistry,\n LoopInlineBlocksNodeRegistry,\n ],\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: document.getNode(`$block$${node.id}`),\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { ConstantKeys } from '@flowgram.ai/document';\n\nexport enum LoopTypeEnum {\n LOOP_LEFT_EMPTY_BLOCK = 'loopLeftEmptyBlock',\n LOOP_RIGHT_EMPTY_BLOCK = 'loopRightEmptyBlock',\n LOOP_EMPTY_BRANCH = 'loopEmptyBranch',\n}\n\nexport const LoopSpacings = {\n SPACING: 16, // 距离下面节点距离\n COLLAPSE_INLINE_SPACING_BOTTOM: 60, // 距离下面节点距离\n [ConstantKeys.INLINE_SPACING_BOTTOM]: 48, // 下边空白\n MIN_INLINE_BLOCK_SPACING: 280, // 最小循环圈宽度\n HORIZONTAL_MIN_INLINE_BLOCK_SPACING: 180, // 水平布局下的最小循环圈高度\n LEFT_EMPTY_BLOCK_WIDTH: 80, // 左边空分支宽度\n EMPTY_BRANCH_SPACING: 20, // 左边空分支宽度\n LOOP_BLOCK_ICON_SPACING: 13, // inlineBlocks 的 inlineBottom\n [ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM]: 23, // inlineBlocks 的 inlineBottom\n INLINE_BLOCKS_INLINE_SPACING_TOP: 30, // inlineBlocks 的 inlineTop\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopLeftEmptyBlockRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n meta: {\n inlineSpacingAfter: 0,\n spacing: 0,\n size: {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { BlockRegistry } from '../block';\nimport { LoopTypeEnum } from './constants';\n\nexport const LoopRightEmptyBlockRegistry: FlowNodeRegistry = {\n ...BlockRegistry,\n type: LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n meta: {\n ...BlockRegistry.meta,\n inlineSpacingAfter: 0,\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopEmptyBranchRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n meta: {\n inlineSpacingAfter: 0,\n spacing: LoopSpacings.EMPTY_BRANCH_SPACING,\n size: {\n width: 100,\n height: 0,\n },\n },\n getLabels(transition) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n if (isVertical) {\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.inputPoint.x,\n y: currentTransform.bounds.center.y + 8, // 右边空节点\n },\n },\n ];\n }\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.bounds.center.x + 8,\n y: currentTransform.inputPoint.y,\n },\n },\n ];\n },\n onAfterUpdateLocalTransform(transform): void {\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 100,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 100,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport { LoopSpacings } from './constants';\n\nexport const LoopInlineBlocksNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: (node) => {\n const inlineBlocksInlineSpacingTop = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_TOP,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_TOP\n );\n return inlineBlocksInlineSpacingTop;\n },\n inlineSpacingAfter: (node) => {\n const inlineBlocksInlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_BOTTOM\n );\n return inlineBlocksInlineSpacingBottom;\n },\n minInlineBlockSpacing: (node) =>\n node.entity.isVertical\n ? LoopSpacings.MIN_INLINE_BLOCK_SPACING\n : LoopSpacings.HORIZONTAL_MIN_INLINE_BLOCK_SPACING,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const parentTransform = currentTransform.parent!;\n const { isVertical } = transition.entity;\n\n const lines: FlowTransitionLine[] = [\n // 循环结束线\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: currentTransform.outputPoint,\n to: parentTransform.outputPoint,\n },\n ];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return lines;\n }\n\n const [leftBlockTransform] = currentTransform.children;\n\n return [\n ...lines,\n // 循环回撤线 - 1 分成两段可以被 viewport 识别出矩阵区域\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: currentTransform.outputPoint,\n to: leftBlockTransform.outputPoint,\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.bottom }\n : { x: currentTransform.bounds.right, y: leftBlockTransform.inputPoint.y },\n ],\n },\n // 循环回撤线 - 2\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: leftBlockTransform.outputPoint,\n to: Point.move(\n currentTransform.inputPoint,\n isVertical ? { x: -12, y: 10 } : { x: 10, y: -12 }\n ),\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.top + 10 }\n : { x: currentTransform.bounds.left + 10, y: leftBlockTransform.inputPoint.y },\n ],\n arrow: true,\n },\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const labels: FlowTransitionLabel[] = [];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return labels;\n }\n\n const leftBlockTransform = currentTransform.children[0];\n const rightBlockTransform = currentTransform.children[1];\n\n if (transition.entity.originParent?.id.startsWith('while_')) {\n // 满足条件时\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_WHILE_TEXT,\n rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? {\n x: (currentTransform.inputPoint.x + rightBlockTransform.inputPoint.x) / 2,\n y: currentTransform.inputPoint.y + 10,\n }\n : {\n x: currentTransform.inputPoint.x + 10,\n y: (currentTransform.inputPoint.y + rightBlockTransform.inputPoint.y) / 2,\n },\n });\n } else {\n // 循环遍历\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_TRAVERSE_TEXT,\n // rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.center.y + 5 }\n : { x: currentTransform.bounds.center.x + 5, y: leftBlockTransform.inputPoint.y },\n });\n }\n\n return labels;\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 根节点\n */\nexport const RootRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.ROOT,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n hidden: true,\n },\n getInputPoint(transform) {\n return transform.firstChild?.inputPoint || transform.bounds.topCenter;\n },\n getOutputPoint(transform) {\n return transform.firstChild?.outputPoint || transform.bounds.bottomCenter;\n },\n};\n","import {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 占位节点,宽高为 0, 该节点下边同样有 \"添加 label\"\n */\nexport const EmptyRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.EMPTY,\n meta: {\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return spacing / 2;\n },\n size: { width: 0, height: 0 },\n hidden: true,\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n","export * from './fixed-layout-container-module';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n} from './activities';\n\nexport const FixedLayoutRegistries = {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n};\n"],"mappings":"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","names":["FlowNodeRenderData","FlowNodeTransformData","FlowNodeBaseType","FlowNodeSplitType","FlowLayoutDefault","FlowNodeBaseType","FlowTransitionLabelEnum","DEFAULT_SPACING","FlowNodeBaseType","FlowTransitionLabelEnum","FlowLayoutDefault","ConstantKeys","getDefaultSpacing","preCenter","currentCenter","Point","getDefaultSpacing","FlowNodeBaseType","FlowTransitionLabelEnum","Point","DefaultSpacingKey","getDefaultSpacing","FlowNodeBaseType","FlowTransitionLabelEnum","FlowNodeBaseType","FlowLayoutDefault","FlowNodeBaseType","DEFAULT_SPACING","FlowNodeBaseType","FlowTransitionLineEnum","FlowNodeBaseType","DEFAULT_SPACING","FlowTransitionLineEnum","FlowRendererKey","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeRenderData","FlowTransitionLabelEnum","FlowTransitionLineEnum","FlowLayoutDefault","FlowNodeBaseType","DEFAULT_SPACING","FlowTransitionLineEnum","FlowTransitionLabelEnum","FlowRendererKey","FlowNodeRenderData","FlowLayoutDefault","FlowRendererKey","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeTransformData","FlowTransitionLabelEnum","FlowTransitionLineEnum","FlowLayoutDefault","FlowNodeBaseType","FlowTransitionLineEnum","FlowTransitionLabelEnum","FlowRendererKey","FlowLayoutDefault","FlowNodeTransformData","DEFAULT_SPACING","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeBaseType","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeBaseType","FlowNodeBaseType","FlowLayoutDefault","Point","FlowTextKey","FlowNodeBaseType","FlowTransitionLabelEnum","getDefaultSpacing","ConstantKeys","ConstantKeys","ConstantKeys","FlowTransitionLabelEnum","FlowTransitionLabelEnum","Point","FlowTextKey","FlowNodeBaseType","FlowTransitionLabelEnum","FlowTransitionLineEnum","getDefaultSpacing","ConstantKeys","FlowNodeBaseType","getDefaultSpacing","ConstantKeys","FlowTransitionLineEnum","Point","FlowTransitionLabelEnum","FlowTextKey","getDefaultSpacing","ConstantKeys","FlowNodeBaseType","FlowTransitionLabelEnum","FlowTextKey","Point","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeBaseType","FlowTransitionLabelEnum","ConstantKeys","getDefaultSpacing","FlowNodeRenderData","FlowNodeTransformData"]}
|
|
1
|
+
{"version":3,"sources":["../../src/fixed-layout-container-module.ts","../../src/flow-registers.ts","../../src/activities/end.ts","../../src/activities/dynamic-split.ts","../../src/activities/static-split.ts","../../src/activities/block.ts","../../src/activities/inline-blocks.ts","../../src/activities/block-icon.ts","../../src/activities/block-order-icon.ts","../../src/activities/start.ts","../../src/activities/try-catch.ts","../../src/activities/try-catch-extends/catch-block.ts","../../src/activities/try-catch-extends/catch-inline-blocks.ts","../../src/activities/try-catch-extends/main-inline-blocks.ts","../../src/activities/try-catch-extends/try-block.ts","../../src/activities/try-catch-extends/try-slot.ts","../../src/activities/loop.ts","../../src/activities/loop-extends/constants.ts","../../src/activities/loop-extends/loop-left-empty-block.ts","../../src/activities/loop-extends/loop-right-empty-block.ts","../../src/activities/loop-extends/loop-empty-branch.ts","../../src/activities/loop-extends/loop-inline-blocks.ts","../../src/activities/root.ts","../../src/activities/empty.ts","../../src/index.ts"],"sourcesContent":["import { ContainerModule } from 'inversify';\nimport { FlowRendererContribution } from '@flowgram.ai/renderer';\nimport { FlowDocumentContribution } from '@flowgram.ai/document';\nimport { PlaygroundContribution } from '@flowgram.ai/core';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FlowRegisters } from './flow-registers';\n\nexport const FixedLayoutContainerModule = new ContainerModule(bind => {\n bindContributions(bind, FlowRegisters, [\n FlowDocumentContribution,\n FlowRendererContribution,\n PlaygroundContribution,\n ]);\n});\n","import { injectable } from 'inversify';\nimport {\n FlowLabelsLayer,\n FlowLinesLayer,\n FlowNodesContentLayer,\n FlowNodesTransformLayer,\n type FlowRendererContribution,\n type FlowRendererRegistry,\n FlowScrollBarLayer,\n FlowScrollLimitLayer,\n} from '@flowgram.ai/renderer';\nimport {\n type FlowDocument,\n type FlowDocumentContribution,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n} from '@flowgram.ai/document';\nimport { type PlaygroundContribution, PlaygroundLayer } from '@flowgram.ai/core';\n\nimport { EndRegistry } from './activities/end';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n InlineBlocksRegistry,\n LoopRegistry,\n RootRegistry,\n StartRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n} from './activities';\n\n@injectable()\nexport class FlowRegisters\n implements FlowDocumentContribution, FlowRendererContribution, PlaygroundContribution\n{\n /**\n * 注册数据层\n * @param document\n */\n registerDocument(document: FlowDocument) {\n /**\n * 注册节点 (ECS - Entity)\n */\n document.registerFlowNodes(\n RootRegistry, // 根节点\n StartRegistry, // 开始节点\n DynamicSplitRegistry, // 动态分支(并行、排他)\n StaticSplitRegistry, // 静态分支(审批)\n BlockRegistry, // 单条 block 注册\n InlineBlocksRegistry, // 多个 block 组成的 block 列表\n BlockIconRegistry, // icon 节点,如条件分支的菱形图标\n BlockOrderIconRegistry, // 带顺序的图标节点,一般为 block 第一个分支节点\n TryCatchRegistry, // TryCatch\n EndRegistry, // 结束节点\n LoopRegistry, // 循环节点\n EmptyRegistry // 占位节点\n );\n /**\n * 注册节点数据 (ECS - Component)\n */\n document.registerNodeDatas(\n FlowNodeRenderData, // 渲染节点相关数据\n FlowNodeTransitionData, // 线条绘制数据\n FlowNodeTransformData // 坐标计算数据\n );\n }\n\n /**\n * 注册渲染层\n * @param renderer\n */\n registerRenderer(renderer: FlowRendererRegistry) {\n /**\n * 注册 layer (ECS - System)\n */\n renderer.registerLayers(\n FlowNodesTransformLayer, // 节点位置渲染\n FlowNodesContentLayer, // 节点内容渲染\n FlowLinesLayer, // 线条渲染\n FlowLabelsLayer, // Label 渲染\n PlaygroundLayer, // 画布基础层,提供缩放、手势等能力\n FlowScrollLimitLayer, // 控制滚动范围\n FlowScrollBarLayer // 滚动条\n );\n }\n\n /**\n * 画布开始渲染 (hook)\n */\n onReady(): void {}\n\n /**\n * 画布销毁 (hook)\n */\n onDispose(): void {}\n}\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 结束节点\n */\nexport const EndRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.END,\n meta: {\n draggable: false,\n isNodeEnd: true,\n selectable: false,\n copyDisable: true,\n },\n // 结束节点没有出边和 label\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 可以动态添加分支的分支节点\n * dynamicSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const DynamicSplitRegistry: FlowNodeRegistry = {\n type: FlowNodeSplitType.DYNAMIC_SPLIT,\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) =>\n node.collapsed && node.entity.collapsedChildren.length > 1 ? 21 : 0,\n // 判断是否有分支节点\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return node.children.length === 1 ? spacing : spacing / 2;\n },\n },\n getLabels(transition) {\n if (transition.isNodeEnd) {\n return [];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: transition.transform.outputPoint,\n },\n ];\n },\n onCreate(node, json) {\n return node.document.addInlineBlocks(node, json.blocks || []);\n },\n getInputPoint(transform) {\n // block icon\n return transform.firstChild?.inputPoint || transform.defaultInputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 没有分支节点\n const noInlineBlocks = transform.children.length === 1;\n const lastChildOutput = transform.lastChild?.outputPoint;\n const spacing = getDefaultSpacing(transform.entity, ConstantKeys.NODE_SPACING);\n\n if (isVertical) {\n return {\n x: lastChildOutput ? lastChildOutput.x : transform.bounds.center.x,\n y: transform.bounds.bottom + (noInlineBlocks ? spacing / 2 : 0),\n };\n }\n\n return {\n x: transform.bounds.right + (noInlineBlocks ? spacing / 2 : 0),\n y: lastChildOutput ? lastChildOutput.y : transform.bounds.center.y,\n };\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n const parentId = `$inlineBlocks$${node.id}`;\n let parent = document.getNode(parentId);\n if (!parent) {\n parent = document.addNode({\n id: parentId,\n type: 'inlineBlocks',\n originParent: node,\n parent: node,\n });\n }\n return document.addBlock(node, json, undefined, undefined, index);\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry, FlowNodeSplitType } from '@flowgram.ai/document';\n\n/**\n * 不能动态添加分支的分支节点\n * staticSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const StaticSplitRegistry: FlowNodeRegistry = {\n extend: FlowNodeSplitType.DYNAMIC_SPLIT,\n type: FlowNodeSplitType.STATIC_SPLIT,\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n getLabels() {\n return [];\n },\n },\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram.ai/document';\n\n/**\n * block, block 的输入输出点由子节点决定\n */\nexport const BlockRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingAfter: DEFAULT_SPACING.INLINE_BLOCK_PADDING_BOTTOM,\n hidden: true,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n const lines: FlowTransitionLine[] = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: currentTransform.parent!.inputPoint,\n to: currentTransform.inputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n ];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 分支拖拽场景线条 push\n // 当有其余分支的时候,绘制一条两个分支之间的线条\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n }\n }\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: currentTransform.outputPoint,\n to: currentTransform.parent!.outputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n\n return lines;\n },\n getInputPoint(trans) {\n const child = trans.firstChild;\n return child ? child.inputPoint : trans.defaultInputPoint;\n },\n getOutputPoint(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const child = trans.lastChild;\n if (isVertical) {\n return {\n x: child ? child.outputPoint.x : trans.bounds.bottomCenter.x,\n y: trans.bounds.bottom,\n };\n }\n return {\n x: trans.bounds.right,\n y: child ? child.outputPoint.y : trans.bounds.rightCenter.y,\n };\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const draggingLabel = [];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 获取两个分支节点中间点作为拖拽标签插入位置\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftX - currentOffsetRightX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftY - currentOffsetRightY,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: node,\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowNodeTransformData,\n type FlowNodeTransitionData,\n FlowTransitionLabelEnum,\n FlowLayoutDefault,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 水平 Block 的偏移\n */\nexport const InlineBlocksRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n hidden: true,\n spacing: (node) => getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING),\n isInlineBlocks: true,\n inlineSpacingPre: DEFAULT_SPACING.INLINE_BLOCKS_PADDING_TOP,\n inlineSpacingAfter: (node) =>\n getDefaultSpacing(node.entity, ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM),\n },\n /**\n * 控制子分支的间距\n * @param child\n */\n getChildDelta(child, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n if (isVertical) {\n const leftSpacing = preTransform.size.width + preTransform.originDeltaX;\n\n // 如果小于最小宽度,偏移最小宽度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - leftSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaX\n );\n\n return {\n // 这里需要加上原点的偏移量,并加上水平间距\n x: preBounds.right + delta,\n y: 0,\n };\n } else {\n const bottomSpacing = preTransform.size.height + preTransform.originDeltaY;\n\n // 如果小于最小高度,偏移最小高度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - bottomSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaY\n );\n\n return {\n x: 0,\n // 这里需要加上原点的偏移量,并加上垂直间距\n y: preBounds.bottom + delta,\n };\n }\n }\n return {\n x: 0,\n y: 0,\n };\n },\n /**\n * 控制条件分支居中布局\n * @param trans\n */\n getDelta(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const { pre, collapsed } = trans;\n\n if (collapsed) {\n return { x: 0, y: 0 };\n }\n\n if (isVertical) {\n const preCenter = pre!.localBounds.center.x;\n const firstBlockX = trans.firstChild?.transform.position.x || 0;\n const lastBlockX = trans.lastChild?.transform.position.x || 0;\n const currentCenter = (lastBlockX - firstBlockX) / 2;\n\n return {\n x: preCenter - currentCenter,\n y: 0,\n };\n }\n const preCenter = pre!.localBounds.center.y;\n const firstBlockY = trans.firstChild?.transform.position.y || 0;\n const lastBlockY = trans.lastChild?.transform.position.y || 0;\n const currentCenter = (lastBlockY - firstBlockY) / 2;\n\n return {\n x: 0,\n y: preCenter - currentCenter,\n };\n },\n getLabels(transition) {\n return getBranchAdderLabel(transition);\n },\n getLines() {\n return [];\n },\n // 和前序节点对齐\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n};\n\n/**\n * inlineBlocks 获取 BranchAdder 和展开 label\n */\nexport function getBranchAdderLabel(transition: FlowNodeTransitionData) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 收起时展示收起 label\n if (currentTransform.collapsed) {\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n activateNode: transition.entity.pre,\n },\n },\n ];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n}\n","import { Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 图标占位节点,如条件分支的菱形图标\n */\nexport const BlockIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: 20, // 占位节点下边偏小\n // 条件分支 icon 默认的高度比较高,在流程里下边有文字\n size: { width: 250, height: 84 },\n },\n /**\n * 是一个占位节点,后续要加上 label 展开收起的图标\n */\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n // 为节点,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n return [];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n props: {\n collapseNode: transition.entity.parent,\n activateNode: transition.entity,\n },\n },\n ];\n },\n};\n","import { IPoint, Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 带顺序的图标节点,一般为 block 第一个分支节点\n * - 只有一个分支时,不需要展开收起\n */\nexport const BlockOrderIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n meta: {\n spacing: 40,\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const currentOutput = currentTransform.outputPoint;\n const nextTransform = currentTransform.next;\n const parentTransform = currentTransform.parent;\n\n // 为空分支,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n const parentOutput = parentTransform?.outputPoint as IPoint;\n return [\n {\n offset: parentOutput,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n offset: nextTransform\n ? Point.getMiddlePoint(currentOutput, nextTransform.inputPoint)\n : Point.move(\n currentOutput,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n // 收起展开复合按钮\n type: FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,\n props: {\n activateNode: transition.entity,\n collapseNode: transition.entity.parent,\n },\n },\n ];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 开始节点\n */\nexport const StartRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.START,\n meta: {\n isStart: true,\n draggable: false,\n selectable: false, // 触发器等开始节点不能被框选\n deleteDisable: true, // 禁止删除\n copyDisable: true, // 禁止copy\n addDisable: true, // 禁止添加\n },\n};\n","import {\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n} from '@flowgram.ai/document';\n\nimport {\n CatchBlockRegistry,\n CatchInlineBlocksRegistry,\n MainInlineBlocksRegistry,\n TryBlockRegistry,\n TryCatchSpacings,\n TryCatchTypeEnum,\n TrySlotRegistry,\n} from './try-catch-extends';\n\n/**\n * try catch 节点\n */\nexport const TryCatchRegistry: FlowNodeRegistry = {\n type: 'tryCatch',\n meta: {\n hidden: true,\n inlineSpacingAfter: TryCatchSpacings.INLINE_SPACING_BOTTOM,\n },\n /**\n * 结构\n * tryCatch\n * - tryCatchIcon\n * - mainInlineBlocks\n * - tryBlock // try 分支\n * - trySlot // 空节点用来占位,try 分支一开始没有节点\n * - catchInlineBlocks\n * - catchBlock // catch 分支 1\n * - blockOrderIcon\n * - node1\n * - catchBlock // catch 分支 2\n * - blockOrderIcon\n * - node 2\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const [tryBlock, ...catchBlocks] = json.blocks || [];\n const addedNodes: FlowNodeEntity[] = [];\n const tryCatchIconNode = document.addNode({\n id: `$tryCatchIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const mainBlockNode = document.addNode({\n id: `$mainInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const tryBlockNode = document.addNode({\n id: tryBlock.id,\n type: TryCatchTypeEnum.TRY_BLOCK,\n originParent: node,\n parent: mainBlockNode,\n data: tryBlock.data,\n });\n const trySlotNode = document.addNode({\n id: `$trySlot$${tryBlock.id}`,\n hidden: true,\n type: TryCatchTypeEnum.TRY_SLOT, // 占位节点\n originParent: node,\n parent: tryBlockNode,\n });\n const catchInlineBlocksNode = document.addNode({\n id: `$catchInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n originParent: node,\n parent: mainBlockNode,\n });\n addedNodes.push(\n tryCatchIconNode,\n mainBlockNode,\n tryBlockNode,\n trySlotNode,\n catchInlineBlocksNode\n );\n (tryBlock.blocks || []).forEach((blockData) => {\n document.addNode(\n {\n ...blockData,\n parent: tryBlockNode,\n },\n addedNodes\n );\n });\n catchBlocks.forEach((blockData) => {\n document.addBlock(node, blockData, addedNodes);\n });\n return addedNodes;\n },\n /**\n * 添加 catch 分支\n * @param node\n * @param blockData\n * @param addedNodes\n */\n onBlockChildCreate(node, blockData, addedNodes) {\n const parent = node.document.getNode(`$catchInlineBlocks$${node.id}`);\n const block = node.document.addNode({\n id: blockData.id,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n originParent: node,\n parent,\n data: blockData.data,\n });\n // 分支开始节点\n const blockOrderIcon = node.document.addNode({\n id: `$blockOrderIcon$${blockData.id}`,\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n originParent: node,\n parent: block,\n });\n if (blockData.blocks) {\n node.document.addBlocksAsChildren(block, blockData.blocks || [], addedNodes);\n }\n addedNodes?.push(block, blockOrderIcon);\n return block;\n },\n getInputPoint(transform) {\n const tryCatchIcon = transform.firstChild!;\n // 使用图标的 inputPoint\n return tryCatchIcon.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const tryCatchIcon = transform.firstChild!;\n if (isVertical) {\n return {\n x: tryCatchIcon.inputPoint.x,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: tryCatchIcon.inputPoint.y,\n };\n },\n /**\n * tryCatch 子节点配置\n */\n extendChildRegistries: [\n /**\n * icon 节点\n */\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: TryCatchSpacings.INLINE_SPACING_TOP,\n },\n getLabels() {\n return [];\n },\n },\n MainInlineBlocksRegistry,\n CatchInlineBlocksRegistry,\n TryBlockRegistry,\n CatchBlockRegistry,\n TrySlotRegistry,\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLineEnum,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支\n */\nexport const CatchBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const parentPoint = transform.parent!;\n const { inputPoint, outputPoint } = transform;\n let parentInputPoint;\n if (isVertical) {\n parentInputPoint = {\n x: parentPoint.inputPoint.x,\n y: parentPoint.inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n } else {\n parentInputPoint = {\n x: parentPoint.inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: parentPoint.inputPoint.y,\n };\n }\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: parentInputPoint,\n to: inputPoint,\n },\n ];\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n let mergePoint;\n if (isVertical) {\n mergePoint = {\n x: parentPoint.outputPoint.x,\n y: parentPoint.bounds.bottom,\n };\n } else {\n mergePoint = {\n x: parentPoint.bounds.right,\n y: parentPoint.outputPoint.y,\n };\n }\n\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: outputPoint,\n to: mergePoint,\n });\n }\n\n return lines;\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支列表\n */\nexport const CatchInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingPre: DEFAULT_SPACING.NULL,\n // inlineSpacingAfter: DEFAULT_SPACING.NULL,\n },\n getDelta() {\n return undefined;\n },\n getLines(transition) {\n const { transform } = transition;\n const mainInlineBlocks = transform.parent!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: mainInlineBlocks.pre!.outputPoint,\n to: transform.inputPoint,\n },\n ];\n\n if (!transform.entity.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: transform.outputPoint,\n to: mainInlineBlocks.outputPoint,\n });\n }\n\n return lines;\n },\n getOriginDeltaX(transform) {\n const { firstChild } = transform;\n if (!firstChild) return 0;\n return firstChild.originDeltaX;\n },\n getLabels(transition) {\n const { inputPoint } = transition.transform;\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 实际输入点\n const actualInputPoint = {\n x: isVertical ? inputPoint.x : inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: isVertical ? inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING : inputPoint.y,\n };\n\n if (currentTransform.collapsed) {\n return [];\n }\n\n // branch adder 节点\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: actualInputPoint,\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n },\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 因为是左偏移,所以用第一条 catch 分支\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return firstCatchBlock.inputPoint;\n }\n return isVertical ? transform.bounds.topCenter : transform.bounds.rightCenter;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return isVertical\n ? {\n x: firstCatchBlock!.outputPoint?.x,\n y: transform.bounds.bottom,\n }\n : {\n x: transform.bounds.right,\n y: firstCatchBlock!.outputPoint?.y,\n };\n }\n return isVertical ? transform.bounds.bottomCenter : transform.bounds.rightCenter;\n },\n};\n","import { FlowRendererKey, FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeTransformData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * 主 BLOCK\n */\nexport const MainInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: TryCatchSpacings.MAIN_INLINE_SPACING_TOP,\n inlineSpacingAfter: TryCatchSpacings.MAIN_INLINE_SPACING_BOTTOM,\n },\n getLines(transition) {\n const { transform } = transition;\n const tryBranch = transform.firstChild!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: tryBranch.outputPoint,\n to: transform.originParent!.outputPoint,\n },\n ];\n\n return lines;\n },\n getLabels(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const catchInlineBlocks = transform.children[1]!;\n const errLabelX = isVertical\n ? (transform.parent!.outputPoint.x + catchInlineBlocks.inputPoint.x) / 2\n : transform.inputPoint.x - TryCatchSpacings.INLINE_SPACING_TOP;\n const errLabelY = isVertical\n ? transform.inputPoint.y - TryCatchSpacings.INLINE_SPACING_TOP\n : (transform.parent!.outputPoint.y + catchInlineBlocks.inputPoint.y) / 2;\n\n const errorLabelX = errLabelX;\n const errorLabelY = errLabelY;\n return [\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_START_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.inputPoint.x + TryCatchSpacings.TRY_START_LABEL_DELTA,\n y: isVertical\n ? transform.inputPoint.y + TryCatchSpacings.TRY_START_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_END_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.originParent!.outputPoint.x + TryCatchSpacings.TRY_END_LABEL_DELTA,\n y: isVertical\n ? transform.originParent!.outputPoint.y + TryCatchSpacings.TRY_END_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n // 错误分支收起\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.TRY_CATCH_COLLAPSE,\n offset: {\n x: errorLabelX,\n y: errorLabelY,\n },\n props: {\n node: transform.lastChild?.entity,\n },\n },\n ];\n },\n getInputPoint(transform) {\n const tryBlock = transform.firstChild!;\n return tryBlock.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const tryBlock = transform.firstChild!;\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: tryBlock.outputPoint.x,\n y: transform.bounds.bottom + TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n }\n return {\n x: transform.bounds.right + TryCatchSpacings.CATCH_INLINE_SPACING,\n y: tryBlock.outputPoint.y,\n };\n },\n getDelta() {\n return undefined;\n },\n getChildDelta(child, layout) {\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n // try 分支和 catch 分支的最小间距不低于 minInlineBlockSpacing\n let delta = 0;\n if (isVertical) {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaX + DEFAULT_SPACING.MARGIN_RIGHT\n );\n } else {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaY + DEFAULT_SPACING.MARGIN_RIGHT\n );\n }\n\n return {\n // 分支只有两个所以这里可以写死间隔宽度\n x: isVertical ? preBounds.right + delta : 0,\n y: isVertical ? 0 : preBounds.bottom + delta,\n };\n }\n return {\n x: 0,\n y: 0,\n };\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 分支\n */\nexport const TryBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.TRY_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 占位节点\n */\nexport const TrySlotRegistry: FlowNodeRegistry = {\n type: TryCatchTypeEnum.TRY_SLOT,\n meta: {\n inlineSpacingAfter: 16,\n spacing: 0,\n size: {\n width: 16,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 16,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 16,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds.center,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport {\n LoopEmptyBranchRegistry,\n LoopInlineBlocksNodeRegistry,\n LoopLeftEmptyBlockRegistry,\n LoopRightEmptyBlockRegistry,\n LoopSpacings,\n LoopTypeEnum,\n} from './loop-extends';\n\n/**\n * 循环节点\n */\nexport const LoopRegistry: FlowNodeRegistry = {\n type: 'loop',\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) => {\n if (node.collapsed) {\n return LoopSpacings.COLLAPSE_INLINE_SPACING_BOTTOM;\n }\n const inlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_SPACING_BOTTOM\n );\n return inlineSpacingBottom;\n },\n spacing: LoopSpacings.SPACING,\n },\n /**\n * - loopNode\n * - loopBlockIcon\n * - loopInlineBlocks\n * - loopEmptyBlock 左侧占位区域\n * - loopBlock\n * - xxx\n * - xxx\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const loopBlocks = json.blocks || [];\n\n const loopIconNode = document.addNode({\n id: `$blockIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const loopInlineBlocks = document.addNode({\n id: `$inlineBlocks$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const loopEmptyBlockNode = document.addNode({\n id: `$loopLeftEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n\n const loopBlockNode = document.addNode({\n id: `$block$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.BLOCK, // : LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n const loopBranch = document.addNode({\n id: `$loopRightEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n originParent: node,\n parent: loopBlockNode,\n });\n const otherNodes: FlowNodeEntity[] = [];\n loopBlocks.forEach((b) =>\n document.addNode(\n {\n ...b,\n type: b.type!,\n parent: loopBlockNode,\n },\n otherNodes\n )\n );\n\n return [\n loopIconNode,\n loopEmptyBlockNode,\n loopInlineBlocks,\n loopBlockNode,\n loopBranch,\n ...otherNodes,\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n return [\n // 循环结束\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_END_TEXT,\n // 循环 label 垂直样式展示,而非 rotate 旋转文案\n props: isVertical\n ? undefined\n : {\n style: {\n maxWidth: '20px',\n lineHeight: '12px',\n whiteSpace: 'pre-wrap',\n },\n },\n offset: Point.move(currentTransform.outputPoint, isVertical ? { y: -26 } : { x: -26 }),\n },\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: currentTransform.outputPoint,\n },\n ];\n },\n // 和前序节点对齐\n getInputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: LoopSpacings.LOOP_BLOCK_ICON_SPACING,\n },\n },\n LoopLeftEmptyBlockRegistry,\n LoopEmptyBranchRegistry,\n LoopRightEmptyBlockRegistry,\n LoopInlineBlocksNodeRegistry,\n ],\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: document.getNode(`$block$${node.id}`),\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { ConstantKeys } from '@flowgram.ai/document';\n\nexport enum LoopTypeEnum {\n LOOP_LEFT_EMPTY_BLOCK = 'loopLeftEmptyBlock',\n LOOP_RIGHT_EMPTY_BLOCK = 'loopRightEmptyBlock',\n LOOP_EMPTY_BRANCH = 'loopEmptyBranch',\n}\n\nexport const LoopSpacings = {\n SPACING: 16, // 距离下面节点距离\n COLLAPSE_INLINE_SPACING_BOTTOM: 60, // 距离下面节点距离\n [ConstantKeys.INLINE_SPACING_BOTTOM]: 48, // 下边空白\n MIN_INLINE_BLOCK_SPACING: 280, // 最小循环圈宽度\n HORIZONTAL_MIN_INLINE_BLOCK_SPACING: 180, // 水平布局下的最小循环圈高度\n LEFT_EMPTY_BLOCK_WIDTH: 80, // 左边空分支宽度\n EMPTY_BRANCH_SPACING: 20, // 左边空分支宽度\n LOOP_BLOCK_ICON_SPACING: 13, // inlineBlocks 的 inlineBottom\n [ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM]: 23, // inlineBlocks 的 inlineBottom\n INLINE_BLOCKS_INLINE_SPACING_TOP: 30, // inlineBlocks 的 inlineTop\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopLeftEmptyBlockRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n meta: {\n inlineSpacingAfter: 0,\n spacing: 0,\n size: {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { BlockRegistry } from '../block';\nimport { LoopTypeEnum } from './constants';\n\nexport const LoopRightEmptyBlockRegistry: FlowNodeRegistry = {\n ...BlockRegistry,\n type: LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n meta: {\n ...BlockRegistry.meta,\n inlineSpacingAfter: 0,\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopEmptyBranchRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n meta: {\n inlineSpacingAfter: 0,\n spacing: LoopSpacings.EMPTY_BRANCH_SPACING,\n size: {\n width: 100,\n height: 0,\n },\n },\n getLabels(transition) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n if (isVertical) {\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.inputPoint.x,\n y: currentTransform.bounds.center.y + 8, // 右边空节点\n },\n },\n ];\n }\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.bounds.center.x + 8,\n y: currentTransform.inputPoint.y,\n },\n },\n ];\n },\n onAfterUpdateLocalTransform(transform): void {\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 100,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 100,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport { LoopSpacings } from './constants';\n\nexport const LoopInlineBlocksNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: (node) => {\n const inlineBlocksInlineSpacingTop = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_TOP,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_TOP\n );\n return inlineBlocksInlineSpacingTop;\n },\n inlineSpacingAfter: (node) => {\n const inlineBlocksInlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_BOTTOM\n );\n return inlineBlocksInlineSpacingBottom;\n },\n minInlineBlockSpacing: (node) =>\n node.entity.isVertical\n ? LoopSpacings.MIN_INLINE_BLOCK_SPACING\n : LoopSpacings.HORIZONTAL_MIN_INLINE_BLOCK_SPACING,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const parentTransform = currentTransform.parent!;\n const { isVertical } = transition.entity;\n\n const lines: FlowTransitionLine[] = [\n // 循环结束线\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: currentTransform.outputPoint,\n to: parentTransform.outputPoint,\n },\n ];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return lines;\n }\n\n const [leftBlockTransform] = currentTransform.children;\n\n return [\n ...lines,\n // 循环回撤线 - 1 分成两段可以被 viewport 识别出矩阵区域\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: currentTransform.outputPoint,\n to: leftBlockTransform.outputPoint,\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.bottom }\n : { x: currentTransform.bounds.right, y: leftBlockTransform.inputPoint.y },\n ],\n },\n // 循环回撤线 - 2\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: leftBlockTransform.outputPoint,\n to: Point.move(\n currentTransform.inputPoint,\n isVertical ? { x: -12, y: 10 } : { x: 10, y: -12 }\n ),\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.top + 10 }\n : { x: currentTransform.bounds.left + 10, y: leftBlockTransform.inputPoint.y },\n ],\n arrow: true,\n },\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const labels: FlowTransitionLabel[] = [];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return labels;\n }\n\n const leftBlockTransform = currentTransform.children[0];\n const rightBlockTransform = currentTransform.children[1];\n\n if (transition.entity.originParent?.id.startsWith('while_')) {\n // 满足条件时\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_WHILE_TEXT,\n rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? {\n x: (currentTransform.inputPoint.x + rightBlockTransform.inputPoint.x) / 2,\n y: currentTransform.inputPoint.y + 10,\n }\n : {\n x: currentTransform.inputPoint.x + 10,\n y: (currentTransform.inputPoint.y + rightBlockTransform.inputPoint.y) / 2,\n },\n });\n } else {\n // 循环遍历\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_TRAVERSE_TEXT,\n // rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.center.y + 5 }\n : { x: currentTransform.bounds.center.x + 5, y: leftBlockTransform.inputPoint.y },\n });\n }\n\n return labels;\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 根节点\n */\nexport const RootRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.ROOT,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n hidden: true,\n },\n getInputPoint(transform) {\n return transform.firstChild?.inputPoint || transform.bounds.topCenter;\n },\n getOutputPoint(transform) {\n return transform.firstChild?.outputPoint || transform.bounds.bottomCenter;\n },\n};\n","import {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 占位节点,宽高为 0, 该节点下边同样有 \"添加 label\"\n */\nexport const EmptyRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.EMPTY,\n meta: {\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return spacing / 2;\n },\n size: { width: 0, height: 0 },\n hidden: true,\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n","export * from './fixed-layout-container-module';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n} from './activities';\n\nexport const FixedLayoutRegistries = {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n};\n"],"mappings":"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","names":["FlowNodeRenderData","FlowNodeTransformData","FlowNodeBaseType","FlowNodeSplitType","FlowLayoutDefault","FlowNodeBaseType","FlowTransitionLabelEnum","DEFAULT_SPACING","FlowNodeBaseType","FlowTransitionLabelEnum","FlowLayoutDefault","ConstantKeys","getDefaultSpacing","preCenter","currentCenter","Point","getDefaultSpacing","FlowNodeBaseType","FlowTransitionLabelEnum","Point","DefaultSpacingKey","getDefaultSpacing","FlowNodeBaseType","FlowTransitionLabelEnum","FlowNodeBaseType","FlowLayoutDefault","FlowNodeBaseType","DEFAULT_SPACING","FlowNodeBaseType","FlowTransitionLineEnum","FlowNodeBaseType","DEFAULT_SPACING","FlowTransitionLineEnum","FlowRendererKey","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeRenderData","FlowTransitionLabelEnum","FlowTransitionLineEnum","FlowLayoutDefault","FlowNodeBaseType","DEFAULT_SPACING","FlowTransitionLineEnum","FlowTransitionLabelEnum","FlowRendererKey","FlowNodeRenderData","FlowLayoutDefault","FlowRendererKey","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeTransformData","FlowTransitionLabelEnum","FlowTransitionLineEnum","FlowLayoutDefault","FlowNodeBaseType","FlowTransitionLineEnum","FlowTransitionLabelEnum","FlowRendererKey","FlowLayoutDefault","FlowNodeTransformData","DEFAULT_SPACING","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeBaseType","DEFAULT_SPACING","FlowTransitionLabelEnum","FlowTransitionLabelEnum","FlowNodeBaseType","FlowLayoutDefault","Point","FlowTextKey","FlowNodeBaseType","FlowTransitionLabelEnum","getDefaultSpacing","ConstantKeys","ConstantKeys","ConstantKeys","FlowTransitionLabelEnum","FlowTransitionLabelEnum","Point","FlowTextKey","FlowNodeBaseType","FlowTransitionLabelEnum","FlowTransitionLineEnum","getDefaultSpacing","ConstantKeys","FlowNodeBaseType","getDefaultSpacing","ConstantKeys","FlowTransitionLineEnum","Point","FlowTransitionLabelEnum","FlowTextKey","getDefaultSpacing","ConstantKeys","FlowNodeBaseType","FlowTransitionLabelEnum","FlowTextKey","Point","DEFAULT_SPACING","FlowNodeBaseType","FlowNodeBaseType","FlowTransitionLabelEnum","ConstantKeys","getDefaultSpacing","FlowNodeRenderData","FlowNodeTransformData"]}
|
package/dist/index.js
CHANGED
|
@@ -817,11 +817,39 @@ var TryBlockRegistry = {
|
|
|
817
817
|
// src/activities/try-catch-extends/try-slot.ts
|
|
818
818
|
var import_document15 = require("@flowgram.ai/document");
|
|
819
819
|
var TrySlotRegistry = {
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
820
|
+
type: "trySlot" /* TRY_SLOT */,
|
|
821
|
+
meta: {
|
|
822
|
+
inlineSpacingAfter: 16,
|
|
823
|
+
spacing: 0,
|
|
824
|
+
size: {
|
|
825
|
+
width: 16,
|
|
826
|
+
height: 0
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
onAfterUpdateLocalTransform(transform) {
|
|
830
|
+
if (transform.entity.isVertical) {
|
|
831
|
+
transform.data.size = {
|
|
832
|
+
width: 16,
|
|
833
|
+
height: 0
|
|
834
|
+
};
|
|
835
|
+
} else {
|
|
836
|
+
transform.data.size = {
|
|
837
|
+
width: 0,
|
|
838
|
+
height: 16
|
|
839
|
+
};
|
|
840
|
+
}
|
|
841
|
+
transform.transform.update({
|
|
842
|
+
size: transform.data.size
|
|
843
|
+
});
|
|
844
|
+
},
|
|
845
|
+
getLabels(transition) {
|
|
846
|
+
return [
|
|
847
|
+
{
|
|
848
|
+
offset: transition.transform.bounds.center,
|
|
849
|
+
type: import_document15.FlowTransitionLabelEnum.ADDER_LABEL
|
|
850
|
+
}
|
|
851
|
+
];
|
|
852
|
+
}
|
|
825
853
|
};
|
|
826
854
|
|
|
827
855
|
// src/activities/try-catch.ts
|
|
@@ -865,13 +893,15 @@ var TryCatchRegistry = {
|
|
|
865
893
|
parent: node
|
|
866
894
|
});
|
|
867
895
|
const tryBlockNode = document.addNode({
|
|
868
|
-
id:
|
|
896
|
+
id: tryBlock.id,
|
|
869
897
|
type: "tryBlock" /* TRY_BLOCK */,
|
|
870
898
|
originParent: node,
|
|
871
|
-
parent: mainBlockNode
|
|
899
|
+
parent: mainBlockNode,
|
|
900
|
+
data: tryBlock.data
|
|
872
901
|
});
|
|
873
902
|
const trySlotNode = document.addNode({
|
|
874
|
-
id: tryBlock.id
|
|
903
|
+
id: `$trySlot$${tryBlock.id}`,
|
|
904
|
+
hidden: true,
|
|
875
905
|
type: "trySlot" /* TRY_SLOT */,
|
|
876
906
|
// 占位节点
|
|
877
907
|
originParent: node,
|
|
@@ -890,8 +920,17 @@ var TryCatchRegistry = {
|
|
|
890
920
|
trySlotNode,
|
|
891
921
|
catchInlineBlocksNode
|
|
892
922
|
);
|
|
923
|
+
(tryBlock.blocks || []).forEach((blockData) => {
|
|
924
|
+
document.addNode(
|
|
925
|
+
{
|
|
926
|
+
...blockData,
|
|
927
|
+
parent: tryBlockNode
|
|
928
|
+
},
|
|
929
|
+
addedNodes
|
|
930
|
+
);
|
|
931
|
+
});
|
|
893
932
|
catchBlocks.forEach((blockData) => {
|
|
894
|
-
|
|
933
|
+
document.addBlock(node, blockData, addedNodes);
|
|
895
934
|
});
|
|
896
935
|
return addedNodes;
|
|
897
936
|
},
|
|
@@ -907,7 +946,8 @@ var TryCatchRegistry = {
|
|
|
907
946
|
id: blockData.id,
|
|
908
947
|
type: "catchBlock" /* CATCH_BLOCK */,
|
|
909
948
|
originParent: node,
|
|
910
|
-
parent
|
|
949
|
+
parent,
|
|
950
|
+
data: blockData.data
|
|
911
951
|
});
|
|
912
952
|
const blockOrderIcon = node.document.addNode({
|
|
913
953
|
id: `$blockOrderIcon$${blockData.id}`,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/fixed-layout-container-module.ts","../src/flow-registers.ts","../src/activities/end.ts","../src/activities/dynamic-split.ts","../src/activities/static-split.ts","../src/activities/block.ts","../src/activities/inline-blocks.ts","../src/activities/block-icon.ts","../src/activities/block-order-icon.ts","../src/activities/start.ts","../src/activities/try-catch.ts","../src/activities/try-catch-extends/catch-block.ts","../src/activities/try-catch-extends/catch-inline-blocks.ts","../src/activities/try-catch-extends/main-inline-blocks.ts","../src/activities/try-catch-extends/try-block.ts","../src/activities/try-catch-extends/try-slot.ts","../src/activities/loop.ts","../src/activities/loop-extends/constants.ts","../src/activities/loop-extends/loop-left-empty-block.ts","../src/activities/loop-extends/loop-right-empty-block.ts","../src/activities/loop-extends/loop-empty-branch.ts","../src/activities/loop-extends/loop-inline-blocks.ts","../src/activities/root.ts","../src/activities/empty.ts"],"sourcesContent":["export * from './fixed-layout-container-module';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n} from './activities';\n\nexport const FixedLayoutRegistries = {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n};\n","import { ContainerModule } from 'inversify';\nimport { FlowRendererContribution } from '@flowgram.ai/renderer';\nimport { FlowDocumentContribution } from '@flowgram.ai/document';\nimport { PlaygroundContribution } from '@flowgram.ai/core';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FlowRegisters } from './flow-registers';\n\nexport const FixedLayoutContainerModule = new ContainerModule(bind => {\n bindContributions(bind, FlowRegisters, [\n FlowDocumentContribution,\n FlowRendererContribution,\n PlaygroundContribution,\n ]);\n});\n","import { injectable } from 'inversify';\nimport {\n FlowLabelsLayer,\n FlowLinesLayer,\n FlowNodesContentLayer,\n FlowNodesTransformLayer,\n type FlowRendererContribution,\n type FlowRendererRegistry,\n FlowScrollBarLayer,\n FlowScrollLimitLayer,\n} from '@flowgram.ai/renderer';\nimport {\n type FlowDocument,\n type FlowDocumentContribution,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n} from '@flowgram.ai/document';\nimport { type PlaygroundContribution, PlaygroundLayer } from '@flowgram.ai/core';\n\nimport { EndRegistry } from './activities/end';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n InlineBlocksRegistry,\n LoopRegistry,\n RootRegistry,\n StartRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n} from './activities';\n\n@injectable()\nexport class FlowRegisters\n implements FlowDocumentContribution, FlowRendererContribution, PlaygroundContribution\n{\n /**\n * 注册数据层\n * @param document\n */\n registerDocument(document: FlowDocument) {\n /**\n * 注册节点 (ECS - Entity)\n */\n document.registerFlowNodes(\n RootRegistry, // 根节点\n StartRegistry, // 开始节点\n DynamicSplitRegistry, // 动态分支(并行、排他)\n StaticSplitRegistry, // 静态分支(审批)\n BlockRegistry, // 单条 block 注册\n InlineBlocksRegistry, // 多个 block 组成的 block 列表\n BlockIconRegistry, // icon 节点,如条件分支的菱形图标\n BlockOrderIconRegistry, // 带顺序的图标节点,一般为 block 第一个分支节点\n TryCatchRegistry, // TryCatch\n EndRegistry, // 结束节点\n LoopRegistry, // 循环节点\n EmptyRegistry // 占位节点\n );\n /**\n * 注册节点数据 (ECS - Component)\n */\n document.registerNodeDatas(\n FlowNodeRenderData, // 渲染节点相关数据\n FlowNodeTransitionData, // 线条绘制数据\n FlowNodeTransformData // 坐标计算数据\n );\n }\n\n /**\n * 注册渲染层\n * @param renderer\n */\n registerRenderer(renderer: FlowRendererRegistry) {\n /**\n * 注册 layer (ECS - System)\n */\n renderer.registerLayers(\n FlowNodesTransformLayer, // 节点位置渲染\n FlowNodesContentLayer, // 节点内容渲染\n FlowLinesLayer, // 线条渲染\n FlowLabelsLayer, // Label 渲染\n PlaygroundLayer, // 画布基础层,提供缩放、手势等能力\n FlowScrollLimitLayer, // 控制滚动范围\n FlowScrollBarLayer // 滚动条\n );\n }\n\n /**\n * 画布开始渲染 (hook)\n */\n onReady(): void {}\n\n /**\n * 画布销毁 (hook)\n */\n onDispose(): void {}\n}\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 结束节点\n */\nexport const EndRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.END,\n meta: {\n draggable: false,\n isNodeEnd: true,\n selectable: false,\n copyDisable: true,\n },\n // 结束节点没有出边和 label\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 可以动态添加分支的分支节点\n * dynamicSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const DynamicSplitRegistry: FlowNodeRegistry = {\n type: FlowNodeSplitType.DYNAMIC_SPLIT,\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) =>\n node.collapsed && node.entity.collapsedChildren.length > 1 ? 21 : 0,\n // 判断是否有分支节点\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return node.children.length === 1 ? spacing : spacing / 2;\n },\n },\n getLabels(transition) {\n if (transition.isNodeEnd) {\n return [];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: transition.transform.outputPoint,\n },\n ];\n },\n onCreate(node, json) {\n return node.document.addInlineBlocks(node, json.blocks || []);\n },\n getInputPoint(transform) {\n // block icon\n return transform.firstChild?.inputPoint || transform.defaultInputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 没有分支节点\n const noInlineBlocks = transform.children.length === 1;\n const lastChildOutput = transform.lastChild?.outputPoint;\n const spacing = getDefaultSpacing(transform.entity, ConstantKeys.NODE_SPACING);\n\n if (isVertical) {\n return {\n x: lastChildOutput ? lastChildOutput.x : transform.bounds.center.x,\n y: transform.bounds.bottom + (noInlineBlocks ? spacing / 2 : 0),\n };\n }\n\n return {\n x: transform.bounds.right + (noInlineBlocks ? spacing / 2 : 0),\n y: lastChildOutput ? lastChildOutput.y : transform.bounds.center.y,\n };\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n const parentId = `$inlineBlocks$${node.id}`;\n let parent = document.getNode(parentId);\n if (!parent) {\n parent = document.addNode({\n id: parentId,\n type: 'inlineBlocks',\n originParent: node,\n parent: node,\n });\n }\n return document.addBlock(node, json, undefined, undefined, index);\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry, FlowNodeSplitType } from '@flowgram.ai/document';\n\n/**\n * 不能动态添加分支的分支节点\n * staticSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const StaticSplitRegistry: FlowNodeRegistry = {\n extend: FlowNodeSplitType.DYNAMIC_SPLIT,\n type: FlowNodeSplitType.STATIC_SPLIT,\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n getLabels() {\n return [];\n },\n },\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram.ai/document';\n\n/**\n * block, block 的输入输出点由子节点决定\n */\nexport const BlockRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingAfter: DEFAULT_SPACING.INLINE_BLOCK_PADDING_BOTTOM,\n hidden: true,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n const lines: FlowTransitionLine[] = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: currentTransform.parent!.inputPoint,\n to: currentTransform.inputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n ];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 分支拖拽场景线条 push\n // 当有其余分支的时候,绘制一条两个分支之间的线条\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n }\n }\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: currentTransform.outputPoint,\n to: currentTransform.parent!.outputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n\n return lines;\n },\n getInputPoint(trans) {\n const child = trans.firstChild;\n return child ? child.inputPoint : trans.defaultInputPoint;\n },\n getOutputPoint(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const child = trans.lastChild;\n if (isVertical) {\n return {\n x: child ? child.outputPoint.x : trans.bounds.bottomCenter.x,\n y: trans.bounds.bottom,\n };\n }\n return {\n x: trans.bounds.right,\n y: child ? child.outputPoint.y : trans.bounds.rightCenter.y,\n };\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const draggingLabel = [];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 获取两个分支节点中间点作为拖拽标签插入位置\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftX - currentOffsetRightX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftY - currentOffsetRightY,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: node,\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowNodeTransformData,\n type FlowNodeTransitionData,\n FlowTransitionLabelEnum,\n FlowLayoutDefault,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 水平 Block 的偏移\n */\nexport const InlineBlocksRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n hidden: true,\n spacing: (node) => getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING),\n isInlineBlocks: true,\n inlineSpacingPre: DEFAULT_SPACING.INLINE_BLOCKS_PADDING_TOP,\n inlineSpacingAfter: (node) =>\n getDefaultSpacing(node.entity, ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM),\n },\n /**\n * 控制子分支的间距\n * @param child\n */\n getChildDelta(child, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n if (isVertical) {\n const leftSpacing = preTransform.size.width + preTransform.originDeltaX;\n\n // 如果小于最小宽度,偏移最小宽度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - leftSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaX\n );\n\n return {\n // 这里需要加上原点的偏移量,并加上水平间距\n x: preBounds.right + delta,\n y: 0,\n };\n } else {\n const bottomSpacing = preTransform.size.height + preTransform.originDeltaY;\n\n // 如果小于最小高度,偏移最小高度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - bottomSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaY\n );\n\n return {\n x: 0,\n // 这里需要加上原点的偏移量,并加上垂直间距\n y: preBounds.bottom + delta,\n };\n }\n }\n return {\n x: 0,\n y: 0,\n };\n },\n /**\n * 控制条件分支居中布局\n * @param trans\n */\n getDelta(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const { pre, collapsed } = trans;\n\n if (collapsed) {\n return { x: 0, y: 0 };\n }\n\n if (isVertical) {\n const preCenter = pre!.localBounds.center.x;\n const firstBlockX = trans.firstChild?.transform.position.x || 0;\n const lastBlockX = trans.lastChild?.transform.position.x || 0;\n const currentCenter = (lastBlockX - firstBlockX) / 2;\n\n return {\n x: preCenter - currentCenter,\n y: 0,\n };\n }\n const preCenter = pre!.localBounds.center.y;\n const firstBlockY = trans.firstChild?.transform.position.y || 0;\n const lastBlockY = trans.lastChild?.transform.position.y || 0;\n const currentCenter = (lastBlockY - firstBlockY) / 2;\n\n return {\n x: 0,\n y: preCenter - currentCenter,\n };\n },\n getLabels(transition) {\n return getBranchAdderLabel(transition);\n },\n getLines() {\n return [];\n },\n // 和前序节点对齐\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n};\n\n/**\n * inlineBlocks 获取 BranchAdder 和展开 label\n */\nexport function getBranchAdderLabel(transition: FlowNodeTransitionData) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 收起时展示收起 label\n if (currentTransform.collapsed) {\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n activateNode: transition.entity.pre,\n },\n },\n ];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n}\n","import { Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 图标占位节点,如条件分支的菱形图标\n */\nexport const BlockIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: 20, // 占位节点下边偏小\n // 条件分支 icon 默认的高度比较高,在流程里下边有文字\n size: { width: 250, height: 84 },\n },\n /**\n * 是一个占位节点,后续要加上 label 展开收起的图标\n */\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n // 为节点,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n return [];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n props: {\n collapseNode: transition.entity.parent,\n activateNode: transition.entity,\n },\n },\n ];\n },\n};\n","import { IPoint, Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 带顺序的图标节点,一般为 block 第一个分支节点\n * - 只有一个分支时,不需要展开收起\n */\nexport const BlockOrderIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n meta: {\n spacing: 40,\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const currentOutput = currentTransform.outputPoint;\n const nextTransform = currentTransform.next;\n const parentTransform = currentTransform.parent;\n\n // 为空分支,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n const parentOutput = parentTransform?.outputPoint as IPoint;\n return [\n {\n offset: parentOutput,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n offset: nextTransform\n ? Point.getMiddlePoint(currentOutput, nextTransform.inputPoint)\n : Point.move(\n currentOutput,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n // 收起展开复合按钮\n type: FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,\n props: {\n activateNode: transition.entity,\n collapseNode: transition.entity.parent,\n },\n },\n ];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 开始节点\n */\nexport const StartRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.START,\n meta: {\n isStart: true,\n draggable: false,\n selectable: false, // 触发器等开始节点不能被框选\n deleteDisable: true, // 禁止删除\n copyDisable: true, // 禁止copy\n addDisable: true, // 禁止添加\n },\n};\n","import {\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n} from '@flowgram.ai/document';\n\nimport {\n CatchBlockRegistry,\n CatchInlineBlocksRegistry,\n MainInlineBlocksRegistry,\n TryBlockRegistry,\n TryCatchSpacings,\n TryCatchTypeEnum,\n TrySlotRegistry,\n} from './try-catch-extends';\n\n/**\n * try catch 节点\n */\nexport const TryCatchRegistry: FlowNodeRegistry = {\n type: 'tryCatch',\n meta: {\n hidden: true,\n inlineSpacingAfter: TryCatchSpacings.INLINE_SPACING_BOTTOM,\n },\n /**\n * 结构\n * tryCatch\n * - tryCatchIcon\n * - mainInlineBlocks\n * - tryBlock // try 分支\n * - trySlot // 空节点用来占位,try 分支一开始没有节点\n * - catchInlineBlocks\n * - catchBlock // catch 分支 1\n * - blockOrderIcon\n * - node1\n * - catchBlock // catch 分支 2\n * - blockOrderIcon\n * - node 2\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const [tryBlock, ...catchBlocks] = json.blocks || [];\n const addedNodes: FlowNodeEntity[] = [];\n const tryCatchIconNode = document.addNode({\n id: `$tryCatchIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const mainBlockNode = document.addNode({\n id: `$mainInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const tryBlockNode = document.addNode({\n id: `$tryBlock$${tryBlock.id}`,\n type: TryCatchTypeEnum.TRY_BLOCK,\n originParent: node,\n parent: mainBlockNode,\n });\n const trySlotNode = document.addNode({\n id: tryBlock.id,\n type: TryCatchTypeEnum.TRY_SLOT, // 占位节点\n originParent: node,\n parent: tryBlockNode,\n });\n const catchInlineBlocksNode = document.addNode({\n id: `$catchInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n originParent: node,\n parent: mainBlockNode,\n });\n addedNodes.push(\n tryCatchIconNode,\n mainBlockNode,\n tryBlockNode,\n trySlotNode,\n catchInlineBlocksNode\n );\n catchBlocks.forEach((blockData) => {\n node.document.addBlock(node, blockData, addedNodes);\n });\n return addedNodes;\n },\n /**\n * 添加 catch 分支\n * @param node\n * @param blockData\n * @param addedNodes\n */\n onBlockChildCreate(node, blockData, addedNodes) {\n const parent = node.document.getNode(`$catchInlineBlocks$${node.id}`);\n const block = node.document.addNode({\n id: blockData.id,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n originParent: node,\n parent,\n });\n // 分支开始节点\n const blockOrderIcon = node.document.addNode({\n id: `$blockOrderIcon$${blockData.id}`,\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n originParent: node,\n parent: block,\n });\n if (blockData.blocks) {\n node.document.addBlocksAsChildren(block, blockData.blocks || [], addedNodes);\n }\n addedNodes?.push(block, blockOrderIcon);\n return block;\n },\n getInputPoint(transform) {\n const tryCatchIcon = transform.firstChild!;\n // 使用图标的 inputPoint\n return tryCatchIcon.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const tryCatchIcon = transform.firstChild!;\n if (isVertical) {\n return {\n x: tryCatchIcon.inputPoint.x,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: tryCatchIcon.inputPoint.y,\n };\n },\n /**\n * tryCatch 子节点配置\n */\n extendChildRegistries: [\n /**\n * icon 节点\n */\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: TryCatchSpacings.INLINE_SPACING_TOP,\n },\n getLabels() {\n return [];\n },\n },\n MainInlineBlocksRegistry,\n CatchInlineBlocksRegistry,\n TryBlockRegistry,\n CatchBlockRegistry,\n TrySlotRegistry,\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLineEnum,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支\n */\nexport const CatchBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const parentPoint = transform.parent!;\n const { inputPoint, outputPoint } = transform;\n let parentInputPoint;\n if (isVertical) {\n parentInputPoint = {\n x: parentPoint.inputPoint.x,\n y: parentPoint.inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n } else {\n parentInputPoint = {\n x: parentPoint.inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: parentPoint.inputPoint.y,\n };\n }\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: parentInputPoint,\n to: inputPoint,\n },\n ];\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n let mergePoint;\n if (isVertical) {\n mergePoint = {\n x: parentPoint.outputPoint.x,\n y: parentPoint.bounds.bottom,\n };\n } else {\n mergePoint = {\n x: parentPoint.bounds.right,\n y: parentPoint.outputPoint.y,\n };\n }\n\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: outputPoint,\n to: mergePoint,\n });\n }\n\n return lines;\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支列表\n */\nexport const CatchInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingPre: DEFAULT_SPACING.NULL,\n // inlineSpacingAfter: DEFAULT_SPACING.NULL,\n },\n getDelta() {\n return undefined;\n },\n getLines(transition) {\n const { transform } = transition;\n const mainInlineBlocks = transform.parent!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: mainInlineBlocks.pre!.outputPoint,\n to: transform.inputPoint,\n },\n ];\n\n if (!transform.entity.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: transform.outputPoint,\n to: mainInlineBlocks.outputPoint,\n });\n }\n\n return lines;\n },\n getOriginDeltaX(transform) {\n const { firstChild } = transform;\n if (!firstChild) return 0;\n return firstChild.originDeltaX;\n },\n getLabels(transition) {\n const { inputPoint } = transition.transform;\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 实际输入点\n const actualInputPoint = {\n x: isVertical ? inputPoint.x : inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: isVertical ? inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING : inputPoint.y,\n };\n\n if (currentTransform.collapsed) {\n return [];\n }\n\n // branch adder 节点\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: actualInputPoint,\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n },\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 因为是左偏移,所以用第一条 catch 分支\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return firstCatchBlock.inputPoint;\n }\n return isVertical ? transform.bounds.topCenter : transform.bounds.rightCenter;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return isVertical\n ? {\n x: firstCatchBlock!.outputPoint?.x,\n y: transform.bounds.bottom,\n }\n : {\n x: transform.bounds.right,\n y: firstCatchBlock!.outputPoint?.y,\n };\n }\n return isVertical ? transform.bounds.bottomCenter : transform.bounds.rightCenter;\n },\n};\n","import { FlowRendererKey, FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeTransformData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * 主 BLOCK\n */\nexport const MainInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: TryCatchSpacings.MAIN_INLINE_SPACING_TOP,\n inlineSpacingAfter: TryCatchSpacings.MAIN_INLINE_SPACING_BOTTOM,\n },\n getLines(transition) {\n const { transform } = transition;\n const tryBranch = transform.firstChild!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: tryBranch.outputPoint,\n to: transform.originParent!.outputPoint,\n },\n ];\n\n return lines;\n },\n getLabels(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const catchInlineBlocks = transform.children[1]!;\n const errLabelX = isVertical\n ? (transform.parent!.outputPoint.x + catchInlineBlocks.inputPoint.x) / 2\n : transform.inputPoint.x - TryCatchSpacings.INLINE_SPACING_TOP;\n const errLabelY = isVertical\n ? transform.inputPoint.y - TryCatchSpacings.INLINE_SPACING_TOP\n : (transform.parent!.outputPoint.y + catchInlineBlocks.inputPoint.y) / 2;\n\n const errorLabelX = errLabelX;\n const errorLabelY = errLabelY;\n return [\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_START_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.inputPoint.x + TryCatchSpacings.TRY_START_LABEL_DELTA,\n y: isVertical\n ? transform.inputPoint.y + TryCatchSpacings.TRY_START_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_END_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.originParent!.outputPoint.x + TryCatchSpacings.TRY_END_LABEL_DELTA,\n y: isVertical\n ? transform.originParent!.outputPoint.y + TryCatchSpacings.TRY_END_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n // 错误分支收起\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.TRY_CATCH_COLLAPSE,\n offset: {\n x: errorLabelX,\n y: errorLabelY,\n },\n props: {\n node: transform.lastChild?.entity,\n },\n },\n ];\n },\n getInputPoint(transform) {\n const tryBlock = transform.firstChild!;\n return tryBlock.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const tryBlock = transform.firstChild!;\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: tryBlock.outputPoint.x,\n y: transform.bounds.bottom + TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n }\n return {\n x: transform.bounds.right + TryCatchSpacings.CATCH_INLINE_SPACING,\n y: tryBlock.outputPoint.y,\n };\n },\n getDelta() {\n return undefined;\n },\n getChildDelta(child, layout) {\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n // try 分支和 catch 分支的最小间距不低于 minInlineBlockSpacing\n let delta = 0;\n if (isVertical) {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaX + DEFAULT_SPACING.MARGIN_RIGHT\n );\n } else {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaY + DEFAULT_SPACING.MARGIN_RIGHT\n );\n }\n\n return {\n // 分支只有两个所以这里可以写死间隔宽度\n x: isVertical ? preBounds.right + delta : 0,\n y: isVertical ? 0 : preBounds.bottom + delta,\n };\n }\n return {\n x: 0,\n y: 0,\n };\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 分支\n */\nexport const TryBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.TRY_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 占位节点\n */\nexport const TrySlotRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.EMPTY,\n type: TryCatchTypeEnum.TRY_SLOT,\n // getLabels() {\n // return []\n // },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport {\n LoopEmptyBranchRegistry,\n LoopInlineBlocksNodeRegistry,\n LoopLeftEmptyBlockRegistry,\n LoopRightEmptyBlockRegistry,\n LoopSpacings,\n LoopTypeEnum,\n} from './loop-extends';\n\n/**\n * 循环节点\n */\nexport const LoopRegistry: FlowNodeRegistry = {\n type: 'loop',\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) => {\n if (node.collapsed) {\n return LoopSpacings.COLLAPSE_INLINE_SPACING_BOTTOM;\n }\n const inlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_SPACING_BOTTOM\n );\n return inlineSpacingBottom;\n },\n spacing: LoopSpacings.SPACING,\n },\n /**\n * - loopNode\n * - loopBlockIcon\n * - loopInlineBlocks\n * - loopEmptyBlock 左侧占位区域\n * - loopBlock\n * - xxx\n * - xxx\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const loopBlocks = json.blocks || [];\n\n const loopIconNode = document.addNode({\n id: `$blockIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const loopInlineBlocks = document.addNode({\n id: `$inlineBlocks$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const loopEmptyBlockNode = document.addNode({\n id: `$loopLeftEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n\n const loopBlockNode = document.addNode({\n id: `$block$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.BLOCK, // : LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n const loopBranch = document.addNode({\n id: `$loopRightEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n originParent: node,\n parent: loopBlockNode,\n });\n const otherNodes: FlowNodeEntity[] = [];\n loopBlocks.forEach((b) =>\n document.addNode(\n {\n ...b,\n type: b.type!,\n parent: loopBlockNode,\n },\n otherNodes\n )\n );\n\n return [\n loopIconNode,\n loopEmptyBlockNode,\n loopInlineBlocks,\n loopBlockNode,\n loopBranch,\n ...otherNodes,\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n return [\n // 循环结束\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_END_TEXT,\n // 循环 label 垂直样式展示,而非 rotate 旋转文案\n props: isVertical\n ? undefined\n : {\n style: {\n maxWidth: '20px',\n lineHeight: '12px',\n whiteSpace: 'pre-wrap',\n },\n },\n offset: Point.move(currentTransform.outputPoint, isVertical ? { y: -26 } : { x: -26 }),\n },\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: currentTransform.outputPoint,\n },\n ];\n },\n // 和前序节点对齐\n getInputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: LoopSpacings.LOOP_BLOCK_ICON_SPACING,\n },\n },\n LoopLeftEmptyBlockRegistry,\n LoopEmptyBranchRegistry,\n LoopRightEmptyBlockRegistry,\n LoopInlineBlocksNodeRegistry,\n ],\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: document.getNode(`$block$${node.id}`),\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { ConstantKeys } from '@flowgram.ai/document';\n\nexport enum LoopTypeEnum {\n LOOP_LEFT_EMPTY_BLOCK = 'loopLeftEmptyBlock',\n LOOP_RIGHT_EMPTY_BLOCK = 'loopRightEmptyBlock',\n LOOP_EMPTY_BRANCH = 'loopEmptyBranch',\n}\n\nexport const LoopSpacings = {\n SPACING: 16, // 距离下面节点距离\n COLLAPSE_INLINE_SPACING_BOTTOM: 60, // 距离下面节点距离\n [ConstantKeys.INLINE_SPACING_BOTTOM]: 48, // 下边空白\n MIN_INLINE_BLOCK_SPACING: 280, // 最小循环圈宽度\n HORIZONTAL_MIN_INLINE_BLOCK_SPACING: 180, // 水平布局下的最小循环圈高度\n LEFT_EMPTY_BLOCK_WIDTH: 80, // 左边空分支宽度\n EMPTY_BRANCH_SPACING: 20, // 左边空分支宽度\n LOOP_BLOCK_ICON_SPACING: 13, // inlineBlocks 的 inlineBottom\n [ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM]: 23, // inlineBlocks 的 inlineBottom\n INLINE_BLOCKS_INLINE_SPACING_TOP: 30, // inlineBlocks 的 inlineTop\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopLeftEmptyBlockRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n meta: {\n inlineSpacingAfter: 0,\n spacing: 0,\n size: {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { BlockRegistry } from '../block';\nimport { LoopTypeEnum } from './constants';\n\nexport const LoopRightEmptyBlockRegistry: FlowNodeRegistry = {\n ...BlockRegistry,\n type: LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n meta: {\n ...BlockRegistry.meta,\n inlineSpacingAfter: 0,\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopEmptyBranchRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n meta: {\n inlineSpacingAfter: 0,\n spacing: LoopSpacings.EMPTY_BRANCH_SPACING,\n size: {\n width: 100,\n height: 0,\n },\n },\n getLabels(transition) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n if (isVertical) {\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.inputPoint.x,\n y: currentTransform.bounds.center.y + 8, // 右边空节点\n },\n },\n ];\n }\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.bounds.center.x + 8,\n y: currentTransform.inputPoint.y,\n },\n },\n ];\n },\n onAfterUpdateLocalTransform(transform): void {\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 100,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 100,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport { LoopSpacings } from './constants';\n\nexport const LoopInlineBlocksNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: (node) => {\n const inlineBlocksInlineSpacingTop = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_TOP,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_TOP\n );\n return inlineBlocksInlineSpacingTop;\n },\n inlineSpacingAfter: (node) => {\n const inlineBlocksInlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_BOTTOM\n );\n return inlineBlocksInlineSpacingBottom;\n },\n minInlineBlockSpacing: (node) =>\n node.entity.isVertical\n ? LoopSpacings.MIN_INLINE_BLOCK_SPACING\n : LoopSpacings.HORIZONTAL_MIN_INLINE_BLOCK_SPACING,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const parentTransform = currentTransform.parent!;\n const { isVertical } = transition.entity;\n\n const lines: FlowTransitionLine[] = [\n // 循环结束线\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: currentTransform.outputPoint,\n to: parentTransform.outputPoint,\n },\n ];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return lines;\n }\n\n const [leftBlockTransform] = currentTransform.children;\n\n return [\n ...lines,\n // 循环回撤线 - 1 分成两段可以被 viewport 识别出矩阵区域\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: currentTransform.outputPoint,\n to: leftBlockTransform.outputPoint,\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.bottom }\n : { x: currentTransform.bounds.right, y: leftBlockTransform.inputPoint.y },\n ],\n },\n // 循环回撤线 - 2\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: leftBlockTransform.outputPoint,\n to: Point.move(\n currentTransform.inputPoint,\n isVertical ? { x: -12, y: 10 } : { x: 10, y: -12 }\n ),\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.top + 10 }\n : { x: currentTransform.bounds.left + 10, y: leftBlockTransform.inputPoint.y },\n ],\n arrow: true,\n },\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const labels: FlowTransitionLabel[] = [];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return labels;\n }\n\n const leftBlockTransform = currentTransform.children[0];\n const rightBlockTransform = currentTransform.children[1];\n\n if (transition.entity.originParent?.id.startsWith('while_')) {\n // 满足条件时\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_WHILE_TEXT,\n rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? {\n x: (currentTransform.inputPoint.x + rightBlockTransform.inputPoint.x) / 2,\n y: currentTransform.inputPoint.y + 10,\n }\n : {\n x: currentTransform.inputPoint.x + 10,\n y: (currentTransform.inputPoint.y + rightBlockTransform.inputPoint.y) / 2,\n },\n });\n } else {\n // 循环遍历\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_TRAVERSE_TEXT,\n // rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.center.y + 5 }\n : { x: currentTransform.bounds.center.x + 5, y: leftBlockTransform.inputPoint.y },\n });\n }\n\n return labels;\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 根节点\n */\nexport const RootRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.ROOT,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n hidden: true,\n },\n getInputPoint(transform) {\n return transform.firstChild?.inputPoint || transform.bounds.topCenter;\n },\n getOutputPoint(transform) {\n return transform.firstChild?.outputPoint || transform.bounds.bottomCenter;\n },\n};\n","import {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 占位节点,宽高为 0, 该节点下边同样有 \"添加 label\"\n */\nexport const EmptyRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.EMPTY,\n meta: {\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return spacing / 2;\n },\n size: { width: 0, height: 0 },\n hidden: true,\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n"],"mappings":"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","names":["import_inversify","import_renderer","import_document","import_core","import_utils","import_renderer","import_document","import_document","import_document","import_document","import_document","preCenter","currentCenter","import_utils","import_document","import_utils","import_document","import_document","import_document","import_document","import_renderer","import_document","import_renderer","import_document","import_document","import_document","import_utils","import_renderer","import_document","import_document","import_document","import_utils","import_renderer","import_document","import_document","import_document"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/fixed-layout-container-module.ts","../src/flow-registers.ts","../src/activities/end.ts","../src/activities/dynamic-split.ts","../src/activities/static-split.ts","../src/activities/block.ts","../src/activities/inline-blocks.ts","../src/activities/block-icon.ts","../src/activities/block-order-icon.ts","../src/activities/start.ts","../src/activities/try-catch.ts","../src/activities/try-catch-extends/catch-block.ts","../src/activities/try-catch-extends/catch-inline-blocks.ts","../src/activities/try-catch-extends/main-inline-blocks.ts","../src/activities/try-catch-extends/try-block.ts","../src/activities/try-catch-extends/try-slot.ts","../src/activities/loop.ts","../src/activities/loop-extends/constants.ts","../src/activities/loop-extends/loop-left-empty-block.ts","../src/activities/loop-extends/loop-right-empty-block.ts","../src/activities/loop-extends/loop-empty-branch.ts","../src/activities/loop-extends/loop-inline-blocks.ts","../src/activities/root.ts","../src/activities/empty.ts"],"sourcesContent":["export * from './fixed-layout-container-module';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n} from './activities';\n\nexport const FixedLayoutRegistries = {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n};\n","import { ContainerModule } from 'inversify';\nimport { FlowRendererContribution } from '@flowgram.ai/renderer';\nimport { FlowDocumentContribution } from '@flowgram.ai/document';\nimport { PlaygroundContribution } from '@flowgram.ai/core';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FlowRegisters } from './flow-registers';\n\nexport const FixedLayoutContainerModule = new ContainerModule(bind => {\n bindContributions(bind, FlowRegisters, [\n FlowDocumentContribution,\n FlowRendererContribution,\n PlaygroundContribution,\n ]);\n});\n","import { injectable } from 'inversify';\nimport {\n FlowLabelsLayer,\n FlowLinesLayer,\n FlowNodesContentLayer,\n FlowNodesTransformLayer,\n type FlowRendererContribution,\n type FlowRendererRegistry,\n FlowScrollBarLayer,\n FlowScrollLimitLayer,\n} from '@flowgram.ai/renderer';\nimport {\n type FlowDocument,\n type FlowDocumentContribution,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n} from '@flowgram.ai/document';\nimport { type PlaygroundContribution, PlaygroundLayer } from '@flowgram.ai/core';\n\nimport { EndRegistry } from './activities/end';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n InlineBlocksRegistry,\n LoopRegistry,\n RootRegistry,\n StartRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n} from './activities';\n\n@injectable()\nexport class FlowRegisters\n implements FlowDocumentContribution, FlowRendererContribution, PlaygroundContribution\n{\n /**\n * 注册数据层\n * @param document\n */\n registerDocument(document: FlowDocument) {\n /**\n * 注册节点 (ECS - Entity)\n */\n document.registerFlowNodes(\n RootRegistry, // 根节点\n StartRegistry, // 开始节点\n DynamicSplitRegistry, // 动态分支(并行、排他)\n StaticSplitRegistry, // 静态分支(审批)\n BlockRegistry, // 单条 block 注册\n InlineBlocksRegistry, // 多个 block 组成的 block 列表\n BlockIconRegistry, // icon 节点,如条件分支的菱形图标\n BlockOrderIconRegistry, // 带顺序的图标节点,一般为 block 第一个分支节点\n TryCatchRegistry, // TryCatch\n EndRegistry, // 结束节点\n LoopRegistry, // 循环节点\n EmptyRegistry // 占位节点\n );\n /**\n * 注册节点数据 (ECS - Component)\n */\n document.registerNodeDatas(\n FlowNodeRenderData, // 渲染节点相关数据\n FlowNodeTransitionData, // 线条绘制数据\n FlowNodeTransformData // 坐标计算数据\n );\n }\n\n /**\n * 注册渲染层\n * @param renderer\n */\n registerRenderer(renderer: FlowRendererRegistry) {\n /**\n * 注册 layer (ECS - System)\n */\n renderer.registerLayers(\n FlowNodesTransformLayer, // 节点位置渲染\n FlowNodesContentLayer, // 节点内容渲染\n FlowLinesLayer, // 线条渲染\n FlowLabelsLayer, // Label 渲染\n PlaygroundLayer, // 画布基础层,提供缩放、手势等能力\n FlowScrollLimitLayer, // 控制滚动范围\n FlowScrollBarLayer // 滚动条\n );\n }\n\n /**\n * 画布开始渲染 (hook)\n */\n onReady(): void {}\n\n /**\n * 画布销毁 (hook)\n */\n onDispose(): void {}\n}\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 结束节点\n */\nexport const EndRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.END,\n meta: {\n draggable: false,\n isNodeEnd: true,\n selectable: false,\n copyDisable: true,\n },\n // 结束节点没有出边和 label\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 可以动态添加分支的分支节点\n * dynamicSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const DynamicSplitRegistry: FlowNodeRegistry = {\n type: FlowNodeSplitType.DYNAMIC_SPLIT,\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) =>\n node.collapsed && node.entity.collapsedChildren.length > 1 ? 21 : 0,\n // 判断是否有分支节点\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return node.children.length === 1 ? spacing : spacing / 2;\n },\n },\n getLabels(transition) {\n if (transition.isNodeEnd) {\n return [];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: transition.transform.outputPoint,\n },\n ];\n },\n onCreate(node, json) {\n return node.document.addInlineBlocks(node, json.blocks || []);\n },\n getInputPoint(transform) {\n // block icon\n return transform.firstChild?.inputPoint || transform.defaultInputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 没有分支节点\n const noInlineBlocks = transform.children.length === 1;\n const lastChildOutput = transform.lastChild?.outputPoint;\n const spacing = getDefaultSpacing(transform.entity, ConstantKeys.NODE_SPACING);\n\n if (isVertical) {\n return {\n x: lastChildOutput ? lastChildOutput.x : transform.bounds.center.x,\n y: transform.bounds.bottom + (noInlineBlocks ? spacing / 2 : 0),\n };\n }\n\n return {\n x: transform.bounds.right + (noInlineBlocks ? spacing / 2 : 0),\n y: lastChildOutput ? lastChildOutput.y : transform.bounds.center.y,\n };\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n const parentId = `$inlineBlocks$${node.id}`;\n let parent = document.getNode(parentId);\n if (!parent) {\n parent = document.addNode({\n id: parentId,\n type: 'inlineBlocks',\n originParent: node,\n parent: node,\n });\n }\n return document.addBlock(node, json, undefined, undefined, index);\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry, FlowNodeSplitType } from '@flowgram.ai/document';\n\n/**\n * 不能动态添加分支的分支节点\n * staticSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * block1\n * blockOrderIcon\n * block2\n * blockOrderIcon\n */\nexport const StaticSplitRegistry: FlowNodeRegistry = {\n extend: FlowNodeSplitType.DYNAMIC_SPLIT,\n type: FlowNodeSplitType.STATIC_SPLIT,\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n getLabels() {\n return [];\n },\n },\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram.ai/document';\n\n/**\n * block, block 的输入输出点由子节点决定\n */\nexport const BlockRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingAfter: DEFAULT_SPACING.INLINE_BLOCK_PADDING_BOTTOM,\n hidden: true,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n const lines: FlowTransitionLine[] = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: currentTransform.parent!.inputPoint,\n to: currentTransform.inputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n ];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 分支拖拽场景线条 push\n // 当有其余分支的时候,绘制一条两个分支之间的线条\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.DRAGGING_LINE,\n from: currentTransform.parent!.inputPoint,\n to: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n }\n }\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: currentTransform.outputPoint,\n to: currentTransform.parent!.outputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n\n return lines;\n },\n getInputPoint(trans) {\n const child = trans.firstChild;\n return child ? child.inputPoint : trans.defaultInputPoint;\n },\n getOutputPoint(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const child = trans.lastChild;\n if (isVertical) {\n return {\n x: child ? child.outputPoint.x : trans.bounds.bottomCenter.x,\n y: trans.bounds.bottom,\n };\n }\n return {\n x: trans.bounds.right,\n y: child ? child.outputPoint.y : trans.bounds.rightCenter.y,\n };\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const draggingLabel = [];\n\n const hasBranchDraggingAdder =\n currentTransform && currentTransform.entity.isInlineBlock && transition.renderData.draggable;\n\n // 获取两个分支节点中间点作为拖拽标签插入位置\n if (hasBranchDraggingAdder) {\n if (isVertical) {\n const currentOffsetRightX = currentTransform.firstChild?.bounds?.right || 0;\n const nextOffsetLeftX = currentTransform.next?.firstChild?.bounds?.left || 0;\n const currentInputPointY = currentTransform.inputPoint.y;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftX - currentOffsetRightX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n } else {\n const currentOffsetRightY = currentTransform.firstChild?.bounds?.bottom || 0;\n const nextOffsetLeftY = currentTransform.next?.firstChild?.bounds?.top || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetRightY + nextOffsetLeftY) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetLeftY - currentOffsetRightY,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: node,\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowNodeTransformData,\n type FlowNodeTransitionData,\n FlowTransitionLabelEnum,\n FlowLayoutDefault,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 水平 Block 的偏移\n */\nexport const InlineBlocksRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n hidden: true,\n spacing: (node) => getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING),\n isInlineBlocks: true,\n inlineSpacingPre: DEFAULT_SPACING.INLINE_BLOCKS_PADDING_TOP,\n inlineSpacingAfter: (node) =>\n getDefaultSpacing(node.entity, ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM),\n },\n /**\n * 控制子分支的间距\n * @param child\n */\n getChildDelta(child, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n if (isVertical) {\n const leftSpacing = preTransform.size.width + preTransform.originDeltaX;\n\n // 如果小于最小宽度,偏移最小宽度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - leftSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaX\n );\n\n return {\n // 这里需要加上原点的偏移量,并加上水平间距\n x: preBounds.right + delta,\n y: 0,\n };\n } else {\n const bottomSpacing = preTransform.size.height + preTransform.originDeltaY;\n\n // 如果小于最小高度,偏移最小高度的距离\n const delta = Math.max(\n child.parent!.minInlineBlockSpacing - bottomSpacing,\n DEFAULT_SPACING.MARGIN_RIGHT - child.originDeltaY\n );\n\n return {\n x: 0,\n // 这里需要加上原点的偏移量,并加上垂直间距\n y: preBounds.bottom + delta,\n };\n }\n }\n return {\n x: 0,\n y: 0,\n };\n },\n /**\n * 控制条件分支居中布局\n * @param trans\n */\n getDelta(trans, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const { pre, collapsed } = trans;\n\n if (collapsed) {\n return { x: 0, y: 0 };\n }\n\n if (isVertical) {\n const preCenter = pre!.localBounds.center.x;\n const firstBlockX = trans.firstChild?.transform.position.x || 0;\n const lastBlockX = trans.lastChild?.transform.position.x || 0;\n const currentCenter = (lastBlockX - firstBlockX) / 2;\n\n return {\n x: preCenter - currentCenter,\n y: 0,\n };\n }\n const preCenter = pre!.localBounds.center.y;\n const firstBlockY = trans.firstChild?.transform.position.y || 0;\n const lastBlockY = trans.lastChild?.transform.position.y || 0;\n const currentCenter = (lastBlockY - firstBlockY) / 2;\n\n return {\n x: 0,\n y: preCenter - currentCenter,\n };\n },\n getLabels(transition) {\n return getBranchAdderLabel(transition);\n },\n getLines() {\n return [];\n },\n // 和前序节点对齐\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || 0,\n };\n },\n};\n\n/**\n * inlineBlocks 获取 BranchAdder 和展开 label\n */\nexport function getBranchAdderLabel(transition: FlowNodeTransitionData) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 收起时展示收起 label\n if (currentTransform.collapsed) {\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n activateNode: transition.entity.pre,\n },\n },\n ];\n }\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(currentTransform.inputPoint, isVertical ? { y: 10 } : { x: 10 }),\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n}\n","import { Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 图标占位节点,如条件分支的菱形图标\n */\nexport const BlockIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: 20, // 占位节点下边偏小\n // 条件分支 icon 默认的高度比较高,在流程里下边有文字\n size: { width: 250, height: 84 },\n },\n /**\n * 是一个占位节点,后续要加上 label 展开收起的图标\n */\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n // 为节点,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n return [];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n type: FlowTransitionLabelEnum.COLLAPSE_LABEL,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n props: {\n collapseNode: transition.entity.parent,\n activateNode: transition.entity,\n },\n },\n ];\n },\n};\n","import { IPoint, Point } from '@flowgram.ai/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram.ai/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram.ai/document';\n\n/**\n * 带顺序的图标节点,一般为 block 第一个分支节点\n * - 只有一个分支时,不需要展开收起\n */\nexport const BlockOrderIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n meta: {\n spacing: 40,\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const currentOutput = currentTransform.outputPoint;\n const nextTransform = currentTransform.next;\n const parentTransform = currentTransform.parent;\n\n // 为空分支,画一个加号即可\n if (transition.entity.parent!.collapsedChildren.length <= 1) {\n const parentOutput = parentTransform?.outputPoint as IPoint;\n return [\n {\n offset: parentOutput,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n }\n\n const collapsedSpacing = getDefaultSpacing(\n transition.entity,\n DefaultSpacingKey.COLLAPSED_SPACING\n );\n\n return [\n {\n offset: nextTransform\n ? Point.getMiddlePoint(currentOutput, nextTransform.inputPoint)\n : Point.move(\n currentOutput,\n isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }\n ),\n // 收起展开复合按钮\n type: FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,\n props: {\n activateNode: transition.entity,\n collapseNode: transition.entity.parent,\n },\n },\n ];\n },\n};\n","import { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 开始节点\n */\nexport const StartRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.START,\n meta: {\n isStart: true,\n draggable: false,\n selectable: false, // 触发器等开始节点不能被框选\n deleteDisable: true, // 禁止删除\n copyDisable: true, // 禁止copy\n addDisable: true, // 禁止添加\n },\n};\n","import {\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n} from '@flowgram.ai/document';\n\nimport {\n CatchBlockRegistry,\n CatchInlineBlocksRegistry,\n MainInlineBlocksRegistry,\n TryBlockRegistry,\n TryCatchSpacings,\n TryCatchTypeEnum,\n TrySlotRegistry,\n} from './try-catch-extends';\n\n/**\n * try catch 节点\n */\nexport const TryCatchRegistry: FlowNodeRegistry = {\n type: 'tryCatch',\n meta: {\n hidden: true,\n inlineSpacingAfter: TryCatchSpacings.INLINE_SPACING_BOTTOM,\n },\n /**\n * 结构\n * tryCatch\n * - tryCatchIcon\n * - mainInlineBlocks\n * - tryBlock // try 分支\n * - trySlot // 空节点用来占位,try 分支一开始没有节点\n * - catchInlineBlocks\n * - catchBlock // catch 分支 1\n * - blockOrderIcon\n * - node1\n * - catchBlock // catch 分支 2\n * - blockOrderIcon\n * - node 2\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const [tryBlock, ...catchBlocks] = json.blocks || [];\n const addedNodes: FlowNodeEntity[] = [];\n const tryCatchIconNode = document.addNode({\n id: `$tryCatchIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const mainBlockNode = document.addNode({\n id: `$mainInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const tryBlockNode = document.addNode({\n id: tryBlock.id,\n type: TryCatchTypeEnum.TRY_BLOCK,\n originParent: node,\n parent: mainBlockNode,\n data: tryBlock.data,\n });\n const trySlotNode = document.addNode({\n id: `$trySlot$${tryBlock.id}`,\n hidden: true,\n type: TryCatchTypeEnum.TRY_SLOT, // 占位节点\n originParent: node,\n parent: tryBlockNode,\n });\n const catchInlineBlocksNode = document.addNode({\n id: `$catchInlineBlocks$${node.id}`,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n originParent: node,\n parent: mainBlockNode,\n });\n addedNodes.push(\n tryCatchIconNode,\n mainBlockNode,\n tryBlockNode,\n trySlotNode,\n catchInlineBlocksNode\n );\n (tryBlock.blocks || []).forEach((blockData) => {\n document.addNode(\n {\n ...blockData,\n parent: tryBlockNode,\n },\n addedNodes\n );\n });\n catchBlocks.forEach((blockData) => {\n document.addBlock(node, blockData, addedNodes);\n });\n return addedNodes;\n },\n /**\n * 添加 catch 分支\n * @param node\n * @param blockData\n * @param addedNodes\n */\n onBlockChildCreate(node, blockData, addedNodes) {\n const parent = node.document.getNode(`$catchInlineBlocks$${node.id}`);\n const block = node.document.addNode({\n id: blockData.id,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n originParent: node,\n parent,\n data: blockData.data,\n });\n // 分支开始节点\n const blockOrderIcon = node.document.addNode({\n id: `$blockOrderIcon$${blockData.id}`,\n type: FlowNodeBaseType.BLOCK_ORDER_ICON,\n originParent: node,\n parent: block,\n });\n if (blockData.blocks) {\n node.document.addBlocksAsChildren(block, blockData.blocks || [], addedNodes);\n }\n addedNodes?.push(block, blockOrderIcon);\n return block;\n },\n getInputPoint(transform) {\n const tryCatchIcon = transform.firstChild!;\n // 使用图标的 inputPoint\n return tryCatchIcon.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const tryCatchIcon = transform.firstChild!;\n if (isVertical) {\n return {\n x: tryCatchIcon.inputPoint.x,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: tryCatchIcon.inputPoint.y,\n };\n },\n /**\n * tryCatch 子节点配置\n */\n extendChildRegistries: [\n /**\n * icon 节点\n */\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: TryCatchSpacings.INLINE_SPACING_TOP,\n },\n getLabels() {\n return [];\n },\n },\n MainInlineBlocksRegistry,\n CatchInlineBlocksRegistry,\n TryBlockRegistry,\n CatchBlockRegistry,\n TrySlotRegistry,\n ],\n};\n","import {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLineEnum,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支\n */\nexport const CatchBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.CATCH_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const parentPoint = transform.parent!;\n const { inputPoint, outputPoint } = transform;\n let parentInputPoint;\n if (isVertical) {\n parentInputPoint = {\n x: parentPoint.inputPoint.x,\n y: parentPoint.inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n } else {\n parentInputPoint = {\n x: parentPoint.inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: parentPoint.inputPoint.y,\n };\n }\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: parentInputPoint,\n to: inputPoint,\n },\n ];\n\n // 最后一个节点是 end 节点,不绘制 mergeLine\n if (!transition.isNodeEnd) {\n let mergePoint;\n if (isVertical) {\n mergePoint = {\n x: parentPoint.outputPoint.x,\n y: parentPoint.bounds.bottom,\n };\n } else {\n mergePoint = {\n x: parentPoint.bounds.right,\n y: parentPoint.outputPoint.y,\n };\n }\n\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: outputPoint,\n to: mergePoint,\n });\n }\n\n return lines;\n },\n getLabels() {\n return [];\n },\n};\n","import { FlowRendererKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * catch 分支列表\n */\nexport const CatchInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.CATCH_INLINE_BLOCKS,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n inlineSpacingPre: DEFAULT_SPACING.NULL,\n // inlineSpacingAfter: DEFAULT_SPACING.NULL,\n },\n getDelta() {\n return undefined;\n },\n getLines(transition) {\n const { transform } = transition;\n const mainInlineBlocks = transform.parent!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.DIVERGE_LINE,\n from: mainInlineBlocks.pre!.outputPoint,\n to: transform.inputPoint,\n },\n ];\n\n if (!transform.entity.isNodeEnd) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n from: transform.outputPoint,\n to: mainInlineBlocks.outputPoint,\n });\n }\n\n return lines;\n },\n getOriginDeltaX(transform) {\n const { firstChild } = transform;\n if (!firstChild) return 0;\n return firstChild.originDeltaX;\n },\n getLabels(transition) {\n const { inputPoint } = transition.transform;\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n\n // 实际输入点\n const actualInputPoint = {\n x: isVertical ? inputPoint.x : inputPoint.x - TryCatchSpacings.CATCH_INLINE_SPACING,\n y: isVertical ? inputPoint.y - TryCatchSpacings.CATCH_INLINE_SPACING : inputPoint.y,\n };\n\n if (currentTransform.collapsed) {\n return [];\n }\n\n // branch adder 节点\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: actualInputPoint,\n props: {\n // 激活状态\n activated: transition.entity.getData(FlowNodeRenderData)!.activated,\n transform: currentTransform,\n // 传给外部使用的 node 信息\n node: currentTransform.originParent?.entity,\n },\n },\n ];\n },\n getInputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n // 因为是左偏移,所以用第一条 catch 分支\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return firstCatchBlock.inputPoint;\n }\n return isVertical ? transform.bounds.topCenter : transform.bounds.rightCenter;\n },\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n\n // 收缩时,出点为入点\n if (transform.collapsed) {\n return transform.inputPoint;\n }\n\n const firstCatchBlock = transform.firstChild;\n if (firstCatchBlock) {\n return isVertical\n ? {\n x: firstCatchBlock!.outputPoint?.x,\n y: transform.bounds.bottom,\n }\n : {\n x: transform.bounds.right,\n y: firstCatchBlock!.outputPoint?.y,\n };\n }\n return isVertical ? transform.bounds.bottomCenter : transform.bounds.rightCenter;\n },\n};\n","import { FlowRendererKey, FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeTransformData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram.ai/document';\n\nimport { TryCatchSpacings, TryCatchTypeEnum } from './constants';\n\n/**\n * 主 BLOCK\n */\nexport const MainInlineBlocksRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.INLINE_BLOCKS,\n type: TryCatchTypeEnum.MAIN_INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: TryCatchSpacings.MAIN_INLINE_SPACING_TOP,\n inlineSpacingAfter: TryCatchSpacings.MAIN_INLINE_SPACING_BOTTOM,\n },\n getLines(transition) {\n const { transform } = transition;\n const tryBranch = transform.firstChild!;\n\n const lines = [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: tryBranch.outputPoint,\n to: transform.originParent!.outputPoint,\n },\n ];\n\n return lines;\n },\n getLabels(transition) {\n const { transform } = transition;\n const { isVertical } = transition.entity;\n const catchInlineBlocks = transform.children[1]!;\n const errLabelX = isVertical\n ? (transform.parent!.outputPoint.x + catchInlineBlocks.inputPoint.x) / 2\n : transform.inputPoint.x - TryCatchSpacings.INLINE_SPACING_TOP;\n const errLabelY = isVertical\n ? transform.inputPoint.y - TryCatchSpacings.INLINE_SPACING_TOP\n : (transform.parent!.outputPoint.y + catchInlineBlocks.inputPoint.y) / 2;\n\n const errorLabelX = errLabelX;\n const errorLabelY = errLabelY;\n return [\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_START_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.inputPoint.x + TryCatchSpacings.TRY_START_LABEL_DELTA,\n y: isVertical\n ? transform.inputPoint.y + TryCatchSpacings.TRY_START_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.TRY_END_TEXT,\n offset: {\n x: isVertical\n ? transform.inputPoint.x\n : transform.originParent!.outputPoint.x + TryCatchSpacings.TRY_END_LABEL_DELTA,\n y: isVertical\n ? transform.originParent!.outputPoint.y + TryCatchSpacings.TRY_END_LABEL_DELTA\n : transform.inputPoint.y,\n },\n },\n // 错误分支收起\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.TRY_CATCH_COLLAPSE,\n offset: {\n x: errorLabelX,\n y: errorLabelY,\n },\n props: {\n node: transform.lastChild?.entity,\n },\n },\n ];\n },\n getInputPoint(transform) {\n const tryBlock = transform.firstChild!;\n return tryBlock.inputPoint;\n },\n getOutputPoint(transform, layout) {\n const tryBlock = transform.firstChild!;\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (isVertical) {\n return {\n x: tryBlock.outputPoint.x,\n y: transform.bounds.bottom + TryCatchSpacings.CATCH_INLINE_SPACING,\n };\n }\n return {\n x: transform.bounds.right + TryCatchSpacings.CATCH_INLINE_SPACING,\n y: tryBlock.outputPoint.y,\n };\n },\n getDelta() {\n return undefined;\n },\n getChildDelta(child, layout) {\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n const isVertical = FlowLayoutDefault.isVertical(layout);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n // try 分支和 catch 分支的最小间距不低于 minInlineBlockSpacing\n let delta = 0;\n if (isVertical) {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaX + DEFAULT_SPACING.MARGIN_RIGHT\n );\n } else {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaY + DEFAULT_SPACING.MARGIN_RIGHT\n );\n }\n\n return {\n // 分支只有两个所以这里可以写死间隔宽度\n x: isVertical ? preBounds.right + delta : 0,\n y: isVertical ? 0 : preBounds.bottom + delta,\n };\n }\n return {\n x: 0,\n y: 0,\n };\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 分支\n */\nexport const TryBlockRegistry: FlowNodeRegistry = {\n extend: FlowNodeBaseType.BLOCK,\n type: TryCatchTypeEnum.TRY_BLOCK,\n meta: {\n hidden: true,\n spacing: DEFAULT_SPACING.NULL,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { TryCatchTypeEnum } from './constants';\n\n/**\n * try 占位节点\n */\nexport const TrySlotRegistry: FlowNodeRegistry = {\n type: TryCatchTypeEnum.TRY_SLOT,\n meta: {\n inlineSpacingAfter: 16,\n spacing: 0,\n size: {\n width: 16,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 16,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 16,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds.center,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport {\n LoopEmptyBranchRegistry,\n LoopInlineBlocksNodeRegistry,\n LoopLeftEmptyBlockRegistry,\n LoopRightEmptyBlockRegistry,\n LoopSpacings,\n LoopTypeEnum,\n} from './loop-extends';\n\n/**\n * 循环节点\n */\nexport const LoopRegistry: FlowNodeRegistry = {\n type: 'loop',\n meta: {\n hidden: true,\n inlineSpacingAfter: (node) => {\n if (node.collapsed) {\n return LoopSpacings.COLLAPSE_INLINE_SPACING_BOTTOM;\n }\n const inlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_SPACING_BOTTOM\n );\n return inlineSpacingBottom;\n },\n spacing: LoopSpacings.SPACING,\n },\n /**\n * - loopNode\n * - loopBlockIcon\n * - loopInlineBlocks\n * - loopEmptyBlock 左侧占位区域\n * - loopBlock\n * - xxx\n * - xxx\n * @param node\n * @param json\n */\n onCreate(node: FlowNodeEntity, json: FlowNodeJSON) {\n const { document } = node;\n const loopBlocks = json.blocks || [];\n\n const loopIconNode = document.addNode({\n id: `$blockIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const loopInlineBlocks = document.addNode({\n id: `$inlineBlocks$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.INLINE_BLOCKS,\n originParent: node,\n parent: node,\n });\n const loopEmptyBlockNode = document.addNode({\n id: `$loopLeftEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n\n const loopBlockNode = document.addNode({\n id: `$block$${node.id}`,\n hidden: true,\n type: FlowNodeBaseType.BLOCK, // : LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n originParent: node,\n parent: loopInlineBlocks,\n });\n const loopBranch = document.addNode({\n id: `$loopRightEmpty$${node.id}`,\n hidden: true,\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n originParent: node,\n parent: loopBlockNode,\n });\n const otherNodes: FlowNodeEntity[] = [];\n loopBlocks.forEach((b) =>\n document.addNode(\n {\n ...b,\n type: b.type!,\n parent: loopBlockNode,\n },\n otherNodes\n )\n );\n\n return [\n loopIconNode,\n loopEmptyBlockNode,\n loopInlineBlocks,\n loopBlockNode,\n loopBranch,\n ...otherNodes,\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n return [\n // 循环结束\n {\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_END_TEXT,\n // 循环 label 垂直样式展示,而非 rotate 旋转文案\n props: isVertical\n ? undefined\n : {\n style: {\n maxWidth: '20px',\n lineHeight: '12px',\n whiteSpace: 'pre-wrap',\n },\n },\n offset: Point.move(currentTransform.outputPoint, isVertical ? { y: -26 } : { x: -26 }),\n },\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: currentTransform.outputPoint,\n },\n ];\n },\n // 和前序节点对齐\n getInputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.top,\n };\n }\n return {\n x: transform.bounds.left,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n getOutputPoint(transform) {\n const { isVertical } = transform.entity;\n if (isVertical) {\n return {\n x: transform.pre?.outputPoint.x || transform.firstChild?.outputPoint.x || 0,\n y: transform.bounds.bottom,\n };\n }\n return {\n x: transform.bounds.right,\n y: transform.pre?.outputPoint.y || transform.firstChild?.outputPoint.y || 0,\n };\n },\n\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n spacing: LoopSpacings.LOOP_BLOCK_ICON_SPACING,\n },\n },\n LoopLeftEmptyBlockRegistry,\n LoopEmptyBranchRegistry,\n LoopRightEmptyBlockRegistry,\n LoopInlineBlocksNodeRegistry,\n ],\n\n addChild(node, json, options = {}) {\n const { index } = options;\n const document = node.document;\n return document.addNode({\n ...json,\n ...options,\n parent: document.getNode(`$block$${node.id}`),\n index: typeof index === 'number' ? index + 1 : undefined,\n });\n },\n};\n","import { ConstantKeys } from '@flowgram.ai/document';\n\nexport enum LoopTypeEnum {\n LOOP_LEFT_EMPTY_BLOCK = 'loopLeftEmptyBlock',\n LOOP_RIGHT_EMPTY_BLOCK = 'loopRightEmptyBlock',\n LOOP_EMPTY_BRANCH = 'loopEmptyBranch',\n}\n\nexport const LoopSpacings = {\n SPACING: 16, // 距离下面节点距离\n COLLAPSE_INLINE_SPACING_BOTTOM: 60, // 距离下面节点距离\n [ConstantKeys.INLINE_SPACING_BOTTOM]: 48, // 下边空白\n MIN_INLINE_BLOCK_SPACING: 280, // 最小循环圈宽度\n HORIZONTAL_MIN_INLINE_BLOCK_SPACING: 180, // 水平布局下的最小循环圈高度\n LEFT_EMPTY_BLOCK_WIDTH: 80, // 左边空分支宽度\n EMPTY_BRANCH_SPACING: 20, // 左边空分支宽度\n LOOP_BLOCK_ICON_SPACING: 13, // inlineBlocks 的 inlineBottom\n [ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM]: 23, // inlineBlocks 的 inlineBottom\n INLINE_BLOCKS_INLINE_SPACING_TOP: 30, // inlineBlocks 的 inlineTop\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopLeftEmptyBlockRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_LEFT_EMPTY_BLOCK,\n meta: {\n inlineSpacingAfter: 0,\n spacing: 0,\n size: {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n },\n },\n onAfterUpdateLocalTransform(transform): void {\n // 根据布局要置换宽高数据\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: LoopSpacings.LEFT_EMPTY_BLOCK_WIDTH,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n};\n","import { type FlowNodeRegistry } from '@flowgram.ai/document';\n\nimport { BlockRegistry } from '../block';\nimport { LoopTypeEnum } from './constants';\n\nexport const LoopRightEmptyBlockRegistry: FlowNodeRegistry = {\n ...BlockRegistry,\n type: LoopTypeEnum.LOOP_RIGHT_EMPTY_BLOCK,\n meta: {\n ...BlockRegistry.meta,\n inlineSpacingAfter: 0,\n },\n};\n","import { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram.ai/document';\n\nimport { LoopSpacings, LoopTypeEnum } from './constants';\n\nexport const LoopEmptyBranchRegistry: FlowNodeRegistry = {\n type: LoopTypeEnum.LOOP_EMPTY_BRANCH,\n meta: {\n inlineSpacingAfter: 0,\n spacing: LoopSpacings.EMPTY_BRANCH_SPACING,\n size: {\n width: 100,\n height: 0,\n },\n },\n getLabels(transition) {\n const { isVertical } = transition.entity;\n const currentTransform = transition.transform;\n if (isVertical) {\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.inputPoint.x,\n y: currentTransform.bounds.center.y + 8, // 右边空节点\n },\n },\n ];\n }\n return [\n {\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n offset: {\n x: currentTransform.bounds.center.x + 8,\n y: currentTransform.inputPoint.y,\n },\n },\n ];\n },\n onAfterUpdateLocalTransform(transform): void {\n if (transform.entity.isVertical) {\n transform.data.size = {\n width: 100,\n height: 0,\n };\n } else {\n transform.data.size = {\n width: 0,\n height: 100,\n };\n }\n transform.transform.update({\n size: transform.data.size,\n });\n },\n};\n","import { Point } from '@flowgram.ai/utils';\nimport { FlowTextKey } from '@flowgram.ai/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram.ai/document';\n\nimport { LoopSpacings } from './constants';\n\nexport const LoopInlineBlocksNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: (node) => {\n const inlineBlocksInlineSpacingTop = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_TOP,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_TOP\n );\n return inlineBlocksInlineSpacingTop;\n },\n inlineSpacingAfter: (node) => {\n const inlineBlocksInlineSpacingBottom = getDefaultSpacing(\n node.entity,\n ConstantKeys.INLINE_BLOCKS_INLINE_SPACING_BOTTOM,\n LoopSpacings.INLINE_BLOCKS_INLINE_SPACING_BOTTOM\n );\n return inlineBlocksInlineSpacingBottom;\n },\n minInlineBlockSpacing: (node) =>\n node.entity.isVertical\n ? LoopSpacings.MIN_INLINE_BLOCK_SPACING\n : LoopSpacings.HORIZONTAL_MIN_INLINE_BLOCK_SPACING,\n },\n getLines(transition) {\n const currentTransform = transition.transform;\n const parentTransform = currentTransform.parent!;\n const { isVertical } = transition.entity;\n\n const lines: FlowTransitionLine[] = [\n // 循环结束线\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: currentTransform.outputPoint,\n to: parentTransform.outputPoint,\n },\n ];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return lines;\n }\n\n const [leftBlockTransform] = currentTransform.children;\n\n return [\n ...lines,\n // 循环回撤线 - 1 分成两段可以被 viewport 识别出矩阵区域\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: currentTransform.outputPoint,\n to: leftBlockTransform.outputPoint,\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.bottom }\n : { x: currentTransform.bounds.right, y: leftBlockTransform.inputPoint.y },\n ],\n },\n // 循环回撤线 - 2\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: leftBlockTransform.outputPoint,\n to: Point.move(\n currentTransform.inputPoint,\n isVertical ? { x: -12, y: 10 } : { x: 10, y: -12 }\n ),\n vertices: [\n isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.top + 10 }\n : { x: currentTransform.bounds.left + 10, y: leftBlockTransform.inputPoint.y },\n ],\n arrow: true,\n },\n ];\n },\n getLabels(transition) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n\n const labels: FlowTransitionLabel[] = [];\n\n // 收起时展示\n if (currentTransform.collapsed) {\n return labels;\n }\n\n const leftBlockTransform = currentTransform.children[0];\n const rightBlockTransform = currentTransform.children[1];\n\n if (transition.entity.originParent?.id.startsWith('while_')) {\n // 满足条件时\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_WHILE_TEXT,\n rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? {\n x: (currentTransform.inputPoint.x + rightBlockTransform.inputPoint.x) / 2,\n y: currentTransform.inputPoint.y + 10,\n }\n : {\n x: currentTransform.inputPoint.x + 10,\n y: (currentTransform.inputPoint.y + rightBlockTransform.inputPoint.y) / 2,\n },\n });\n } else {\n // 循环遍历\n labels.push({\n type: FlowTransitionLabelEnum.TEXT_LABEL,\n renderKey: FlowTextKey.LOOP_TRAVERSE_TEXT,\n // rotate: isVertical ? '' : '-90deg',\n offset: isVertical\n ? { x: leftBlockTransform.inputPoint.x, y: currentTransform.bounds.center.y + 5 }\n : { x: currentTransform.bounds.center.x + 5, y: leftBlockTransform.inputPoint.y },\n });\n }\n\n return labels;\n },\n};\n","import { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram.ai/document';\n\n/**\n * 根节点\n */\nexport const RootRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.ROOT,\n meta: {\n spacing: DEFAULT_SPACING.NULL,\n hidden: true,\n },\n getInputPoint(transform) {\n return transform.firstChild?.inputPoint || transform.bounds.topCenter;\n },\n getOutputPoint(transform) {\n return transform.firstChild?.outputPoint || transform.bounds.bottomCenter;\n },\n};\n","import {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram.ai/document';\n\n/**\n * 占位节点,宽高为 0, 该节点下边同样有 \"添加 label\"\n */\nexport const EmptyRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.EMPTY,\n meta: {\n spacing: (node) => {\n const spacing = getDefaultSpacing(node.entity, ConstantKeys.NODE_SPACING);\n return spacing / 2;\n },\n size: { width: 0, height: 0 },\n hidden: true,\n },\n getLabels(transition) {\n return [\n {\n offset: transition.transform.bounds,\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n },\n ];\n },\n};\n"],"mappings":"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","names":["import_inversify","import_renderer","import_document","import_core","import_utils","import_renderer","import_document","import_document","import_document","import_document","import_document","preCenter","currentCenter","import_utils","import_document","import_utils","import_document","import_document","import_document","import_document","import_renderer","import_document","import_renderer","import_document","import_document","import_document","import_utils","import_renderer","import_document","import_document","import_document","import_utils","import_renderer","import_document","import_document","import_document"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowgram.ai/fixed-layout-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"homepage": "https://flowgram.ai/",
|
|
5
5
|
"repository": "https://github.com/bytedance/flowgram.ai",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"inversify": "^6.0.1",
|
|
20
20
|
"reflect-metadata": "~0.2.2",
|
|
21
|
-
"@flowgram.ai/core": "0.1.
|
|
22
|
-
"@flowgram.ai/document": "0.1.
|
|
23
|
-
"@flowgram.ai/renderer": "0.1.
|
|
24
|
-
"@flowgram.ai/utils": "0.1.
|
|
21
|
+
"@flowgram.ai/core": "0.1.16",
|
|
22
|
+
"@flowgram.ai/document": "0.1.16",
|
|
23
|
+
"@flowgram.ai/renderer": "0.1.16",
|
|
24
|
+
"@flowgram.ai/utils": "0.1.16"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/react": "^18",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"tsup": "^8.0.1",
|
|
32
32
|
"typescript": "^5.0.4",
|
|
33
33
|
"vitest": "^0.34.6",
|
|
34
|
-
"@flowgram.ai/eslint-config": "0.1.
|
|
35
|
-
"@flowgram.ai/ts-config": "0.1.
|
|
34
|
+
"@flowgram.ai/eslint-config": "0.1.16",
|
|
35
|
+
"@flowgram.ai/ts-config": "0.1.16"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": ">=17",
|