diff --git a/src/renderer/components/WorkflowEditor.tsx b/src/renderer/components/WorkflowEditor.tsx index 9b1f1d2..66835f5 100644 --- a/src/renderer/components/WorkflowEditor.tsx +++ b/src/renderer/components/WorkflowEditor.tsx @@ -182,6 +182,13 @@ export function WorkflowEditor({ const issues = validateWorkflowDefinition(activeWorkflow); + const disabledPaletteKinds = useMemo(() => { + const disabled = new Set(); + if (activeWorkflow.graph.nodes.some((n) => n.kind === 'start')) disabled.add('start'); + if (activeWorkflow.graph.nodes.some((n) => n.kind === 'end')) disabled.add('end'); + return disabled; + }, [activeWorkflow.graph.nodes]); + /* ── Change propagation ─────────────────────────────────── */ function propagateActiveChange(updatedActive: WorkflowDefinition) { @@ -482,7 +489,7 @@ export function WorkflowEditor({
{/* Left palette */}
- +
{/* Center column: validation + canvas + settings */} diff --git a/src/renderer/components/workflow/WorkflowNodePalette.tsx b/src/renderer/components/workflow/WorkflowNodePalette.tsx index 3a46ebd..6788bde 100644 --- a/src/renderer/components/workflow/WorkflowNodePalette.tsx +++ b/src/renderer/components/workflow/WorkflowNodePalette.tsx @@ -4,6 +4,7 @@ import type { WorkflowNodeKind } from '@shared/domain/workflow'; interface WorkflowNodePaletteProps { onAddNode: (kind: WorkflowNodeKind) => void; + disabledKinds?: ReadonlySet; } interface PaletteItem { @@ -48,7 +49,7 @@ const paletteGroups: PaletteGroup[] = [ }, ]; -export function WorkflowNodePalette({ onAddNode }: WorkflowNodePaletteProps) { +export function WorkflowNodePalette({ onAddNode, disabledKinds }: WorkflowNodePaletteProps) { return (

@@ -62,11 +63,18 @@ export function WorkflowNodePalette({ onAddNode }: WorkflowNodePaletteProps) {
{group.items.map((item) => { const Icon = item.icon; + const disabled = disabledKinds?.has(item.kind) ?? false; return (