@flowgram-vue/fixed-layout-core 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/dist/index.cjs +2327 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.js +2323 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
- package/src/activities/block-icon.ts +55 -0
- package/src/activities/block-order-icon.ts +64 -0
- package/src/activities/block.ts +192 -0
- package/src/activities/break.ts +14 -0
- package/src/activities/dynamic-split.ts +94 -0
- package/src/activities/empty.ts +35 -0
- package/src/activities/end.ts +26 -0
- package/src/activities/index.ts +24 -0
- package/src/activities/inline-blocks.ts +197 -0
- package/src/activities/input.ts +152 -0
- package/src/activities/loop-extends/constants.ts +25 -0
- package/src/activities/loop-extends/index.ts +10 -0
- package/src/activities/loop-extends/loop-empty-branch.ts +60 -0
- package/src/activities/loop-extends/loop-inline-blocks.ts +140 -0
- package/src/activities/loop-extends/loop-left-empty-block.ts +43 -0
- package/src/activities/loop-extends/loop-right-empty-block.ts +18 -0
- package/src/activities/loop.ts +198 -0
- package/src/activities/multi-inputs.ts +98 -0
- package/src/activities/multi-outputs.ts +65 -0
- package/src/activities/output.ts +18 -0
- package/src/activities/root.ts +23 -0
- package/src/activities/simple-split.ts +47 -0
- package/src/activities/slot/constants.ts +56 -0
- package/src/activities/slot/extends/index.ts +8 -0
- package/src/activities/slot/extends/slot-block.ts +229 -0
- package/src/activities/slot/extends/slot-icon.ts +32 -0
- package/src/activities/slot/extends/slot-inline-blocks.ts +102 -0
- package/src/activities/slot/index.ts +8 -0
- package/src/activities/slot/slot.ts +108 -0
- package/src/activities/slot/typings.ts +13 -0
- package/src/activities/slot/utils/create.ts +105 -0
- package/src/activities/slot/utils/layout.ts +49 -0
- package/src/activities/slot/utils/node.ts +38 -0
- package/src/activities/slot/utils/transition.ts +222 -0
- package/src/activities/start.ts +21 -0
- package/src/activities/static-split.ts +29 -0
- package/src/activities/try-catch-extends/catch-block.ts +78 -0
- package/src/activities/try-catch-extends/catch-inline-blocks.ts +122 -0
- package/src/activities/try-catch-extends/constants.ts +27 -0
- package/src/activities/try-catch-extends/index.ts +11 -0
- package/src/activities/try-catch-extends/main-inline-blocks.ts +147 -0
- package/src/activities/try-catch-extends/try-block.ts +26 -0
- package/src/activities/try-catch-extends/try-slot.ts +48 -0
- package/src/activities/try-catch.ts +176 -0
- package/src/fixed-layout-container-module.ts +20 -0
- package/src/flow-registers.ts +117 -0
- package/src/index.ts +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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-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/try-catch.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/loop.ts","../src/activities/root.ts","../src/activities/empty.ts","../src/activities/simple-split.ts","../src/activities/break.ts","../src/activities/input.ts","../src/activities/output.ts","../src/activities/multi-outputs.ts","../src/activities/multi-inputs.ts","../src/activities/slot/constants.ts","../src/activities/slot/typings.ts","../src/activities/slot/utils/node.ts","../src/activities/slot/utils/transition.ts","../src/activities/slot/utils/layout.ts","../src/activities/slot/utils/create.ts","../src/activities/slot/extends/slot-icon.ts","../src/activities/slot/extends/slot-inline-blocks.ts","../src/activities/slot/extends/slot-block.ts","../src/activities/slot/slot.ts","../src/flow-registers.ts","../src/fixed-layout-container-module.ts","../src/index.ts"],"names":["FlowNodeSplitType","FlowNodeBaseType","FlowLayoutDefault","FlowTransitionLabelEnum","getDefaultSpacing","ConstantKeys","DEFAULT_SPACING","preCenter","currentCenter","Point","DefaultSpacingKey","FlowTransitionLineEnum","FlowRendererKey","FlowNodeRenderData","FlowNodeTransformData","FlowTextKey","LABEL_SIDE_TYPE","SlotNodeType","mean"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram-vue/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 /**\n * @depreacted\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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType, type FlowNodeRegistry, FlowNodeSplitType } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n DEFAULT_SPACING,\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram-vue/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\n ? currentTransform.firstChild.bounds.right\n : currentTransform.bounds.right;\n const nextOffsetLeftX =\n (currentTransform.next?.firstChild\n ? currentTransform.next?.firstChild.bounds?.left\n : currentTransform.next?.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 currentOffsetBottomX = currentTransform.firstChild\n ? currentTransform.firstChild.bounds.bottom\n : currentTransform.bounds.bottom;\n const nextOffsetTopX =\n (currentTransform.next?.firstChild\n ? currentTransform.next?.firstChild.bounds?.top\n : currentTransform.next?.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: (currentOffsetBottomX + nextOffsetTopX) / 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\n ? currentTransform.firstChild.bounds.right\n : currentTransform.bounds.right;\n const nextOffsetLeftX =\n (currentTransform.next?.firstChild\n ? currentTransform.next.firstChild.bounds?.left\n : currentTransform.next?.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 currentOffsetBottomX = currentTransform.firstChild\n ? currentTransform.firstChild.bounds.bottom\n : currentTransform.bounds.bottom;\n const nextOffsetTopX =\n (currentTransform.next?.firstChild\n ? currentTransform.next.firstChild.bounds?.top\n : currentTransform.next?.bounds?.top) || 0;\n const currentInputPointX = currentTransform.inputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetBottomX + nextOffsetTopX) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetTopX - currentOffsetBottomX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n\n /**\n * @depreacted\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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Point } from '@flowgram-vue/utils';\nimport { FlowRendererKey } from '@flowgram-vue/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-vue/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: (transform) => {\n if (transform.entity.blocks.length === 0) {\n return 0;\n }\n return (\n getDefaultSpacing(transform.entity, ConstantKeys.INLINE_BLOCKS_PADDING_TOP) ||\n DEFAULT_SPACING.INLINE_BLOCKS_PADDING_TOP\n );\n },\n inlineSpacingAfter: (transform) => {\n if (transform.entity.blocks.length === 0) {\n return 0;\n }\n return getDefaultSpacing(transform.entity, ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM);\n },\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 getDefaultSpacing(child.entity, ConstantKeys.BRANCH_SPACING) - 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 getDefaultSpacing(child.entity, ConstantKeys.BRANCH_SPACING) - 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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Point } from '@flowgram-vue/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram-vue/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, Point } from '@flowgram-vue/utils';\nimport { DefaultSpacingKey, getDefaultSpacing } from '@flowgram-vue/document';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLineEnum,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowRendererKey } from '@flowgram-vue/renderer';\nimport {\n DEFAULT_SPACING,\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowRendererKey, FlowTextKey } from '@flowgram-vue/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeTransformData,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n FlowLayoutDefault,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram-vue/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 + getDefaultSpacing(child.entity, ConstantKeys.BRANCH_SPACING)\n );\n } else {\n delta = Math.max(\n child.parent!.minInlineBlockSpacing,\n -child.originDeltaY + getDefaultSpacing(child.entity, ConstantKeys.BRANCH_SPACING)\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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowLayoutDefault,\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n} from '@flowgram-vue/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: tryBlock.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: blockData.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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ConstantKeys } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FlowNodeRegistry } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FlowNodeRegistry } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FlowNodeRegistry, FlowTransitionLabelEnum } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Point } from '@flowgram-vue/utils';\nimport { FlowTextKey } from '@flowgram-vue/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Point } from '@flowgram-vue/utils';\nimport { FlowTextKey } from '@flowgram-vue/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeEntity,\n type FlowNodeJSON,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram-vue/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 /**\n * @depreacted\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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { DEFAULT_SPACING, FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/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.lastChild?.outputPoint || transform.bounds.bottomCenter;\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowTransitionLabelEnum,\n ConstantKeys,\n getDefaultSpacing,\n} from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowNodeBaseType,\n FlowNodeJSON,\n FlowNodeEntity,\n} from '@flowgram-vue/document';\n\n/**\n * - simpleSplit: (最原始的 id)\n * blockIcon\n * inlineBlocks\n * node1\n * node2\n */\nexport const SimpleSplitRegistry: FlowNodeRegistry = {\n type: FlowNodeSplitType.SIMPLE_SPLIT,\n extend: FlowNodeSplitType.DYNAMIC_SPLIT,\n onBlockChildCreate(\n originParent: FlowNodeEntity,\n blockData: FlowNodeJSON,\n addedNodes: FlowNodeEntity[] = [] // 新创建的节点都要存在这里\n ) {\n const { document } = originParent;\n const parent = document.getNode(`$inlineBlocks$${originParent.id}`);\n const realBlock = document.addNode(\n {\n ...blockData,\n type: blockData.type || FlowNodeBaseType.BLOCK,\n parent,\n },\n addedNodes\n );\n addedNodes.push(realBlock);\n return realBlock;\n },\n // addChild(node, json, options = {}) {\n // const { index } = options;\n // const document = node.document;\n // return document.addBlock(node, json, undefined, undefined, index);\n // }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/document';\n\n/**\n * Break 节点, 用于分支断开\n */\nexport const BreakRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BREAK,\n extend: FlowNodeBaseType.END,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n LABEL_SIDE_TYPE,\n FlowTransitionLabelEnum,\n} from '@flowgram-vue/document';\n\n/**\n * 输入节点\n */\nexport const InputRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.INPUT,\n extend: FlowNodeBaseType.BLOCK,\n meta: {\n hidden: false,\n },\n getLines(transition, layout) {\n const currentTransform = transition.transform;\n const { isVertical } = transition.entity;\n const lines: FlowTransitionLine[] = [];\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\n ? currentTransform.firstChild.bounds.right\n : currentTransform.bounds.right;\n const nextOffsetLeftX =\n (currentTransform.next?.firstChild\n ? currentTransform.next?.firstChild.bounds?.left\n : currentTransform.next?.bounds?.left) || 0;\n const currentInputPointY = currentTransform.outputPoint.y;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n isDraggingLine: true,\n from: {\n x: (currentOffsetRightX + nextOffsetLeftX) / 2,\n y: currentInputPointY,\n },\n to: currentTransform.parent!.outputPoint,\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n });\n }\n } else {\n const currentOffsetBottomX = currentTransform.firstChild\n ? currentTransform.firstChild.bounds.bottom\n : currentTransform.bounds.bottom;\n const nextOffsetTopX =\n (currentTransform.next?.firstChild\n ? currentTransform.next?.firstChild.bounds?.top\n : currentTransform.next?.bounds?.top) || 0;\n const currentInputPointX = currentTransform.outputPoint.x;\n if (currentTransform?.next) {\n lines.push({\n type: FlowTransitionLineEnum.MERGE_LINE,\n isDraggingLine: true,\n from: {\n x: currentInputPointX,\n y: (currentOffsetBottomX + nextOffsetTopX) / 2,\n },\n to: currentTransform.parent!.outputPoint,\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 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\n ? currentTransform.firstChild.bounds.right\n : currentTransform.bounds.right;\n const nextOffsetLeftX =\n (currentTransform.next?.firstChild\n ? currentTransform.next.firstChild.bounds?.left\n : currentTransform.next?.bounds?.left) || 0;\n const currentInputPointY = currentTransform.outputPoint.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 currentOffsetBottomX = currentTransform.firstChild\n ? currentTransform.firstChild.bounds.bottom\n : currentTransform.bounds.bottom;\n const nextOffsetTopX =\n (currentTransform.next?.firstChild\n ? currentTransform.next.firstChild.bounds?.top\n : currentTransform.next?.bounds?.top) || 0;\n const currentInputPointX = currentTransform.outputPoint.x;\n if (currentTransform?.next) {\n draggingLabel.push({\n offset: {\n x: currentInputPointX,\n y: (currentOffsetBottomX + nextOffsetTopX) / 2,\n },\n type: FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL,\n width: nextOffsetTopX - currentOffsetBottomX,\n props: {\n side: LABEL_SIDE_TYPE.NORMAL_BRANCH,\n },\n });\n }\n }\n }\n\n return [...draggingLabel];\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType, type FlowNodeRegistry } from '@flowgram-vue/document';\n\n/**\n * 输出节点, 一般作为 end 节点\n */\nexport const OuputRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.OUTPUT,\n extend: FlowNodeBaseType.BLOCK,\n meta: {\n hidden: false,\n isNodeEnd: true,\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowLayoutDefault,\n type FlowNodeRegistry,\n FlowNodeSplitType,\n FlowNodeBaseType,\n} from '@flowgram-vue/document';\n\nimport { DynamicSplitRegistry } from './dynamic-split';\nimport { BlockRegistry } from './block';\n\n/**\n * 多输出节点\n * - multiOutputs:\n * - blockIcon\n * - inlineBlocks\n * - output or multiOutputs\n * - output or multiOutputs\n */\nexport const MultiOuputsRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.MULTI_OUTPUTS,\n extend: FlowNodeSplitType.SIMPLE_SPLIT,\n meta: {\n isNodeEnd: true,\n },\n getLines: (transition, layout) => {\n // 嵌套在 mutliOutputs 下边\n if (transition.entity.parent?.flowNodeType === FlowNodeBaseType.INLINE_BLOCKS) {\n return BlockRegistry.getLines!(transition, layout);\n }\n return [];\n },\n getLabels: (transition, layout) => [\n ...DynamicSplitRegistry.getLabels!(transition, layout),\n ...BlockRegistry.getLabels!(transition, layout),\n ],\n getOutputPoint(transform, layout) {\n const isVertical = FlowLayoutDefault.isVertical(layout);\n const lastChildOutput = transform.lastChild?.outputPoint;\n\n if (isVertical) {\n return {\n x: lastChildOutput ? lastChildOutput.x : transform.bounds.center.x,\n y: transform.bounds.bottom,\n };\n }\n\n return {\n x: transform.bounds.right,\n y: lastChildOutput ? lastChildOutput.y : transform.bounds.center.y,\n };\n },\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n // isNodeEnd: true\n },\n },\n ],\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Point } from '@flowgram-vue/utils';\nimport { FlowRendererKey } from '@flowgram-vue/renderer';\nimport {\n FlowNodeBaseType,\n type FlowNodeRegistry,\n FlowNodeRenderData,\n FlowTransitionLabelEnum,\n FlowNodeSplitType,\n getDefaultSpacing,\n ConstantKeys,\n} from '@flowgram-vue/document';\n\n/**\n * 多输入节点, 只能作为 开始节点\n * - multiInputs:\n * - inlineBlocks\n * - input\n * - input\n */\nexport const MultiInputsRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.MULTI_INPUTS,\n extend: FlowNodeSplitType.SIMPLE_SPLIT,\n extendChildRegistries: [\n {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n hidden: true,\n spacing: 0,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n },\n {\n type: FlowNodeBaseType.INLINE_BLOCKS,\n meta: {\n inlineSpacingPre: 0,\n },\n getLabels(transition) {\n const isVertical = transition.entity.isVertical;\n const currentTransform = transition.transform;\n const spacing = getDefaultSpacing(\n transition.entity,\n ConstantKeys.INLINE_BLOCKS_PADDING_BOTTOM\n );\n\n if (currentTransform.collapsed || transition.entity.childrenLength === 0) {\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: spacing } : { x: spacing }\n ),\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\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: FlowRendererKey.BRANCH_ADDER,\n offset: Point.move(\n currentTransform.outputPoint,\n isVertical ? { y: -spacing / 2 } : { x: -spacing / 2 }\n ),\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 },\n ],\n getLabels() {\n return [];\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowRendererKey } from '@flowgram-vue/renderer';\n\nexport const RENDER_SLOT_ADDER_KEY: string = FlowRendererKey.SLOT_ADDER;\nexport const RENDER_SLOT_LABEL_KEY: string = FlowRendererKey.SLOT_LABEL;\nexport const RENDER_SLOT_COLLAPSE_KEY: string = FlowRendererKey.SLOT_COLLAPSE;\n\nexport const SlotSpacingKey = {\n /**\n * = Next Node - Slot END\n */\n SLOT_SPACING: 'SLOT_SPACING',\n\n /**\n * = Slot Start Line - Slot Icon Right\n */\n SLOT_START_DISTANCE: 'SLOT_START_DISTANCE',\n\n /**\n * = Slot Radius\n */\n SLOT_RADIUS: 'SLOT_RADIUS',\n\n /**\n * = Slot Port - Slot Start\n */\n SLOT_PORT_DISTANCE: 'SLOT_PORT_DISTANCE',\n\n /**\n * = Slot Label - Slot Start\n */\n SLOT_LABEL_DISTANCE: 'SLOT_LABEL_DISTANCE',\n\n /**\n * = Slot Block - Slot Port\n */\n SLOT_BLOCK_PORT_DISTANCE: 'SLOT_BLOCK_PORT_DISTANCE',\n\n /**\n * Vertical Layout: Slot Block - Slot Block\n */\n SLOT_BLOCK_VERTICAL_SPACING: 'SLOT_BLOCK_VERTICAL_SPACING',\n};\n\nexport const SLOT_START_DISTANCE = 16;\nexport const SLOT_PORT_DISTANCE = 100;\nexport const SLOT_LABEL_DISTANCE = 32;\nexport const SLOT_BLOCK_PORT_DISTANCE = 32.5;\nexport const SLOT_RADIUS = 16;\nexport const SLOT_SPACING = 32;\nexport const SLOT_BLOCK_VERTICAL_SPACING = 32.5;\nexport const SLOT_NODE_LAST_SPACING = 10;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType } from '@flowgram-vue/document';\n\nexport enum SlotNodeType {\n Slot = FlowNodeBaseType.SLOT,\n SlotBlock = FlowNodeBaseType.SLOT_BLOCK,\n SlotInlineBlocks = 'slotInlineBlocks',\n SlotBlockInlineBlocks = 'slotBlockInlineBlocks',\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeEntity } from '@flowgram-vue/document';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { SlotNodeType } from '../typings';\n\n/**\n * Slot 节点是否可下钻,看 inlineBlocks 是否有子节点\n * @param Slot Slot 节点\n */\nexport const canSlotDrilldown = (Slot: FlowNodeEntity): boolean =>\n !!Slot?.lastCollapsedChild?.blocks.length;\n\n/**\n * 是否是 Slot 内部\n * @param entity\n * @returns\n */\nexport const insideSlot = (entity?: FlowNodeEntity): boolean =>\n !!entity?.parent?.isTypeOrExtendType(SlotNodeType.SlotBlock);\n\n/**\n * 获取在页面上实际渲染的第一个 Child 节点\n * @param node\n */\nexport const getDisplayFirstChildTransform = (\n transform: FlowNodeTransformData\n): FlowNodeTransformData => {\n if (transform.firstChild) {\n return getDisplayFirstChildTransform(transform.firstChild);\n }\n\n return transform;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, Point } from '@flowgram-vue/utils';\nimport {\n type FlowNodeTransitionData,\n FlowTransitionLineEnum,\n FlowTransitionLabelEnum,\n type FlowNodeTransformData,\n type FlowTransitionLine,\n type FlowTransitionLabel,\n getDefaultSpacing,\n} from '@flowgram-vue/document';\n\nimport { RENDER_SLOT_COLLAPSE_KEY, SlotSpacingKey, SLOT_START_DISTANCE } from '../constants';\nimport { getDisplayFirstChildTransform } from './node';\n\n/**\n * 画 Slot 节点虚线起点\n * @param iconTransform blockIcon 的 transform\n * @returns\n */\nexport const getSlotChildLineStartPoint = (iconTransform?: FlowNodeTransformData): IPoint => {\n if (!iconTransform) {\n return { x: 0, y: 0 };\n }\n\n const startDistance = getDefaultSpacing(\n iconTransform.entity,\n SlotSpacingKey.SLOT_START_DISTANCE,\n SLOT_START_DISTANCE\n );\n\n if (!iconTransform.entity.isVertical) {\n return {\n x: iconTransform?.bounds.center.x,\n y: iconTransform?.bounds.bottom + startDistance,\n };\n }\n return {\n x: iconTransform?.bounds.right + startDistance,\n y: iconTransform?.bounds.center.y,\n };\n};\n\nexport const getOutputPoint = (transform: FlowNodeTransformData): IPoint => {\n const icon = transform.firstChild;\n\n if (!icon) {\n return { x: 0, y: 0 };\n }\n\n if (!transform.entity.isVertical) {\n return {\n x: transform.bounds.right,\n y: icon.outputPoint.y,\n };\n }\n\n return {\n x: icon.outputPoint.x,\n y: transform.bounds.bottom,\n };\n};\n\nexport const getInputPoint = (transform: FlowNodeTransformData): IPoint => {\n const icon = transform.firstChild;\n\n if (!icon) {\n return { x: 0, y: 0 };\n }\n\n if (!transform.entity.isVertical) {\n return {\n x: transform.bounds.left,\n y: icon.outputPoint.y,\n };\n }\n\n return icon.inputPoint;\n};\n\n/**\n * 获取实连线终点\n * @param transition\n * @returns\n */\nexport const getTransitionToPoint = (transition: FlowNodeTransitionData): IPoint => {\n let toPoint = transition.transform.next?.inputPoint;\n const icon = transition.transform.firstChild;\n\n const parent = transition.transform.parent;\n\n if (!icon || !parent) {\n return { x: 0, y: 0 };\n }\n\n if (!transition.transform.next) {\n if (!transition.entity.isVertical) {\n toPoint = {\n x: parent.outputPoint.x,\n y: icon.outputPoint.y,\n };\n } else {\n toPoint = {\n x: icon.outputPoint.x,\n y: parent.outputPoint.y,\n };\n }\n }\n\n return toPoint || { x: 0, y: 0 };\n};\n\n/**\n * 画实现线\n * @param transition Slot 节点的 transition\n * @returns\n */\nexport const drawStraightLine = (transition: FlowNodeTransitionData): FlowTransitionLine[] => {\n const icon = transition.transform.firstChild;\n const toPoint = getTransitionToPoint(transition);\n\n if (!icon) {\n return [];\n }\n\n return [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: icon.outputPoint,\n to: toPoint,\n },\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: icon.inputPoint,\n to: transition.transform.inputPoint,\n },\n ];\n};\n\nexport const drawCollapseLabel = (transition: FlowNodeTransitionData): FlowTransitionLabel[] => {\n const icon = transition.transform;\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: RENDER_SLOT_COLLAPSE_KEY,\n offset: getSlotChildLineStartPoint(icon),\n props: {\n node: transition.entity.parent,\n },\n },\n ];\n};\n\nexport const drawCollapseLine = (transition: FlowNodeTransitionData): FlowTransitionLine[] => {\n const startDistance = getDefaultSpacing(\n transition.transform.entity,\n SlotSpacingKey.SLOT_START_DISTANCE,\n SLOT_START_DISTANCE\n );\n\n return [\n {\n type: FlowTransitionLineEnum.STRAIGHT_LINE,\n from: getSlotChildLineStartPoint(transition.transform),\n to: Point.move(\n getSlotChildLineStartPoint(transition.transform),\n transition.entity.isVertical ? { x: -startDistance, y: 0 } : { x: 0, y: -startDistance }\n ),\n style: {\n strokeDasharray: '5 5',\n },\n },\n ];\n};\n\n/**\n * 画实线上的叫号\n * @param transition\n * @returns\n */\nexport const drawStraightAdder = (transition: FlowNodeTransitionData): FlowTransitionLabel[] => {\n const toPoint = getTransitionToPoint(transition);\n const fromPoint = transition.transform.firstChild!.outputPoint;\n\n const hoverProps = transition.entity.isVertical\n ? {\n hoverHeight: toPoint.y - fromPoint.y,\n hoverWidth: transition.transform.firstChild?.bounds.width,\n }\n : {\n hoverHeight: transition.transform.firstChild?.bounds.height,\n hoverWidth: toPoint.x - fromPoint.x,\n };\n\n return [\n {\n offset: Point.getMiddlePoint(fromPoint, toPoint),\n type: FlowTransitionLabelEnum.ADDER_LABEL,\n props: hoverProps,\n },\n ];\n};\n\n/**\n * 获取端口的子节点线条输入点\n * @param _child\n * @returns\n */\nexport const getPortChildInput = (_child?: FlowNodeTransformData) => {\n if (!_child) {\n return { x: 0, y: 0 };\n }\n\n const firstChild = getDisplayFirstChildTransform(_child);\n\n return { x: _child.bounds.left, y: firstChild.bounds.center.y };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { mean } from 'lodash-es';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nexport const getDisplayFirstChildTop = (transform: FlowNodeTransformData): number => {\n if (transform.firstChild) {\n return transform.localBounds.top + getDisplayFirstChildTop(transform.firstChild);\n }\n\n return transform.localBounds.center.y;\n};\n\n/**\n * 获取单个 Port 的中间点\n * @param inlineBlocks\n * @returns\n */\nexport const getPortMiddle = (_port: FlowNodeTransformData) => {\n if (!_port.children.length) {\n return _port.localBounds.top;\n }\n\n const portChildInputs = [_port.firstChild!, _port.lastChild!].map((_portChild) =>\n getDisplayFirstChildTop(_portChild)\n );\n\n return _port.localBounds.top + mean(portChildInputs);\n};\n\n/**\n * 获取所有 Port 的中间点\n * @param inlineBlocks\n * @returns\n */\nexport const getAllPortsMiddle = (inlineBlocks: FlowNodeTransformData) => {\n if (!inlineBlocks.children.length) {\n return inlineBlocks.localBounds.height / 2;\n }\n\n const portInputs = [inlineBlocks.firstChild!, inlineBlocks.lastChild!].map((_port) =>\n getPortMiddle(_port)\n );\n\n return mean(portInputs);\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeBaseType } from '@flowgram-vue/document';\nimport { type FlowNodeEntity } from '@flowgram-vue/document';\nimport { FlowNodeJSON } from '@flowgram-vue/document';\n\nimport { SlotNodeType } from '../typings';\n\n// Slot 样例数据\n// const mock = {\n// type: 'slot',\n// id: 'reactor_parent',\n// blocks: [\n// {\n// id: 'port_LnSdK',\n// blocks: [{ type: 'Slot', id: 'reactor_child' }],\n// },\n// {\n// id: 'port_60X7U',\n// },\n// {\n// id: 'port_JWhcm',\n// },\n// {\n// id: 'port_scHWa',\n// },\n// ],\n// };\n\n/**\n * 创建 Slot 子节点\n * - Slot\n * - SlotBlockIcon\n * - SlotInlineBlocks\n * - SlotBlock 1\n * - SlotBlockIcon 1\n * - ChildSlot 1\n * - ChildSlot 2\n * - SlotBlock 2\n *\n * 范例数据:\n * {\n * type: 'Slot',\n * id: 'reactor_parent',\n * blocks: [\n * {\n * id: 'port_LnSdK',\n * blocks: [{ type: 'Slot', id: 'reactor_child' }],\n * },\n * {\n * id: 'port_60X7U',\n * }\n * ],\n * }\n *\n */\nexport const createSlotFromJSON = (node: FlowNodeEntity, json: FlowNodeJSON): FlowNodeEntity[] => {\n const { document } = node;\n\n const addedNodes: FlowNodeEntity[] = [];\n\n // 块列表开始节点,用来展示块的按钮\n const blockIconNode = document.addNode({\n id: `$slotIcon$${node.id}`,\n type: FlowNodeBaseType.BLOCK_ICON,\n originParent: node,\n parent: node,\n });\n const inlineBlocksNode = document.addNode({\n id: `$slotInlineBlocks$${node.id}`,\n type: SlotNodeType.SlotInlineBlocks,\n originParent: node,\n parent: node,\n });\n addedNodes.push(blockIconNode);\n addedNodes.push(inlineBlocksNode);\n\n const portJSONList = json.blocks || [];\n\n portJSONList.forEach((_portJSON) => {\n const port = document.addNode({\n type: SlotNodeType.SlotBlock,\n ..._portJSON,\n originParent: node,\n parent: inlineBlocksNode,\n });\n addedNodes.push(port);\n\n (_portJSON.blocks || []).forEach((_portChild) => {\n document.addNode(\n {\n type: SlotNodeType.Slot,\n ..._portChild,\n parent: port,\n },\n addedNodes\n );\n });\n });\n\n return addedNodes;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeRegistry, FlowNodeBaseType } from '@flowgram-vue/document';\n\nimport { drawCollapseLabel, drawCollapseLine } from '../utils/transition';\nimport { canSlotDrilldown, insideSlot } from '../utils/node';\n\nexport const SlotIconRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.BLOCK_ICON,\n meta: {\n defaultExpanded: false,\n spacing: 0,\n },\n getLines: (transition) => [\n ...(canSlotDrilldown(transition.entity.parent!) ? drawCollapseLine(transition) : []),\n ],\n getLabels: (transition) => [\n ...(canSlotDrilldown(transition.entity.parent!) ? drawCollapseLabel(transition) : []),\n ],\n getDelta: (transform) => {\n // Slot 节点内部时,重新纠正重心调整产生的偏移\n if (insideSlot(transform.entity.parent)) {\n return transform.entity.isVertical\n ? { x: -transform.originDeltaX, y: 0 }\n : { x: 0, y: -transform.originDeltaY };\n }\n return { x: 0, y: 0 };\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeRegistry, FlowNodeBaseType, getDefaultSpacing } from '@flowgram-vue/document';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { SlotNodeType } from '../typings';\nimport {\n SlotSpacingKey,\n SLOT_START_DISTANCE,\n SLOT_PORT_DISTANCE,\n SLOT_BLOCK_PORT_DISTANCE,\n} from '../constants';\n\nexport const SlotInlineBlocksRegistry: FlowNodeRegistry = {\n type: SlotNodeType.SlotInlineBlocks,\n extend: FlowNodeBaseType.BLOCK,\n meta: {\n spacing: 0,\n inlineSpacingPre: 0,\n inlineSpacingAfter: 0,\n isInlineBlocks: (node) => !node.isVertical,\n },\n getLines() {\n return [];\n },\n getLabels() {\n return [];\n },\n getChildDelta(child, layout) {\n if (child.entity.isVertical) {\n return { x: 0, y: 0 };\n }\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n\n return {\n x: 0,\n y: preBounds.bottom + 30,\n };\n }\n\n return { x: 0, y: 0 };\n },\n /**\n * 控制条件分支居右布局\n */\n getDelta(transform) {\n if (!transform.children.length) {\n return { x: 0, y: 0 };\n }\n\n const icon = transform.pre;\n if (!icon) {\n return { x: 0, y: 0 };\n }\n\n const startDistance = getDefaultSpacing(\n transform.entity,\n SlotSpacingKey.SLOT_START_DISTANCE,\n SLOT_START_DISTANCE\n );\n\n const portDistance = getDefaultSpacing(\n transform.entity,\n SlotSpacingKey.SLOT_PORT_DISTANCE,\n SLOT_PORT_DISTANCE\n );\n\n const portBlockDistance = getDefaultSpacing(\n transform.entity,\n SlotSpacingKey.SLOT_BLOCK_PORT_DISTANCE,\n SLOT_BLOCK_PORT_DISTANCE\n );\n\n if (!transform.entity.isVertical) {\n const noChildren = transform?.children?.every?.((_port) => !_port.children.length);\n /**\n * 如果没有 children 的时候,不需要有右侧的间距,避免水平布局的时候 Slot 右侧空间过大。\n */\n if (noChildren) {\n return {\n x: portDistance - icon.localBounds.width / 2,\n y: icon.localBounds.bottom + startDistance,\n };\n }\n return {\n x: portDistance + portBlockDistance - icon.localBounds.width / 2,\n y: icon.localBounds.bottom + startDistance,\n };\n }\n\n const slotInlineBlockDelta = startDistance + portDistance + portBlockDistance;\n return {\n x: icon.localBounds.right + slotInlineBlockDelta,\n y: -icon.localBounds.height,\n };\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { mean } from 'lodash-es';\nimport {\n FlowNodeRegistry,\n FlowNodeBaseType,\n FlowTransitionLabelEnum,\n FlowTransitionLineEnum,\n getDefaultSpacing,\n Vertex,\n} from '@flowgram-vue/document';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { getPortChildInput, getSlotChildLineStartPoint } from '../utils/transition';\nimport { SlotNodeType } from '../typings';\nimport {\n RENDER_SLOT_ADDER_KEY,\n SlotSpacingKey,\n SLOT_PORT_DISTANCE,\n SLOT_RADIUS,\n SLOT_LABEL_DISTANCE,\n RENDER_SLOT_LABEL_KEY,\n SLOT_BLOCK_VERTICAL_SPACING,\n} from '../constants';\n\nexport const SlotBlockRegistry: FlowNodeRegistry = {\n type: SlotNodeType.SlotBlock,\n extend: FlowNodeBaseType.BLOCK,\n meta: {\n inlineSpacingAfter: 0,\n inlineSpacingPre: 0,\n spacing: (transform) => {\n // 水平布局没有子节点情况\n if (!transform.entity.isVertical && transform.size.width === 0) {\n return 90;\n }\n return getDefaultSpacing(\n transform.entity,\n SlotSpacingKey.SLOT_BLOCK_VERTICAL_SPACING,\n SLOT_BLOCK_VERTICAL_SPACING\n );\n },\n isInlineBlocks: (node) => !node.isVertical,\n },\n getLines(transition) {\n const icon = transition.transform.parent?.pre;\n const start = getSlotChildLineStartPoint(icon);\n const portPoint = transition.transform.inputPoint;\n\n const radius = getDefaultSpacing(\n transition.transform.entity,\n SlotSpacingKey.SLOT_RADIUS,\n SLOT_RADIUS\n );\n\n let startPortVertices: Vertex[] = [{ x: start.x, y: portPoint.y }];\n\n /**\n * When Radius is not enough, we should use truncate strategy\n * 弧度不够时,采取截断策略\n */\n if (transition.entity.isVertical) {\n const deltaY = Math.abs(portPoint.y - start.y);\n let deltaX = radius;\n let isTruncated = false;\n\n if (deltaY < radius * 2) {\n isTruncated = true;\n if (deltaY < radius) {\n // Calculate the x by circle equation\n deltaX = Math.sqrt(radius ** 2 - (radius - deltaY) ** 2);\n }\n }\n\n startPortVertices = [\n {\n x: start.x + deltaX,\n y: start.y,\n radiusX: radius,\n radiusY: radius,\n radiusOverflow: 'truncate',\n },\n {\n x: start.x + deltaX,\n y: portPoint.y,\n ...(isTruncated ? { radiusX: 0, radiusY: 0 } : {}),\n },\n ];\n }\n\n /**\n * When One Children, we should keep dash array align, so we draw one line directly to child nodes\n * 只有一个子节点时,我们通常需要保证两条虚线是连贯的,因此我们直接合并,绘制一条线连到子节点\n */\n if (transition.transform.children.length === 1) {\n return [\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: start,\n to: getPortChildInput(transition.transform.children[0]),\n vertices: startPortVertices,\n style: {\n strokeDasharray: '5 5',\n },\n radius,\n },\n ];\n }\n\n return [\n {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n from: start,\n to: portPoint,\n vertices: startPortVertices,\n style: {\n strokeDasharray: '5 5',\n },\n radius,\n },\n ...transition.transform.children.map((_child) => {\n const childInput = getPortChildInput(_child);\n\n return {\n type: FlowTransitionLineEnum.ROUNDED_LINE,\n radius,\n from: portPoint,\n to: childInput,\n vertices: [{ x: portPoint.x, y: childInput.y }],\n style: {\n strokeDasharray: '5 5',\n },\n };\n }),\n ];\n },\n getLabels(transition) {\n const icon = transition.transform.parent?.pre;\n const start = getSlotChildLineStartPoint(icon);\n const portPoint = transition.transform.inputPoint;\n\n return [\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: RENDER_SLOT_ADDER_KEY,\n props: {\n node: transition.entity,\n },\n offset: portPoint,\n },\n {\n type: FlowTransitionLabelEnum.CUSTOM_LABEL,\n renderKey: RENDER_SLOT_LABEL_KEY,\n props: {\n node: transition.entity,\n },\n offset: {\n x:\n start.x +\n getDefaultSpacing(\n transition.entity,\n SlotSpacingKey.SLOT_LABEL_DISTANCE,\n SLOT_LABEL_DISTANCE\n ),\n y: portPoint.y,\n },\n origin: [0, 0.5],\n },\n ];\n },\n getInputPoint(transform) {\n const icon = transform.parent?.pre;\n const start = getSlotChildLineStartPoint(icon);\n\n let inputY = transform.bounds.center.y;\n if (transform.children.length) {\n inputY = mean([\n getPortChildInput(transform.firstChild).y,\n getPortChildInput(transform.lastChild).y,\n ]);\n }\n\n return {\n x:\n start.x +\n getDefaultSpacing(transform.entity, SlotSpacingKey.SLOT_PORT_DISTANCE, SLOT_PORT_DISTANCE),\n y: inputY,\n };\n },\n getChildDelta(child, layout) {\n const hasChild = !!child.firstChild;\n\n if (child.entity.isVertical) {\n // 绑定普通节点时进行重心纠偏\n let deltaX = hasChild ? 0 : -child.originDeltaX;\n\n return { x: deltaX, y: 0 };\n }\n\n let deltaY = hasChild ? 0 : -child.originDeltaY;\n\n const preTransform = child.entity.pre?.getData(FlowNodeTransformData);\n if (preTransform) {\n const { localBounds: preBounds } = preTransform;\n\n return {\n x: 0,\n y: preBounds.bottom + 30 + deltaY,\n };\n }\n\n return { x: 0, y: deltaY };\n },\n getChildLabels() {\n return [];\n },\n getChildLines() {\n return [];\n },\n getDelta(transform) {\n return {\n x: 0,\n y: 0,\n };\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FlowNodeRegistry, FlowNodeBaseType, getDefaultSpacing } from '@flowgram-vue/document';\n\nimport {\n drawStraightAdder,\n drawStraightLine,\n getInputPoint,\n getOutputPoint,\n} from './utils/transition';\nimport { insideSlot } from './utils/node';\nimport { getAllPortsMiddle } from './utils/layout';\nimport { createSlotFromJSON } from './utils/create';\nimport { SlotInlineBlocksRegistry, SlotIconRegistry } from './extends';\nimport {\n SLOT_NODE_LAST_SPACING,\n SLOT_SPACING,\n SLOT_START_DISTANCE,\n SlotSpacingKey,\n} from './constants';\n\nexport const SlotRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.SLOT,\n extend: 'block',\n meta: {\n // Slot 节点内部暂时不允许拖拽\n draggable: (node) => !insideSlot(node),\n hidden: true,\n spacing: (node) => getDefaultSpacing(node.entity, SlotSpacingKey.SLOT_SPACING, SLOT_SPACING),\n padding: (node) => ({\n left: 0,\n right: node.collapsed\n ? getDefaultSpacing(node.entity, SlotSpacingKey.SLOT_START_DISTANCE, SLOT_START_DISTANCE)\n : 0,\n bottom: !insideSlot(node.entity) && node.isLast ? SLOT_NODE_LAST_SPACING : 0,\n top: 0,\n }),\n copyDisable: false,\n defaultExpanded: false,\n },\n /**\n * 业务通常需要重载方法\n */\n onCreate: createSlotFromJSON,\n getLines: (transition) => [\n ...(!insideSlot(transition.entity) ? drawStraightLine(transition) : []),\n ],\n getLabels: (transition) => [\n ...(!insideSlot(transition.entity) ? drawStraightAdder(transition) : []),\n ],\n getInputPoint,\n getOutputPoint,\n onAfterUpdateLocalTransform(transform) {\n const { isVertical } = transform.entity;\n\n if (!isVertical) {\n return;\n }\n\n const icon = transform.firstChild;\n const inlineBlocks = transform.lastChild;\n\n if (!icon || !inlineBlocks) {\n return;\n }\n\n const iconSize = icon.localBounds.height;\n const inlineBlocksSize = inlineBlocks.localBounds.height;\n\n if (transform.collapsed || !inlineBlocks) {\n return;\n }\n\n // 所有 Ports 的中间点\n const portsMiddle = getAllPortsMiddle(inlineBlocks);\n\n icon.entity.clearMemoLocal();\n inlineBlocks.entity.clearMemoLocal();\n\n if (iconSize / 2 + portsMiddle > inlineBlocksSize || !inlineBlocks.children.length) {\n icon.transform.update({\n position: { x: icon.transform.position.x, y: 0 },\n });\n inlineBlocks.transform.update({\n position: {\n x: inlineBlocks.transform.position.x,\n y: Math.max(iconSize / 2 - inlineBlocksSize / 2, 0),\n },\n });\n\n return;\n }\n\n inlineBlocks.transform.update({\n position: { x: inlineBlocks.transform.position.x, y: 0 },\n });\n icon?.transform.update({\n position: {\n x: icon.transform.position.x,\n y: Math.max(portsMiddle - iconSize / 2, 0), // 所有 port 的中间点\n },\n });\n },\n extendChildRegistries: [SlotIconRegistry, SlotInlineBlocksRegistry],\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport {\n FlowLabelsLayer,\n FlowLinesLayer,\n FlowNodesContentLayer,\n FlowNodesTransformLayer,\n type FlowRendererContribution,\n type FlowRendererRegistry,\n} from '@flowgram-vue/renderer';\nimport {\n type FlowDocument,\n type FlowDocumentContribution,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n} from '@flowgram-vue/document';\nimport { type PlaygroundContribution, PlaygroundLayer } from '@flowgram-vue/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 SimpleSplitRegistry,\n BreakRegistry,\n MultiOuputsRegistry,\n MultiInputsRegistry,\n InputRegistry,\n OuputRegistry,\n SlotRegistry,\n SlotBlockRegistry,\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 SimpleSplitRegistry, // 简单分支 (不带 orderIcon 节点)\n BlockRegistry, // 单条 block 注册\n InlineBlocksRegistry, // 多个 block 组成的 block 列表\n BlockIconRegistry, // icon 节点,如条件分支的菱形图标\n BlockOrderIconRegistry, // 带顺序的图标节点,一般为 block 第一个分支节点\n TryCatchRegistry, // TryCatch\n EndRegistry, // 结束节点\n LoopRegistry, // 循环节点\n EmptyRegistry, // 占位节点\n BreakRegistry, // 分支断开\n MultiOuputsRegistry,\n MultiInputsRegistry,\n InputRegistry,\n OuputRegistry,\n SlotRegistry,\n SlotBlockRegistry\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 );\n }\n\n /**\n * 画布开始渲染 (hook)\n */\n onReady(): void {}\n\n /**\n * 画布销毁 (hook)\n */\n onDispose(): void {}\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ContainerModule } from 'inversify';\nimport { FlowRendererContribution } from '@flowgram-vue/renderer';\nimport { FlowDocumentContribution } from '@flowgram-vue/document';\nimport { PlaygroundContribution } from '@flowgram-vue/core';\nimport { bindContributions } from '@flowgram-vue/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","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport * from './fixed-layout-container-module';\nimport { SlotIconRegistry, SlotInlineBlocksRegistry } from './activities/slot/extends';\nimport {\n BlockIconRegistry,\n BlockOrderIconRegistry,\n BlockRegistry,\n DynamicSplitRegistry,\n EmptyRegistry,\n LoopRegistry,\n StaticSplitRegistry,\n TryCatchRegistry,\n StartRegistry,\n RootRegistry,\n InlineBlocksRegistry,\n EndRegistry,\n SlotRegistry,\n SlotBlockRegistry,\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 InlineBlocksRegistry,\n EndRegistry,\n SlotRegistry,\n SlotBlockRegistry,\n SlotIconRegistry,\n SlotInlineBlocksRegistry,\n};\n\n// Export constant\nexport { SlotSpacingKey } from './activities/slot/constants';\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flowgram-vue/fixed-layout-core",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"homepage": "https://flowgram.ai/",
|
|
5
|
+
"repository": "https://github.com/Crayon-hua/flowgram-vue",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/index.cjs",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"files": [
|
|
19
|
+
"src",
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"lodash-es": "^4.17.21",
|
|
24
|
+
"inversify": "^6.0.1",
|
|
25
|
+
"reflect-metadata": "~0.2.2",
|
|
26
|
+
"@flowgram-vue/core": "0.2.0",
|
|
27
|
+
"@flowgram-vue/utils": "0.2.0",
|
|
28
|
+
"@flowgram-vue/document": "0.2.0",
|
|
29
|
+
"@flowgram-vue/renderer": "0.2.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/lodash-es": "^4.17.12",
|
|
33
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
34
|
+
"eslint": "^9.0.0",
|
|
35
|
+
"tsup": "^8.0.1",
|
|
36
|
+
"typescript": "^5.8.3",
|
|
37
|
+
"vitest": "^3.2.4",
|
|
38
|
+
"@flowgram-vue/eslint-config": "0.2.0",
|
|
39
|
+
"@flowgram-vue/ts-config": "0.2.0",
|
|
40
|
+
"@flowgram-vue/build-config": "0.2.0"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public",
|
|
44
|
+
"registry": "https://registry.npmjs.org/"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "flowgram-build",
|
|
48
|
+
"build:fast": "flowgram-build --fast",
|
|
49
|
+
"build:watch": "flowgram-build --watch",
|
|
50
|
+
"clean": "rimraf dist",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"test:cov": "vitest run --coverage",
|
|
53
|
+
"ts-check": "tsc --noEmit",
|
|
54
|
+
"watch": "npm run build:fast -- --dts-resolve --watch --ignore-watch dist"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Point } from '@flowgram-vue/utils';
|
|
7
|
+
import { DefaultSpacingKey, getDefaultSpacing } from '@flowgram-vue/document';
|
|
8
|
+
import {
|
|
9
|
+
FlowNodeBaseType,
|
|
10
|
+
type FlowNodeRegistry,
|
|
11
|
+
FlowTransitionLabelEnum,
|
|
12
|
+
} from '@flowgram-vue/document';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 图标占位节点,如条件分支的菱形图标
|
|
16
|
+
*/
|
|
17
|
+
export const BlockIconRegistry: FlowNodeRegistry = {
|
|
18
|
+
type: FlowNodeBaseType.BLOCK_ICON,
|
|
19
|
+
meta: {
|
|
20
|
+
spacing: 20, // 占位节点下边偏小
|
|
21
|
+
// 条件分支 icon 默认的高度比较高,在流程里下边有文字
|
|
22
|
+
size: { width: 250, height: 84 },
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* 是一个占位节点,后续要加上 label 展开收起的图标
|
|
26
|
+
*/
|
|
27
|
+
getLabels(transition) {
|
|
28
|
+
const currentTransform = transition.transform;
|
|
29
|
+
const { isVertical } = transition.entity;
|
|
30
|
+
|
|
31
|
+
// 为节点,画一个加号即可
|
|
32
|
+
if (transition.entity.parent!.collapsedChildren.length <= 1) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const collapsedSpacing = getDefaultSpacing(
|
|
37
|
+
transition.entity,
|
|
38
|
+
DefaultSpacingKey.COLLAPSED_SPACING
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
type: FlowTransitionLabelEnum.COLLAPSE_LABEL,
|
|
44
|
+
offset: Point.move(
|
|
45
|
+
currentTransform.outputPoint,
|
|
46
|
+
isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }
|
|
47
|
+
),
|
|
48
|
+
props: {
|
|
49
|
+
collapseNode: transition.entity.parent,
|
|
50
|
+
activateNode: transition.entity,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
},
|
|
55
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IPoint, Point } from '@flowgram-vue/utils';
|
|
7
|
+
import { DefaultSpacingKey, getDefaultSpacing } from '@flowgram-vue/document';
|
|
8
|
+
import {
|
|
9
|
+
FlowNodeBaseType,
|
|
10
|
+
type FlowNodeRegistry,
|
|
11
|
+
FlowTransitionLabelEnum,
|
|
12
|
+
} from '@flowgram-vue/document';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 带顺序的图标节点,一般为 block 第一个分支节点
|
|
16
|
+
* - 只有一个分支时,不需要展开收起
|
|
17
|
+
*/
|
|
18
|
+
export const BlockOrderIconRegistry: FlowNodeRegistry = {
|
|
19
|
+
type: FlowNodeBaseType.BLOCK_ORDER_ICON,
|
|
20
|
+
meta: {
|
|
21
|
+
spacing: 40,
|
|
22
|
+
},
|
|
23
|
+
getLabels(transition) {
|
|
24
|
+
const currentTransform = transition.transform;
|
|
25
|
+
const { isVertical } = transition.entity;
|
|
26
|
+
|
|
27
|
+
const currentOutput = currentTransform.outputPoint;
|
|
28
|
+
const nextTransform = currentTransform.next;
|
|
29
|
+
const parentTransform = currentTransform.parent;
|
|
30
|
+
|
|
31
|
+
// 为空分支,画一个加号即可
|
|
32
|
+
if (transition.entity.parent!.collapsedChildren.length <= 1) {
|
|
33
|
+
const parentOutput = parentTransform?.outputPoint as IPoint;
|
|
34
|
+
return [
|
|
35
|
+
{
|
|
36
|
+
offset: parentOutput,
|
|
37
|
+
type: FlowTransitionLabelEnum.ADDER_LABEL,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const collapsedSpacing = getDefaultSpacing(
|
|
43
|
+
transition.entity,
|
|
44
|
+
DefaultSpacingKey.COLLAPSED_SPACING
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
offset: nextTransform
|
|
50
|
+
? Point.getMiddlePoint(currentOutput, nextTransform.inputPoint)
|
|
51
|
+
: Point.move(
|
|
52
|
+
currentOutput,
|
|
53
|
+
isVertical ? { y: collapsedSpacing } : { x: collapsedSpacing }
|
|
54
|
+
),
|
|
55
|
+
// 收起展开复合按钮
|
|
56
|
+
type: FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,
|
|
57
|
+
props: {
|
|
58
|
+
activateNode: transition.entity,
|
|
59
|
+
collapseNode: transition.entity.parent,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
},
|
|
64
|
+
};
|