diff --git a/packages/editor-ui/src/__tests__/data/canvas.ts b/packages/editor-ui/src/__tests__/data/canvas.ts index e0e748b89c..6c218e3617 100644 --- a/packages/editor-ui/src/__tests__/data/canvas.ts +++ b/packages/editor-ui/src/__tests__/data/canvas.ts @@ -125,6 +125,7 @@ export function createCanvasHandleProvide({ isConnected = false, isConnecting = false, isReadOnly = false, + isRequired = false, }: { label?: string; mode?: CanvasConnectionMode; @@ -134,6 +135,7 @@ export function createCanvasHandleProvide({ isConnected?: boolean; isConnecting?: boolean; isReadOnly?: boolean; + isRequired?: boolean; } = {}) { return { [String(CanvasNodeHandleKey)]: { @@ -143,8 +145,9 @@ export function createCanvasHandleProvide({ index: ref(index), isConnected: ref(isConnected), isConnecting: ref(isConnecting), - runData: ref(runData), isReadOnly: ref(isReadOnly), + isRequired: ref(isRequired), + runData: ref(runData), } satisfies CanvasNodeHandleInjectionData, }; } diff --git a/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdge.vue b/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdge.vue index cb384489a9..1c08cea43d 100644 --- a/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdge.vue +++ b/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdge.vue @@ -5,7 +5,7 @@ import { isValidNodeConnectionType } from '@/utils/typeGuards'; import type { Connection, EdgeProps } from '@vue-flow/core'; import { useVueFlow, BaseEdge, EdgeLabelRenderer } from '@vue-flow/core'; import { NodeConnectionType } from 'n8n-workflow'; -import { computed, useCssModule, ref } from 'vue'; +import { computed, useCssModule, ref, toRef } from 'vue'; import CanvasEdgeToolbar from './CanvasEdgeToolbar.vue'; import { getCustomPath } from './utils/edgePath'; @@ -21,6 +21,8 @@ export type CanvasEdgeProps = EdgeProps & { const props = defineProps(); +const data = toRef(props, 'data'); + const { onEdgeMouseEnter, onEdgeMouseLeave } = useVueFlow(); const isHovered = ref(false); @@ -44,6 +46,8 @@ const connectionType = computed(() => const renderToolbar = computed(() => (props.selected || isHovered.value) && !props.readOnly); +const isMainConnection = computed(() => data.value.source.type === NodeConnectionType.Main); + const status = computed(() => props.data.status); const statusColor = computed(() => { if (props.selected) { @@ -54,6 +58,8 @@ const statusColor = computed(() => { return 'var(--color-secondary)'; } else if (status.value === 'running') { return 'var(--color-primary)'; + } else if (!isMainConnection.value) { + return 'var(--node-type-supplemental-color)'; } else { return 'var(--color-foreground-xdark)'; } @@ -61,6 +67,7 @@ const statusColor = computed(() => { const edgeStyle = computed(() => ({ ...props.style, + ...(isMainConnection.value ? {} : { strokeDasharray: '8,8' }), strokeWidth: 2, stroke: isHovered.value ? 'var(--color-primary)' : statusColor.value, })); diff --git a/packages/editor-ui/src/components/canvas/elements/handles/CanvasHandleRenderer.vue b/packages/editor-ui/src/components/canvas/elements/handles/CanvasHandleRenderer.vue index 9b28d855ed..61c243e83d 100644 --- a/packages/editor-ui/src/components/canvas/elements/handles/CanvasHandleRenderer.vue +++ b/packages/editor-ui/src/components/canvas/elements/handles/CanvasHandleRenderer.vue @@ -20,6 +20,7 @@ const props = defineProps<{ isConnecting?: boolean; isReadOnly?: boolean; label?: string; + required?: boolean; type: CanvasConnectionPort['type']; index: CanvasConnectionPort['index']; position: CanvasElementPortWithRenderData['position']; @@ -116,6 +117,7 @@ const isReadOnly = toRef(props, 'isReadOnly'); const mode = toRef(props, 'mode'); const type = toRef(props, 'type'); const index = toRef(props, 'index'); +const isRequired = toRef(props, 'required'); provide(CanvasNodeHandleKey, { label, @@ -123,6 +125,7 @@ provide(CanvasNodeHandleKey, { type, index, runData, + isRequired, isConnected, isConnecting, isReadOnly, diff --git a/packages/editor-ui/src/components/canvas/elements/handles/render-types/CanvasHandleMainInput.vue b/packages/editor-ui/src/components/canvas/elements/handles/render-types/CanvasHandleMainInput.vue index 27abce02a8..fc9f847f76 100644 --- a/packages/editor-ui/src/components/canvas/elements/handles/render-types/CanvasHandleMainInput.vue +++ b/packages/editor-ui/src/components/canvas/elements/handles/render-types/CanvasHandleMainInput.vue @@ -1,12 +1,21 @@