diff --git a/app/w/[id]/workflow.tsx b/app/w/[id]/workflow.tsx
index aea6e87f2e..7e439eab4a 100644
--- a/app/w/[id]/workflow.tsx
+++ b/app/w/[id]/workflow.tsx
@@ -118,6 +118,7 @@ function WorkflowCanvas() {
type: 'workflowBlock',
position: block.position,
selected: block.id === selectedBlockId,
+ dragHandle: '.workflow-drag-handle',
data: {
type: block.type,
config: getBlock(block.type),
@@ -323,6 +324,7 @@ function WorkflowCanvas() {
selectNodesOnDrag={false}
nodesConnectable={true}
nodesDraggable={true}
+ draggable={false}
>
diff --git a/app/w/components/workflow-block/components/connection-block/connection-block.tsx b/app/w/components/workflow-block/components/connection-block/connection-block.tsx
index 228961f0c4..17185c3a5d 100644
--- a/app/w/components/workflow-block/components/connection-block/connection-block.tsx
+++ b/app/w/components/workflow-block/components/connection-block/connection-block.tsx
@@ -11,12 +11,31 @@ export function ConnectionBlock({ blockId }: ConnectionBlockProps) {
if (!hasIncomingConnections) return null
+ const handleDragStart = (e: React.DragEvent, connection: any) => {
+ e.stopPropagation() // Prevent parent drag handlers from firing
+ e.dataTransfer.setData(
+ 'application/json',
+ JSON.stringify({
+ type: 'connection',
+ connectionData: {
+ id: connection.id,
+ name: connection.name,
+ outputType: connection.outputType,
+ sourceBlockId: blockId,
+ },
+ })
+ )
+ e.dataTransfer.effectAllowed = 'copy'
+ }
+
return (
{incomingConnections.map((connection) => (
handleDragStart(e, connection)}
+ className="group flex items-center rounded-lg border bg-card p-2 shadow-sm transition-colors hover:bg-accent/50 cursor-grab active:cursor-grabbing w-fit"
>
diff --git a/app/w/components/workflow-block/workflow-block.tsx b/app/w/components/workflow-block/workflow-block.tsx
index f053ef6878..09eaa6c1b3 100644
--- a/app/w/components/workflow-block/workflow-block.tsx
+++ b/app/w/components/workflow-block/workflow-block.tsx
@@ -51,7 +51,7 @@ export function WorkflowBlock({
const subBlockRows = groupSubBlocks(workflow.subBlocks)
return (
-
+
{selected && }
@@ -59,15 +59,16 @@ export function WorkflowBlock({
type="target"
position={Position.Top}
className={cn(
- '!w-3 !h-3',
+ '!w-3.5 !h-3.5',
'!bg-white !rounded-full !border !border-gray-200',
'!opacity-0 group-hover:!opacity-100',
'!transition-opacity !duration-200 !cursor-crosshair',
- 'hover:!border-blue-500'
+ 'hover:!border-blue-500',
+ '!top-[-7px]'
)}
/>
-