diff --git a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx index 62223f6..161b193 100644 --- a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx +++ b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx @@ -1,15 +1,25 @@ +import { useEffect, useState } from 'react'; import { X } from 'lucide-react'; import { useWorkflowStore } from '@/stores/workflow-store'; import { AgentDetail } from './AgentDetail'; import { ScriptDetail } from './ScriptDetail'; import { GateDetail } from './GateDetail'; import { GroupDetail } from './GroupDetail'; +import { cn } from '@/lib/utils'; export function DetailPanel() { const selectedNode = useWorkflowStore((s) => s.selectedNode); const nodes = useWorkflowStore((s) => s.nodes); const selectNode = useWorkflowStore((s) => s.selectNode); + // Slide-in animation state + const [mounted, setMounted] = useState(false); + useEffect(() => { + // Trigger animation on next frame after mount + requestAnimationFrame(() => setMounted(true)); + return () => setMounted(false); + }, [selectedNode]); + const node = selectedNode ? nodes[selectedNode] : null; if (!selectedNode || !node) { @@ -40,7 +50,12 @@ export function DetailPanel() { })(); return ( -
- Waiting for workflow… + {emptyMessage}