diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx index 18ac301f..b552d14a 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx @@ -73,7 +73,7 @@ interface DashboardCanvasProps { onNewAgent: () => void; onToolbarCancel: () => void; onToolbarSend: (...args: any[]) => void; - onStarter: (action: 'hover' | 'leave' | 'commit', prompt?: string) => void; + onStarter: (prompt: string) => void; toolbarPrefill?: string; onAddView: (outputId: string) => void; onHistoryResume: (sessionId: string) => void; diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx index 7c27ff6e..35314af1 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx @@ -62,9 +62,8 @@ const STARTER_CATEGORIES: StarterCategory[] = [ const DashboardEmptyState: React.FC<{ c: ClaudeTokens; onLaunch?: (prompt: string, mode: string, model: string) => void; - // hover = preview-open the composer (translucent), leave = close it, - // commit = lock it open so the user can move to send. - onStarter?: (action: 'hover' | 'leave' | 'commit', prompt?: string) => void; + // Open the composer with the prompt typed in (translucent, unsent) on click. + onStarter?: (prompt: string) => void; }> = ({ c, onLaunch, onStarter }) => { // The host hides Dashboard with visibility:hidden (not display:none), which keeps // CSS animations ticking; gate on active so the shimmer only burns while watched. @@ -84,7 +83,7 @@ const DashboardEmptyState: React.FC<{ const isAppBuilder = currentCategory?.target === 'app-builder'; - // Click commits the query into the composer (locks it open); the user then sends. + // Click opens the composer with the prompt typed in (unsent); the user then sends. const launch = (prompt: string) => { if (launching) return; if (isAppBuilder) { @@ -92,7 +91,7 @@ const DashboardEmptyState: React.FC<{ return; } if (onStarter) { - onStarter('commit', prompt); + onStarter(prompt); return; } if (!onLaunch) return; @@ -202,16 +201,12 @@ const DashboardEmptyState: React.FC<{ > back - { if (!isAppBuilder) onStarter?.('leave'); }} - sx={{ display: 'flex', flexDirection: 'column', gap: 0.9, width: '100%', maxWidth: 480 }} - > + {currentPrompts.map((prompt) => ( launch(prompt)} - onMouseEnter={() => { if (!isAppBuilder) onStarter?.('hover', prompt); }} disabled={launching} sx={{ textAlign: 'left', diff --git a/frontend/src/app/pages/Dashboard/hooks/state/useDashboardController.ts b/frontend/src/app/pages/Dashboard/hooks/state/useDashboardController.ts index f0080a00..eb430e50 100644 --- a/frontend/src/app/pages/Dashboard/hooks/state/useDashboardController.ts +++ b/frontend/src/app/pages/Dashboard/hooks/state/useDashboardController.ts @@ -159,28 +159,15 @@ export function useDashboardController(dashboardId: string, isActive: boolean) { setSearchPaletteOpen, }); - // Starter-prompt preview: HOVER opens the composer with the prompt typed in - // (translucent, unsent); leaving closes it again; CLICK locks it open so the - // user can move to the send button without it vanishing. Then they hit send. + // Starter-prompt click: opens the composer with the prompt typed in (translucent, + // unsent), so the user reviews and hits send. Cleared when the composer closes. const [toolbarPrefill, setToolbarPrefill] = useState(undefined); - const starterLockedRef = useRef(false); - const handleStarter = useCallback((action: 'hover' | 'leave' | 'commit', prompt?: string) => { - if (action === 'hover' && prompt) { - setToolbarPrefill(prompt); - setToolbarOpen(true); - } else if (action === 'commit' && prompt) { - starterLockedRef.current = true; - setToolbarPrefill(prompt); - setToolbarOpen(true); - } else if (action === 'leave' && !starterLockedRef.current) { - setToolbarOpen(false); - } + const handleStarter = useCallback((prompt: string) => { + setToolbarPrefill(prompt); + setToolbarOpen(true); }, [setToolbarOpen]); useEffect(() => { - if (!toolbarOpen) { - starterLockedRef.current = false; - if (toolbarPrefill) setToolbarPrefill(undefined); - } + if (!toolbarOpen && toolbarPrefill) setToolbarPrefill(undefined); }, [toolbarOpen, toolbarPrefill]); useDashboardClipboard({