diff --git a/apps/ui/src/components/views/ideation-view/components/ideation-dashboard.tsx b/apps/ui/src/components/views/ideation-view/components/ideation-dashboard.tsx index 31bde501..41d12a34 100644 --- a/apps/ui/src/components/views/ideation-view/components/ideation-dashboard.tsx +++ b/apps/ui/src/components/views/ideation-view/components/ideation-dashboard.tsx @@ -19,6 +19,30 @@ import type { AnalysisSuggestion } from '@automaker/types'; // Helper for consistent pluralization of "idea/ideas" const pluralizeIdea = (count: number) => `idea${count !== 1 ? 's' : ''}`; +// Helper to map priority to Badge variant +const getPriorityVariant = ( + priority: string +): + | 'default' + | 'secondary' + | 'destructive' + | 'outline' + | 'success' + | 'warning' + | 'error' + | 'info' => { + switch (priority.toLowerCase()) { + case 'high': + return 'error'; + case 'medium': + return 'warning'; + case 'low': + return 'info'; + default: + return 'secondary'; + } +}; + interface IdeationDashboardProps { onGenerateIdeas: () => void; onAcceptAllReady?: (isReady: boolean, count: number, handler: () => Promise) => void; @@ -39,37 +63,51 @@ function SuggestionCard({ isAdding: boolean; }) { return ( - - + +
-
-
-

{suggestion.title}

+
+
+
+

{suggestion.title}

+
- + {suggestion.priority} - + {job.prompt.title}
-

{suggestion.description}

+ +

+ {suggestion.description} +

+ {suggestion.rationale && ( -

{suggestion.rationale}

+
+

{suggestion.rationale}

+
)}
-
+ +
- +
@@ -91,19 +138,33 @@ function GeneratingCard({ job }: { job: GenerationJob }) { const isError = job.status === 'error'; return ( - - + +
-
- {isError ? ( - - ) : ( - - )} +
+
+ {isError ? ( + + ) : ( + + )} +

{job.prompt.title}

- {isError ? job.error || 'Failed to generate' : 'Generating ideas...'} + {isError + ? job.error || 'Failed to generate' + : 'Analyzing codebase and generating ideas...'}

@@ -135,7 +196,7 @@ function TagFilter({ if (tags.length === 0) return null; return ( -
+
{tags.map((tag) => { const isSelected = selectedTags.has(tag); const count = tagCounts[tag] || 0; @@ -144,28 +205,31 @@ function TagFilter({ key={tag} onClick={() => onToggleTag(tag)} className={cn( - 'px-3 py-1.5 text-sm rounded-full border transition-all flex items-center gap-1.5', + 'px-3.5 py-1.5 text-sm rounded-full border shadow-sm transition-all flex items-center gap-2', isSelected - ? 'bg-primary text-primary-foreground border-primary' - : 'bg-secondary/50 text-muted-foreground border-border hover:border-primary/50 hover:text-foreground' + ? 'bg-primary text-primary-foreground border-primary ring-2 ring-primary/20' + : 'bg-card text-muted-foreground border-border hover:border-primary/50 hover:text-foreground hover:bg-accent/50' )} > - {tag} + {tag} - ({count}) + {count} ); })} + {selectedTags.size > 0 &&
} {selectedTags.size > 0 && ( diff --git a/apps/ui/src/components/views/ideation-view/components/prompt-category-grid.tsx b/apps/ui/src/components/views/ideation-view/components/prompt-category-grid.tsx index ccf0de83..a4d3d505 100644 --- a/apps/ui/src/components/views/ideation-view/components/prompt-category-grid.tsx +++ b/apps/ui/src/components/views/ideation-view/components/prompt-category-grid.tsx @@ -69,17 +69,19 @@ export function PromptCategoryGrid({ onSelect, onBack }: PromptCategoryGridProps return ( onSelect(category.id)} > -
-
- +
+
+
-
-

{category.name}

-

{category.description}

+
+

+ {category.name} +

+

{category.description}

diff --git a/apps/ui/src/components/views/ideation-view/components/prompt-list.tsx b/apps/ui/src/components/views/ideation-view/components/prompt-list.tsx index d87600f3..a7e3fc8b 100644 --- a/apps/ui/src/components/views/ideation-view/components/prompt-list.tsx +++ b/apps/ui/src/components/views/ideation-view/components/prompt-list.tsx @@ -141,43 +141,51 @@ export function PromptList({ category, onBack }: PromptListProps) { return ( !isDisabled && handleSelectPrompt(prompt)} > -
+
{isLoading || isGenerating ? ( - + ) : isStarted ? ( - + ) : ( - + )}
-
-

{prompt.title}

-

{prompt.description}

+
+
+

+ {prompt.title} +

+ {isStarted && !isGenerating && ( + + Generated + + )} +
+

+ {prompt.description} +

{(isLoading || isGenerating) && ( -

Generating in dashboard...

- )} - {isStarted && !isGenerating && ( -

- Already generated - check dashboard +

+ Generating ideas...

)}