@flowgram-vue/renderer 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/dist/index.cjs +2933 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +721 -0
- package/dist/index.js +2918 -0
- package/dist/index.js.map +1 -0
- package/index.module.less +167 -0
- package/package.json +64 -0
- package/src/components/Adder.ts +107 -0
- package/src/components/BranchDraggableRenderer.ts +77 -0
- package/src/components/Collapse.ts +87 -0
- package/src/components/CollapseAdder.ts +94 -0
- package/src/components/CustomLine.ts +35 -0
- package/src/components/LabelsRenderer.ts +162 -0
- package/src/components/LinesRenderer.ts +99 -0
- package/src/components/MarkerActivatedArrow.ts +44 -0
- package/src/components/MarkerArrow.ts +44 -0
- package/src/components/RoundedTurningLine.ts +165 -0
- package/src/components/StraightLine.ts +31 -0
- package/src/components/utils.ts +295 -0
- package/src/entities/README.md +3 -0
- package/src/entities/flow-drag-entity.ts +267 -0
- package/src/entities/flow-select-config-entity.ts +114 -0
- package/src/entities/index.ts +8 -0
- package/src/entities/selector-box-config-entity.ts +88 -0
- package/src/env.d.ts +10 -0
- package/src/flow-renderer-container-module.ts +14 -0
- package/src/flow-renderer-contribution.ts +12 -0
- package/src/flow-renderer-registry.ts +155 -0
- package/src/flow-renderer-resize-observer.ts +56 -0
- package/src/hooks/use-base-color.ts +26 -0
- package/src/index.ts +16 -0
- package/src/layer-vue-provide.ts +44 -0
- package/src/layers/flow-context-menu-layer.ts +153 -0
- package/src/layers/flow-debug-layer.ts +227 -0
- package/src/layers/flow-drag-layer.ts +413 -0
- package/src/layers/flow-labels-layer.ts +100 -0
- package/src/layers/flow-lines-layer.ts +111 -0
- package/src/layers/flow-nodes-content-layer.ts +155 -0
- package/src/layers/flow-nodes-transform-layer.ts +151 -0
- package/src/layers/flow-scroll-bar-layer.ts +401 -0
- package/src/layers/flow-scroll-limit-layer.ts +36 -0
- package/src/layers/flow-selector-bounds-layer.ts +191 -0
- package/src/layers/flow-selector-box-layer.ts +244 -0
- package/src/layers/index.ts +16 -0
- package/src/utils/element.ts +36 -0
- package/src/utils/find-selected-nodes.ts +80 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/scroll-bar-events.ts +13 -0
- package/src/utils/scroll-limit.ts +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-base-color.ts","../src/components/utils.ts","../src/entities/flow-drag-entity.ts","../src/utils/find-selected-nodes.ts","../src/entities/flow-select-config-entity.ts","../src/entities/selector-box-config-entity.ts","../src/utils/element.ts","../src/flow-renderer-resize-observer.ts","../src/layers/flow-nodes-transform-layer.ts","../src/layer-vue-provide.ts","../src/flow-renderer-contribution.ts","../src/flow-renderer-registry.ts","../src/layers/flow-nodes-content-layer.ts","../src/components/StraightLine.ts","../src/components/MarkerArrow.ts","../src/components/MarkerActivatedArrow.ts","../src/components/RoundedTurningLine.ts","../src/components/CustomLine.ts","../src/components/LinesRenderer.ts","../src/layers/flow-lines-layer.ts","../src/components/Collapse.ts","../src/components/Adder.ts","../src/components/CollapseAdder.ts","../src/components/BranchDraggableRenderer.ts","../src/components/LabelsRenderer.ts","../src/layers/flow-labels-layer.ts","../src/utils/scroll-limit.ts","../src/utils/scroll-bar-events.ts","../src/layers/flow-debug-layer.ts","../src/layers/flow-scroll-bar-layer.ts","../src/layers/flow-drag-layer.ts","../src/layers/flow-selector-box-layer.ts","../src/layers/flow-selector-bounds-layer.ts","../src/layers/flow-context-menu-layer.ts","../src/layers/flow-scroll-limit-layer.ts","../src/flow-renderer-container-module.ts"],"names":["ConfigEntity","Rectangle","FlowNodeTransformData","injectable","FlowRendererComponentType","FlowRendererKey","FlowTextKey","FlowRendererCommandCategory","inject","Layer","domUtils","Cache","defineComponent","provide","h","FlowNodeRenderData","FlowDocument","observeEntity","FlowDocumentTransformerEntity","observeEntityDatas","FlowNodeEntity","PlaygroundVueContainerKey","isNil","DefaultSpacingKey","FlowTransitionLineEnum","FlowDragService","PlaygroundContainerFactory","ref","useService","getFlowRenderKey","FlowTransitionLabelEnum","throttle","FlowNodeTransitionData","Fragment","optional","FlowDocumentOptions","FlowRendererStateEntity","document","PlaygroundConfigEntity","PlaygroundDrag","Teleport","EditorState","EditorStateConfigEntity","PipelineLayerPriority","CommandRegistry","ContextMenuService","SelectionService"],"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 { ConstantKeys, FlowDocumentOptions } from '@flowgram-vue/document';\nimport { useService } from '@flowgram-vue/core';\n\nexport const BASE_DEFAULT_COLOR = '#BBBFC4';\nexport const BASE_DEFAULT_ACTIVATED_COLOR = '#82A7FC';\n\nexport function getBaseColor(options?: FlowDocumentOptions | null): {\n baseColor: string;\n baseActivatedColor: string;\n} {\n return {\n baseColor: options?.constants?.[ConstantKeys.BASE_COLOR] || BASE_DEFAULT_COLOR,\n baseActivatedColor:\n options?.constants?.[ConstantKeys.BASE_ACTIVATED_COLOR] || BASE_DEFAULT_ACTIVATED_COLOR,\n };\n}\n\nexport function useBaseColor(): { baseColor: string; baseActivatedColor: string } {\n const options = useService<FlowDocumentOptions>(FlowDocumentOptions);\n return getBaseColor(options);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FlowNodeTransformData,\n type FlowNodeTransitionData,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n type Vertex,\n DefaultSpacingKey,\n DEFAULT_SPACING,\n} from '@flowgram-vue/document';\n\nimport { BASE_DEFAULT_COLOR } from '../hooks/use-base-color';\n\nexport const DEFAULT_LINE_ATTRS: Record<string, string> = {\n stroke: BASE_DEFAULT_COLOR,\n fill: 'transparent',\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n\n// 默认的圆角半径\nexport const DEFAULT_RADIUS = DEFAULT_SPACING[DefaultSpacingKey.ROUNDED_LINE_RADIUS];\n\n// 小圆角\nexport const MINI_RADIUS = 10;\n\n// 默认 label 激活高度\nexport const DEFAULT_LABEL_ACTIVATE_HEIGHT = 32;\n\n/**\n * 根据椭圆方程计算 y 坐标\n *\n * x^2 / rx^2 + y^2 / ry^2 = 1\n */\nexport const calcEllipseY = (x: number, rx: number, ry: number) =>\n Math.sqrt(ry ** 2 * (1 - x ** 2 / rx ** 2));\n\n/**\n * 获取转弯线的转折点 (水平布局)\n */\nexport function getHorizontalVertices(\n line: FlowTransitionLine,\n xRadius = 16,\n yRadius = 20\n): Vertex[] {\n const { from, to, type } = line || {};\n\n // 空间可以容纳的圆角数\n const deltaY = Math.abs(to.y - from.y);\n const deltaX = Math.abs(to.x - from.x);\n\n const radiusXCount = deltaX / xRadius;\n const radiusYCount = deltaY / yRadius;\n\n let res: Vertex[] = [];\n\n // 容纳不下一个圆角,直接连线\n if (radiusXCount < 1) {\n return [];\n }\n\n switch (type) {\n case FlowTransitionLineEnum.DIVERGE_LINE:\n case FlowTransitionLineEnum.DRAGGING_LINE:\n if (radiusXCount <= 1) {\n return [\n {\n x: to.x,\n y: from.y,\n radiusX: deltaX,\n },\n ];\n }\n res = [\n {\n x: from.x + yRadius,\n y: from.y,\n },\n {\n x: from.x + yRadius,\n y: to.y,\n },\n ];\n if (radiusXCount < 2) {\n const firstRadius = deltaX - yRadius;\n res = [\n {\n x: from.x + firstRadius,\n y: from.y,\n // 第一个圆角收缩 y 半径\n radiusX: firstRadius,\n },\n {\n x: from.x + firstRadius,\n y: to.y,\n },\n ];\n }\n\n // y 轴空间不足处理\n if (radiusYCount < 2) {\n res[0].moveY = deltaY / 2;\n res[1].moveY = deltaY / 2;\n }\n\n return res;\n\n case FlowTransitionLineEnum.MERGE_LINE:\n // 聚合线 y 轴空间不足时直接连上\n if (radiusXCount < 2) {\n return [\n {\n x: to.x,\n y: from.y,\n },\n ];\n }\n\n res = [\n {\n x: to.x - yRadius,\n y: from.y,\n },\n {\n x: to.x - yRadius,\n y: to.y,\n },\n ];\n\n // y 轴空间不足处理\n if (radiusYCount < 2) {\n res[0].moveY = deltaY / 2;\n res[1].moveY = deltaY / 2;\n }\n\n return res;\n\n default:\n break;\n }\n\n return [];\n}\n/**\n * 获取转弯线的转折点 (垂直布局)\n */\nexport function getVertices(line: FlowTransitionLine, xRadius = 16, yRadius = 20): Vertex[] {\n const { from, to, type } = line || {};\n\n // 空间可以容纳的圆角数\n const deltaY = Math.abs(to.y - from.y);\n const deltaX = Math.abs(to.x - from.x);\n\n const radiusYCount = deltaY / yRadius;\n const radiusXCount = deltaX / xRadius;\n\n let res: Vertex[] = [];\n\n // 容纳不下一个圆角,直接连线\n if (radiusYCount < 1) {\n return [];\n }\n\n switch (type) {\n case FlowTransitionLineEnum.DIVERGE_LINE:\n case FlowTransitionLineEnum.DRAGGING_LINE:\n if (radiusYCount <= 1) {\n return [\n {\n x: to.x,\n y: from.y,\n radiusY: deltaY,\n },\n ];\n }\n res = [\n {\n x: from.x,\n y: from.y + yRadius,\n },\n {\n x: to.x,\n y: from.y + yRadius,\n },\n ];\n if (radiusYCount < 2) {\n const firstRadius = deltaY - yRadius;\n res = [\n {\n x: from.x,\n y: from.y + firstRadius,\n // 第一个圆角收缩 y 半径\n radiusY: firstRadius,\n },\n {\n x: to.x,\n y: from.y + firstRadius,\n },\n ];\n }\n\n // x 轴空间不足处理\n if (radiusXCount < 2) {\n res[0].moveX = deltaX / 2;\n res[1].moveX = deltaX / 2;\n }\n\n return res;\n\n case FlowTransitionLineEnum.MERGE_LINE:\n // 聚合线 y 轴空间不足时直接连上\n if (radiusYCount < 2) {\n return [\n {\n x: from.x,\n y: to.y,\n },\n ];\n }\n\n res = [\n {\n x: from.x,\n y: to.y - yRadius,\n },\n {\n x: to.x,\n y: to.y - yRadius,\n },\n ];\n\n // x 轴空间不足处理\n if (radiusXCount < 2) {\n res[0].moveX = deltaX / 2;\n res[1].moveX = deltaX / 2;\n }\n\n return res;\n\n default:\n break;\n }\n\n return [];\n}\n\n// 获取上一个节点和下一个节点中较宽的宽度作为 hover 热区\nexport function getTransitionLabelHoverWidth(data: FlowNodeTransitionData) {\n const { isVertical } = data.entity;\n if (isVertical) {\n const nextWidth =\n data.entity.next?.firstChild && !data.entity.next.isInlineBlocks\n ? data.entity.next.firstChild!.getData(FlowNodeTransformData)!.size.width\n : data.entity.next?.getData(FlowNodeTransformData)!.size.width;\n\n // 获取上一个节点和下一个节点中较宽的宽度作为 hover 热区\n const maxWidth = Math.max(\n data.entity.getData(FlowNodeTransformData)?.size.width ??\n DEFAULT_SPACING[DefaultSpacingKey.HOVER_AREA_WIDTH],\n nextWidth || 0\n );\n\n return maxWidth;\n }\n if (data.transform.next) {\n return data.transform.next.inputPoint.x - data.transform.outputPoint.x;\n }\n return DEFAULT_LABEL_ACTIVATE_HEIGHT;\n}\n\nexport function getTransitionLabelHoverHeight(data: FlowNodeTransitionData) {\n const { isVertical } = data.entity;\n if (isVertical) {\n if (data.transform.next) {\n return data.transform.next.inputPoint.y - data.transform.outputPoint.y;\n }\n return DEFAULT_LABEL_ACTIVATE_HEIGHT;\n }\n const nextHeight =\n data.entity.next?.firstChild && !data.entity.next.isInlineBlocks\n ? data.entity.next.firstChild!.getData(FlowNodeTransformData)!.size.height\n : data.entity.next?.getData(FlowNodeTransformData)!.size.height;\n\n // 获取上一个节点和下一个节点中较宽的宽度作为 hover 热区\n const maxHeight = Math.max(\n data.entity.getData(FlowNodeTransformData)?.size.height || 280,\n nextHeight || 0\n );\n\n return maxHeight;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Rectangle } from '@flowgram-vue/utils';\nimport {\n type FlowNodeTransitionData,\n FlowTransitionLabelEnum,\n LABEL_SIDE_TYPE,\n} from '@flowgram-vue/document';\nimport { ConfigEntity, type EntityOpts, PlaygroundConfigEntity } from '@flowgram-vue/core';\n\nimport { DEFAULT_LABEL_ACTIVATE_HEIGHT } from '../components/utils';\n\nconst BRANCH_HOVER_HEIGHT = 64;\n\ninterface FlowDragEntityConfig extends EntityOpts {}\n\nenum ScrollDirection {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n}\n\nconst SCROLL_DELTA = 4;\n\nconst SCROLL_INTERVAL = 20;\n\nconst SCROLL_BOUNDING = 20;\n\nconst EDITOR_LEFT_BAR_WIDTH = 60;\n\nexport interface CollisionRetType {\n hasCollision: boolean;\n labelOffsetType?: LABEL_SIDE_TYPE;\n}\n\nexport class FlowDragEntity extends ConfigEntity<FlowDragEntityConfig> {\n private playgroundConfigEntity: PlaygroundConfigEntity;\n\n static type = 'FlowDragEntity';\n\n private containerX = 0;\n\n private containerY = 0;\n\n private _scrollXInterval: { interval: number; origin: number } | undefined;\n\n private _scrollYInterval: { interval: number; origin: number } | undefined;\n\n get hasScroll(): boolean {\n return Boolean(this._scrollXInterval || this._scrollYInterval);\n }\n\n constructor(conf: any) {\n super(conf);\n this.playgroundConfigEntity = this.entityManager.getEntity<PlaygroundConfigEntity>(\n PlaygroundConfigEntity,\n true\n )!;\n }\n\n isCollision(\n transition: FlowNodeTransitionData,\n rect: Rectangle,\n isBranch: boolean\n ): CollisionRetType {\n const scale = this.playgroundConfigEntity.finalScale || 0;\n if (isBranch) {\n return this.isBranchCollision(transition, rect, scale);\n }\n return this.isNodeCollision(transition, rect, scale);\n }\n\n // 检测节点维度碰撞方法\n isNodeCollision(\n transition: FlowNodeTransitionData,\n rect: Rectangle,\n scale: number\n ): CollisionRetType {\n const { labels } = transition;\n const { isVertical } = transition.entity;\n\n const hasCollision = labels.some((label) => {\n if (\n !label ||\n ![\n FlowTransitionLabelEnum.ADDER_LABEL,\n FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL,\n ].includes(label.type)\n ) {\n return false;\n }\n\n const hoverWidth = isVertical\n ? transition.transform.bounds.width\n : DEFAULT_LABEL_ACTIVATE_HEIGHT;\n const hoverHeight = isVertical\n ? DEFAULT_LABEL_ACTIVATE_HEIGHT\n : transition.transform.bounds.height;\n\n const labelRect = new Rectangle(\n (label.offset.x - hoverWidth / 2) * scale,\n (label.offset.y - hoverHeight / 2) * scale,\n hoverWidth * scale,\n hoverHeight * scale\n );\n // 检测两个正方形是否相互碰撞\n return Rectangle.intersects(labelRect, rect);\n });\n\n return {\n hasCollision,\n // 节点不关心 offsetType\n labelOffsetType: undefined,\n };\n }\n\n // 检测分支维度碰撞\n isBranchCollision(\n transition: FlowNodeTransitionData,\n rect: Rectangle,\n scale: number\n ): CollisionRetType {\n const { labels } = transition;\n const { isVertical } = transition.entity;\n\n let labelOffsetType: LABEL_SIDE_TYPE = LABEL_SIDE_TYPE.NORMAL_BRANCH;\n const hasCollision = labels.some((label) => {\n if (!label || label.type !== FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL) {\n return false;\n }\n const hoverHeight = isVertical ? BRANCH_HOVER_HEIGHT : label.width || 0;\n // BRANCH_DRAGGING_LABEL 类型的 label 一定存在 width 属性\n const hoverWidth = isVertical ? label.width || 0 : BRANCH_HOVER_HEIGHT;\n\n const labelRect = new Rectangle(\n (label.offset.x - hoverWidth / 2) * scale,\n (label.offset.y - hoverHeight / 2) * scale,\n hoverWidth * scale,\n hoverHeight * scale\n );\n // 检测两个正方形是否相互碰撞\n const collision = Rectangle.intersects(labelRect, rect);\n if (collision) {\n labelOffsetType = label.props!.side;\n }\n return collision;\n });\n\n return {\n hasCollision,\n labelOffsetType,\n };\n }\n\n private _startScrollX(origin: number, added: boolean): void {\n if (this._scrollXInterval) {\n return;\n }\n const interval = window.setInterval(() => {\n const current = this._scrollXInterval;\n if (!current) return;\n // eslint-disable-next-line no-multi-assign\n const scrollX = (current.origin = added\n ? current.origin + SCROLL_DELTA\n : current.origin - SCROLL_DELTA);\n this.playgroundConfigEntity.updateConfig({\n scrollX,\n });\n const playgroundConfig = this.playgroundConfigEntity.config;\n if (playgroundConfig?.scrollX === scrollX) {\n if (added) {\n this.containerX += SCROLL_DELTA;\n } else {\n this.containerX -= SCROLL_DELTA;\n }\n }\n }, SCROLL_INTERVAL);\n this._scrollXInterval = { interval, origin };\n }\n\n private _stopScrollX(): void {\n if (this._scrollXInterval) {\n clearInterval(this._scrollXInterval.interval);\n this._scrollXInterval = undefined;\n }\n }\n\n private _startScrollY(origin: number, added: boolean): void {\n if (this._scrollYInterval) {\n return;\n }\n const interval = window.setInterval(() => {\n const current = this._scrollYInterval;\n if (!current) return;\n // eslint-disable-next-line no-multi-assign\n const scrollY = (current.origin = added\n ? current.origin + SCROLL_DELTA\n : current.origin - SCROLL_DELTA);\n this.playgroundConfigEntity.updateConfig({\n scrollY,\n });\n const playgroundConfig = this.playgroundConfigEntity.config;\n if (playgroundConfig?.scrollY === scrollY) {\n if (added) {\n this.containerY += SCROLL_DELTA;\n } else {\n this.containerY -= SCROLL_DELTA;\n }\n }\n }, SCROLL_INTERVAL);\n this._scrollYInterval = { interval, origin };\n }\n\n private _stopScrollY(): void {\n if (this._scrollYInterval) {\n clearInterval(this._scrollYInterval.interval);\n this._scrollYInterval = undefined;\n }\n }\n\n stopAllScroll(): void {\n this._stopScrollX();\n this._stopScrollY();\n }\n\n scrollDirection(e: MouseEvent, x: number, y: number): ScrollDirection | undefined {\n const playgroundConfig = this.playgroundConfigEntity.config;\n const currentScrollX = playgroundConfig.scrollX;\n const currentScrollY = playgroundConfig.scrollY;\n this.containerX = x;\n this.containerY = y;\n const clientRect = this.playgroundConfigEntity.playgroundDomNode.getBoundingClientRect();\n\n const mouseToBottom = playgroundConfig.height + clientRect.y - e.clientY;\n if (mouseToBottom < SCROLL_BOUNDING) {\n this._startScrollY(currentScrollY, true);\n return ScrollDirection.BOTTOM;\n }\n const mouseToTop = e.clientY - clientRect.y;\n if (mouseToTop < SCROLL_BOUNDING) {\n this._startScrollY(currentScrollY, false);\n return ScrollDirection.TOP;\n }\n this._stopScrollY();\n const mouseToRight = playgroundConfig.width + clientRect.x - e.clientX;\n if (mouseToRight < SCROLL_BOUNDING) {\n this._startScrollX(currentScrollX, true);\n return ScrollDirection.RIGHT;\n }\n const mouseToLeft = e.clientX - clientRect.x;\n if (mouseToLeft < SCROLL_BOUNDING + EDITOR_LEFT_BAR_WIDTH) {\n this._startScrollX(currentScrollX, false);\n return ScrollDirection.LEFT;\n }\n this._stopScrollX();\n\n return undefined;\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { uniq } from 'lodash-es';\nimport { type FlowNodeEntity } from '@flowgram-vue/document';\n\nfunction getNodePath(node: FlowNodeEntity): FlowNodeEntity[] {\n const path: FlowNodeEntity[] = [node];\n node = node.parent as FlowNodeEntity;\n while (node) {\n path.push(node);\n node = node.parent as FlowNodeEntity;\n }\n return path.reverse();\n}\n\n/**\n * 过滤掉画布节点, 有 originParent,都是非独立节点\n * @param entity\n */\nfunction findRealEntity(entity: FlowNodeEntity): FlowNodeEntity {\n while (entity.originParent) {\n entity = entity.originParent;\n }\n return entity;\n}\n/**\n * 生成选中节点的路径\n * 如\n * [\n * 'root',\n * 'exclusiveSplit_30baf8b1da0',\n * 'exclusiveSplit_d0070ce5d04',\n * 'createRecord_47e8fe1dfc3'\n * ],\n * [\n * 'root',\n * 'exclusiveSplit_30baf8b1da0',\n * 'exclusiveSplit_d0070ce5d04',\n * 'createRecord_32dcdd10274'\n * ],\n * [\n * 'root',\n * 'exclusiveSplit_30baf8b1da0',\n * 'exclusiveSplit_d0070ce5d04',\n * 'exclusiveSplit_a5579b3997d', // 这里产生分叉\n * 'createRecord_b57b00eee94' // 父亲节点分叉了,这里就忽略了\n * ]\n * ]\n * 1. 相同分支的节点,选择每个节点\n * 2. 跨分支的节点选择共同的父节点\n */\nexport function findSelectedNodes(nodes: FlowNodeEntity[]): FlowNodeEntity[] {\n if (nodes.length === 0) return [];\n /**\n * 生成节点的路径\n */\n const nodePathList: FlowNodeEntity[][] = nodes.map((n) => getNodePath(n));\n /**\n * 只需要比较最小的路径\n */\n const minLength = Math.min(...nodePathList.map((n) => n.length));\n let index = 0;\n let selectedItems: FlowNodeEntity[] = [];\n /**\n * 从二维数组的每一层打平去看,看看有没有分叉,如果有分叉就在当前层停止并作为选中的节点\n */\n while (index < minLength) {\n // eslint-disable-next-line no-loop-func\n selectedItems = uniq(nodePathList.map((p) => p[index]));\n // 存在分叉\n if (selectedItems.length > 1) {\n break;\n }\n index += 1;\n }\n return uniq(selectedItems.map((item) => findRealEntity(item)));\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n type FlowNodeEntity,\n FlowNodeRenderData,\n FlowNodeTransformData,\n} from '@flowgram-vue/document';\nimport { ConfigEntity } from '@flowgram-vue/core';\nimport { Compare, Rectangle } from '@flowgram-vue/utils';\n\nimport { findSelectedNodes } from '../utils/find-selected-nodes';\n\ninterface FlowSelectConfigEntityData {\n selectedNodes: FlowNodeEntity[];\n}\n\nconst BOUNDS_PADDING_DEFAULT = 10;\n\n/**\n * 圈选节点相关数据存储\n */\nexport class FlowSelectConfigEntity extends ConfigEntity<FlowSelectConfigEntityData> {\n static type = 'FlowSelectConfigEntity';\n\n boundsPadding = BOUNDS_PADDING_DEFAULT;\n\n getDefaultConfig(): FlowSelectConfigEntityData {\n return {\n selectedNodes: [],\n };\n }\n\n get selectedNodes(): FlowNodeEntity[] {\n return this.config.selectedNodes;\n }\n\n /**\n * 选中节点\n * @param nodes\n */\n set selectedNodes(nodes: FlowNodeEntity[]) {\n nodes = findSelectedNodes(nodes);\n // if (nodes.length === 1 && nodes[0].flowNodeType === FlowNodeBaseType.END) {\n // nodes = [];\n // }\n if (\n nodes.length !== this.config.selectedNodes.length ||\n nodes.some(n => !this.config.selectedNodes.includes(n))\n ) {\n this.config.selectedNodes.forEach(oldNode => {\n if (!nodes.includes(oldNode)) {\n oldNode.getData(FlowNodeRenderData)!.activated = false;\n }\n });\n // 高亮选中的节点\n nodes.forEach(node => {\n node.getData(FlowNodeRenderData)!.activated = true;\n });\n if (Compare.isArrayShallowChanged(this.config.selectedNodes, nodes)) {\n this.updateConfig({\n selectedNodes: nodes,\n });\n }\n }\n }\n\n /**\n * 清除选中节点\n */\n clearSelectedNodes() {\n if (this.config.selectedNodes.length === 0) return;\n this.config.selectedNodes.forEach(node => {\n node.getData(FlowNodeRenderData)!.activated = false;\n });\n this.updateConfig({\n selectedNodes: [],\n });\n }\n\n /**\n * 通过选择框选中节点\n * @param rect\n * @param transforms\n */\n selectFromBounds(rect: Rectangle, transforms: FlowNodeTransformData[]): void {\n const selectedNodes: FlowNodeEntity[] = [];\n transforms.forEach(transform => {\n if (Rectangle.intersects(rect, transform.bounds)) {\n if (transform.entity.originParent) {\n selectedNodes.push(transform.entity.originParent);\n } else {\n selectedNodes.push(transform.entity);\n }\n }\n });\n this.selectedNodes = selectedNodes;\n }\n\n /**\n * 获取选中节点外围的最大边框\n */\n getSelectedBounds(): Rectangle {\n const nodes = this.selectedNodes;\n if (nodes.length === 0) {\n return Rectangle.EMPTY;\n }\n return Rectangle.enlarge(nodes.map(n => n.getData(FlowNodeTransformData)!.bounds)).pad(\n this.boundsPadding,\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n PositionSchema,\n SizeSchema,\n ConfigEntity,\n PlaygroundDragEvent,\n} from '@flowgram-vue/core';\nimport { Rectangle } from '@flowgram-vue/utils';\n\nexport interface SelectorBoxConfigData extends PlaygroundDragEvent {\n disabled?: boolean; // 是否禁用选择框\n}\n\n/**\n * 选择框配置\n */\nexport class SelectorBoxConfigEntity extends ConfigEntity<SelectorBoxConfigData> {\n static type = 'SelectorBoxConfigEntity';\n\n get dragInfo(): PlaygroundDragEvent {\n return this.config;\n }\n\n setDragInfo(info: PlaygroundDragEvent): void {\n this.updateConfig(info);\n }\n\n get disabled(): boolean {\n return this.config && !!this.config.disabled;\n }\n\n set disabled(disabled: boolean) {\n this.updateConfig({\n disabled,\n });\n }\n\n get isStart(): boolean {\n return this.dragInfo.isStart;\n }\n\n get isMoving(): boolean {\n return this.dragInfo.isMoving;\n }\n\n get position(): PositionSchema {\n const { dragInfo } = this;\n return {\n x: dragInfo.startPos.x < dragInfo.endPos.x ? dragInfo.startPos.x : dragInfo.endPos.x,\n y: dragInfo.startPos.y < dragInfo.endPos.y ? dragInfo.startPos.y : dragInfo.endPos.y,\n };\n }\n\n get size(): SizeSchema {\n const { dragInfo } = this;\n return {\n width: Math.abs(dragInfo.startPos.x - dragInfo.endPos.x),\n height: Math.abs(dragInfo.startPos.y - dragInfo.endPos.y),\n };\n }\n\n get collapsed(): boolean {\n const { size } = this;\n return size.width === 0 && size.height === 0;\n }\n\n collapse(): void {\n this.setDragInfo({\n ...this.dragInfo,\n isMoving: false,\n isStart: false,\n });\n }\n\n toRectangle(scale: number): Rectangle {\n const { position, size } = this;\n return new Rectangle(\n position.x / scale,\n position.y / scale,\n size.width / scale,\n size.height / scale,\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { isNil } from 'lodash-es';\nexport const isHidden = (dom?: HTMLElement) => {\n if (!dom || isNil(dom?.offsetParent)) {\n return true;\n }\n const style = window.getComputedStyle(dom);\n if (style?.display === 'none') {\n return true;\n }\n return false;\n};\n\nexport const isRectInit = (rect?: DOMRect): boolean => {\n if (!rect) {\n return false;\n }\n // 检查所有属性是否都为0,表示DOMRect未初始化\n if (\n rect.bottom === 0 &&\n rect.height === 0 &&\n rect.left === 0 &&\n rect.right === 0 &&\n rect.top === 0 &&\n rect.width === 0 &&\n rect.x === 0 &&\n rect.y === 0\n ) {\n return false;\n }\n return true;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { type FlowNodeTransformData } from '@flowgram-vue/document';\nimport { Disposable } from '@flowgram-vue/utils';\n\nimport { isHidden, isRectInit } from './utils/element';\n\n/**\n * 监听 dom 元素的 size 变化,用于画布节点的大小变化重新计算\n */\n@injectable()\nexport class FlowRendererResizeObserver {\n /**\n * 监听元素 size,并同步到 transform\n * @param el\n * @param transform\n */\n observe(el: HTMLElement, transform: FlowNodeTransformData): Disposable {\n const observer = new ResizeObserver(entries => {\n /**\n * NOTICE: 不加 window.requestAnimationFrame\n * 会导致 \"ResizeObserver loop completed with undelivered notifications.\" 报错\n * 这个报错在 chrome 和 firefox 是默认被忽略的,但本地调试会被编译工具弹窗打断\n */\n window.requestAnimationFrame(() => {\n if (!Array.isArray(entries) || !entries.length) {\n return;\n }\n const entry = entries[0];\n const { contentRect, target } = entry;\n // 元素宽高未计算时,不更新节点 size\n const isContentRectInit = isRectInit(contentRect);\n // 目标节点脱离 DOM 树,忽略本次变更\n const isLeaveDOMTree = !target.parentNode;\n // IDE 环境下画布元素可能 display none,这时候会监听到元素宽高 0 导致闪屏\n // 此情况下不作 resize 重渲染\n const isHiddenElement = isHidden(target.parentNode as HTMLElement);\n if (isContentRectInit && !isLeaveDOMTree && !isHiddenElement) {\n // 更新节点 size 数据\n transform.size = {\n width: Math.round(contentRect.width * 10) / 10,\n height: Math.round(contentRect.height * 10) / 10,\n };\n }\n });\n });\n observer.observe(el);\n return Disposable.create(() => {\n observer.unobserve(el);\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { Cache, type Disposable, domUtils } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowDocumentTransformerEntity,\n FlowNodeEntity,\n FlowNodeTransformData,\n} from '@flowgram-vue/document';\nimport { Layer, observeEntity, observeEntityDatas } from '@flowgram-vue/core';\n// import { throttle } from 'lodash-es'\n\nimport { FlowRendererResizeObserver } from '../flow-renderer-resize-observer';\n\ninterface TransformRenderCache {\n updateBounds(): void;\n}\n\nexport interface FlowNodesTransformLayerOptions {\n renderElement?: HTMLElement | (() => HTMLElement | undefined);\n}\n\n/**\n * 渲染节点位置\n */\n@injectable()\nexport class FlowNodesTransformLayer extends Layer<FlowNodesTransformLayerOptions> {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @inject(FlowRendererResizeObserver)\n readonly resizeObserver: FlowRendererResizeObserver;\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData)\n _transforms: FlowNodeTransformData[];\n\n node = domUtils.createDivWithClass('gedit-flow-nodes-layer');\n\n get transformVisibles(): FlowNodeTransformData[] {\n return this.document.getRenderDatas<FlowNodeTransformData>(FlowNodeTransformData, false);\n }\n\n /**\n * 监听缩放,目前采用整体缩放\n * @param scale\n */\n onZoom(scale: number) {\n this.node!.style.transform = `scale(${scale})`;\n }\n\n dispose(): void {\n this.renderCache.dispose();\n super.dispose();\n }\n\n // onViewportChange() {\n // this.throttleUpdate()\n // }\n\n // throttleUpdate = throttle(() => {\n // this.renderCache.getFromCache().forEach((cache) => cache.updateBounds())\n // }, 100)\n\n protected renderCache = Cache.create<TransformRenderCache, FlowNodeTransformData>(\n (transform?: FlowNodeTransformData) => {\n const { renderState } = transform!;\n const { node } = renderState;\n const { entity } = transform!;\n node.id = entity.id;\n let resizeDispose: Disposable | undefined;\n const append = () => {\n if (resizeDispose) return;\n // 监听 dom 节点的大小变化\n this.renderElement.appendChild(node);\n if (!entity.getNodeMeta().autoResizeDisable) {\n resizeDispose = this.resizeObserver.observe(node, transform!);\n }\n };\n const dispose = () => {\n if (!resizeDispose) return;\n // 脱离文档流,但是 react 组件会保留\n if (node.parentElement) {\n this.renderElement.removeChild(node);\n }\n resizeDispose.dispose();\n resizeDispose = undefined;\n };\n append();\n return {\n dispose,\n updateBounds: () => {\n const { bounds } = transform!;\n // 保留2位小数\n const rawX: number = parseFloat(node.style.left);\n const rawY: number = parseFloat(node.style.top);\n if (!this.isCoordEqual(rawX, bounds.x) || !this.isCoordEqual(rawY, bounds.y)) {\n node.style.left = `${bounds.x}px`;\n node.style.top = `${bounds.y}px`;\n }\n },\n };\n }\n );\n\n private isCoordEqual(a: number, b: number) {\n const browserCoordEpsilon = 0.05; // 浏览器处理坐标的精度误差: 两位小数四舍五入\n return Math.abs(a - b) < browserCoordEpsilon;\n }\n\n onReady() {\n this.node!.style.zIndex = '10';\n }\n\n get visibeBounds() {\n return this.transformVisibles.map((transform) => transform.bounds);\n }\n\n /**\n * 更新节点的 bounds 数据\n */\n updateNodesBounds() {\n this.renderCache\n .getMoreByItems(this.transformVisibles)\n .forEach((render) => render.updateBounds());\n }\n\n autorun() {\n // 更新节点偏移数据 O(n) TODO 这个更新会从 render 里移除改成自动触发\n if (this.documentTransformer.loading) return;\n this.documentTransformer.refresh();\n this.updateNodesBounds();\n }\n\n private get renderElement(): HTMLElement {\n if (typeof this.options.renderElement === 'function') {\n const element = this.options.renderElement();\n if (element) {\n return element;\n }\n } else if (typeof this.options.renderElement !== 'undefined') {\n return this.options.renderElement as HTMLElement;\n }\n return this.node;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, provide, type VNodeChild } from 'vue';\nimport {\n Playground,\n PlaygroundVueContainerKey,\n PlaygroundVueRefKey,\n type PlaygroundContainerFactory,\n} from '@flowgram-vue/core';\n\n/**\n * 给 Layer 独立 createApp 注入 playground 容器,使子组件里的 useService / usePlayground 可用。\n */\nexport const LayerVueProvide = defineComponent({\n name: 'LayerVueProvide',\n props: {\n factory: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const factory = props.factory as PlaygroundContainerFactory;\n provide(PlaygroundVueContainerKey, factory as any);\n try {\n provide(PlaygroundVueRefKey, factory.get(Playground));\n } catch {\n // 测试容器可能重复 bind PlaygroundConfig,此时仅 provide container\n }\n },\n render() {\n return this.$slots.default?.();\n },\n});\n\nexport function wrapLayerRender(\n factory: PlaygroundContainerFactory,\n children: VNodeChild\n) {\n return h(LayerVueProvide, { factory }, () => children);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { FlowRendererRegistry } from './flow-renderer-registry';\n\nexport const FlowRendererContribution = Symbol('FlowRendererContribution');\n\nexport interface FlowRendererContribution {\n registerRenderer?(registry: FlowRendererRegistry): void;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable, multiInject, optional } from 'inversify';\nimport type { Component } from 'vue';\nimport { I18n } from '@flowgram-vue/i18n';\nimport { type Layer, type LayerRegistry, PipelineRegistry } from '@flowgram-vue/core';\n\nimport { FlowRendererContribution } from './flow-renderer-contribution';\n\nexport enum FlowRendererComponentType {\n VUE, // vue 组件\n DOM, // dom 组件\n TEXT, // 文案\n}\n\nexport enum FlowRendererKey {\n NODE_RENDER = 'node-render', // 节点渲染\n ADDER = 'adder', // 添加按钮渲染\n COLLAPSE = 'collapse', // 节点展开收起标签(包含展开态和收起态)\n BRANCH_ADDER = 'branch-adder', // 分支添加按钮\n TRY_CATCH_COLLAPSE = 'try-catch-collapse', // 错误处理分支整体收起\n DRAG_NODE = 'drag-node', // 拖拽节点\n DRAGGABLE_ADDER = 'draggable-adder', // 拖拽可被拖入\n DRAG_HIGHLIGHT_ADDER = 'drag-highlight-adder', // 拖拽高亮\n DRAG_BRANCH_HIGHLIGHT_ADDER = 'drag-branch-highlight-adder', // 分支拖拽添加高亮\n SELECTOR_BOX_POPOVER = 'selector-box-popover', // 选择框右上角菜单\n /**\n * @deprecated\n */\n CONTEXT_MENU_POPOVER = 'context-menu-popover', // 右键菜单\n SUB_CANVAS = 'sub-canvas', // 子画布渲染\n\n SLOT_ADDER = 'slot-adder', // 插槽添加按钮\n SLOT_LABEL = 'slot-label', // 插槽标签\n SLOT_COLLAPSE = 'slot-collapse', // 插槽收起按钮渲染\n\n // 工作流线条箭头自定义渲染\n ARROW_RENDERER = 'arrow-renderer', // 工作流线条箭头渲染器\n\n // 下边两个不一定存在\n MARKER_ARROW = 'marker-arrow', // loop 的默认箭头\n MARKER_ACTIVATE_ARROW = 'marker-active-arrow', // loop 的激活态箭头\n}\n\nexport enum FlowTextKey {\n // 循环节点相关\n LOOP_END_TEXT = 'loop-end-text', // 文案:循环结束\n LOOP_TRAVERSE_TEXT = 'loop-traverse-text', // 文案:循环遍历\n LOOP_WHILE_TEXT = 'loop-while-text', // 文案:满足条件时\n // TryCatch 相关\n TRY_START_TEXT = 'try-start-text', // 文案:监控开始\n TRY_END_TEXT = 'try-end-text', // 文案:监控结束\n CATCH_TEXT = 'catch-text', // 发生错误\n}\n\nexport interface FlowRendererComponent {\n type: FlowRendererComponentType;\n renderer: Component | ((props?: any) => any);\n}\n\n/**\n * 命令分类\n */\nexport enum FlowRendererCommandCategory {\n SELECTOR_BOX = 'SELECTOR_BOX', // 选择框\n}\n\n@injectable()\nexport class FlowRendererRegistry {\n private componentsMap = new Map<string, FlowRendererComponent>();\n\n private textMap = new Map<string, string>();\n\n @multiInject(FlowRendererContribution)\n @optional()\n private contribs: FlowRendererContribution[] = [];\n\n @inject(PipelineRegistry) readonly pipeline: PipelineRegistry;\n\n init() {\n this.contribs.forEach((contrib) => contrib.registerRenderer?.(this));\n }\n\n /**\n * 注册 组件数据\n */\n registerRendererComponents(\n renderKey: FlowRendererKey | string,\n comp: FlowRendererComponent\n ): void {\n this.componentsMap.set(renderKey, comp);\n }\n\n registerVueComponent(\n renderKey: FlowRendererKey | string,\n renderer: Component | ((props: any) => any)\n ): void {\n this.componentsMap.set(renderKey, {\n type: FlowRendererComponentType.VUE,\n renderer,\n });\n }\n\n /**\n * 注册文案\n */\n registerText(configs: Record<FlowTextKey | string, string>): void {\n Object.entries(configs).forEach(([key, value]) => {\n this.textMap.set(key, value);\n });\n }\n\n getText(textKey: string) {\n return I18n.t(textKey, { defaultValue: '' }) || this.textMap.get(textKey);\n }\n\n /**\n * TODO: support memo\n */\n public getRendererComponent(renderKey: FlowRendererKey | string): FlowRendererComponent {\n const comp = this.componentsMap.get(renderKey);\n if (!comp) {\n throw new Error(`Unknown render key ${renderKey}`);\n }\n return comp;\n }\n\n tryToGetRendererComponent(\n renderKey: FlowRendererKey | string\n ): FlowRendererComponent | undefined {\n return this.componentsMap.get(renderKey);\n }\n\n /**\n * 注册画布层\n */\n registerLayers(...layerRegistries: LayerRegistry[]): void {\n layerRegistries.forEach((layer) => this.pipeline.registerLayer(layer));\n }\n\n /**\n * 根据配置注册画布\n * @param layerRegistry\n * @param options\n */\n registerLayer<P extends Layer = Layer>(\n layerRegistry: LayerRegistry<Layer>,\n options?: P['options']\n ): void {\n this.pipeline.registerLayer(layerRegistry, options);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, Fragment, h, onMounted, provide, Teleport, type Component } from 'vue';\nimport { inject, injectable } from 'inversify';\nimport { Cache, type CacheOriginItem, domUtils } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowDocumentTransformerEntity,\n FlowNodeEntity,\n FlowNodeRenderData,\n FlowNodeTransformData,\n} from '@flowgram-vue/document';\nimport {\n Layer,\n observeEntity,\n observeEntityDatas,\n PlaygroundContainerFactory,\n PlaygroundEntityContextKey,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport { FlowRendererKey, FlowRendererRegistry } from '../flow-renderer-registry';\n\ninterface NodePortal extends CacheOriginItem {\n id: string;\n Portal: Component;\n}\n\n/**\n * 渲染节点内容\n */\n@injectable()\nexport class FlowNodesContentLayer extends Layer {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeRenderData)\n _renderStates: FlowNodeRenderData[];\n\n get renderStatesVisible(): FlowNodeRenderData[] {\n return this.document.getRenderDatas<FlowNodeRenderData>(FlowNodeRenderData, false);\n }\n\n private renderMemoCache = new WeakMap<any, Component>();\n\n node = domUtils.createDivWithClass('gedit-flow-nodes-layer');\n\n getPortalRenderer(data: FlowNodeRenderData): Component {\n const meta = data.entity.getNodeMeta();\n const renderer = this.rendererRegistry.getRendererComponent(\n (meta.renderKey as FlowRendererKey) || FlowRendererKey.NODE_RENDER\n );\n const vueRenderer = renderer.renderer as Component;\n let memoCache = this.renderMemoCache.get(vueRenderer);\n if (!memoCache) {\n memoCache = vueRenderer;\n this.renderMemoCache.set(vueRenderer, memoCache);\n }\n return memoCache;\n }\n\n /**\n * 监听缩放,目前采用整体缩放\n * @param scale\n */\n onZoom(scale: number) {\n this.node!.style.transform = `scale(${scale})`;\n }\n\n dispose(): void {\n this.vuePortals.dispose();\n super.dispose();\n }\n\n protected vuePortals = Cache.create<NodePortal, FlowNodeRenderData>(\n (data?: FlowNodeRenderData) => {\n const { node, entity } = data!;\n const { config } = this;\n const PortalRenderer = this.getPortalRenderer(data!);\n\n const Portal = defineComponent({\n name: 'FlowNodePortal',\n setup() {\n provide(PlaygroundEntityContextKey, entity);\n onMounted(() => {\n if (!entity.getNodeMeta().autoResizeDisable && node.clientWidth && node.clientHeight) {\n const transform = entity.getData<FlowNodeTransformData>(FlowNodeTransformData);\n if (transform)\n transform.size = {\n width: node.clientWidth,\n height: node.clientHeight,\n };\n }\n });\n return () =>\n h(Teleport, { to: node }, [\n h(PortalRenderer, {\n node: entity,\n version: data?.version,\n activated: data?.activated,\n readonly: config.readonly,\n disabled: config.disabled,\n }),\n ]);\n },\n });\n\n return {\n id: node.id || entity.id,\n dispose: () => {\n // TODO, 删除逻辑由 node 去控制了\n },\n Portal,\n } as NodePortal;\n }\n );\n\n onReady() {\n this.node!.style.zIndex = '10';\n }\n\n /**\n * 监听readonly和 disabled 状态 并刷新layer, 并刷新节点\n */\n onReadonlyOrDisabledChange() {\n this.render();\n }\n\n getPortals(): NodePortal[] {\n return this.vuePortals.getMoreByItems(this.renderStatesVisible);\n }\n\n render() {\n if (this.documentTransformer.loading) return null;\n this.documentTransformer.refresh();\n\n return wrapLayerRender(\n this.playgroundContainer,\n h(\n Fragment,\n null,\n this.getPortals().map((portal) => h(portal.Portal, { key: portal.id }))\n )\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\nimport type { FlowTransitionLine } from '@flowgram-vue/document';\n\nimport { useBaseColor } from '../hooks/use-base-color';\nimport { DEFAULT_LINE_ATTRS } from './utils';\n\nconst StraightLine = defineComponent({\n name: 'StraightLine',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const line = attrs as unknown as FlowTransitionLine;\n const { baseColor, baseActivatedColor } = useBaseColor();\n return () => {\n const { from, to, activated, style } = line;\n return h('path', {\n 'data-line-id': line.lineId,\n d: `M ${from.x} ${from.y} L ${to.x} ${to.y}`,\n ...DEFAULT_LINE_ATTRS,\n stroke: activated ? baseActivatedColor : baseColor,\n style,\n });\n };\n },\n});\n\nexport default StraightLine;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\n\nimport { useBaseColor } from '../hooks/use-base-color';\n\nexport const MARK_ARROW_ID = '$marker_arrow$';\n\nconst MarkerArrow = defineComponent({\n name: 'MarkerArrow',\n props: {\n id: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const { baseColor } = useBaseColor();\n return () =>\n h(\n 'marker',\n {\n 'data-line-id': props.id,\n id: props.id || MARK_ARROW_ID,\n markerWidth: '11',\n markerHeight: '14',\n refX: '10',\n refY: '7',\n orient: 'auto',\n },\n [\n h('path', {\n d: 'M9.6 5.2C10.8 6.1 10.8 7.9 9.6 8.8L3.6 13.3C2.11672 14.4125 0 13.3541 0 11.5L0 2.5C0 0.645898 2.11672 -0.412461 3.6 0.7L9.6 5.2Z',\n fill: baseColor,\n }),\n ]\n );\n },\n});\n\nexport default MarkerArrow;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\n\nimport { useBaseColor } from '../hooks/use-base-color';\n\nexport const MARK_ACTIVATED_ARROW_ID = '$marker_arrow_activated$';\n\nconst MarkerActivatedArrow = defineComponent({\n name: 'MarkerActivatedArrow',\n props: {\n id: {\n type: String,\n default: undefined,\n },\n },\n setup(props) {\n const { baseActivatedColor } = useBaseColor();\n return () =>\n h(\n 'marker',\n {\n 'data-line-id': props.id,\n id: props.id || MARK_ACTIVATED_ARROW_ID,\n markerWidth: '11',\n markerHeight: '14',\n refX: '10',\n refY: '7',\n orient: 'auto',\n },\n [\n h('path', {\n d: 'M9.6 5.2C10.8 6.1 10.8 7.9 9.6 8.8L3.6 13.3C2.11672 14.4125 0 13.3541 0 11.5L0 2.5C0 0.645898 2.11672 -0.412461 3.6 0.7L9.6 5.2Z',\n fill: baseActivatedColor,\n }),\n ]\n );\n },\n});\n\nexport default MarkerActivatedArrow;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { computed, defineComponent, h, inject } from 'vue';\nimport type { Component } from 'vue';\nimport { isNil } from 'lodash-es';\nimport { Point } from '@flowgram-vue/utils';\nimport { type FlowTransitionLine } from '@flowgram-vue/document';\nimport { PlaygroundVueContainerKey } from '@flowgram-vue/core';\n\nimport { useBaseColor } from '../hooks/use-base-color';\nimport { DEFAULT_LINE_ATTRS, DEFAULT_RADIUS, getHorizontalVertices, getVertices } from './utils';\nimport MarkerArrow, { MARK_ARROW_ID } from './MarkerArrow';\nimport MarkerActivatedArrow, { MARK_ACTIVATED_ARROW_ID } from './MarkerActivatedArrow';\nimport { FlowRendererKey, FlowRendererRegistry } from '../flow-renderer-registry';\n\ninterface PropsType extends FlowTransitionLine {\n radius?: number;\n hide?: boolean;\n xRadius?: number;\n yRadius?: number;\n}\n\nconst MarkerDefs = defineComponent({\n name: 'MarkerDefs',\n props: {\n id: { type: String, required: true },\n activated: { type: Boolean, default: false },\n },\n setup(props) {\n const container = inject(PlaygroundVueContainerKey, null as any);\n return () => {\n const renderRegistry = container?.get?.(FlowRendererRegistry) as\n | FlowRendererRegistry\n | undefined;\n const ArrowRenderer = renderRegistry?.tryToGetRendererComponent(\n props.activated ? FlowRendererKey.MARKER_ACTIVATE_ARROW : FlowRendererKey.MARKER_ARROW\n );\n if (ArrowRenderer) {\n return h(ArrowRenderer.renderer as Component, { id: props.id, activated: props.activated });\n }\n if (props.activated) {\n return h('defs', null, [h(MarkerActivatedArrow, { id: props.id })]);\n }\n return h('defs', null, [h(MarkerArrow, { id: props.id })]);\n };\n },\n});\n\n/**\n * 圆角转弯线\n */\nconst RoundedTurningLine = defineComponent({\n name: 'RoundedTurningLine',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const props = attrs as unknown as PropsType;\n const { baseActivatedColor, baseColor } = useBaseColor();\n\n const realVertices = computed(() => {\n const { vertices, xRadius, yRadius } = props;\n return (\n vertices ||\n (props.isHorizontal\n ? getHorizontalVertices(props, xRadius, yRadius)\n : getVertices(props, xRadius, yRadius))\n );\n });\n\n const middleStr = computed(() => {\n const { radius = DEFAULT_RADIUS, from, to } = props;\n const vertices = realVertices.value;\n return vertices\n .map((point, idx) => {\n const prev = vertices[idx - 1] || from;\n const next = vertices[idx + 1] || to;\n\n const prevDelta = { x: Math.abs(prev.x - point.x), y: Math.abs(prev.y - point.y) };\n const nextDelta = { x: Math.abs(next.x - point.x), y: Math.abs(next.y - point.y) };\n\n const isRightAngleX = prevDelta.x === 0 && nextDelta.y === 0;\n const isRightAngleY = prevDelta.y === 0 && nextDelta.x === 0;\n const isRightAngle = isRightAngleX || isRightAngleY;\n\n if (!isRightAngle) {\n console.error(`vertex ${point.x},${point.y} is not right angle`);\n }\n\n const inPoint = new Point().copyFrom(point);\n const outPoint = new Point().copyFrom(point);\n const radiusX = isNil(point.radiusX) ? radius : point.radiusX;\n const radiusY = isNil(point.radiusY) ? radius : point.radiusY;\n let rx = radiusX;\n let ry = radiusY;\n\n if (isRightAngleX) {\n ry = Math.min(prevDelta.y, radiusY);\n const moveY = isNil(point.moveY) ? ry : point.moveY;\n inPoint.y += from.y < point.y ? -moveY : +moveY;\n\n rx = Math.min(nextDelta.x, radiusX);\n const moveX = isNil(point.moveX) ? rx : point.moveX;\n outPoint.x += to.x < point.x ? -moveX : +moveX;\n }\n\n if (isRightAngleY) {\n rx = Math.min(prevDelta.x, radiusX);\n const moveX = isNil(point.moveX) ? rx : point.moveX;\n inPoint.x += from.x < point.x ? -moveX : +moveX;\n\n ry = Math.min(nextDelta.y, radiusY);\n const moveY = isNil(point.moveY) ? ry : point.moveY;\n outPoint.y += to.y < point.y ? -moveY : +moveY;\n }\n\n if (point.radiusOverflow === 'truncate') {\n rx = radiusX;\n ry = radiusY;\n }\n\n const crossProduct =\n (point.x - inPoint.x) * (outPoint.y - inPoint.y) -\n (point.y - inPoint.y) * (outPoint.x - inPoint.x);\n const isClockWise = crossProduct > 0;\n\n return `L ${inPoint.x} ${inPoint.y} A ${rx} ${ry} 0 0 ${isClockWise ? 1 : 0} ${\n outPoint.x\n } ${outPoint.y}`;\n })\n .join(' ');\n });\n\n return () => {\n const { hide, from, to, arrow, activated, style } = props;\n if (hide) {\n return null;\n }\n\n const pathStr = `M ${from.x} ${from.y} ${middleStr.value} L ${to.x} ${to.y}`;\n const markerId = activated\n ? `${MARK_ACTIVATED_ARROW_ID}${props.lineId}`\n : `${MARK_ARROW_ID}${props.lineId}`;\n\n return [\n arrow ? h(MarkerDefs, { id: markerId, activated }) : null,\n h('path', {\n 'data-line-id': props.lineId,\n d: pathStr,\n ...DEFAULT_LINE_ATTRS,\n stroke: activated ? baseActivatedColor : baseColor,\n ...(arrow\n ? {\n markerEnd: `url(#${markerId})`,\n }\n : {}),\n style,\n }),\n ];\n };\n },\n});\n\nexport default RoundedTurningLine;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\nimport type { Component } from 'vue';\nimport type { FlowTransitionLine } from '@flowgram-vue/document';\n\nimport { type FlowRendererRegistry } from '../flow-renderer-registry';\n\ninterface PropsType extends FlowTransitionLine {\n rendererRegistry: FlowRendererRegistry;\n}\n\nconst CustomLine = defineComponent({\n name: 'CustomLine',\n inheritAttrs: false,\n setup(_, { attrs }) {\n return () => {\n const props = attrs as unknown as PropsType;\n const { renderKey, rendererRegistry, ...line } = props;\n if (!renderKey) {\n return null;\n }\n const renderer = rendererRegistry.getRendererComponent(renderKey);\n if (!renderer) {\n return null;\n }\n return h(renderer.renderer as Component, { lineId: props.lineId, ...line });\n };\n },\n});\n\nexport default CustomLine;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { VNode } from 'vue';\nimport { h } from 'vue';\nimport { Rectangle } from '@flowgram-vue/utils';\nimport {\n FlowDragService,\n type FlowNodeTransitionData,\n type FlowTransitionLine,\n FlowTransitionLineEnum,\n DefaultSpacingKey,\n} from '@flowgram-vue/document';\nimport { getDefaultSpacing } from '@flowgram-vue/document';\n\nimport { type FlowRendererRegistry } from '../flow-renderer-registry';\nimport StraightLine from './StraightLine';\nimport RoundedTurningLine from './RoundedTurningLine';\nimport CustomLine from './CustomLine';\n\nexport interface PropsType {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n isViewportVisible: (bounds: Rectangle) => boolean;\n linesSave: VNode[];\n dragService: FlowDragService;\n}\n\nexport function createLines(props: PropsType): void {\n const { data, rendererRegistry, linesSave, dragService } = props;\n const { lines, entity } = data || {};\n\n const radius = getDefaultSpacing(entity, DefaultSpacingKey.ROUNDED_LINE_RADIUS);\n const xRadius = getDefaultSpacing(entity, DefaultSpacingKey.ROUNDED_LINE_X_RADIUS);\n const yRadius = getDefaultSpacing(entity, DefaultSpacingKey.ROUNDED_LINE_Y_RADIUS);\n\n const renderLine = (line: FlowTransitionLine, index: number) => {\n const { renderData } = data;\n const { isVertical } = data.entity;\n const { lineActivated } = renderData || {};\n\n const draggingLineHide =\n (line.type === FlowTransitionLineEnum.DRAGGING_LINE || line.isDraggingLine) &&\n !dragService.isDroppableBranch(data.entity, line.side);\n\n const draggingLineActivated =\n (line.type === FlowTransitionLineEnum.DRAGGING_LINE || line.isDraggingLine) &&\n data.entity?.id === dragService.dropNodeId &&\n line.side === dragService.labelSide;\n\n switch (line.type) {\n case FlowTransitionLineEnum.STRAIGHT_LINE:\n return h(StraightLine, {\n key: `${data.entity.id}_${index}`,\n lineId: data.entity.id,\n activated: lineActivated,\n ...line,\n });\n\n case FlowTransitionLineEnum.DIVERGE_LINE:\n case FlowTransitionLineEnum.DRAGGING_LINE:\n case FlowTransitionLineEnum.MERGE_LINE:\n case FlowTransitionLineEnum.ROUNDED_LINE:\n return h(RoundedTurningLine, {\n key: `${data.entity.id}_${index}`,\n lineId: data.entity.id,\n isHorizontal: !isVertical,\n activated: lineActivated || draggingLineActivated,\n radius,\n ...line,\n xRadius,\n yRadius,\n hide: draggingLineHide,\n });\n\n case FlowTransitionLineEnum.CUSTOM_LINE:\n return h(CustomLine, {\n key: `${data.entity.id}_${index}`,\n lineId: data.entity.id,\n ...line,\n rendererRegistry,\n });\n\n default:\n break;\n }\n\n return undefined;\n };\n lines.forEach((line, index) => {\n const bounds = Rectangle.createRectangleWithTwoPoints(line.from, line.to).pad(10);\n if (props.isViewportVisible(bounds)) {\n const vnode = renderLine(line, index);\n if (vnode) linesSave.push(vnode);\n }\n });\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, type VNode } from 'vue';\nimport { groupBy, throttle } from 'lodash-es';\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowDocumentTransformerEntity,\n FlowNodeEntity,\n FlowNodeTransitionData,\n FlowRendererStateEntity,\n FlowDragService,\n} from '@flowgram-vue/document';\nimport { Layer, observeEntity, observeEntityDatas, PlaygroundContainerFactory } from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport { FlowRendererRegistry } from '../flow-renderer-registry';\nimport { createLines } from '../components/LinesRenderer';\n\n@injectable()\nexport class FlowLinesLayer extends Layer {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @inject(FlowDragService)\n protected readonly dragService: FlowDragService;\n\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n node = domUtils.createDivWithClass('gedit-flow-lines-layer');\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n @observeEntity(FlowRendererStateEntity)\n readonly flowRenderState: FlowRendererStateEntity;\n\n /**\n * 监听 transition 变化\n */\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransitionData)\n _transitions: FlowNodeTransitionData[];\n\n get transitions(): FlowNodeTransitionData[] {\n return this.document.getRenderDatas<FlowNodeTransitionData>(FlowNodeTransitionData);\n }\n\n /**\n * 可视区域变化\n */\n onViewportChange: ReturnType<typeof throttle> = throttle(() => {\n this.render();\n }, 100);\n\n onZoom() {\n const svgContainer = this.node!.querySelector('svg.flow-lines-container')!;\n svgContainer?.setAttribute?.('viewBox', this.viewBox);\n }\n\n onReady() {\n this.node.style.zIndex = '1';\n }\n\n get viewBox(): string {\n const ratio = 1000 / this.config.finalScale;\n return `0 0 ${ratio} ${ratio}`;\n }\n\n render() {\n const allLines: VNode[] = [];\n const isViewportVisible = this.config.isViewportVisible.bind(this.config);\n if (this.documentTransformer.loading) return null;\n this.documentTransformer.refresh();\n\n this.transitions.forEach((transition) => {\n createLines({\n data: transition,\n rendererRegistry: this.rendererRegistry,\n isViewportVisible,\n linesSave: allLines,\n dragService: this.dragService,\n });\n });\n\n const { activateLines = [], normalLines = [] } = groupBy(allLines, (line) =>\n line.props?.activated ? 'activateLines' : 'normalLines'\n );\n const resultLines = [...normalLines, ...activateLines];\n\n return wrapLayerRender(\n this.playgroundContainer,\n h(\n 'svg',\n {\n class: 'flow-lines-container',\n width: '1000',\n height: '1000',\n overflow: 'visible',\n viewBox: this.viewBox,\n xmlns: 'http://www.w3.org/2000/svg',\n },\n resultLines\n )\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, ref } from 'vue';\nimport type { Component, CSSProperties } from 'vue';\nimport {\n type CollapseProps,\n FlowNodeRenderData,\n type FlowNodeTransitionData,\n} from '@flowgram-vue/document';\n\nimport { FlowRendererKey, type FlowRendererRegistry } from '../flow-renderer-registry';\nimport { getTransitionLabelHoverHeight, getTransitionLabelHoverWidth } from './utils';\n\ninterface PropsType extends Partial<CollapseProps> {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n hoverHeight?: number;\n hoverWidth?: number;\n wrapperStyle?: CSSProperties;\n [key: string]: unknown;\n}\n\nconst Collapse = defineComponent({\n name: 'Collapse',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const hoverActivated = ref(false);\n\n return () => {\n const props = attrs as unknown as PropsType;\n const {\n data,\n rendererRegistry,\n forceVisible,\n hoverHeight = getTransitionLabelHoverHeight(data),\n hoverWidth = getTransitionLabelHoverWidth(data),\n wrapperStyle,\n ...restProps\n } = props;\n const { activateNode } = restProps;\n const activateData = activateNode?.getData(FlowNodeRenderData);\n\n const handleMouseEnter = () => {\n hoverActivated.value = true;\n activateData?.toggleMouseEnter();\n };\n const handleMouseLeave = () => {\n hoverActivated.value = false;\n activateData?.toggleMouseLeave();\n };\n\n const collapseOpener = rendererRegistry.getRendererComponent(FlowRendererKey.COLLAPSE);\n const node = data.entity;\n const child = h(collapseOpener.renderer as Component, {\n node,\n collapseNode: node,\n ...restProps,\n hoverActivated: hoverActivated.value,\n } as CollapseProps);\n const isChildVisible =\n data.collapsed || activateData?.hovered || hoverActivated.value || forceVisible;\n\n return h(\n 'div',\n {\n class: 'flow-canvas-collapse',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n style: {\n width: `${hoverWidth}px`,\n height: `${hoverHeight}px`,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n ...wrapperStyle,\n },\n },\n [isChildVisible ? child : null]\n );\n };\n },\n});\n\nexport default Collapse;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, ref } from 'vue';\nimport type { Component } from 'vue';\nimport {\n type AdderProps,\n type FlowNodeTransitionData,\n type FlowNodeEntity,\n FlowDragService,\n} from '@flowgram-vue/document';\nimport { useService } from '@flowgram-vue/core';\n\nimport { FlowRendererKey, type FlowRendererRegistry } from '../flow-renderer-registry';\nimport { getTransitionLabelHoverHeight, getTransitionLabelHoverWidth } from './utils';\n\ninterface PropsType {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n hoverWidth?: number;\n hoverHeight?: number;\n [key: string]: unknown;\n}\n\nexport const getFlowRenderKey = (\n node: FlowNodeEntity,\n { dragService }: { dragService?: FlowDragService }\n) => {\n if (dragService && dragService.dragging && dragService.isDroppableNode(node)) {\n if (dragService.dropNodeId === node.id) {\n return FlowRendererKey.DRAG_HIGHLIGHT_ADDER;\n }\n return FlowRendererKey.DRAGGABLE_ADDER;\n }\n\n return FlowRendererKey.ADDER;\n};\n\nconst Adder = defineComponent({\n name: 'Adder',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const props = attrs as unknown as PropsType;\n const hoverActivated = ref(false);\n const dragService = useService<FlowDragService>(FlowDragService);\n\n const handleMouseEnter = () => {\n hoverActivated.value = true;\n };\n const handleMouseLeave = () => {\n hoverActivated.value = false;\n };\n\n return () => {\n const {\n data,\n rendererRegistry,\n hoverHeight = getTransitionLabelHoverHeight(data),\n hoverWidth = getTransitionLabelHoverWidth(data),\n ...restProps\n } = props;\n const node = data.entity;\n const flowRenderKey = getFlowRenderKey(node, { dragService });\n const adder = rendererRegistry.getRendererComponent(flowRenderKey);\n const from = node;\n const to = data.entity.document.renderTree.getOriginInfo(node).next;\n const renderTo = node.next;\n const child = h(adder.renderer as Component, {\n node,\n from,\n to,\n renderTo,\n hoverActivated: hoverActivated.value,\n setHoverActivated: (v: boolean) => {\n hoverActivated.value = v;\n },\n hoverWidth,\n hoverHeight,\n ...restProps,\n } as AdderProps);\n\n return h(\n 'div',\n {\n class: 'flow-canvas-adder',\n 'data-testid': 'sdk.flowcanvas.line.adder',\n 'data-from': from.id,\n 'data-to': to?.id ?? '',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n style: {\n width: `${hoverWidth}px`,\n height: `${hoverHeight}px`,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n },\n [child]\n );\n };\n },\n});\n\nexport default Adder;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, ref } from 'vue';\nimport {\n type CollapseAdderProps,\n FlowNodeRenderData,\n type FlowNodeTransitionData,\n} from '@flowgram-vue/document';\n\nimport { type FlowRendererRegistry } from '../flow-renderer-registry';\nimport Collapse from './Collapse';\nimport Adder from './Adder';\n\ninterface PropsType extends Partial<CollapseAdderProps> {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n [key: string]: unknown;\n}\n\nconst CollapseAdder = defineComponent({\n name: 'CollapseAdder',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const hoverActivated = ref(false);\n const handleMouseEnter = () => {\n hoverActivated.value = true;\n };\n const handleMouseLeave = () => {\n hoverActivated.value = false;\n };\n\n return () => {\n const props = attrs as unknown as PropsType;\n const { data, activateNode } = props;\n const activateData = activateNode?.getData(FlowNodeRenderData);\n const isVertical = activateNode?.isVertical;\n const activated = activateData?.hovered || hoverActivated.value;\n\n if (isVertical) {\n return h(\n 'div',\n {\n class: 'flow-canvas-collapse-adder',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n },\n [\n activated || data.collapsed\n ? h(Collapse, {\n ...props,\n forceVisible: true,\n wrapperStyle: { alignItems: 'flex-end' },\n hoverHeight: 20,\n })\n : null,\n !data.collapsed\n ? h(Adder, { ...props, hoverHeight: activated ? 20 : 40, hoverActivated: activated })\n : null,\n ]\n );\n }\n\n return h(\n 'div',\n {\n class: 'flow-canvas-collapse-adder',\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n style: {\n display: data.collapsed ? 'block' : 'flex',\n },\n },\n [\n activated || data.collapsed\n ? h(Collapse, {\n ...props,\n forceVisible: true,\n wrapperStyle: { justifyContent: 'flex-end' },\n hoverWidth: 20,\n })\n : null,\n !data.collapsed\n ? h(Adder, { ...props, hoverWidth: activated ? 20 : 40, hoverActivated: activated })\n : null,\n ]\n );\n };\n },\n});\n\nexport default CollapseAdder;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\nimport type { Component } from 'vue';\nimport {\n type AdderProps,\n type FlowNodeTransitionData,\n type LABEL_SIDE_TYPE,\n FlowDragService,\n} from '@flowgram-vue/document';\nimport { FlowNodeEntity } from '@flowgram-vue/document';\nimport { useService } from '@flowgram-vue/core';\n\nimport { FlowRendererKey, type FlowRendererRegistry } from '../flow-renderer-registry';\n\ninterface PropsType {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n hoverHeight?: number;\n side?: LABEL_SIDE_TYPE;\n [key: string]: unknown;\n}\n\nconst getFlowRenderKey = (\n node: FlowNodeEntity,\n { dragService, side }: { dragService: FlowDragService; side?: LABEL_SIDE_TYPE }\n) => {\n if (\n dragService.isDragBranch &&\n side &&\n dragService.labelSide === side &&\n dragService.isDroppableBranch(node, side)\n ) {\n if (dragService.dropNodeId === node.id) {\n return FlowRendererKey.DRAG_BRANCH_HIGHLIGHT_ADDER;\n }\n return FlowRendererKey.DRAGGABLE_ADDER;\n }\n\n return '';\n};\n\nconst BranchDraggableRenderer = defineComponent({\n name: 'BranchDraggableRenderer',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const dragService = useService<FlowDragService>(FlowDragService);\n\n return () => {\n const props = attrs as unknown as PropsType;\n const { data, rendererRegistry, side, ...restProps } = props;\n const node = data.entity;\n const flowRenderKey = getFlowRenderKey(node, { side, dragService });\n if (!flowRenderKey) {\n return null;\n }\n const adder = rendererRegistry.getRendererComponent(flowRenderKey);\n const from = node;\n const to = data.entity.document.renderTree.getOriginInfo(node).next;\n const renderTo = node.next;\n const child = h(adder.renderer as Component, {\n node,\n from,\n to,\n renderTo,\n ...restProps,\n } as AdderProps);\n\n return h('div', { class: 'flow-canvas-branch-draggable-adder' }, [child]);\n };\n },\n});\n\nexport default BranchDraggableRenderer;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, type CSSProperties, type Component, type VNode } from 'vue';\nimport { type IPoint, Rectangle } from '@flowgram-vue/utils';\nimport {\n type CustomLabelProps,\n type FlowNodeTransitionData,\n type FlowTransitionLabel,\n FlowTransitionLabelEnum,\n} from '@flowgram-vue/document';\n\nimport { type FlowRendererRegistry } from '../flow-renderer-registry';\nimport CollapseAdder from './CollapseAdder';\nimport Collapse from './Collapse';\nimport BranchDraggableRenderer from './BranchDraggableRenderer';\nimport Adder from './Adder';\n\nexport interface LabelOpts {\n data: FlowNodeTransitionData;\n rendererRegistry: FlowRendererRegistry;\n isViewportVisible: (bounds: Rectangle) => boolean;\n labelsSave: VNode[];\n getLabelColor: (activated?: boolean) => string;\n}\n\nconst TEXT_LABEL_STYLE: CSSProperties = {\n fontSize: '12px',\n color: '#8F959E',\n textAlign: 'center',\n whiteSpace: 'nowrap',\n backgroundColor: 'var(--g-editor-background)',\n lineHeight: '20px',\n};\n\nconst LABEL_MAX_WIDTH = 150;\nconst LABEL_MAX_HEIGHT = 60;\n\nfunction getLabelBounds(offset: IPoint) {\n return new Rectangle(\n offset.x - LABEL_MAX_WIDTH / 2,\n offset.y - LABEL_MAX_HEIGHT / 2,\n LABEL_MAX_WIDTH,\n LABEL_MAX_HEIGHT\n );\n}\n\nexport function createLabels(labelProps: LabelOpts): void {\n const { data, rendererRegistry, labelsSave, getLabelColor } = labelProps;\n const { labels, renderData } = data || {};\n const { activated } = renderData || {};\n\n const renderLabel = (label: FlowTransitionLabel, index: number) => {\n const { offset, renderKey, props, rotate, origin, type } = label || {};\n const offsetX = offset.x;\n const offsetY = offset.y;\n\n let child = null as VNode | string | null;\n switch (type) {\n case FlowTransitionLabelEnum.BRANCH_DRAGGING_LABEL:\n child = h(BranchDraggableRenderer, {\n labelId: label.labelId || labelProps.data.entity.id,\n rendererRegistry,\n data,\n ...props,\n });\n break;\n case FlowTransitionLabelEnum.ADDER_LABEL:\n child = h(Adder, {\n labelId: label.labelId || labelProps.data.entity.id,\n rendererRegistry,\n data,\n ...props,\n });\n break;\n\n case FlowTransitionLabelEnum.COLLAPSE_LABEL:\n child = h(Collapse, {\n labelId: label.labelId || labelProps.data.entity.id,\n rendererRegistry,\n data,\n ...props,\n });\n break;\n\n case FlowTransitionLabelEnum.COLLAPSE_ADDER_LABEL:\n child = h(CollapseAdder, {\n labelId: label.labelId || labelProps.data.entity.id,\n rendererRegistry,\n data,\n ...props,\n });\n break;\n\n case FlowTransitionLabelEnum.TEXT_LABEL:\n if (!renderKey) {\n return null;\n }\n const text = rendererRegistry.getText(renderKey) || renderKey;\n child = h(\n 'div',\n {\n 'data-label-id': label.labelId || labelProps.data.entity.id,\n style: {\n ...TEXT_LABEL_STYLE,\n ...props?.style,\n color: getLabelColor(activated),\n transform: rotate ? `rotate(${rotate})` : undefined,\n },\n },\n text\n );\n break;\n\n case FlowTransitionLabelEnum.CUSTOM_LABEL:\n if (!renderKey) {\n return null;\n }\n try {\n const renderer = rendererRegistry.getRendererComponent(renderKey);\n child = h(renderer.renderer as Component, {\n node: data.entity,\n labelId: label.labelId || labelProps.data.entity.id,\n ...props,\n } as CustomLabelProps);\n } catch (err) {\n console.error(err);\n child = renderKey;\n }\n break;\n default:\n break;\n }\n\n const originX = typeof origin?.[0] === 'number' ? origin?.[0] : 0.5;\n const originY = typeof origin?.[1] === 'number' ? origin?.[1] : 0.5;\n\n return h(\n 'div',\n {\n key: `${data.entity.id}${index}`,\n 'data-label-id': label.labelId || labelProps.data.entity.id,\n style: {\n position: 'absolute',\n left: `${offsetX}px`,\n top: `${offsetY}px`,\n transform: `translate(-${originX * 100}%, -${originY * 100}%)`,\n },\n },\n [child]\n );\n };\n\n labels.forEach((label, index) => {\n if (labelProps.isViewportVisible(getLabelBounds(label.offset))) {\n const vnode = renderLabel(label, index);\n if (vnode) labelsSave.push(vnode);\n }\n });\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Fragment, h, type VNode } from 'vue';\nimport { throttle } from 'lodash-es';\nimport { inject, injectable, optional } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowDocumentOptions,\n FlowDocumentTransformerEntity,\n FlowNodeEntity,\n FlowNodeTransitionData,\n FlowRendererStateEntity,\n} from '@flowgram-vue/document';\nimport { Layer, observeEntity, observeEntityDatas, PlaygroundContainerFactory } from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport { getBaseColor } from '../hooks/use-base-color';\nimport { FlowRendererRegistry } from '../flow-renderer-registry';\nimport { createLabels } from '../components/LabelsRenderer';\n\n@injectable()\nexport class FlowLabelsLayer extends Layer {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n @optional()\n @inject(FlowDocumentOptions)\n readonly documentOptions?: FlowDocumentOptions;\n\n node = domUtils.createDivWithClass('gedit-flow-labels-layer');\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n @observeEntity(FlowRendererStateEntity)\n readonly flowRenderState: FlowRendererStateEntity;\n\n /**\n * 监听 transition 变化\n */\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransitionData)\n _transitions: FlowNodeTransitionData[];\n\n get transitions(): FlowNodeTransitionData[] {\n return this.document.getRenderDatas<FlowNodeTransitionData>(FlowNodeTransitionData);\n }\n\n /**\n * 监听缩放,目前采用整体缩放\n * @param scale\n */\n onZoom(scale: number) {\n this.node!.style.transform = `scale(${scale})`;\n }\n\n /**\n * 可视区域变化\n */\n onViewportChange: ReturnType<typeof throttle> = throttle(() => {\n this.render();\n }, 100);\n\n onReady() {\n // 图层顺序调整:节点 > label > 线条\n // 节点 z-index: 10\n this.node.style.zIndex = '9';\n }\n\n /**\n * 监听readonly和 disabled 状态 并刷新layer, 并刷新\n */\n onReadonlyOrDisabledChange() {\n this.render();\n }\n\n render() {\n const labels: VNode[] = [];\n if (this.documentTransformer?.loading) return null;\n this.documentTransformer?.refresh?.();\n const { baseActivatedColor, baseColor } = getBaseColor(this.documentOptions);\n const isViewportVisible = this.config.isViewportVisible.bind(this.config);\n this.transitions.forEach((transition) => {\n createLabels({\n data: transition,\n rendererRegistry: this.rendererRegistry,\n isViewportVisible,\n labelsSave: labels,\n getLabelColor: (activated) => (activated ? baseActivatedColor : baseColor),\n });\n });\n return wrapLayerRender(this.playgroundContainer, h(Fragment, null, labels));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Rectangle } from '@flowgram-vue/utils';\nimport { type PlaygroundConfigEntity } from '@flowgram-vue/core';\n\nexport interface ScrollData {\n scrollX: number;\n scrollY: number;\n}\n\n// viewport 缩小 30 像素\nconst SCROLL_LIMIT_PADDING = -120;\n\nexport function getScrollViewport(\n scrollData: ScrollData,\n config: PlaygroundConfigEntity\n): Rectangle {\n const scale = config.finalScale;\n return new Rectangle(\n scrollData.scrollX / scale,\n scrollData.scrollY / scale,\n config.config.width / scale,\n config.config.height / scale\n ).pad(SCROLL_LIMIT_PADDING / scale, SCROLL_LIMIT_PADDING / scale);\n}\n\n/**\n * 限制滚动\n */\nexport function scrollLimit(\n scroll: ScrollData,\n boundsList: Rectangle[],\n config: PlaygroundConfigEntity,\n initScroll: () => ScrollData\n): ScrollData {\n scroll = { ...scroll };\n const configData = config.config;\n const oldScroll = { scrollX: configData.scrollX, scrollY: configData.scrollY };\n // 画布 size 还没初始化滚动不限制\n if (boundsList.length === 0 || configData.width === 0 || configData.height === 0) return scroll;\n const viewport = getScrollViewport(scroll, config);\n const isVisible = boundsList.find((bounds) => Rectangle.isViewportVisible(bounds, viewport));\n if (!isVisible) {\n const oldViewport = getScrollViewport(oldScroll, config);\n const isOldVisible = boundsList.find((bounds) =>\n Rectangle.isViewportVisible(bounds, oldViewport)\n );\n // 如果之前也是不可见就不阻止\n if (!isOldVisible) {\n return initScroll();\n }\n return oldScroll;\n }\n return scroll;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * 滚动条点击事件监听\n */\nexport const ScrollBarEvents = Symbol('ScrollBarEvents');\n\nexport interface ScrollBarEvents {\n dragStart: () => void;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowDocumentTransformerEntity,\n FlowNodeEntity,\n FlowNodeTransformData,\n} from '@flowgram-vue/document';\nimport { Layer, observeEntity, observeEntityDatas } from '@flowgram-vue/core';\n\nimport { getScrollViewport } from '../utils';\n\nlet rgbTimes = 0;\n\nfunction randomColor(percent: number): string {\n const max = Math.min((percent / 10) * 255, 255);\n rgbTimes += 1;\n // rgb 轮询就可以错开颜色\n const rgb = rgbTimes % 3;\n const random = () => Math.floor(Math.random() * max);\n return `rgb(${rgb === 0 ? random() : 0}, ${rgb === 1 ? random() : 0}, ${\n rgb === 2 ? random() : 0\n })`;\n}\n\n/**\n * 调试用,会绘出所有节点的边界\n */\n@injectable()\nexport class FlowDebugLayer extends Layer {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData) _transforms: FlowNodeTransformData[];\n\n get transforms(): FlowNodeTransformData[] {\n return this.document.getRenderDatas<FlowNodeTransformData>(FlowNodeTransformData);\n }\n\n node = document.createElement('div') as HTMLElement;\n\n viewport = domUtils.createDivWithClass('gedit-flow-debug-bounds');\n\n boundsNodes = domUtils.createDivWithClass('gedit-flow-debug-bounds');\n\n pointsNodes = domUtils.createDivWithClass('gedit-flow-debug-points');\n\n versionNodes = domUtils.createDivWithClass('gedit-flow-debug-versions gedit-hidden');\n\n /**\n * ?debug=xxxx, 则返回 xxxx\n */\n filterKey = window.location.search.match(/debug=([^&]+)/)?.[1] || '';\n\n protected originLine = document.createElement('div') as HTMLDivElement;\n\n domCache = new WeakMap<\n FlowNodeTransformData,\n {\n color: string;\n bbox: HTMLDivElement;\n version: HTMLDivElement;\n input: HTMLDivElement;\n output: HTMLDivElement;\n }\n >();\n\n onReady() {\n this.node!.style.zIndex = '20';\n domUtils.setStyle(this.originLine, {\n position: 'absolute',\n width: 1,\n height: '100%',\n left: this.pipelineNode.style.left,\n top: 0,\n borderLeft: '1px dashed rgba(255, 0, 0, 0.5)',\n });\n this.pipelineNode.parentElement!.appendChild(this.originLine);\n this.node.appendChild(this.viewport);\n this.node.appendChild(this.versionNodes);\n this.node.appendChild(this.boundsNodes);\n this.node.appendChild(this.pointsNodes);\n this.renderScrollViewportBounds();\n }\n\n onScroll() {\n this.originLine.style.left = this.pipelineNode.style.left;\n this.renderScrollViewportBounds();\n }\n\n onResize() {\n this.renderScrollViewportBounds();\n }\n\n onZoom(scale: number) {\n this.node!.style.transform = `scale(${scale})`;\n this.renderScrollViewportBounds();\n }\n\n createBounds(transform: FlowNodeTransformData, color: string, depth: number): void {\n // 根据 debug=xxxx 进行匹配过滤\n if (this.filterKey && transform.key.indexOf(this.filterKey) === -1) return;\n let cache = this.domCache.get(transform)!;\n const { bounds, inputPoint, outputPoint } = transform;\n if (!cache) {\n const bbox = domUtils.createDivWithClass('') as HTMLDivElement;\n const input = domUtils.createDivWithClass('') as HTMLDivElement;\n const output = domUtils.createDivWithClass('') as HTMLDivElement;\n const version = domUtils.createDivWithClass('') as HTMLDivElement;\n bbox.title = transform.key;\n input.title = transform.key + '(input)';\n output.title = transform.key + '(output)';\n version.title = transform.key;\n this.boundsNodes.appendChild(bbox);\n this.pointsNodes.appendChild(input);\n this.pointsNodes.appendChild(output);\n this.versionNodes.appendChild(version);\n transform.onDispose(() => {\n bbox.remove();\n input.remove();\n output.remove();\n });\n cache = { bbox, input, output, version, color };\n this.domCache.set(transform, cache);\n }\n domUtils.setStyle(cache.version, {\n position: 'absolute',\n marginLeft: '-9px',\n marginTop: '-10px',\n borderRadius: 12,\n background: '#f54a45',\n padding: 4,\n color: 'navajowhite',\n display: transform.renderState.hidden ? 'none' : 'block',\n zIndex: depth + 1000,\n left: bounds.center.x,\n top: bounds.center.y,\n });\n cache.version.innerHTML = transform.version.toString();\n domUtils.setStyle(cache.input, {\n position: 'absolute',\n width: 10,\n height: 10,\n marginLeft: -5,\n marginTop: -5,\n borderRadius: 5,\n left: inputPoint.x,\n top: inputPoint.y,\n opacity: 0.4,\n zIndex: depth,\n backgroundColor: cache.color,\n whiteSpace: 'nowrap',\n overflow: 'visible',\n });\n cache.input.innerHTML = `${inputPoint.x},${inputPoint.y}`;\n domUtils.setStyle(cache.output, {\n position: 'absolute',\n width: 10,\n height: 10,\n marginLeft: -5,\n marginTop: -5,\n borderRadius: 5,\n left: outputPoint.x,\n top: outputPoint.y,\n opacity: 0.4,\n zIndex: depth,\n backgroundColor: cache.color,\n whiteSpace: 'nowrap',\n overflow: 'visible',\n });\n cache.output.innerHTML = `${outputPoint.x},${outputPoint.y}`;\n domUtils.setStyle(cache.bbox, {\n position: 'absolute',\n width: bounds.width,\n height: bounds.height,\n left: bounds.left,\n top: bounds.top,\n opacity: `${depth / 30}`,\n backgroundColor: cache.color,\n });\n }\n\n /**\n * 显示 viewport 可滚动区域\n */\n renderScrollViewportBounds() {\n const viewportBounds = getScrollViewport(\n {\n scrollX: this.config.config.scrollX,\n scrollY: this.config.config.scrollY,\n },\n this.config\n );\n domUtils.setStyle(this.viewport, {\n position: 'absolute',\n width: viewportBounds.width - 2,\n height: viewportBounds.height - 2,\n left: viewportBounds.left + 1,\n top: viewportBounds.top + 1,\n border: '1px solid rgba(200, 200, 255, 0.5)',\n });\n }\n\n autorun() {\n if (this.documentTransformer.loading) return;\n this.documentTransformer.refresh();\n // let lastDepth = 0\n let color = randomColor(0);\n this.document.traverse((entity, depth) => {\n const transform = entity.getData<FlowNodeTransformData>(FlowNodeTransformData)!;\n // if (lastDepth !== depth) {\n // // 层级变化则更新颜色\n // }\n color = randomColor(depth);\n this.createBounds(transform, color, depth);\n // lastDepth = depth\n });\n this.renderScrollViewportBounds();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable, optional } from 'inversify';\nimport { FlowDocument, FlowNodeTransformData } from '@flowgram-vue/document';\nimport {\n Layer,\n observeEntity,\n PlaygroundConfigEntity,\n PlaygroundDrag,\n} from '@flowgram-vue/core';\nimport { domUtils, Rectangle } from '@flowgram-vue/utils';\n// import {\n// FlowDocument,\n// FlowDocumentTransformerEntity,\n// FlowNodeTransformData,\n// } from '@flowgram-vue/document'\n\nimport { ScrollBarEvents } from '../utils/scroll-bar-events';\nimport { getScrollViewport } from '../utils';\n\n// 中间区域边框宽度\nconst BORDER_WIDTH = 2;\n\n// 右下角预留的 offset\nconst BLOCK_OFFSET = 11;\n\n// 滚动条样式宽\nconst SCROLL_BAR_WIDTH = '7px';\n\n// 滚动条显示状态\nenum ScrollBarVisibility {\n Show = 'show',\n Hidden = 'hidden',\n}\n\nexport interface ScrollBarOptions {\n /**\n * 显示滚动条的时机,可选常驻或滚动时显示\n */\n showScrollBars: 'whenScrolling' | 'always';\n getBounds(): Rectangle;\n}\n\n/**\n * 渲染滚动条 layer\n */\n@injectable()\nexport class FlowScrollBarLayer extends Layer<ScrollBarOptions> {\n @optional()\n @inject(ScrollBarEvents)\n readonly events?: ScrollBarEvents;\n\n @inject(FlowDocument) @optional() flowDocument?: FlowDocument;\n\n @observeEntity(PlaygroundConfigEntity)\n protected playgroundConfigEntity: PlaygroundConfigEntity;\n\n // @observeEntity(FlowDocumentTransformerEntity) readonly documentTransformer: FlowDocumentTransformerEntity\n\n // 右滚动区域\n readonly rightScrollBar = domUtils.createDivWithClass('gedit-playground-scroll-right');\n\n // 右滚动条\n readonly rightScrollBarBlock = domUtils.createDivWithClass('gedit-playground-scroll-right-block');\n\n // 底滚动区域\n readonly bottomScrollBar = domUtils.createDivWithClass('gedit-playground-scroll-bottom');\n\n // 底滚动条\n readonly bottomScrollBarBlock = domUtils.createDivWithClass(\n 'gedit-playground-scroll-bottom-block',\n );\n\n // 最左边的位置\n private mostLeft: number;\n\n // 最右边的位置\n private mostRight: number;\n\n // 最上面的位置\n private mostTop: number;\n\n // 最下面的位置\n private mostBottom: number;\n\n // 视区宽度\n private viewportWidth: number;\n\n // 视区高度\n private viewportHeight: number;\n\n // 元素宽高\n private width: number;\n\n private height: number;\n\n // 底部滚动条宽度\n private scrollBottomWidth: number;\n\n // 右侧滚动条高度\n private scrollRightHeight: number;\n\n // 缩放比\n private scale: number;\n\n // 总滚动距离\n private sum = 0;\n\n // 初始 x 轴滚动距离\n private initialScrollX = 0;\n\n // 初始 y 轴滚动距离\n private initialScrollY = 0;\n\n // 隐藏滚动条的时延\n private hideTimeout: number | undefined;\n\n // 浏览器视图宽度\n get clientViewportWidth(): number {\n return this.viewportWidth * this.scale - BLOCK_OFFSET;\n }\n\n // 浏览器视图高度\n get clientViewportHeight(): number {\n return this.viewportHeight * this.scale - BLOCK_OFFSET;\n }\n\n // 视图的完整宽度\n get viewportFullWidth(): number {\n return this.mostLeft - this.mostRight;\n }\n\n // 视图的完整高度\n get viewportFullHeight(): number {\n return this.mostTop - this.mostBottom;\n }\n\n // 视图的可移动宽度\n get viewportMoveWidth(): number {\n return this.mostLeft - this.mostRight + this.width;\n }\n\n // 视图的可移动高度\n get viewportMoveHeight(): number {\n return this.mostTop - this.mostBottom + this.height;\n }\n\n getToLeft(scrollX: number): number {\n return ((scrollX - this.mostRight) / this.viewportMoveWidth) * this.clientViewportWidth;\n }\n\n getToTop(scrollY: number): number {\n return ((scrollY - this.mostBottom) / this.viewportMoveHeight) * this.clientViewportHeight;\n }\n\n clickRightScrollBar(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n const ratio = 1 - (e?.y || 0) / this.clientViewportHeight;\n const scrollY = (this.mostTop - this.viewportFullHeight * ratio) * this.scale;\n\n // 滚动到指定位置\n this.playgroundConfigEntity.scroll(\n {\n scrollY,\n },\n false,\n );\n }\n\n clickBottomScrollBar(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n const ratio = 1 - (e?.x || 0) / this.clientViewportWidth;\n const scrollX = (this.mostLeft - this.viewportFullWidth * ratio) * this.scale;\n\n // 滚动到指定位置\n this.playgroundConfigEntity.scroll(\n {\n scrollX,\n },\n false,\n );\n }\n\n onBoardingToast() {\n // onBoarding 逻辑,滚动条指示优化,弹出 toast\n this.events?.dragStart();\n }\n\n protected bottomGrabDragger = new PlaygroundDrag({\n onDragStart: e => {\n this.config.updateCursor('grabbing');\n this.sum = 0;\n this.initialScrollX = this.config.getViewport().x;\n this.onBoardingToast();\n },\n onDrag: e => {\n this.sum += e.movingDelta.x;\n this.playgroundConfigEntity.scroll(\n {\n scrollX:\n (this.initialScrollX +\n (this.sum * this.viewportFullWidth) /\n (this.clientViewportWidth - this.scrollBottomWidth)) *\n this.scale,\n },\n false,\n );\n },\n onDragEnd: e => {\n this.config.updateCursor('default');\n },\n });\n\n protected rightGrabDragger = new PlaygroundDrag({\n onDragStart: e => {\n this.config.updateCursor('grabbing');\n this.sum = 0;\n this.initialScrollY = this.config.getViewport().y;\n this.onBoardingToast();\n },\n onDrag: e => {\n this.sum += e.movingDelta.y;\n this.playgroundConfigEntity.scroll(\n {\n scrollY:\n (this.initialScrollY +\n (this.sum * this.viewportFullHeight) /\n (this.clientViewportHeight - this.scrollRightHeight)) *\n this.scale,\n },\n false,\n );\n },\n onDragEnd: e => {\n this.config.updateCursor('default');\n },\n });\n\n protected changeScrollBarVisibility(scrollBar: HTMLDivElement, status: ScrollBarVisibility) {\n const addClassName =\n status === ScrollBarVisibility.Show\n ? 'gedit-playground-scroll-show'\n : 'gedit-playground-scroll-hidden';\n const delClassName =\n status === ScrollBarVisibility.Show\n ? 'gedit-playground-scroll-hidden'\n : 'gedit-playground-scroll-show';\n domUtils.addClass(scrollBar, addClassName);\n domUtils.delClass(scrollBar, delClassName);\n }\n\n onReady() {\n if (!this.options.getBounds) {\n this.options = {\n getBounds: () => {\n const document = this.flowDocument;\n if (!document) return Rectangle.EMPTY;\n document.transformer.refresh();\n return document.root.getData(FlowNodeTransformData)!.bounds;\n },\n showScrollBars: 'whenScrolling',\n };\n }\n this.pipelineNode.parentNode!.appendChild(this.rightScrollBar);\n this.pipelineNode.parentNode!.appendChild(this.rightScrollBarBlock);\n this.pipelineNode.parentNode!.appendChild(this.bottomScrollBar);\n this.pipelineNode.parentNode!.appendChild(this.bottomScrollBarBlock);\n // 模拟滚动条点击时的滚动\n this.rightScrollBar.onclick = this.clickRightScrollBar.bind(this);\n this.bottomScrollBar.onclick = this.clickBottomScrollBar.bind(this);\n\n // 滚动时才显示滚动条 则要监听鼠标事件 hover 的时候也要显示\n if (this.options.showScrollBars === 'whenScrolling') {\n this.rightScrollBar.addEventListener('mouseenter', (e: MouseEvent) => {\n this.changeScrollBarVisibility(this.rightScrollBarBlock, ScrollBarVisibility.Show);\n });\n this.rightScrollBar.addEventListener('mouseleave', (e: MouseEvent) => {\n this.changeScrollBarVisibility(this.rightScrollBarBlock, ScrollBarVisibility.Hidden);\n });\n this.bottomScrollBar.addEventListener('mouseenter', (e: MouseEvent) => {\n this.changeScrollBarVisibility(this.bottomScrollBarBlock, ScrollBarVisibility.Show);\n });\n this.bottomScrollBar.addEventListener('mouseleave', (e: MouseEvent) => {\n this.changeScrollBarVisibility(this.bottomScrollBarBlock, ScrollBarVisibility.Hidden);\n });\n }\n\n // 监听拖拽滚动\n this.bottomScrollBarBlock.addEventListener('mousedown', (e: MouseEvent) => {\n this.bottomGrabDragger.start(e.clientX, e.clientY);\n e.stopPropagation();\n });\n this.rightScrollBarBlock.addEventListener('mousedown', (e: MouseEvent) => {\n this.rightGrabDragger.start(e.clientX, e.clientY);\n e.stopPropagation();\n });\n }\n\n autorun() {\n // if (this.documentTransformer.loading) return null\n // this.documentTransformer.refresh()\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n\n // 中间活动区域宽高\n const viewportBounds = getScrollViewport(\n {\n scrollX: this.config.config.scrollX,\n scrollY: this.config.config.scrollY,\n },\n this.config,\n );\n\n // 画布视区宽高\n const viewport = this.config.getViewport();\n // 计算视区的时候预留 11px,防止右下角滚动条重叠\n this.viewportWidth = viewport.width;\n this.viewportHeight = viewport.height;\n // 中间部分元素的宽高\n const rootBounds = this.options.getBounds(); // this.document.root.getData(FlowNodeTransformData)!.bounds\n this.width = rootBounds?.width || 0;\n this.height = rootBounds?.height || 0;\n // 中间部分元素的左右间距\n const paddingLeftRight = (this.viewportWidth - viewportBounds.width) / 2 - BORDER_WIDTH;\n // 中间部分元素的上下间距\n const paddingTopBottom = (this.viewportHeight - viewportBounds.height) / 2 - BORDER_WIDTH;\n\n // 画布可滚动总长度\n const canvasTotalWidth = this.width + viewportBounds.width;\n const canvasTotalHeight = this.height + viewportBounds.height;\n // 根据当前滚动距离计算 滚动条距离边界间距\n // 中间元素初始的偏移位置:\n const initialOffsetX = rootBounds.x;\n const initialOffsetY = rootBounds.y;\n // 最左边的位置\n this.mostLeft = this.width + initialOffsetX - paddingLeftRight;\n // 最右边的位置\n this.mostRight = this.mostLeft - canvasTotalWidth;\n // 最上面的位置\n this.mostTop = this.height + initialOffsetY - paddingTopBottom;\n // 最下面的位置\n this.mostBottom = this.mostTop - canvasTotalHeight;\n\n this.scale = this.config.finalScale;\n\n const calcViewportWidth = this.clientViewportWidth;\n const calcViewportHeight = this.clientViewportHeight;\n // 计算公式:\n // 可视区域 - 滚动条的长度 / 可视区域 = 可视区域 / 画布可滚动距离\n // 底部滚动条宽度\n this.scrollBottomWidth =\n calcViewportWidth -\n (calcViewportWidth * (this.mostLeft - this.mostRight)) / this.viewportMoveWidth;\n // 右侧滚动条高度\n this.scrollRightHeight =\n calcViewportHeight -\n (calcViewportHeight * (this.mostTop - this.mostBottom)) / this.viewportMoveHeight;\n\n // 计算滚动条滚动位移的距离\n // 可滚动区域:canvasTotalWidth - scrollBottomWidth\n const bottomBarToLeft = this.getToLeft(viewport.x);\n const rightBarToTop = this.getToTop(viewport.y);\n\n // 设置右侧的滚动条内的 block 样式\n domUtils.setStyle(this.rightScrollBarBlock, {\n right: 2,\n top: rightBarToTop,\n background: '#1F2329',\n zIndex: 10,\n height: this.scrollRightHeight,\n width: SCROLL_BAR_WIDTH,\n });\n // 设置底部的滚动条内的 block 样式\n domUtils.setStyle(this.bottomScrollBarBlock, {\n left: bottomBarToLeft,\n bottom: 2,\n background: '#1F2329',\n zIndex: 10,\n height: SCROLL_BAR_WIDTH,\n width: this.scrollBottomWidth,\n });\n this.changeScrollBarVisibility(this.rightScrollBarBlock, ScrollBarVisibility.Show);\n this.changeScrollBarVisibility(this.bottomScrollBarBlock, ScrollBarVisibility.Show);\n\n // 滚动时才显示滚动条\n // 定时器在 1s 后隐藏滚动条\n if (this.options.showScrollBars === 'whenScrolling') {\n this.hideTimeout = window.setTimeout(() => {\n this.changeScrollBarVisibility(this.rightScrollBarBlock, ScrollBarVisibility.Hidden);\n this.changeScrollBarVisibility(this.bottomScrollBarBlock, ScrollBarVisibility.Hidden);\n this.hideTimeout = undefined;\n }, 1000);\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, Teleport } from 'vue';\nimport type { Component } from 'vue';\nimport { inject, injectable } from 'inversify';\nimport { Rectangle, Xor } from '@flowgram-vue/utils';\nimport {\n FlowDocument,\n FlowNodeBaseType,\n FlowNodeEntity,\n FlowNodeRenderData,\n FlowNodeTransformData,\n FlowNodeTransitionData,\n FlowRendererStateEntity,\n type LABEL_SIDE_TYPE,\n FlowDragService,\n FlowNodeJSON,\n} from '@flowgram-vue/document';\nimport {\n EditorState,\n EditorStateConfigEntity,\n Layer,\n observeEntity,\n observeEntityDatas,\n PlaygroundConfigEntity,\n PlaygroundContainerFactory,\n PlaygroundDrag,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport {\n type FlowRendererComponent,\n FlowRendererKey,\n FlowRendererRegistry,\n} from '../flow-renderer-registry';\nimport { type CollisionRetType, FlowDragEntity } from '../entities/flow-drag-entity';\nimport { FlowSelectConfigEntity } from '../entities';\n\nconst DRAG_OFFSET = 10;\n\nconst DEFAULT_DRAG_OFFSET_X = 8;\nconst DEFAULT_DRAG_OFFSET_Y = 8;\n\ninterface Position {\n x: number;\n y: number;\n}\n\ntype StartDragProps = {\n dragEntities?: FlowNodeEntity[];\n} & Xor<\n {\n dragStartEntity: FlowNodeEntity;\n },\n {\n dragJSON: FlowNodeJSON;\n isBranch?: boolean;\n onCreateNode: (json: FlowNodeJSON, dropEntity: FlowNodeEntity) => Promise<FlowNodeEntity>;\n }\n>;\n\nexport interface FlowDragOptions {\n onDrop?: (opts: { dragNodes: FlowNodeEntity[]; dropNode: FlowNodeEntity }) => void;\n canDrop?: (\n opts: {\n dropNode: FlowNodeEntity;\n isBranch?: boolean;\n } & Xor<\n {\n dragNodes: FlowNodeEntity[];\n },\n {\n dragJSON: FlowNodeJSON;\n }\n >\n ) => boolean;\n}\n/**\n * 监听节点的激活状态\n */\n@injectable()\nexport class FlowDragLayer extends Layer<FlowDragOptions> {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n @inject(FlowDragService) readonly flowDragService: FlowDragService;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData) transforms: FlowNodeTransformData[];\n\n @observeEntity(EditorStateConfigEntity)\n protected editorStateConfig: EditorStateConfigEntity;\n\n @observeEntity(PlaygroundConfigEntity)\n protected playgroundConfigEntity: PlaygroundConfigEntity;\n\n @observeEntity(FlowDragEntity)\n protected flowDragConfigEntity: FlowDragEntity;\n\n @observeEntity(FlowRendererStateEntity)\n protected flowRenderStateEntity: FlowRendererStateEntity;\n\n @observeEntity(FlowSelectConfigEntity)\n protected selectConfigEntity: FlowSelectConfigEntity;\n\n private initialPosition: Position;\n\n private disableDragScroll: Boolean = false;\n\n private dragJSON?: FlowNodeJSON;\n\n private onCreateNode?: (\n json: FlowNodeJSON,\n dropEntity: FlowNodeEntity\n ) => Promise<FlowNodeEntity>;\n\n dragOffset = {\n x: DEFAULT_DRAG_OFFSET_X,\n y: DEFAULT_DRAG_OFFSET_Y,\n };\n\n get transitions(): FlowNodeTransitionData[] {\n const result: FlowNodeTransitionData[] = [];\n this.document.traverse((entity) => {\n result.push(entity.getData<FlowNodeTransitionData>(FlowNodeTransitionData)!);\n });\n return result;\n }\n\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n get dragStartEntity() {\n return this.flowRenderStateEntity.getDragStartEntity()!;\n }\n\n set dragStartEntity(entity: FlowNodeEntity | undefined) {\n this.flowRenderStateEntity.setDragStartEntity(entity);\n }\n\n get dragEntities() {\n return this.flowRenderStateEntity.getDragEntities()!;\n }\n\n set dragEntities(entities: FlowNodeEntity[]) {\n this.flowRenderStateEntity.setDragEntities(entities);\n }\n\n private dragNodeComp: FlowRendererComponent;\n\n containerRef: { current: HTMLDivElement | null } = { current: null };\n\n draggingNodeMask = document.createElement('div');\n\n protected isGrab(): boolean {\n const currentState = this.editorStateConfig.getCurrentState();\n return currentState === EditorState.STATE_GRAB;\n }\n\n setDraggingStatus(status: boolean): void {\n if (this.flowDragService.nodeDragIdsWithChildren.length) {\n this.flowDragService.nodeDragIdsWithChildren.forEach((_id) => {\n const node = this.entityManager.getEntityById(_id);\n const data = node?.getData<FlowNodeRenderData>(FlowNodeRenderData)!;\n data.dragging = status;\n });\n }\n this.flowRenderStateEntity.setDragging(status);\n }\n\n dragEnable(e: MouseEvent) {\n return (\n Math.abs(e.clientX - this.initialPosition.x) > DRAG_OFFSET ||\n Math.abs(e.clientY - this.initialPosition.y) > DRAG_OFFSET\n );\n }\n\n handleMouseMove(event: MouseEvent) {\n if ((this.dragJSON || this.dragStartEntity) && this.dragEnable(event)) {\n this.setDraggingStatus(true);\n const scale = this.playgroundConfigEntity.finalScale;\n\n if (this.containerRef.current) {\n const dragNode = this.containerRef.current.children?.[0];\n if (!dragNode) {\n return;\n }\n const clientBounds = this.playgroundConfigEntity.getClientBounds();\n const dragBlockX =\n event.clientX -\n (this.pipelineNode.offsetLeft || 0) -\n clientBounds.x -\n ((dragNode as HTMLElement).clientWidth - this.dragOffset.x) * scale;\n const dragBlockY =\n event.clientY -\n (this.pipelineNode.offsetTop || 0) -\n clientBounds.y -\n ((dragNode as HTMLElement).clientHeight - this.dragOffset.y) * scale;\n\n const isBranch = this.flowDragService.isDragBranch;\n\n const draggingRect = new Rectangle(\n dragBlockX,\n dragBlockY,\n (dragNode as HTMLElement).clientWidth * scale,\n (dragNode as HTMLElement).clientHeight * scale\n );\n let side: LABEL_SIDE_TYPE | undefined;\n const collisionTransition = this.transitions.find((transition) => {\n if (transition?.entity?.parent?.collapsed) {\n return false;\n }\n const { hasCollision, labelOffsetType } = this.flowDragConfigEntity.isCollision(\n transition,\n draggingRect,\n isBranch\n ) as CollisionRetType;\n side = labelOffsetType;\n return hasCollision;\n });\n if (\n collisionTransition &&\n (isBranch\n ? this.flowDragService.isDroppableBranch(collisionTransition.entity, side)\n : this.flowDragService.isDroppableNode(collisionTransition.entity)) &&\n (!this.options.canDrop ||\n this.options.canDrop({\n dragNodes: this.dragEntities,\n dropNode: collisionTransition.entity,\n isBranch,\n }))\n ) {\n this.flowRenderStateEntity.setNodeDroppingId(collisionTransition.entity.id);\n } else {\n this.flowRenderStateEntity.setNodeDroppingId('');\n }\n\n this.flowRenderStateEntity.setDragLabelSide(side);\n\n this.containerRef.current.style.visibility = 'visible';\n this.pipelineNode.parentElement!.appendChild(this.draggingNodeMask);\n\n this.containerRef.current.style.left = `${\n dragBlockX + this.pipelineNode.offsetLeft + clientBounds.x + window.scrollX\n }px`;\n this.containerRef.current.style.top = `${\n dragBlockY + this.pipelineNode.offsetTop + clientBounds.y + window.scrollY\n }px`;\n this.containerRef.current.style.transformOrigin = 'top left';\n this.containerRef.current.style.transform = `scale(${scale})`;\n\n if (!this.disableDragScroll) {\n this.flowDragConfigEntity.scrollDirection(event, dragBlockX, dragBlockY);\n }\n }\n }\n }\n\n async handleMouseUp() {\n this.setDraggingStatus(false);\n if (this.dragStartEntity || this.dragJSON) {\n const activatedNodeId = this.flowDragService.dropNodeId;\n\n if (activatedNodeId) {\n if (this.flowDragService.isDragBranch) {\n if (this.dragJSON) {\n await this.flowDragService.dropCreateNode(this.dragJSON, this.onCreateNode);\n } else {\n this.flowDragService.dropBranch();\n }\n } else {\n if (this.dragJSON) {\n await this.flowDragService.dropCreateNode(this.dragJSON, this.onCreateNode);\n } else {\n this.flowDragService.dropNode();\n }\n this.selectConfigEntity.clearSelectedNodes();\n }\n }\n\n this.flowRenderStateEntity.setNodeDroppingId('');\n this.flowRenderStateEntity.setDragLabelSide();\n this.flowRenderStateEntity.setIsBranch(false);\n this.dragStartEntity = undefined;\n this.dragEntities = [];\n\n this.flowDragConfigEntity.stopAllScroll();\n }\n\n this.disableDragScroll = false;\n this.dragJSON = undefined;\n if (this.containerRef.current) {\n this.containerRef.current.style.visibility = 'hidden';\n if (this.pipelineNode.parentElement!.contains(this.draggingNodeMask)) {\n this.pipelineNode.parentElement!.removeChild(this.draggingNodeMask);\n }\n }\n }\n\n protected _dragger = new PlaygroundDrag({\n onDrag: (e) => {\n this.handleMouseMove(e);\n },\n onDragEnd: () => {\n this.handleMouseUp();\n },\n stopGlobalEventNames: ['contextmenu'],\n });\n\n /**\n * 开始拖拽事件\n * @param e\n */\n async startDrag(\n e: { clientX: number; clientY: number },\n {\n dragStartEntity: startEntityFromProps,\n dragEntities,\n dragJSON,\n isBranch,\n onCreateNode,\n }: StartDragProps,\n options?: {\n dragOffsetX?: number;\n dragOffsetY?: number;\n disableDragScroll?: boolean;\n }\n ) {\n if (this.isGrab() || this.config.disabled || this.config.readonly) {\n return;\n }\n\n this.disableDragScroll = Boolean(options?.disableDragScroll);\n this.dragJSON = dragJSON;\n this.onCreateNode = onCreateNode;\n this.flowRenderStateEntity.setIsBranch(Boolean(isBranch));\n\n this.dragOffset.x = options?.dragOffsetX || DEFAULT_DRAG_OFFSET_X;\n this.dragOffset.y = options?.dragOffsetY || DEFAULT_DRAG_OFFSET_Y;\n\n const type = startEntityFromProps?.flowNodeType || dragJSON?.type;\n\n const isIcon = type === FlowNodeBaseType.BLOCK_ICON;\n const isOrderIcon = type === FlowNodeBaseType.BLOCK_ORDER_ICON;\n\n const dragStartEntity =\n isIcon || isOrderIcon ? startEntityFromProps!.parent! : startEntityFromProps;\n\n if (dragStartEntity && !dragStartEntity!.getData(FlowNodeRenderData).draggable) {\n return;\n }\n\n this.initialPosition = {\n x: e.clientX,\n y: e.clientY,\n };\n\n this.dragStartEntity = dragStartEntity;\n this.dragEntities = dragEntities || (this.dragStartEntity ? [this.dragStartEntity!] : []);\n\n return this._dragger.start(e.clientX, e.clientY);\n }\n\n onReady() {\n this.draggingNodeMask.style.width = '100%';\n this.draggingNodeMask.style.height = '100%';\n this.draggingNodeMask.style.position = 'absolute';\n this.draggingNodeMask.classList.add('dragging-node');\n this.draggingNodeMask.style.zIndex = '99';\n this.draggingNodeMask.style.cursor = 'pointer';\n\n this.dragNodeComp = this.rendererRegistry.getRendererComponent(FlowRendererKey.DRAG_NODE);\n if (this.options.onDrop) {\n this.toDispose.push(this.flowDragService.onDrop(this.options.onDrop));\n }\n }\n\n dispose(): void {\n this._dragger.dispose();\n super.dispose();\n }\n\n render() {\n const DragComp = this.dragNodeComp?.renderer as Component;\n\n return wrapLayerRender(\n this.playgroundContainer,\n h(Teleport, { to: 'body' }, [\n h(\n 'div',\n {\n ref: (el: unknown) => {\n this.containerRef.current = (el as HTMLDivElement) || null;\n },\n style: { position: 'absolute', zIndex: 99999, visibility: 'hidden' },\n onMouseenter: (e: MouseEvent) => e.stopPropagation(),\n },\n [\n DragComp\n ? h(DragComp, {\n dragJSON: this.dragJSON,\n dragStart: this.dragStartEntity,\n dragNodes: this.dragEntities,\n })\n : null,\n ]\n ),\n ])\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { domUtils, PositionSchema } from '@flowgram-vue/utils';\nimport { FlowDocument, FlowNodeEntity, FlowNodeTransformData } from '@flowgram-vue/document';\nimport {\n ContextMenuService,\n EditorState,\n EditorStateConfigEntity,\n Layer,\n LayerOptions,\n observeEntity,\n PipelineLayerPriority,\n PlaygroundConfigEntity,\n PlaygroundDrag,\n SelectionService,\n} from '@flowgram-vue/core';\n\nimport { FlowSelectConfigEntity, SelectorBoxConfigEntity } from '../entities';\n\nexport interface FlowSelectorBoxOptions extends LayerOptions {\n /**\n * 默认不提供则为点击空白地方可以框选\n * @param e\n * @param entity\n */\n canSelect?: (e: MouseEvent, entity: SelectorBoxConfigEntity) => boolean;\n}\n/**\n * 流程选择框\n */\n@injectable()\nexport class FlowSelectorBoxLayer extends Layer<FlowSelectorBoxOptions> {\n @inject(FlowDocument)\n protected flowDocument: FlowDocument;\n\n @inject(ContextMenuService)\n readonly contextMenuService: ContextMenuService;\n\n @observeEntity(PlaygroundConfigEntity)\n protected playgroundConfigEntity: PlaygroundConfigEntity;\n\n @inject(SelectionService) readonly selectionService: SelectionService;\n\n @observeEntity(SelectorBoxConfigEntity)\n protected selectorBoxConfigEntity: SelectorBoxConfigEntity;\n\n @observeEntity(FlowSelectConfigEntity)\n protected selectConfigEntity: FlowSelectConfigEntity;\n\n @observeEntity(EditorStateConfigEntity)\n protected editorStateConfig: EditorStateConfigEntity;\n\n readonly node = domUtils.createDivWithClass('gedit-selector-box-layer');\n\n /**\n * 选择框\n */\n protected selectorBox = this.createDOMCache('gedit-selector-box');\n\n /**\n * 用于遮挡鼠标,避免触发 hover\n */\n protected selectorBoxBlock = this.createDOMCache('gedit-selector-box-block');\n\n protected transformVisibles: FlowNodeTransformData[];\n\n /**\n * 拖动选择框\n */\n protected selectboxDragger = new PlaygroundDrag({\n onDragStart: (e) => {\n this.selectConfigEntity.clearSelectedNodes();\n const mousePos = this.playgroundConfigEntity.getPosFromMouseEvent(e);\n this.transformVisibles = this.flowDocument\n .getRenderDatas(FlowNodeTransformData, false)\n .filter((transform) => {\n const { entity } = transform;\n if (entity.originParent) {\n return (\n this.nodeSelectable(entity, mousePos) &&\n this.nodeSelectable(entity.originParent, mousePos)\n );\n }\n return this.nodeSelectable(entity, mousePos);\n });\n this.selectorBoxConfigEntity.setDragInfo(e);\n this.updateSelectorBox(this.selectorBoxConfigEntity);\n },\n onDrag: (e) => {\n this.selectorBoxConfigEntity.setDragInfo(e);\n // 更新选择框\n this.selectConfigEntity.selectFromBounds(\n this.selectorBoxConfigEntity.toRectangle(this.playgroundConfigEntity.finalScale),\n this.transformVisibles\n );\n this.updateSelectorBox(this.selectorBoxConfigEntity);\n },\n onDragEnd: (e) => {\n this.selectorBoxConfigEntity.setDragInfo(e);\n this.transformVisibles.length = 0;\n this.updateSelectorBox(this.selectorBoxConfigEntity);\n },\n });\n\n onReady(): void {\n if (!this.options.canSelect) {\n this.options.canSelect = (e: MouseEvent) => {\n const target = e.target as HTMLElement | undefined;\n // 默认点击空白地方可以框选\n return target === this.pipelineNode || target === this.playgroundNode;\n };\n }\n // 将选中的节点同步到全局\n // TODO 后续要统一到 selection service\n this.toDispose.pushAll([\n this.selectConfigEntity.onConfigChanged(() => {\n this.selectionService.selection = this.selectConfigEntity.selectedNodes;\n }),\n this.selectionService.onSelectionChanged(() => {\n const selectedNodes = this.selectionService.selection.filter(\n (entity) => entity instanceof FlowNodeEntity\n );\n\n this.selectConfigEntity.selectedNodes = selectedNodes as FlowNodeEntity[];\n }),\n ]);\n this.listenPlaygroundEvent(\n 'mousedown',\n (e: MouseEvent): boolean | undefined => {\n if (!this.isEnabled()) return;\n // 自定义拦截选择框事件\n if (this.options.canSelect && !this.options.canSelect(e, this.selectorBoxConfigEntity)) {\n return;\n }\n\n const currentState = this.editorStateConfig.getCurrentState();\n\n // 鼠标友好模式,框选后,再次点击其他地方或者框选其他地方,需要清空已有选择的节点\n if (currentState === EditorState.STATE_MOUSE_FRIENDLY_SELECT) {\n this.selectConfigEntity.clearSelectedNodes();\n }\n\n // const target = e.target as HTMLElement | undefined;\n // TODO 下边这些特化逻辑迁移到固定布局逻辑\n // const linesLayer = document.querySelector('.gedit-flow-lines-layer');\n // const toolsTarget = document.querySelector('.flow-canvas-selector-box-tools');\n // const isInTools = toolsTarget && (toolsTarget === target || toolsTarget.contains(target!));\n // 保证 service 更新后进行是否清除的计算\n // setTimeout(() => {\n // // 如果点击到选中区域的菜单栏\n // if (!isInTools && !this.contextMenuService.rightPanelVisible) {\n // // 取消之前的选择状态\n // this.selectConfigEntity.clearSelectedNodes();\n // }\n // }, 0);\n // if (\n // target === this.pipelineNode ||\n // target === this.playgroundNode // 点击空白区域\n // linesLayer?.contains(target!) // 点击 svg 线条\n // target?.classList.contains('flow-canvas-adder') || // 点击添加按钮的留白区域\n // target?.classList.contains('flow-canvas-block-icon') // 点击添加按钮的留白区域\n // ) {\n // return true;\n // }\n this.selectboxDragger.start(e.clientX, e.clientY, this.config);\n return true;\n },\n PipelineLayerPriority.BASE_LAYER\n );\n }\n\n isEnabled(): boolean {\n const currentState = this.editorStateConfig.getCurrentState();\n const isMouseFriendly = currentState === EditorState.STATE_MOUSE_FRIENDLY_SELECT;\n\n return (\n !this.config.disabled &&\n !this.config.readonly &&\n // 鼠标友好模式下,需要按下 shift 启动框选\n ((isMouseFriendly && this.editorStateConfig.isPressingShift) ||\n currentState === EditorState.STATE_SELECT) &&\n !this.selectorBoxConfigEntity.disabled\n );\n }\n\n /**\n * Destroy\n */\n dispose(): void {\n this.selectorBox.dispose();\n this.selectorBoxBlock.dispose();\n super.dispose();\n }\n\n protected updateSelectorBox(selector: SelectorBoxConfigEntity): void {\n const node = this.selectorBox.get();\n const block = this.selectorBoxBlock.get();\n // 非可用状态且在 moving 则关闭选择框\n if (!this.isEnabled() && selector.isMoving) {\n this.selectorBoxConfigEntity.collapse();\n }\n if (!this.isEnabled() || !selector.isMoving) {\n node.setStyle({\n display: 'none',\n });\n block.setStyle({\n display: 'none',\n });\n } else {\n node.setStyle({\n display: 'block',\n left: selector.position.x,\n top: selector.position.y,\n width: selector.size.width,\n height: selector.size.height,\n });\n // 这是遮挡滑块,防止触发节点 hover\n block.setStyle({\n display: 'block',\n left: selector.position.x - 10,\n top: selector.position.y - 10,\n width: selector.size.width + 20,\n height: selector.size.height + 20,\n });\n }\n }\n\n private nodeSelectable(node: FlowNodeEntity, mousePos: PositionSchema) {\n const selectable = node.getNodeMeta().selectable;\n if (typeof selectable === 'function') {\n return selectable(node, mousePos);\n } else {\n return selectable;\n }\n }\n\n // autorun(): void {\n // this.updateSelectorBox(this.selectorBoxConfigEntity);\n // }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, type Component, type VNode } from 'vue';\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport { Rectangle } from '@flowgram-vue/utils';\nimport { FlowNodeEntity, FlowNodeRenderData, FlowNodeTransformData } from '@flowgram-vue/document';\nimport {\n CommandRegistry,\n EditorState,\n EditorStateConfigEntity,\n Layer,\n LayerOptions,\n PlaygroundConfig,\n PlaygroundContainerFactory,\n observeEntity,\n observeEntityDatas,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport { FlowRendererKey, FlowRendererRegistry } from '../flow-renderer-registry';\nimport { FlowSelectConfigEntity, SelectorBoxConfigEntity } from '../entities';\n\nexport interface SelectorBoxPopoverProps {\n bounds: Rectangle;\n config: PlaygroundConfig;\n flowSelectConfig: FlowSelectConfigEntity;\n commandRegistry: CommandRegistry;\n children?: VNode | VNode[];\n}\n\nexport interface FlowSelectorBoundsLayerOptions extends LayerOptions {\n ignoreOneSelect?: boolean;\n ignoreChildrenLength?: boolean;\n boundsPadding?: number;\n disableBackground?: boolean;\n backgroundClassName?: string;\n foregroundClassName?: string;\n SelectorBoxPopover?: Component;\n CustomBoundsRenderer?: Component;\n}\n\n/**\n * 流程节点被框选后的边界区域渲染\n */\n@injectable()\nexport class FlowSelectorBoundsLayer extends Layer<FlowSelectorBoundsLayerOptions> {\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n @inject(CommandRegistry) readonly commandRegistry: CommandRegistry;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntity(FlowSelectConfigEntity)\n protected flowSelectConfigEntity: FlowSelectConfigEntity;\n\n @observeEntity(EditorStateConfigEntity)\n protected editorStateConfig: EditorStateConfigEntity;\n\n @observeEntity(SelectorBoxConfigEntity)\n protected selectorBoxConfigEntity: SelectorBoxConfigEntity;\n\n /**\n * 需要监听节点的展开和收起状态,重新绘制边框\n */\n @observeEntityDatas(FlowNodeEntity, FlowNodeRenderData)\n renderStates: FlowNodeRenderData[];\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData)\n _transforms: FlowNodeTransformData[];\n\n readonly node = domUtils.createDivWithClass('gedit-selector-bounds-layer');\n\n readonly selectBoundsBackground = domUtils.createDivWithClass('gedit-selector-bounds-background');\n\n onReady(): void {\n this.node!.style.zIndex = '20';\n const { firstChild } = this.pipelineNode;\n if (this.options.boundsPadding !== undefined) {\n this.flowSelectConfigEntity.boundsPadding = this.options.boundsPadding;\n }\n if (this.options.backgroundClassName) {\n this.selectBoundsBackground.classList.add(this.options.backgroundClassName);\n }\n const selectorBoundsLayer = domUtils.createDivWithClass(\n 'gedit-selector-bounds-background-layer gedit-playground-layer'\n );\n selectorBoundsLayer.appendChild(this.selectBoundsBackground);\n this.pipelineNode.insertBefore(selectorBoundsLayer, firstChild);\n }\n\n onZoom(scale: number) {\n this.node!.style.transform = `scale(${scale})`;\n this.selectBoundsBackground.parentElement!.style.transform = `scale(${scale})`;\n }\n\n onViewportChange() {\n this.render();\n }\n\n isEnabled(): boolean {\n const currentState = this.editorStateConfig.getCurrentState();\n return currentState === EditorState.STATE_SELECT;\n }\n\n render() {\n const {\n ignoreOneSelect,\n ignoreChildrenLength,\n SelectorBoxPopover: SelectorBoxPopoverFromOpts,\n disableBackground,\n CustomBoundsRenderer,\n } = this.options;\n\n const bounds = this.flowSelectConfigEntity.getSelectedBounds();\n const selectedNodes = this.flowSelectConfigEntity.selectedNodes;\n\n const bg = this.selectBoundsBackground;\n const isDragging = !this.selectorBoxConfigEntity.isStart;\n\n if (\n bounds.width === 0 ||\n bounds.height === 0 ||\n (ignoreOneSelect &&\n selectedNodes.length === 1 &&\n (ignoreChildrenLength || (selectedNodes[0] as FlowNodeEntity).childrenLength <= 1))\n ) {\n domUtils.setStyle(bg, {\n display: 'none',\n });\n return null;\n }\n if (CustomBoundsRenderer) {\n return wrapLayerRender(\n this.playgroundContainer,\n h(CustomBoundsRenderer, {\n bounds,\n config: this.config,\n flowSelectConfig: this.flowSelectConfigEntity,\n commandRegistry: this.commandRegistry,\n })\n );\n }\n const style = {\n display: 'block',\n left: `${bounds.left}px`,\n top: `${bounds.top}px`,\n width: `${bounds.width}px`,\n height: `${bounds.height}px`,\n };\n if (!disableBackground) {\n domUtils.setStyle(bg, {\n display: 'block',\n left: bounds.left,\n top: bounds.top,\n width: bounds.width,\n height: bounds.height,\n });\n }\n let foregroundClassName = 'gedit-selector-bounds-foreground';\n if (this.options.foregroundClassName) {\n foregroundClassName += ` ${this.options.foregroundClassName}`;\n }\n const SelectorBoxPopover =\n SelectorBoxPopoverFromOpts ||\n this.rendererRegistry.tryToGetRendererComponent(FlowRendererKey.SELECTOR_BOX_POPOVER)\n ?.renderer;\n if (!isDragging || !SelectorBoxPopover) {\n return wrapLayerRender(\n this.playgroundContainer,\n h('div', { class: foregroundClassName, style })\n );\n }\n return wrapLayerRender(\n this.playgroundContainer,\n h(\n SelectorBoxPopover as Component,\n {\n bounds,\n config: this.config,\n flowSelectConfig: this.flowSelectConfigEntity,\n commandRegistry: this.commandRegistry,\n },\n () => h('div', { class: foregroundClassName, style })\n )\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, type Component, type VNode } from 'vue';\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport {\n CommandRegistry,\n ContextMenuService,\n EditorState,\n EditorStateConfigEntity,\n Layer,\n observeEntity,\n PipelineLayerPriority,\n PlaygroundConfigEntity,\n PlaygroundContainerFactory,\n SelectionService,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../layer-vue-provide';\nimport {\n FlowRendererCommandCategory,\n FlowRendererKey,\n FlowRendererRegistry,\n} from '../flow-renderer-registry';\nimport { SelectorBoxConfigEntity } from '../entities/selector-box-config-entity';\nimport { FlowSelectConfigEntity } from '../entities/flow-select-config-entity';\n\n/**\n * 流程右键菜单\n */\n@injectable()\nexport class FlowContextMenuLayer extends Layer {\n @inject(CommandRegistry) readonly commandRegistry: CommandRegistry;\n\n @inject(FlowRendererRegistry) readonly rendererRegistry: FlowRendererRegistry;\n\n @inject(ContextMenuService) readonly contextMenuService: ContextMenuService;\n\n @inject(PlaygroundContainerFactory) readonly playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntity(FlowSelectConfigEntity) protected flowSelectConfigEntity: FlowSelectConfigEntity;\n\n @inject(SelectionService) readonly selectionService: SelectionService;\n\n @observeEntity(PlaygroundConfigEntity)\n protected playgroundConfigEntity: PlaygroundConfigEntity;\n\n @observeEntity(EditorStateConfigEntity)\n protected editorStateConfig: EditorStateConfigEntity;\n\n @observeEntity(SelectorBoxConfigEntity)\n protected selectorBoxConfigEntity: SelectorBoxConfigEntity;\n\n readonly node = domUtils.createDivWithClass('gedit-context-menu-layer');\n\n readonly nodeRef: { current: { setVisible: (v: boolean) => void } | null } = { current: null };\n\n isEnabled(): boolean {\n const currentState = this.editorStateConfig.getCurrentState();\n return (\n !this.config.disabled &&\n !this.config.readonly &&\n currentState === EditorState.STATE_SELECT &&\n !this.selectorBoxConfigEntity.disabled\n );\n }\n\n onReady(): void {\n this.node!.style.zIndex = '30';\n this.node!.style.display = 'block';\n this.toDispose.pushAll([\n this.listenPlaygroundEvent(\n 'contextmenu',\n (e: MouseEvent): boolean | undefined => {\n if (!this.isEnabled()) return;\n this.contextMenuService.rightPanelVisible = true;\n const bounds = this.flowSelectConfigEntity.getSelectedBounds();\n if (bounds.width === 0 || bounds.height === 0) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n\n this.nodeRef.current?.setVisible(true);\n const clientBounds = this.playgroundConfigEntity.getClientBounds();\n const dragBlockX = e.clientX - (this.pipelineNode.offsetLeft || 0) - clientBounds.x;\n const dragBlockY = e.clientY - (this.pipelineNode.offsetTop || 0) - clientBounds.y;\n this.node.style.left = `${dragBlockX}px`;\n this.node.style.top = `${dragBlockY}px`;\n },\n PipelineLayerPriority.BASE_LAYER\n ),\n this.listenPlaygroundEvent('mousedown', () => {\n this.nodeRef.current?.setVisible(false);\n this.contextMenuService.rightPanelVisible = false;\n }),\n ]);\n }\n\n onScroll() {\n this.nodeRef.current?.setVisible(false);\n }\n\n onZoom() {\n this.nodeRef.current?.setVisible(false);\n }\n\n /**\n * Destroy\n */\n dispose(): void {\n super.dispose();\n }\n\n /**\n * 渲染工具栏\n */\n renderCommandMenus(): VNode[] {\n return this.commandRegistry.commands\n .filter((cmd) => cmd.category === FlowRendererCommandCategory.SELECTOR_BOX)\n .map((cmd) => {\n const CommandRenderer = this.rendererRegistry.getRendererComponent(\n (cmd.icon as string) || cmd.id\n )?.renderer as Component;\n return h(CommandRenderer, {\n key: cmd.id,\n command: cmd,\n isContextMenu: true,\n disabled: !this.commandRegistry.isEnabled(cmd.id),\n onClick: (e: any) => this.commandRegistry.executeCommand(cmd.id, e),\n });\n })\n .filter((c) => c);\n }\n\n render() {\n const SelectorBoxPopover = this.rendererRegistry.getRendererComponent(\n FlowRendererKey.CONTEXT_MENU_POPOVER\n ).renderer as Component;\n return wrapLayerRender(\n this.playgroundContainer,\n h(SelectorBoxPopover, {\n ref: (inst: any) => {\n this.nodeRef.current = inst;\n },\n content: this.renderCommandMenus(),\n })\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { FlowDocument, FlowNodeTransformData } from '@flowgram-vue/document';\nimport { Layer } from '@flowgram-vue/core';\nimport { ScrollSchema } from '@flowgram-vue/utils';\n\nimport { scrollLimit } from '../utils';\n\n/**\n * 控制滚动边界\n */\n@injectable()\nexport class FlowScrollLimitLayer extends Layer {\n @inject(FlowDocument) readonly document: FlowDocument;\n\n getInitScroll(): ScrollSchema {\n return this.document.layout.getInitScroll(this.pipelineNode.getBoundingClientRect());\n }\n\n onReady(): void {\n const initScroll = () => this.getInitScroll();\n this.config.updateConfig(initScroll());\n this.config.addScrollLimit(scroll =>\n scrollLimit(\n scroll,\n [this.document.root.getData(FlowNodeTransformData)!.bounds],\n this.config,\n initScroll,\n ),\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ContainerModule } from 'inversify';\n\nimport { FlowRendererResizeObserver } from './flow-renderer-resize-observer';\nimport { FlowRendererRegistry } from './flow-renderer-registry';\n\nexport const FlowRendererContainerModule = new ContainerModule(bind => {\n bind(FlowRendererRegistry).toSelf().inSingletonScope();\n bind(FlowRendererResizeObserver).toSelf().inSingletonScope();\n});\n"]}
|