Graduation
/
ui
/node_modules
/@xyflow
/svelte
/dist
/lib
/components
/ConnectionLine
/ConnectionLine.svelte
<script>import cc from 'classcat'; | |
import { useStore } from '../../store'; | |
import { ConnectionLineType, getBezierPath, getConnectionStatus, getSmoothStepPath, getStraightPath } from '@xyflow/system'; | |
export let containerStyle = ''; | |
export let style = ''; | |
export let isCustomComponent = false; | |
const { width, height, connection, connectionLineType } = useStore(); | |
let path = null; | |
$: if ($connection.inProgress && !isCustomComponent) { | |
const { from, to, fromPosition, toPosition } = $connection; | |
const pathParams = { | |
sourceX: from.x, | |
sourceY: from.y, | |
sourcePosition: fromPosition, | |
targetX: to.x, | |
targetY: to.y, | |
targetPosition: toPosition | |
}; | |
switch ($connectionLineType) { | |
case ConnectionLineType.Bezier: | |
[path] = getBezierPath(pathParams); | |
break; | |
case ConnectionLineType.Step: | |
[path] = getSmoothStepPath({ | |
...pathParams, | |
borderRadius: 0 | |
}); | |
break; | |
case ConnectionLineType.SmoothStep: | |
[path] = getSmoothStepPath(pathParams); | |
break; | |
default: | |
[path] = getStraightPath(pathParams); | |
} | |
} | |
</script> | |
{#if $connection.inProgress} | |
<svg width={$width} height={$height} class="svelte-flow__connectionline" style={containerStyle}> | |
<g class={cc(['svelte-flow__connection', getConnectionStatus($connection.isValid)])}> | |
<slot name="connectionLine" /> | |
<!-- slot fallbacks do not work if slots are forwarded in parent --> | |
{#if !isCustomComponent} | |
<path d={path} {style} fill="none" class="svelte-flow__connection-path" /> | |
{/if} | |
</g> | |
</svg> | |
{/if} | |