@flowgram-vue/free-lines-plugin 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 +1026 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +120 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +269 -0
- package/dist/index.js +1013 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
- package/src/__tests__/__snapshots__/bezier-controls.spec.ts.snap +20 -0
- package/src/__tests__/bezier-controls.spec.ts +25 -0
- package/src/components/index.ts +8 -0
- package/src/components/workflow-line-render/arrow.ts +60 -0
- package/src/components/workflow-line-render/index.css +22 -0
- package/src/components/workflow-line-render/index.ts +6 -0
- package/src/components/workflow-line-render/line-svg.ts +131 -0
- package/src/components/workflow-port-render/cross-hair.ts +16 -0
- package/src/components/workflow-port-render/index.css +121 -0
- package/src/components/workflow-port-render/index.ts +183 -0
- package/src/constants/lines.ts +9 -0
- package/src/constants/points.ts +12 -0
- package/src/contributions/bezier/bezier-controls.ts +105 -0
- package/src/contributions/bezier/index.ts +121 -0
- package/src/contributions/fold/fold-line.ts +293 -0
- package/src/contributions/fold/index.ts +97 -0
- package/src/contributions/index.ts +8 -0
- package/src/contributions/straight/index.ts +89 -0
- package/src/contributions/straight/point-on-line.ts +37 -0
- package/src/contributions/utils.ts +37 -0
- package/src/create-free-lines-plugin.ts +44 -0
- package/src/css.d.ts +6 -0
- package/src/env.d.ts +10 -0
- package/src/index.ts +12 -0
- package/src/layer/index.ts +8 -0
- package/src/layer/workflow-lines-layer.ts +201 -0
- package/src/type.ts +40 -0
- package/src/types/arrow-renderer.ts +32 -0
- package/src/wrap-layer-render.ts +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants/points.ts","../src/components/workflow-port-render/cross-hair.ts","../src/components/workflow-port-render/index.ts","../src/constants/lines.ts","../src/wrap-layer-render.ts","../src/contributions/utils.ts","../src/components/workflow-line-render/arrow.ts","../src/components/workflow-line-render/line-svg.ts","../src/layer/workflow-lines-layer.ts","../src/contributions/bezier/bezier-controls.ts","../src/contributions/bezier/index.ts","../src/contributions/fold/fold-line.ts","../src/contributions/fold/index.ts","../src/contributions/straight/point-on-line.ts","../src/contributions/straight/index.ts","../src/create-free-lines-plugin.ts"],"names":["defineComponent","h","useService","WorkflowHoverService","WorkflowLinesManager","shallowRef","usePlaygroundReadonlyState","watch","onBeforeUnmount","classNames","MouseTouchEvent","Teleport","provide","PlaygroundVueContainerKey","PlaygroundVueRefKey","Playground","WorkflowLineRenderData","toRelative","FlowRendererKey","clsx","WorkflowLinesLayer","Layer","nanoid","domUtils","Fragment","inject","WorkflowSelectService","StackingContextManager","FlowRendererRegistry","PlaygroundContainerFactory","observeEntities","WorkflowLineEntity","WorkflowPortEntity","observeEntityDatas","WorkflowNodeEntity","TransformData","WorkflowDocument","injectable","Point","Rectangle","Bezier","LineType","FoldLine","xDir","yDir","getLineCenter","definePluginCreator"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// 连接点半径\n\nexport const STROKE_WIDTH_SLECTED = 3;\n\nexport const STROKE_WIDTH = 2;\n\nexport const PORT_BG_CLASS_NAME = 'workflow-port-bg';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h } from 'vue';\n\nexport const CrossHair = defineComponent({\n name: 'CrossHair',\n setup() {\n return () =>\n h('div', { class: 'symbol' }, [h('div', { class: 'cross-hair' })]);\n },\n});\n\nexport default CrossHair;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n defineComponent,\n h,\n onBeforeUnmount,\n shallowRef,\n Teleport,\n watch,\n type CSSProperties,\n type PropType,\n} from 'vue';\nimport classNames from 'clsx';\nimport {\n WorkflowHoverService,\n type WorkflowPortEntity,\n usePlaygroundReadonlyState,\n WorkflowLinesManager,\n} from '@flowgram-vue/free-layout-core';\nimport { MouseTouchEvent, useService } from '@flowgram-vue/core';\nimport type { Disposable } from '@flowgram-vue/utils';\n\nimport { PORT_BG_CLASS_NAME } from '../../constants/points';\nimport CrossHair from './cross-hair';\nimport './index.css';\n\nexport interface WorkflowPortRenderProps {\n entity: WorkflowPortEntity;\n className?: string;\n style?: CSSProperties;\n onClick?: (e: MouseEvent, port: WorkflowPortEntity) => void;\n /** 激活状态颜色 (linked/hovered) */\n primaryColor?: string;\n /** 默认状态颜色 */\n secondaryColor?: string;\n /** 错误状态颜色 */\n errorColor?: string;\n /** 背景颜色 */\n backgroundColor?: string;\n}\n\nexport const WorkflowPortRender = defineComponent({\n name: 'WorkflowPortRender',\n props: {\n entity: { type: Object as PropType<WorkflowPortEntity>, required: true },\n className: { type: String, default: '' },\n style: { type: Object as PropType<CSSProperties> },\n onClick: {\n type: Function as PropType<(e: MouseEvent, port: WorkflowPortEntity) => void>,\n },\n primaryColor: { type: String },\n secondaryColor: { type: String },\n errorColor: { type: String },\n backgroundColor: { type: String },\n },\n setup(props) {\n const hoverService = useService<WorkflowHoverService>(WorkflowHoverService);\n const linesManager = useService<WorkflowLinesManager>(WorkflowLinesManager);\n const targetElement = shallowRef(props.entity.targetElement);\n const posX = shallowRef(props.entity.relativePosition.x);\n const posY = shallowRef(props.entity.relativePosition.y);\n const hovered = shallowRef(false);\n const linked = shallowRef(Boolean(props.entity?.lines?.length));\n const hasError = shallowRef(props.entity.hasError);\n const readonly = usePlaygroundReadonlyState();\n\n let disposers: Disposable[] = [];\n\n const bindEntity = (): void => {\n disposers.forEach((dispose) => dispose.dispose());\n disposers = [];\n const { entity } = props;\n entity.validate();\n hasError.value = entity.hasError;\n disposers.push(\n entity.onEntityChange(() => {\n if (entity.targetElement) {\n if (entity.targetElement !== targetElement.value) {\n targetElement.value = entity.targetElement;\n }\n return;\n }\n const newPos = entity.relativePosition;\n posX.value = Math.round(newPos.x);\n posY.value = Math.round(newPos.y);\n }),\n hoverService.onHoveredChange(() => {\n hovered.value = hoverService.isHovered(entity.id);\n }),\n entity.onErrorChanged(() => {\n hasError.value = entity.hasError;\n }),\n linesManager.onAvailableLinesChange(() => {\n setTimeout(() => {\n if (linesManager.disposed || entity.disposed) return;\n linked.value = Boolean(entity.lines.length);\n }, 0);\n })\n );\n };\n\n watch(\n () => [props.entity, targetElement.value],\n () => bindEntity(),\n { immediate: true }\n );\n\n onBeforeUnmount(() => {\n disposers.forEach((dispose) => dispose.dispose());\n });\n\n return () => {\n const { entity, onClick } = props;\n const { disabled } = entity;\n const className = classNames('workflow-port-render', props.className || '', {\n hovered: !readonly.value && hovered.value && !disabled,\n linked: linked.value,\n });\n\n const colorStyles: Record<string, string> = {};\n if (props.primaryColor) {\n colorStyles['--g-workflow-port-color-primary'] = props.primaryColor;\n }\n if (props.secondaryColor) {\n colorStyles['--g-workflow-port-color-secondary'] = props.secondaryColor;\n }\n if (props.errorColor) {\n colorStyles['--g-workflow-port-color-error'] = props.errorColor;\n }\n if (props.backgroundColor) {\n colorStyles['--g-workflow-port-color-background'] = props.backgroundColor;\n }\n\n const combinedStyle = targetElement.value\n ? { ...props.style, ...colorStyles }\n : { ...props.style, ...colorStyles, left: `${posX.value}px`, top: `${posY.value}px` };\n\n const content = h(\n 'div',\n {\n class: className,\n style: combinedStyle,\n onClick: (e: MouseEvent) => onClick?.(e, entity),\n onTouchstart: (e: TouchEvent) => {\n if (!onClick) {\n return;\n }\n MouseTouchEvent.onTouched(e, (mouseEvent) => {\n onClick(mouseEvent as unknown as MouseEvent, entity);\n });\n },\n 'data-port-entity-id': entity.id,\n 'data-port-entity-type': entity.portType,\n 'data-testid': 'sdk.workflow.canvas.node.port',\n },\n [\n h('div', { class: classNames('bg-circle', 'workflow-bg-circle') }),\n h(\n 'div',\n {\n class: classNames({\n bg: true,\n [PORT_BG_CLASS_NAME]: true,\n 'workflow-point-bg': true,\n hasError: hasError.value,\n }),\n },\n [h(CrossHair)]\n ),\n h('div', { class: 'focus-circle' }),\n ]\n );\n\n if (targetElement.value) {\n return h(Teleport, { to: targetElement.value }, [content]);\n }\n return content;\n };\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// 箭头宽度\nexport const LINE_OFFSET = 6;\n\nexport const LINE_PADDING = 12;\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\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(factory: PlaygroundContainerFactory, children: VNodeChild) {\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 { IPoint, Rectangle } from '@flowgram-vue/utils';\nimport { LinePointLocation } from '@flowgram-vue/free-layout-core';\n\nimport { LINE_PADDING } from '../constants/lines';\n\nexport function toRelative(p: IPoint, bbox: Rectangle): IPoint {\n return {\n x: p.x - bbox.x + LINE_PADDING,\n y: p.y - bbox.y + LINE_PADDING,\n };\n}\n\nexport function getShrinkOffset(location: LinePointLocation, shrink: number): IPoint {\n switch (location) {\n case 'left':\n return { x: -shrink, y: 0 };\n case 'right':\n return { x: shrink, y: 0 };\n case 'bottom':\n return { x: 0, y: shrink };\n case 'top':\n return { x: 0, y: -shrink };\n }\n}\n\nexport function posWithShrink(pos: IPoint, location: LinePointLocation, shrink: number): IPoint {\n const offset = getShrinkOffset(location, shrink);\n return {\n x: pos.x + offset.x,\n y: pos.y + offset.y,\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, type PropType } from 'vue';\n\nimport { IPoint } from '@flowgram-vue/utils';\nimport { LinePointLocation } from '@flowgram-vue/free-layout-core';\n\nimport { type ArrowRendererProps } from '../../types/arrow-renderer';\nimport { LINE_OFFSET } from '../../constants/lines';\n\nfunction getArrowPath(pos: IPoint, location: LinePointLocation): string {\n switch (location) {\n case 'left':\n return `M ${pos.x - LINE_OFFSET},${pos.y - LINE_OFFSET} L ${pos.x},${pos.y} L ${\n pos.x - LINE_OFFSET\n },${pos.y + LINE_OFFSET}`;\n case 'right':\n return `M ${pos.x + LINE_OFFSET},${pos.y + LINE_OFFSET} L ${pos.x},${pos.y} L ${\n pos.x + LINE_OFFSET\n },${pos.y - LINE_OFFSET}`;\n case 'bottom':\n return `M ${pos.x - LINE_OFFSET},${pos.y + LINE_OFFSET} L ${pos.x},${pos.y} L ${\n pos.x + LINE_OFFSET\n },${pos.y + LINE_OFFSET}`;\n case 'top':\n return `M ${pos.x - LINE_OFFSET},${pos.y - LINE_OFFSET} L ${pos.x},${pos.y} L ${\n pos.x + LINE_OFFSET\n },${pos.y - LINE_OFFSET}`;\n }\n}\n\nexport const ArrowRenderer = defineComponent({\n name: 'ArrowRenderer',\n props: {\n id: { type: String, required: true },\n pos: { type: Object as PropType<IPoint>, required: true },\n location: { type: String as PropType<LinePointLocation>, required: true },\n strokeWidth: { type: Number, required: true },\n hide: { type: Boolean, default: false },\n line: { type: Object as PropType<ArrowRendererProps['line']>, required: true },\n },\n setup(props) {\n return () => {\n if (props.hide) {\n return null;\n }\n const arrowPath = getArrowPath(props.pos, props.location);\n return h('path', {\n d: arrowPath,\n 'stroke-linecap': 'round',\n stroke: `url(#${props.id})`,\n fill: 'none',\n 'stroke-width': props.strokeWidth,\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, type Component, type PropType } from 'vue';\nimport clsx from 'clsx';\nimport { type IPoint } from '@flowgram-vue/utils';\nimport { FlowRendererKey } from '@flowgram-vue/renderer';\nimport { WorkflowLineRenderData } from '@flowgram-vue/free-layout-core';\n\nimport { type ArrowRendererComponent } from '../../types/arrow-renderer';\nimport { LineRenderProps } from '../../type';\nimport { posWithShrink } from '../../contributions/utils';\nimport { STROKE_WIDTH_SLECTED, STROKE_WIDTH } from '../../constants/points';\nimport { ArrowRenderer } from './arrow';\nimport './index.css';\n\nconst PADDING = 12;\n\nexport const LineSVG = defineComponent({\n name: 'LineSVG',\n props: {\n color: { type: String },\n selected: { type: Boolean, default: false },\n hovered: { type: Boolean, default: false },\n line: { type: Object as PropType<LineRenderProps['line']>, required: true },\n lineType: { type: [String, Number] as PropType<LineRenderProps['lineType']> },\n version: { type: String, required: true },\n strokePrefix: { type: String },\n rendererRegistry: {\n type: Object as PropType<LineRenderProps['rendererRegistry']>,\n },\n },\n setup(props, { slots }) {\n return () => {\n const { line, color, selected, strokePrefix, rendererRegistry } = props;\n const { position, reverse, hideArrow, vertical } = line;\n\n const renderData = line.getData(WorkflowLineRenderData);\n const { bounds, path: bezierPath } = renderData;\n\n const toRelative = (p: IPoint): IPoint => ({\n x: p.x - bounds.x + PADDING,\n y: p.y - bounds.y + PADDING,\n });\n\n const fromPos = toRelative(position.from);\n const toPos = toRelative(position.to);\n\n const arrowToPos: IPoint = posWithShrink(toPos, position.to.location, line.uiState.shrink);\n const arrowFromPos: IPoint = posWithShrink(\n fromPos,\n position.from.location,\n line.uiState.shrink\n );\n\n const strokeWidth = selected\n ? line.uiState.strokeWidthSelected ?? STROKE_WIDTH_SLECTED\n : line.uiState.strokeWidth ?? STROKE_WIDTH;\n\n const strokeID = strokePrefix ? `${strokePrefix}-${line.id}` : line.id;\n\n const CustomArrowRenderer = rendererRegistry?.tryToGetRendererComponent(\n FlowRendererKey.ARROW_RENDERER\n )?.renderer as ArrowRendererComponent | undefined;\n const ArrowComponent = (CustomArrowRenderer || ArrowRenderer) as Component;\n\n const pathNode = h('path', {\n d: bezierPath,\n fill: 'none',\n stroke: `url(#${strokeID})`,\n 'stroke-width': strokeWidth,\n class: line.processing || line.flowing ? 'dashed-line flowing-line' : '',\n });\n\n return h(\n 'div',\n {\n class: clsx('gedit-flow-activity-edge', line.className),\n style: {\n ...line.uiState.style,\n left: `${bounds.x - PADDING}px`,\n top: `${bounds.y - PADDING}px`,\n position: 'absolute',\n },\n },\n [\n slots.default?.(),\n h(\n 'svg',\n {\n width: bounds.width + PADDING * 2,\n height: bounds.height + PADDING * 2,\n },\n [\n h('defs', null, [\n h(\n 'linearGradient',\n {\n x1: vertical ? '100%' : '0%',\n y1: vertical ? '0%' : '100%',\n x2: '100%',\n y2: '100%',\n id: strokeID,\n gradientUnits: 'userSpaceOnUse',\n },\n [\n h('stop', { 'stop-color': color, offset: '0%' }),\n h('stop', { 'stop-color': color, offset: '100%' }),\n ]\n ),\n ]),\n h('g', null, [\n pathNode,\n h(ArrowComponent, {\n id: strokeID,\n pos: reverse ? arrowFromPos : arrowToPos,\n strokeWidth,\n location: reverse ? position.from.location : position.to.location,\n hide: hideArrow,\n line,\n }),\n ]),\n ]\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 { Fragment, h, Teleport, type Component, type VNode } from 'vue';\n\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport { FlowRendererRegistry } from '@flowgram-vue/renderer';\nimport { StackingContextManager } from '@flowgram-vue/free-stack-plugin';\nimport {\n nanoid,\n WorkflowDocument,\n WorkflowHoverService,\n WorkflowLineEntity,\n WorkflowLineRenderData,\n WorkflowNodeEntity,\n WorkflowPortEntity,\n WorkflowSelectService,\n} from '@flowgram-vue/free-layout-core';\nimport {\n Layer,\n observeEntities,\n observeEntityDatas,\n PlaygroundContainerFactory,\n TransformData,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from '../wrap-layer-render';\nimport { LineRenderProps, LinesLayerOptions } from '../type';\nimport { WorkflowLineRender } from '../components';\n\n@injectable()\nexport class WorkflowLinesLayer extends Layer<LinesLayerOptions> {\n static type = 'WorkflowLinesLayer';\n\n @inject(WorkflowHoverService) hoverService: WorkflowHoverService;\n\n @inject(WorkflowSelectService) selectService: WorkflowSelectService;\n\n @inject(StackingContextManager) stackContext: StackingContextManager;\n\n @inject(FlowRendererRegistry) rendererRegistry: FlowRendererRegistry;\n\n @inject(PlaygroundContainerFactory) playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntities(WorkflowLineEntity) readonly lines: WorkflowLineEntity[];\n\n @observeEntities(WorkflowPortEntity) readonly ports: WorkflowPortEntity[];\n\n @observeEntityDatas(WorkflowNodeEntity, TransformData)\n readonly trans: TransformData[];\n\n @inject(WorkflowDocument) protected workflowDocument: WorkflowDocument;\n\n private layerID = nanoid();\n\n private mountedLines: Map<\n string,\n {\n line: WorkflowLineEntity;\n portal: VNode;\n version: string;\n }\n > = new Map();\n\n private _version = 0;\n\n private rafId?: number;\n\n /**\n * 节点线条\n */\n public node = domUtils.createDivWithClass('gedit-playground-layer gedit-flow-lines-layer');\n\n public onZoom(scale: number): void {\n this.node.style.transform = `scale(${scale})`;\n }\n\n public onReady() {\n this.pipelineNode.appendChild(this.node);\n this.toDispose.pushAll([\n this.selectService.onSelectionChanged(() => this.render()),\n this.hoverService.onHoveredChange(() => this.render()),\n this.workflowDocument.linesManager.onForceUpdate(() => {\n this.mountedLines.clear();\n this.bumpVersion();\n this.render();\n }),\n ]);\n }\n\n public dispose() {\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = undefined;\n }\n this.mountedLines.clear();\n }\n\n public render(): VNode {\n this.scheduleLineRenderUpdate();\n const lines = this.lines.map((line) => this.renderLine(line));\n return wrapLayerRender(this.playgroundContainer, h(Fragment, null, lines));\n }\n\n private scheduleLineRenderUpdate(): void {\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n }\n this.rafId = requestAnimationFrame(() => {\n this.rafId = undefined;\n let needsUpdate = false;\n this.lines.forEach((line) => {\n const renderData = line.getData(WorkflowLineRenderData);\n const oldVersion = renderData.renderVersion;\n renderData.update();\n if (renderData.renderVersion !== oldVersion) {\n needsUpdate = true;\n }\n });\n if (needsUpdate) {\n this.render();\n }\n });\n }\n\n // 用来绕过 memo\n private bumpVersion() {\n this._version = this._version + 1;\n if (this._version === Number.MAX_SAFE_INTEGER) {\n this._version = 0;\n }\n }\n\n private lineProps(line: WorkflowLineEntity): LineRenderProps {\n const { lineType } = this.workflowDocument.linesManager;\n const selected = this.selectService.isSelected(line.id);\n const hovered = this.hoverService.isHovered(line.id);\n const version = this.lineVersion(line);\n\n const oldProps: LineRenderProps = {\n key: line.id,\n color: line.color,\n selected,\n hovered,\n line,\n lineType,\n version,\n strokePrefix: this.layerID,\n rendererRegistry: this.rendererRegistry,\n };\n return this.options.customLineProps ? this.options.customLineProps(line, oldProps) : oldProps;\n }\n\n private lineVersion(line: WorkflowLineEntity): string {\n const renderData = line.getData(WorkflowLineRenderData);\n const { renderVersion } = renderData;\n const selected = this.selectService.isSelected(line.id);\n const hovered = this.hoverService.isHovered(line.id);\n const { version: lineVersion, color } = line;\n\n const version = `v:${this._version},lv:${lineVersion},rv:${renderVersion},c:${color},s:${\n selected ? 'T' : 'F'\n },h:${hovered ? 'T' : 'F'}`;\n\n return version;\n }\n\n private lineComponent(props: LineRenderProps): VNode {\n const RenderInsideLine = this.options.renderInsideLine;\n const RenderLine = (this.options.renderLine ?? WorkflowLineRender) as Component;\n const inside = RenderInsideLine ? h(RenderInsideLine, props) : null;\n return h(RenderLine, props, () => inside);\n }\n\n private renderLine(line: WorkflowLineEntity): VNode {\n const lineProps = this.lineProps(line);\n const cache = this.mountedLines.get(line.id);\n const isCached = cache !== undefined;\n const { portal: cachedPortal, version: cachedVersion } = cache ?? {};\n if (isCached && cachedVersion === lineProps.version) {\n return cachedPortal!;\n }\n if (!isCached) {\n this.renderElement.appendChild(line.node);\n line.onDispose(() => {\n this.mountedLines.delete(line.id);\n line.node.remove();\n });\n }\n const portal = h(Teleport, { to: line.node, key: line.id }, [this.lineComponent(lineProps)]);\n this.mountedLines.set(line.id, { line, portal, version: lineProps.version });\n return portal;\n }\n\n private get renderElement(): HTMLElement {\n return this.stackContext.node;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type IPoint } from '@flowgram-vue/utils';\nimport { LinePoint, LinePointLocation } from '@flowgram-vue/free-layout-core';\n\n/**\n * Fork from: https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/bezier-edge.ts\n * MIT License\n * Copyright (c) 2019-2024 webkid GmbH\n */\nexport function getBezierEdgeCenter(\n fromPos: IPoint,\n toPos: IPoint,\n fromControl: IPoint,\n toControl: IPoint\n): IPoint {\n /*\n * cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n * https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n */\n const x = fromPos.x * 0.125 + fromControl.x * 0.375 + toControl.x * 0.375 + toPos.x * 0.125;\n const y = fromPos.y * 0.125 + fromControl.y * 0.375 + toControl.y * 0.375 + toPos.y * 0.125;\n return {\n x,\n y,\n };\n}\n\nfunction getControlOffset(distance: number, curvature: number): number {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n\n return curvature * 25 * Math.sqrt(-distance);\n}\n\nfunction getControlWithCurvature({\n location,\n x1,\n y1,\n x2,\n y2,\n curvature,\n}: {\n location: LinePointLocation;\n curvature: number;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}): IPoint {\n switch (location) {\n case 'left':\n return {\n x: x1 - getControlOffset(x1 - x2, curvature),\n y: y1,\n };\n case 'right':\n return {\n x: x1 + getControlOffset(x2 - x1, curvature),\n y: y1,\n };\n case 'top':\n return {\n x: x1,\n y: y1 - getControlOffset(y1 - y2, curvature),\n };\n case 'bottom':\n return {\n x: x1,\n y: y1 + getControlOffset(y2 - y1, curvature),\n };\n }\n}\n\nexport function getBezierControlPoints(\n fromPos: LinePoint,\n toPos: LinePoint,\n curvature = 0.25\n): { controls: [IPoint, IPoint]; center: IPoint } {\n const fromControl = getControlWithCurvature({\n location: fromPos.location,\n x1: fromPos.x,\n y1: fromPos.y,\n x2: toPos.x,\n y2: toPos.y,\n curvature,\n });\n const toControl = getControlWithCurvature({\n location: toPos.location,\n x1: toPos.x,\n y1: toPos.y,\n x2: fromPos.x,\n y2: fromPos.y,\n curvature,\n });\n const center = getBezierEdgeCenter(fromPos, toPos, fromControl, toControl);\n return {\n controls: [fromControl, toControl],\n center,\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Bezier } from 'bezier-js';\nimport { IPoint, Point, Rectangle } from '@flowgram-vue/utils';\nimport {\n WorkflowLineEntity,\n WorkflowLineRenderContribution,\n LinePoint,\n LineCenterPoint,\n} from '@flowgram-vue/free-layout-core';\nimport { LineType } from '@flowgram-vue/free-layout-core';\n\nimport { posWithShrink, toRelative } from '../utils';\nimport { getBezierControlPoints } from './bezier-controls';\n\nexport interface BezierData {\n fromPos: IPoint;\n toPos: IPoint;\n bbox: Rectangle; // 外围矩形\n controls: IPoint[]; // 控制点\n bezier: Bezier;\n path: string;\n center: LineCenterPoint;\n}\n\nexport class WorkflowBezierLineContribution implements WorkflowLineRenderContribution {\n public static type = LineType.BEZIER;\n\n public entity: WorkflowLineEntity;\n\n constructor(entity: WorkflowLineEntity) {\n this.entity = entity;\n }\n\n private data?: BezierData;\n\n public get path(): string {\n return this.data?.path ?? '';\n }\n\n public calcDistance(pos: IPoint): number {\n if (!this.data) {\n return Number.MAX_SAFE_INTEGER;\n }\n return Point.getDistance(pos, this.data.bezier.project(pos));\n }\n\n public get bounds(): Rectangle {\n if (!this.data) {\n return Rectangle.EMPTY;\n }\n return this.data.bbox;\n }\n\n get center() {\n return this.data?.center;\n }\n\n public update(params: { fromPos: LinePoint; toPos: LinePoint }): void {\n this.data = this.calcBezier(params.fromPos, params.toPos);\n }\n\n private calcBezier(fromPos: LinePoint, toPos: LinePoint): BezierData {\n const { controls, center } = getBezierControlPoints(\n fromPos,\n toPos,\n this.entity.uiState.curvature\n );\n const bezier = new Bezier([fromPos, ...controls, toPos]);\n const bbox = bezier.bbox();\n const bboxBounds = new Rectangle(\n bbox.x.min,\n bbox.y.min,\n bbox.x.max - bbox.x.min,\n bbox.y.max - bbox.y.min\n );\n const centerPoint = toRelative(center, bboxBounds);\n\n const path = this.getPath({ bbox: bboxBounds, fromPos, toPos, controls });\n\n this.data = {\n fromPos,\n toPos,\n bezier,\n bbox: bboxBounds,\n controls,\n path,\n center: {\n ...center,\n labelX: centerPoint.x,\n labelY: centerPoint.y,\n },\n };\n return this.data;\n }\n\n private getPath(params: {\n bbox: Rectangle;\n fromPos: LinePoint;\n toPos: LinePoint;\n controls: [IPoint, IPoint];\n }): string {\n const { bbox } = params;\n // 相对位置转换函数\n const fromPos = toRelative(params.fromPos, bbox);\n const toPos = toRelative(params.toPos, bbox);\n\n const controls = params.controls.map((c) => toRelative(c, bbox));\n const shrink = this.entity.uiState.shrink;\n\n const renderFromPos: IPoint = posWithShrink(fromPos, params.fromPos.location, shrink);\n\n const renderToPos: IPoint = posWithShrink(toPos, params.toPos.location, shrink);\n\n const controlPoints = controls.map((s) => `${s.x} ${s.y}`).join(',');\n return `M${renderFromPos.x} ${renderFromPos.y} C ${controlPoints}, ${renderToPos.x} ${renderToPos.y}`;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type IPoint, Point, Rectangle } from '@flowgram-vue/utils';\nimport { LinePoint } from '@flowgram-vue/free-layout-core';\n\n/**\n * 计算点到线段的距离\n * @param point 待测试点\n * @param segStart 线段起点\n * @param segEnd 线段终点\n */\nconst getPointToSegmentDistance = (point: IPoint, segStart: IPoint, segEnd: IPoint): number => {\n const { x: px, y: py } = point;\n const { x: x1, y: y1 } = segStart;\n const { x: x2, y: y2 } = segEnd;\n\n const A = px - x1;\n const B = py - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSq = C * C + D * D;\n\n // 参数方程中的t参数\n const param = lenSq === 0 ? -1 : dot / lenSq;\n\n let xx: number;\n let yy: number;\n\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = px - xx;\n const dy = py - yy;\n\n return Math.sqrt(dx * dx + dy * dy);\n};\n\n/**\n * Fork from: https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n * MIT License\n * Copyright (c) 2019-2024 webkid GmbH\n */\nexport namespace FoldLine {\n const EDGE_RADIUS = 5;\n const OFFSET = 20;\n\n function getEdgeCenter({ source, target }: { source: IPoint; target: IPoint }): [number, number] {\n const xOffset = Math.abs(target.x - source.x) / 2;\n const centerX = target.x < source.x ? target.x + xOffset : target.x - xOffset;\n\n const yOffset = Math.abs(target.y - source.y) / 2;\n const centerY = target.y < source.y ? target.y + yOffset : target.y - yOffset;\n\n return [centerX, centerY];\n }\n\n const getDirection = ({ source, target }: { source: LinePoint; target: LinePoint }): IPoint => {\n if (source.location === 'left' || source.location === 'right') {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n };\n\n const handleDirections = {\n left: { x: -1, y: 0 },\n right: { x: 1, y: 0 },\n top: { x: 0, y: -1 },\n bottom: { x: 0, y: 1 },\n };\n // eslint-disable-next-line complexity\n export function getPoints({ source, target }: { source: LinePoint; target: LinePoint }): {\n points: IPoint[];\n center: IPoint;\n } {\n const sourceDir = handleDirections[source.location];\n const targetDir = handleDirections[target.location];\n const sourceGapped: LinePoint = {\n x: source.x + sourceDir.x * OFFSET,\n y: source.y + sourceDir.y * OFFSET,\n location: source.location,\n };\n const targetGapped: LinePoint = {\n x: target.x + targetDir.x * OFFSET,\n y: target.y + targetDir.y * OFFSET,\n location: target.location,\n };\n const dir = getDirection({\n source: sourceGapped,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: IPoint[] = [];\n let centerX, centerY;\n\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n source,\n target,\n });\n\n // 计算向量乘积\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n\n const verticalSplit: IPoint[] = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n\n const horizontalSplit: IPoint[] = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: IPoint[] = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource: IPoint[] = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo =\n sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo =\n sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget =\n (sourceDir[dirAccessor] === 1 &&\n ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 &&\n ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n\n const sourceGapPoint = { x: sourceGapped.x, y: sourceGapped.y };\n const targetGapPoint = { x: targetGapped.x, y: targetGapped.y };\n const maxXDistance = Math.max(\n Math.abs(sourceGapPoint.x - points[0].x),\n Math.abs(targetGapPoint.x - points[0].x)\n );\n const maxYDistance = Math.max(\n Math.abs(sourceGapPoint.y - points[0].y),\n Math.abs(targetGapPoint.y - points[0].y)\n );\n\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n } else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n\n const pathPoints = [\n source,\n { x: sourceGapped.x, y: sourceGapped.y },\n ...points,\n { x: targetGapped.x, y: targetGapped.y },\n target,\n ];\n\n return {\n points: pathPoints,\n center: {\n x: centerX,\n y: centerY,\n },\n };\n }\n\n function getBend(a: IPoint, b: IPoint, c: IPoint): string {\n const bendSize = Math.min(\n Point.getDistance(a, b) / 2,\n Point.getDistance(b, c) / 2,\n EDGE_RADIUS\n );\n const { x, y } = b;\n\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n }\n\n /**\n * 实现 reactFlow 原本的折叠线交互\n */\n export function getSmoothStepPath(points: IPoint[]): string {\n const path = points.reduce<string>((res, p, i) => {\n let segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1]);\n } else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n\n res += segment;\n\n return res;\n }, '');\n\n return path;\n }\n export function getBounds(points: IPoint[]): Rectangle {\n const xList = points.map((p) => p.x);\n const yList = points.map((p) => p.y);\n const left = Math.min(...xList);\n const right = Math.max(...xList);\n const top = Math.min(...yList);\n const bottom = Math.max(...yList);\n return Rectangle.createRectangleWithTwoPoints(\n {\n x: left,\n y: top,\n },\n {\n x: right,\n y: bottom,\n }\n );\n }\n /**\n * 计算点到折线的最短距离\n * @param points 折线的所有端点\n * @param pos 待测试点\n * @returns 最短距离\n */\n export const getFoldLineToPointDistance = (points: IPoint[], pos: IPoint): number => {\n // 特殊情况处理\n if (points.length === 0) {\n return Infinity;\n }\n\n if (points.length === 1) {\n return Point.getDistance(points[0]!, pos);\n }\n\n // 构建线段数组\n const lines: [IPoint, IPoint][] = [];\n for (let i = 0; i < points.length - 1; i++) {\n lines.push([points[i]!, points[i + 1]!]);\n }\n\n // 计算点到每个线段的最短距离\n const distances = lines.map((line) => {\n const [p1, p2] = line;\n return getPointToSegmentDistance(pos, p1, p2);\n });\n\n return Math.min(...distances);\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, Rectangle } from '@flowgram-vue/utils';\nimport {\n WorkflowLineEntity,\n WorkflowLineRenderContribution,\n LinePoint,\n LineCenterPoint,\n} from '@flowgram-vue/free-layout-core';\nimport { LineType } from '@flowgram-vue/free-layout-core';\n\nimport { posWithShrink, toRelative } from '../utils';\nimport { FoldLine } from './fold-line';\n\nexport interface FoldData {\n points: IPoint[];\n path: string;\n bbox: Rectangle;\n center: LineCenterPoint;\n}\n\nexport class WorkflowFoldLineContribution implements WorkflowLineRenderContribution {\n public static type = LineType.LINE_CHART;\n\n public entity: WorkflowLineEntity;\n\n constructor(entity: WorkflowLineEntity) {\n this.entity = entity;\n }\n\n private data?: FoldData;\n\n public get path(): string {\n return this.data?.path ?? '';\n }\n\n public calcDistance(pos: IPoint): number {\n if (!this.data) {\n return Number.MAX_SAFE_INTEGER;\n }\n return FoldLine.getFoldLineToPointDistance(this.data.points, pos);\n }\n\n public get bounds(): Rectangle {\n if (!this.data) {\n return new Rectangle();\n }\n return this.data.bbox;\n }\n\n get center() {\n return this.data?.center;\n }\n\n public update(params: { fromPos: LinePoint; toPos: LinePoint }): void {\n const { fromPos, toPos } = params;\n const shrink = this.entity.uiState.shrink;\n\n // 根据方向预先计算源点和目标点的偏移\n const source = posWithShrink(fromPos, fromPos.location, shrink);\n const target = posWithShrink(toPos, toPos.location, shrink);\n\n const { points, center } = FoldLine.getPoints({\n source: {\n ...source,\n location: fromPos.location,\n },\n target: {\n ...target,\n location: toPos.location,\n },\n });\n\n const bbox = FoldLine.getBounds(points);\n\n // 调整所有点到 SVG 视口坐标系\n const adjustedPoints = points.map((p) => toRelative(p, bbox));\n\n const path = FoldLine.getSmoothStepPath(adjustedPoints);\n\n const relativeCenter = toRelative(center, bbox);\n this.data = {\n points,\n path,\n bbox,\n center: {\n x: center.x,\n y: center.y,\n labelX: relativeCenter.x,\n labelY: relativeCenter.y,\n },\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, Rectangle } from '@flowgram-vue/utils';\n\nexport interface StraightData {\n points: IPoint[];\n path: string;\n bbox: Rectangle;\n}\n\n/**\n * 计算点到直线的投影点\n */\nexport function projectPointOnLine(point: IPoint, lineStart: IPoint, lineEnd: IPoint): IPoint {\n const dx = lineEnd.x - lineStart.x;\n const dy = lineEnd.y - lineStart.y;\n\n // 如果是垂直线\n if (dx === 0) {\n return { x: lineStart.x, y: point.y };\n }\n // 如果是水平线\n if (dy === 0) {\n return { x: point.x, y: lineStart.y };\n }\n\n const t = ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / (dx * dx + dy * dy);\n const clampedT = Math.max(0, Math.min(1, t));\n\n return {\n x: lineStart.x + clampedT * dx,\n y: lineStart.y + clampedT * dy,\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, Point, Rectangle } from '@flowgram-vue/utils';\nimport {\n WorkflowLineEntity,\n WorkflowLineRenderContribution,\n LinePoint,\n LineCenterPoint,\n getLineCenter,\n LineType,\n} from '@flowgram-vue/free-layout-core';\n\nimport { LINE_PADDING } from '../../constants/lines';\nimport { projectPointOnLine } from './point-on-line';\nimport { posWithShrink } from '../utils';\n\nexport interface StraightData {\n points: IPoint[];\n path: string;\n bbox: Rectangle;\n center: LineCenterPoint;\n}\n\nexport class WorkflowStraightLineContribution implements WorkflowLineRenderContribution {\n public static type = LineType.STRAIGHT;\n\n public entity: WorkflowLineEntity;\n\n constructor(entity: WorkflowLineEntity) {\n this.entity = entity;\n }\n\n private data?: StraightData;\n\n public get path(): string {\n return this.data?.path ?? '';\n }\n\n public calcDistance(pos: IPoint): number {\n if (!this.data) {\n return Number.MAX_SAFE_INTEGER;\n }\n const [start, end] = this.data.points;\n return Point.getDistance(pos, projectPointOnLine(pos, start, end));\n }\n\n public get bounds(): Rectangle {\n if (!this.data) {\n return new Rectangle();\n }\n return this.data.bbox;\n }\n\n get center() {\n return this.data?.center;\n }\n\n public update(params: { fromPos: LinePoint; toPos: LinePoint }): void {\n const { fromPos, toPos } = params;\n const shrink = this.entity.uiState.shrink;\n\n // 根据方向预先计算源点和目标点的偏移\n const source = posWithShrink(fromPos, fromPos.location, shrink);\n const target = posWithShrink(toPos, toPos.location, shrink);\n\n const points = [source, target];\n\n const bbox = Rectangle.createRectangleWithTwoPoints(points[0], points[1]);\n\n // 调整所有点到 SVG 视口坐标系\n const adjustedPoints = points.map((p) => ({\n x: p.x - bbox.x + LINE_PADDING,\n y: p.y - bbox.y + LINE_PADDING,\n }));\n\n // 生成直线路径\n const path = `M ${adjustedPoints[0].x} ${adjustedPoints[0].y} L ${adjustedPoints[1].x} ${adjustedPoints[1].y}`;\n\n this.data = {\n points,\n path,\n bbox,\n center: getLineCenter(fromPos, toPos, bbox, LINE_PADDING),\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { WorkflowLinesManager } from '@flowgram-vue/free-layout-core';\nimport { definePluginCreator, PluginContext } from '@flowgram-vue/core';\n\nimport { FreeLinesPluginOptions } from './type';\nimport { WorkflowLinesLayer } from './layer';\nimport {\n WorkflowBezierLineContribution,\n WorkflowFoldLineContribution,\n WorkflowStraightLineContribution,\n} from './contributions';\n\nexport const createFreeLinesPlugin = definePluginCreator({\n singleton: true,\n onInit: (ctx: PluginContext, opts: FreeLinesPluginOptions) => {\n ctx.playground.registerLayer(WorkflowLinesLayer, {\n ...opts,\n });\n if (opts.defaultLineUIState) {\n ctx.container.get(WorkflowLinesManager).setDefaultUIState(opts.defaultLineUIState);\n }\n },\n onReady: (ctx: PluginContext, opts: FreeLinesPluginOptions) => {\n const linesManager = ctx.container.get(WorkflowLinesManager);\n linesManager\n .registerContribution(WorkflowBezierLineContribution)\n .registerContribution(WorkflowFoldLineContribution)\n .registerContribution(WorkflowStraightLineContribution);\n\n if (opts.contributions) {\n opts.contributions.forEach((contribution) => {\n linesManager.registerContribution(contribution);\n });\n }\n\n if (opts.defaultLineType) {\n linesManager.switchLineType(opts.defaultLineType);\n }\n },\n});\n"]}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* src/components/workflow-port-render/index.css */
|
|
2
|
+
.workflow-port-render {
|
|
3
|
+
width: 20px;
|
|
4
|
+
height: 20px;
|
|
5
|
+
border-radius: 50%;
|
|
6
|
+
margin-top: -10px;
|
|
7
|
+
margin-left: -10px;
|
|
8
|
+
left: 50%;
|
|
9
|
+
top: 50%;
|
|
10
|
+
position: absolute;
|
|
11
|
+
border: none;
|
|
12
|
+
}
|
|
13
|
+
.workflow-port-render > .symbol {
|
|
14
|
+
opacity: 0;
|
|
15
|
+
}
|
|
16
|
+
.workflow-port-render .bg-circle {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
position: absolute;
|
|
21
|
+
border-radius: 50%;
|
|
22
|
+
width: 20px;
|
|
23
|
+
height: 20px;
|
|
24
|
+
background-color: var(--g-workflow-port-color-background, #fff);
|
|
25
|
+
transform: scale(0.5);
|
|
26
|
+
transition: all 0.2s linear 0s;
|
|
27
|
+
}
|
|
28
|
+
.workflow-port-render .bg {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
position: relative;
|
|
33
|
+
width: 100%;
|
|
34
|
+
height: 100%;
|
|
35
|
+
border-radius: 50%;
|
|
36
|
+
background: var(--g-workflow-port-color-secondary, #9197f1);
|
|
37
|
+
transform: scale(0.4, 0.4);
|
|
38
|
+
transition: all 0.2s linear 0s;
|
|
39
|
+
}
|
|
40
|
+
.workflow-port-render .bg.hasError {
|
|
41
|
+
background: var(--g-workflow-port-color-error, red);
|
|
42
|
+
}
|
|
43
|
+
.workflow-port-render .bg .symbol {
|
|
44
|
+
position: absolute;
|
|
45
|
+
width: 14px;
|
|
46
|
+
height: 14px;
|
|
47
|
+
opacity: 0;
|
|
48
|
+
pointer-events: none;
|
|
49
|
+
color: var(--g-workflow-port-color-background, #fff);
|
|
50
|
+
transition: opacity 0.2s linear 0s;
|
|
51
|
+
}
|
|
52
|
+
.workflow-port-render .bg .symbol > svg {
|
|
53
|
+
width: 14px;
|
|
54
|
+
height: 14px;
|
|
55
|
+
}
|
|
56
|
+
.workflow-port-render .focus-circle {
|
|
57
|
+
position: absolute;
|
|
58
|
+
display: flex;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
align-items: center;
|
|
61
|
+
width: 8px;
|
|
62
|
+
height: 8px;
|
|
63
|
+
opacity: 0;
|
|
64
|
+
background: var(--g-workflow-port-color-secondary, #9197f1);
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
transition: opacity 0.2s linear 0s;
|
|
67
|
+
}
|
|
68
|
+
.workflow-port-render.linked .bg:not(.hasError) {
|
|
69
|
+
background: var(--g-workflow-port-color-primary, #4d53e8);
|
|
70
|
+
}
|
|
71
|
+
.workflow-port-render.hovered .bg:not(.hasError) {
|
|
72
|
+
border: none;
|
|
73
|
+
cursor: crosshair;
|
|
74
|
+
transform: scale(1, 1);
|
|
75
|
+
background: var(--g-workflow-port-color-primary, #4d53e8);
|
|
76
|
+
}
|
|
77
|
+
.workflow-port-render.hovered .bg:not(.hasError) > .symbol {
|
|
78
|
+
opacity: 1;
|
|
79
|
+
}
|
|
80
|
+
.workflow-port-render .cross-hair {
|
|
81
|
+
position: relative;
|
|
82
|
+
left: 2px;
|
|
83
|
+
top: 2px;
|
|
84
|
+
}
|
|
85
|
+
.workflow-port-render .cross-hair::after,
|
|
86
|
+
.workflow-port-render .cross-hair::before {
|
|
87
|
+
content: "";
|
|
88
|
+
background: var(--g-workflow-port-color-background, #fff);
|
|
89
|
+
border-radius: 2px;
|
|
90
|
+
position: absolute;
|
|
91
|
+
}
|
|
92
|
+
.workflow-port-render .cross-hair::after {
|
|
93
|
+
left: 4px;
|
|
94
|
+
width: 2px;
|
|
95
|
+
height: 6px;
|
|
96
|
+
box-shadow: 0 4px var(--g-workflow-port-color-background, #fff);
|
|
97
|
+
}
|
|
98
|
+
.workflow-port-render .cross-hair::before {
|
|
99
|
+
top: 4px;
|
|
100
|
+
width: 6px;
|
|
101
|
+
height: 2px;
|
|
102
|
+
box-shadow: 4px 0 var(--g-workflow-port-color-background, #fff);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* src/components/workflow-line-render/index.css */
|
|
106
|
+
.gedit-flow-activity-edge {
|
|
107
|
+
position: absolute;
|
|
108
|
+
}
|
|
109
|
+
@keyframes flowingDash {
|
|
110
|
+
to {
|
|
111
|
+
stroke-dashoffset: -13;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
.gedit-flow-activity-edge .dashed-line {
|
|
115
|
+
stroke-dasharray: 8, 5;
|
|
116
|
+
}
|
|
117
|
+
.gedit-flow-activity-edge .flowing-line {
|
|
118
|
+
animation: flowingDash 0.5s linear infinite;
|
|
119
|
+
}
|
|
120
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/workflow-port-render/index.css","../src/components/workflow-line-render/index.css"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n.workflow-port-render {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n margin-top: -10px;\n margin-left: -10px;\n left: 50%;\n top: 50%;\n position: absolute;\n border: none;\n}\n\n.workflow-port-render > .symbol {\n opacity: 0;\n}\n\n.workflow-port-render .bg-circle {\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n background-color: var(--g-workflow-port-color-background, #fff);\n transform: scale(0.5);\n transition: all 0.2s linear 0s;\n}\n\n.workflow-port-render .bg {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: var(--g-workflow-port-color-secondary, #9197f1);\n transform: scale(0.4, 0.4);\n transition: all 0.2s linear 0s;\n}\n\n.workflow-port-render .bg.hasError {\n background: var(--g-workflow-port-color-error, red);\n}\n\n.workflow-port-render .bg .symbol {\n position: absolute;\n width: 14px;\n height: 14px;\n opacity: 0;\n pointer-events: none;\n color: var(--g-workflow-port-color-background, #fff);\n transition: opacity 0.2s linear 0s;\n}\n\n.workflow-port-render .bg .symbol > svg {\n width: 14px;\n height: 14px;\n}\n\n.workflow-port-render .focus-circle {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 8px;\n height: 8px;\n opacity: 0;\n background: var(--g-workflow-port-color-secondary, #9197f1);\n border-radius: 50%;\n transition: opacity 0.2s linear 0s;\n}\n\n.workflow-port-render.linked .bg:not(.hasError) {\n background: var(--g-workflow-port-color-primary, #4d53e8);\n}\n\n.workflow-port-render.hovered .bg:not(.hasError) {\n border: none;\n cursor: crosshair;\n transform: scale(1, 1);\n background: var(--g-workflow-port-color-primary, #4d53e8);\n}\n\n.workflow-port-render.hovered .bg:not(.hasError) > .symbol {\n opacity: 1;\n}\n\n.workflow-port-render .cross-hair {\n position: relative;\n left: 2px;\n top: 2px;\n}\n\n.workflow-port-render .cross-hair::after,\n.workflow-port-render .cross-hair::before {\n content: '';\n background: var(--g-workflow-port-color-background, #fff);\n border-radius: 2px;\n position: absolute;\n}\n\n.workflow-port-render .cross-hair::after {\n left: 4px;\n width: 2px;\n height: 6px;\n box-shadow: 0 4px var(--g-workflow-port-color-background, #fff);\n}\n\n.workflow-port-render .cross-hair::before {\n top: 4px;\n width: 6px;\n height: 2px;\n box-shadow: 4px 0 var(--g-workflow-port-color-background, #fff);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n.gedit-flow-activity-edge {\n position: absolute;\n}\n\n@keyframes flowingDash {\n to {\n stroke-dashoffset: -13;\n }\n}\n\n.gedit-flow-activity-edge .dashed-line {\n stroke-dasharray: 8, 5;\n}\n\n.gedit-flow-activity-edge .flowing-line {\n animation: flowingDash 0.5s linear infinite;\n}\n"],"mappings":";AAKA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY;AACZ,eAAa;AACb,QAAM;AACN,OAAK;AACL,YAAU;AACV,UAAQ;AACV;AAEA,CAZC,qBAYqB,EAAE,CAAC;AACvB,WAAS;AACX;AAEA,CAhBC,qBAgBqB,CAAC;AACrB,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,YAAU;AACV,iBAAe;AACf,SAAO;AACP,UAAQ;AACR,oBAAkB,IAAI,kCAAkC,EAAE;AAC1D,aAAW,MAAM;AACjB,cAAY,IAAI,KAAK,OAAO;AAC9B;AAEA,CA7BC,qBA6BqB,CAAC;AACrB,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,YAAU;AACV,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI,iCAAiC,EAAE;AACnD,aAAW,MAAM,GAAG,EAAE;AACtB,cAAY,IAAI,KAAK,OAAO;AAC9B;AAEA,CA1CC,qBA0CqB,CAbC,EAaE,CAAC;AACxB,cAAY,IAAI,6BAA6B,EAAE;AACjD;AAEA,CA9CC,qBA8CqB,CAjBC,GAiBG,CAlCD;AAmCvB,YAAU;AACV,SAAO;AACP,UAAQ;AACR,WAAS;AACT,kBAAgB;AAChB,SAAO,IAAI,kCAAkC,EAAE;AAC/C,cAAY,QAAQ,KAAK,OAAO;AAClC;AAEA,CAxDC,qBAwDqB,CA3BC,GA2BG,CA5CD,OA4CS,EAAE;AAClC,SAAO;AACP,UAAQ;AACV;AAEA,CA7DC,qBA6DqB,CAAC;AACrB,YAAU;AACV,WAAS;AACT,mBAAiB;AACjB,eAAa;AACb,SAAO;AACP,UAAQ;AACR,WAAS;AACT,cAAY,IAAI,iCAAiC,EAAE;AACnD,iBAAe;AACf,cAAY,QAAQ,KAAK,OAAO;AAClC;AAEA,CA1EC,oBA0EoB,CAAC,OAAO,CA7CN,EA6CS,KAAK,CAhCX;AAiCxB,cAAY,IAAI,+BAA+B,EAAE;AACnD;AAEA,CA9EC,oBA8EoB,CAAC,QAAQ,CAjDP,EAiDU,KAAK,CApCZ;AAqCxB,UAAQ;AACR,UAAQ;AACR,aAAW,MAAM,CAAC,EAAE;AACpB,cAAY,IAAI,+BAA+B,EAAE;AACnD;AAEA,CArFC,oBAqFoB,CAPC,QAOQ,CAxDP,EAwDU,KAAK,CA3CZ,UA2CuB,EAAE,CAzE1B;AA0EvB,WAAS;AACX;AAEA,CAzFC,qBAyFqB,CAAC;AACrB,YAAU;AACV,QAAM;AACN,OAAK;AACP;AAEA,CA/FC,qBA+FqB,CANC,UAMU;AACjC,CAhGC,qBAgGqB,CAPC,UAOU;AAC/B,WAAS;AACT,cAAY,IAAI,kCAAkC,EAAE;AACpD,iBAAe;AACf,YAAU;AACZ;AAEA,CAvGC,qBAuGqB,CAdC,UAcU;AAC/B,QAAM;AACN,SAAO;AACP,UAAQ;AACR,cAAY,EAAE,IAAI,IAAI,kCAAkC,EAAE;AAC5D;AAEA,CA9GC,qBA8GqB,CArBC,UAqBU;AAC/B,OAAK;AACL,SAAO;AACP,UAAQ;AACR,cAAY,IAAI,EAAE,IAAI,kCAAkC,EAAE;AAC5D;;;ACnHA,CAAC;AACC,YAAU;AACZ;AAEA,WAAW;AACT;AACE,uBAAmB;AACrB;AACF;AAEA,CAVC,yBAUyB,CAAC;AACzB,oBAAkB,CAAC,EAAE;AACvB;AAEA,CAdC,yBAcyB,CAAC;AACzB,aAAW,YAAY,KAAK,OAAO;AACrC;","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import * as vue from 'vue';
|
|
2
|
+
import { PropType, CSSProperties, Component, VNodeChild, VNode } from 'vue';
|
|
3
|
+
import { WorkflowPortEntity, WorkflowLineEntity, LineRenderType, WorkflowLineRenderContributionFactory, WorkflowLineUIState, WorkflowHoverService, WorkflowSelectService, WorkflowDocument, LinePointLocation, LineCenterPoint, WorkflowLineRenderContribution, LineType, LinePoint } from '@flowgram-vue/free-layout-core';
|
|
4
|
+
import * as _flowgram_vue_core from '@flowgram-vue/core';
|
|
5
|
+
import { Layer, PlaygroundContainerFactory, TransformData } from '@flowgram-vue/core';
|
|
6
|
+
import { FlowRendererRegistry } from '@flowgram-vue/renderer';
|
|
7
|
+
import { StackingContextManager } from '@flowgram-vue/free-stack-plugin';
|
|
8
|
+
import { IPoint, Rectangle } from '@flowgram-vue/utils';
|
|
9
|
+
import { Bezier } from 'bezier-js';
|
|
10
|
+
|
|
11
|
+
interface WorkflowPortRenderProps {
|
|
12
|
+
entity: WorkflowPortEntity;
|
|
13
|
+
className?: string;
|
|
14
|
+
style?: CSSProperties;
|
|
15
|
+
onClick?: (e: MouseEvent, port: WorkflowPortEntity) => void;
|
|
16
|
+
/** 激活状态颜色 (linked/hovered) */
|
|
17
|
+
primaryColor?: string;
|
|
18
|
+
/** 默认状态颜色 */
|
|
19
|
+
secondaryColor?: string;
|
|
20
|
+
/** 错误状态颜色 */
|
|
21
|
+
errorColor?: string;
|
|
22
|
+
/** 背景颜色 */
|
|
23
|
+
backgroundColor?: string;
|
|
24
|
+
}
|
|
25
|
+
declare const WorkflowPortRender: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
26
|
+
entity: {
|
|
27
|
+
type: PropType<WorkflowPortEntity>;
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
className: {
|
|
31
|
+
type: StringConstructor;
|
|
32
|
+
default: string;
|
|
33
|
+
};
|
|
34
|
+
style: {
|
|
35
|
+
type: PropType<CSSProperties>;
|
|
36
|
+
};
|
|
37
|
+
onClick: {
|
|
38
|
+
type: PropType<(e: MouseEvent, port: WorkflowPortEntity) => void>;
|
|
39
|
+
};
|
|
40
|
+
primaryColor: {
|
|
41
|
+
type: StringConstructor;
|
|
42
|
+
};
|
|
43
|
+
secondaryColor: {
|
|
44
|
+
type: StringConstructor;
|
|
45
|
+
};
|
|
46
|
+
errorColor: {
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
};
|
|
49
|
+
backgroundColor: {
|
|
50
|
+
type: StringConstructor;
|
|
51
|
+
};
|
|
52
|
+
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
55
|
+
entity: {
|
|
56
|
+
type: PropType<WorkflowPortEntity>;
|
|
57
|
+
required: true;
|
|
58
|
+
};
|
|
59
|
+
className: {
|
|
60
|
+
type: StringConstructor;
|
|
61
|
+
default: string;
|
|
62
|
+
};
|
|
63
|
+
style: {
|
|
64
|
+
type: PropType<CSSProperties>;
|
|
65
|
+
};
|
|
66
|
+
onClick: {
|
|
67
|
+
type: PropType<(e: MouseEvent, port: WorkflowPortEntity) => void>;
|
|
68
|
+
};
|
|
69
|
+
primaryColor: {
|
|
70
|
+
type: StringConstructor;
|
|
71
|
+
};
|
|
72
|
+
secondaryColor: {
|
|
73
|
+
type: StringConstructor;
|
|
74
|
+
};
|
|
75
|
+
errorColor: {
|
|
76
|
+
type: StringConstructor;
|
|
77
|
+
};
|
|
78
|
+
backgroundColor: {
|
|
79
|
+
type: StringConstructor;
|
|
80
|
+
};
|
|
81
|
+
}>> & Readonly<{}>, {
|
|
82
|
+
className: string;
|
|
83
|
+
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
87
|
+
* SPDX-License-Identifier: MIT
|
|
88
|
+
*/
|
|
89
|
+
declare const LINE_OFFSET = 6;
|
|
90
|
+
declare const LINE_PADDING = 12;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
94
|
+
* SPDX-License-Identifier: MIT
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
interface LineRenderProps {
|
|
98
|
+
key: string;
|
|
99
|
+
color?: string;
|
|
100
|
+
selected?: boolean;
|
|
101
|
+
hovered?: boolean;
|
|
102
|
+
line: WorkflowLineEntity;
|
|
103
|
+
lineType: LineRenderType;
|
|
104
|
+
version: string;
|
|
105
|
+
strokePrefix?: string;
|
|
106
|
+
children?: VNodeChild;
|
|
107
|
+
rendererRegistry?: FlowRendererRegistry;
|
|
108
|
+
[key: string]: any;
|
|
109
|
+
}
|
|
110
|
+
interface LinesLayerOptions {
|
|
111
|
+
renderInsideLine?: Component;
|
|
112
|
+
renderLine?: Component;
|
|
113
|
+
customLineProps?: (line: WorkflowLineEntity, oldProps: LineRenderProps) => LineRenderProps;
|
|
114
|
+
}
|
|
115
|
+
interface FreeLinesPluginOptions extends LinesLayerOptions {
|
|
116
|
+
contributions?: WorkflowLineRenderContributionFactory[];
|
|
117
|
+
defaultLineUIState?: Partial<WorkflowLineUIState>;
|
|
118
|
+
defaultLineType?: LineRenderType;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
declare const createFreeLinesPlugin: _flowgram_vue_core.PluginCreator<FreeLinesPluginOptions>;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
125
|
+
* SPDX-License-Identifier: MIT
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
declare class WorkflowLinesLayer extends Layer<LinesLayerOptions> {
|
|
129
|
+
static type: string;
|
|
130
|
+
hoverService: WorkflowHoverService;
|
|
131
|
+
selectService: WorkflowSelectService;
|
|
132
|
+
stackContext: StackingContextManager;
|
|
133
|
+
rendererRegistry: FlowRendererRegistry;
|
|
134
|
+
playgroundContainer: PlaygroundContainerFactory;
|
|
135
|
+
readonly lines: WorkflowLineEntity[];
|
|
136
|
+
readonly ports: WorkflowPortEntity[];
|
|
137
|
+
readonly trans: TransformData[];
|
|
138
|
+
protected workflowDocument: WorkflowDocument;
|
|
139
|
+
private layerID;
|
|
140
|
+
private mountedLines;
|
|
141
|
+
private _version;
|
|
142
|
+
private rafId?;
|
|
143
|
+
/**
|
|
144
|
+
* 节点线条
|
|
145
|
+
*/
|
|
146
|
+
node: HTMLDivElement;
|
|
147
|
+
onZoom(scale: number): void;
|
|
148
|
+
onReady(): void;
|
|
149
|
+
dispose(): void;
|
|
150
|
+
render(): VNode;
|
|
151
|
+
private scheduleLineRenderUpdate;
|
|
152
|
+
private bumpVersion;
|
|
153
|
+
private lineProps;
|
|
154
|
+
private lineVersion;
|
|
155
|
+
private lineComponent;
|
|
156
|
+
private renderLine;
|
|
157
|
+
private get renderElement();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
162
|
+
* SPDX-License-Identifier: MIT
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* 箭头渲染器属性接口
|
|
167
|
+
*/
|
|
168
|
+
interface ArrowRendererProps {
|
|
169
|
+
/** 用于渐变的唯一ID */
|
|
170
|
+
id: string;
|
|
171
|
+
/** 箭头位置 */
|
|
172
|
+
pos: IPoint;
|
|
173
|
+
location: LinePointLocation;
|
|
174
|
+
/** 描边宽度 */
|
|
175
|
+
strokeWidth: number;
|
|
176
|
+
/** 是否隐藏箭头 */
|
|
177
|
+
hide?: boolean;
|
|
178
|
+
/** 线条实体,提供更多上下文信息 */
|
|
179
|
+
line: WorkflowLineEntity;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 箭头渲染器组件类型
|
|
183
|
+
*/
|
|
184
|
+
type ArrowRendererComponent = Component;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
188
|
+
* SPDX-License-Identifier: MIT
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
interface BezierData {
|
|
192
|
+
fromPos: IPoint;
|
|
193
|
+
toPos: IPoint;
|
|
194
|
+
bbox: Rectangle;
|
|
195
|
+
controls: IPoint[];
|
|
196
|
+
bezier: Bezier;
|
|
197
|
+
path: string;
|
|
198
|
+
center: LineCenterPoint;
|
|
199
|
+
}
|
|
200
|
+
declare class WorkflowBezierLineContribution implements WorkflowLineRenderContribution {
|
|
201
|
+
static type: LineType;
|
|
202
|
+
entity: WorkflowLineEntity;
|
|
203
|
+
constructor(entity: WorkflowLineEntity);
|
|
204
|
+
private data?;
|
|
205
|
+
get path(): string;
|
|
206
|
+
calcDistance(pos: IPoint): number;
|
|
207
|
+
get bounds(): Rectangle;
|
|
208
|
+
get center(): LineCenterPoint | undefined;
|
|
209
|
+
update(params: {
|
|
210
|
+
fromPos: LinePoint;
|
|
211
|
+
toPos: LinePoint;
|
|
212
|
+
}): void;
|
|
213
|
+
private calcBezier;
|
|
214
|
+
private getPath;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
219
|
+
* SPDX-License-Identifier: MIT
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
interface FoldData {
|
|
223
|
+
points: IPoint[];
|
|
224
|
+
path: string;
|
|
225
|
+
bbox: Rectangle;
|
|
226
|
+
center: LineCenterPoint;
|
|
227
|
+
}
|
|
228
|
+
declare class WorkflowFoldLineContribution implements WorkflowLineRenderContribution {
|
|
229
|
+
static type: LineType;
|
|
230
|
+
entity: WorkflowLineEntity;
|
|
231
|
+
constructor(entity: WorkflowLineEntity);
|
|
232
|
+
private data?;
|
|
233
|
+
get path(): string;
|
|
234
|
+
calcDistance(pos: IPoint): number;
|
|
235
|
+
get bounds(): Rectangle;
|
|
236
|
+
get center(): LineCenterPoint | undefined;
|
|
237
|
+
update(params: {
|
|
238
|
+
fromPos: LinePoint;
|
|
239
|
+
toPos: LinePoint;
|
|
240
|
+
}): void;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
245
|
+
* SPDX-License-Identifier: MIT
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
interface StraightData {
|
|
249
|
+
points: IPoint[];
|
|
250
|
+
path: string;
|
|
251
|
+
bbox: Rectangle;
|
|
252
|
+
center: LineCenterPoint;
|
|
253
|
+
}
|
|
254
|
+
declare class WorkflowStraightLineContribution implements WorkflowLineRenderContribution {
|
|
255
|
+
static type: LineType;
|
|
256
|
+
entity: WorkflowLineEntity;
|
|
257
|
+
constructor(entity: WorkflowLineEntity);
|
|
258
|
+
private data?;
|
|
259
|
+
get path(): string;
|
|
260
|
+
calcDistance(pos: IPoint): number;
|
|
261
|
+
get bounds(): Rectangle;
|
|
262
|
+
get center(): LineCenterPoint | undefined;
|
|
263
|
+
update(params: {
|
|
264
|
+
fromPos: LinePoint;
|
|
265
|
+
toPos: LinePoint;
|
|
266
|
+
}): void;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export { type ArrowRendererComponent, type ArrowRendererProps, type BezierData, type FoldData, type FreeLinesPluginOptions, LINE_OFFSET, LINE_PADDING, type LineRenderProps, WorkflowLinesLayer as LinesLayer, type LinesLayerOptions, type StraightData, WorkflowBezierLineContribution, WorkflowFoldLineContribution, WorkflowLinesLayer, WorkflowPortRender, type WorkflowPortRenderProps, WorkflowStraightLineContribution, createFreeLinesPlugin };
|