diff --git a/apps/ui/src/app.tsx b/apps/ui/src/app.tsx index b2cb1525..dedd9e8d 100644 --- a/apps/ui/src/app.tsx +++ b/apps/ui/src/app.tsx @@ -7,6 +7,7 @@ import { useSettingsSync } from './hooks/use-settings-sync'; import { useCursorStatusInit } from './hooks/use-cursor-status-init'; import { useProviderAuthInit } from './hooks/use-provider-auth-init'; import { useAppStore } from './store/app-store'; +import { TooltipProvider } from '@/components/ui/tooltip'; import './styles/global.css'; import './styles/theme-imports'; import './styles/font-imports'; @@ -75,9 +76,9 @@ export default function App() { }, []); return ( - <> + {showSplash && !disableSplashScreen && } - + ); } diff --git a/apps/ui/src/components/layout/sidebar/components/sidebar-footer.tsx b/apps/ui/src/components/layout/sidebar/components/sidebar-footer.tsx index 0dab1694..666d2339 100644 --- a/apps/ui/src/components/layout/sidebar/components/sidebar-footer.tsx +++ b/apps/ui/src/components/layout/sidebar/components/sidebar-footer.tsx @@ -5,7 +5,7 @@ import { formatShortcut } from '@/store/app-store'; import { Activity, Settings, BookOpen, MessageSquare, ExternalLink } from 'lucide-react'; import { useOSDetection } from '@/hooks/use-os-detection'; import { getElectronAPI } from '@/lib/electron'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; function getOSAbbreviation(os: string): string { switch (os) { @@ -72,68 +72,14 @@ export function SidebarFooter({
{/* Running Agents */} {!hideRunningAgents && ( - - - - - - - Running Agents - {runningAgentsCount > 0 && ( - - {runningAgentsCount} - - )} - - - - )} - - {/* Settings */} - - Global Settings - - {formatShortcut(shortcuts.settings, true)} - + Running Agents + {runningAgentsCount > 0 && ( + + {runningAgentsCount} + + )} - + )} + + {/* Settings */} + + + + + + Global Settings + + {formatShortcut(shortcuts.settings, true)} + + + {/* Documentation */} {!hideWiki && ( - - - - - - - Documentation - - - - )} - - {/* Feedback */} - - Feedback + Documentation - + )} + + {/* Feedback */} + + + + + + Feedback + +
); diff --git a/apps/ui/src/components/layout/sidebar/components/sidebar-header.tsx b/apps/ui/src/components/layout/sidebar/components/sidebar-header.tsx index a1360e79..7a92aec9 100644 --- a/apps/ui/src/components/layout/sidebar/components/sidebar-header.tsx +++ b/apps/ui/src/components/layout/sidebar/components/sidebar-header.tsx @@ -15,7 +15,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; interface SidebarHeaderProps { sidebarOpen: boolean; @@ -92,78 +92,74 @@ export function SidebarHeader({ isMac && isElectron() && 'pt-[10px]' )} > - - - - - - - Go to Dashboard - - - + + + + + + + + + + + + + + + Go to Dashboard + + {/* Collapsed project icon with dropdown */} {currentProject && ( <>
- - - - - - - - - {currentProject.name} - - - + + + + + + + + {currentProject.name} + + > = { @@ -158,27 +158,25 @@ export function SidebarNavigation({ {/* Section icon with dropdown (collapsed sidebar) */} {section.label && !sidebarOpen && SectionIcon && section.collapsible && isCollapsed && ( - - - - - - - - - {section.label} - - - + + + + + + + + {section.label} + + {section.items.map((item) => { const ItemIcon = item.icon; diff --git a/apps/ui/src/components/ui/keyboard-map.tsx b/apps/ui/src/components/ui/keyboard-map.tsx index 10de4edb..cc5c76bd 100644 --- a/apps/ui/src/components/ui/keyboard-map.tsx +++ b/apps/ui/src/components/ui/keyboard-map.tsx @@ -7,7 +7,7 @@ import { } from '@/store/app-store'; import type { KeyboardShortcuts } from '@/store/app-store'; import { cn } from '@/lib/utils'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { CheckCircle2, X, RotateCcw, Edit2 } from 'lucide-react'; @@ -305,54 +305,52 @@ export function KeyboardMap({ onKeySelect, selectedKey, className }: KeyboardMap }; return ( - -
- {/* Legend */} -
- {Object.entries(CATEGORY_COLORS).map(([key, colors]) => ( -
-
- {colors.label} -
- ))} -
-
- Available -
-
-
- Modified +
+ {/* Legend */} +
+ {Object.entries(CATEGORY_COLORS).map(([key, colors]) => ( +
+
+ {colors.label}
+ ))} +
+
+ Available
- - {/* Keyboard layout */} -
- {KEYBOARD_ROWS.map((row, rowIndex) => ( -
- {row.map(renderKey)} -
- ))} -
- - {/* Stats */} -
- - {Object.keys(keyboardShortcuts).length}{' '} - shortcuts configured - - - {Object.keys(keyToShortcuts).length} keys - in use - - - - {KEYBOARD_ROWS.flat().length - Object.keys(keyToShortcuts).length} - {' '} - keys available - +
+
+ Modified
- + + {/* Keyboard layout */} +
+ {KEYBOARD_ROWS.map((row, rowIndex) => ( +
+ {row.map(renderKey)} +
+ ))} +
+ + {/* Stats */} +
+ + {Object.keys(keyboardShortcuts).length}{' '} + shortcuts configured + + + {Object.keys(keyToShortcuts).length} keys in + use + + + + {KEYBOARD_ROWS.flat().length - Object.keys(keyToShortcuts).length} + {' '} + keys available + +
+
); } @@ -508,196 +506,194 @@ export function ShortcutReferencePanel({ editable = false }: ShortcutReferencePa }; return ( - -
- {editable && ( -
- -
- )} - {Object.entries(groupedShortcuts).map(([category, shortcuts]) => { - const colors = CATEGORY_COLORS[category as keyof typeof CATEGORY_COLORS]; - return ( -
-

{colors.label}

-
- {shortcuts.map(({ key, label, value }) => { - const isModified = mergedShortcuts[key] !== DEFAULT_KEYBOARD_SHORTCUTS[key]; - const isEditing = editingShortcut === key; +
+ {editable && ( +
+ +
+ )} + {Object.entries(groupedShortcuts).map(([category, shortcuts]) => { + const colors = CATEGORY_COLORS[category as keyof typeof CATEGORY_COLORS]; + return ( +
+

{colors.label}

+
+ {shortcuts.map(({ key, label, value }) => { + const isModified = mergedShortcuts[key] !== DEFAULT_KEYBOARD_SHORTCUTS[key]; + const isEditing = editingShortcut === key; - return ( -
editable && !isEditing && handleStartEdit(key)} - data-testid={`shortcut-row-${key}`} - > - {label} -
- {isEditing ? ( -
e.stopPropagation()} - > - {/* Modifier checkboxes */} -
-
- - handleModifierChange('cmdCtrl', !!checked, key) - } - className="h-3.5 w-3.5" - /> - -
-
- - handleModifierChange('alt', !!checked, key) - } - className="h-3.5 w-3.5" - /> - -
-
- - handleModifierChange('shift', !!checked, key) - } - className="h-3.5 w-3.5" - /> - -
+ return ( +
editable && !isEditing && handleStartEdit(key)} + data-testid={`shortcut-row-${key}`} + > + {label} +
+ {isEditing ? ( +
e.stopPropagation()} + > + {/* Modifier checkboxes */} +
+
+ + handleModifierChange('cmdCtrl', !!checked, key) + } + className="h-3.5 w-3.5" + /> + +
+
+ + handleModifierChange('alt', !!checked, key) + } + className="h-3.5 w-3.5" + /> + +
+
+ + handleModifierChange('shift', !!checked, key) + } + className="h-3.5 w-3.5" + /> +
- + - handleKeyChange(e.target.value, key)} - onKeyDown={handleKeyDown} - className={cn( - 'w-12 h-7 text-center font-mono text-xs uppercase', - shortcutError && 'border-red-500 focus-visible:ring-red-500' - )} - placeholder="Key" - maxLength={1} - autoFocus - data-testid={`edit-shortcut-input-${key}`} - /> - -
- ) : ( - <> - - {formatShortcut(value, true)} - - {isModified && editable && ( - - - - - - Reset to default ({DEFAULT_KEYBOARD_SHORTCUTS[key]}) - - + + + handleKeyChange(e.target.value, key)} + onKeyDown={handleKeyDown} + className={cn( + 'w-12 h-7 text-center font-mono text-xs uppercase', + shortcutError && 'border-red-500 focus-visible:ring-red-500' )} - {isModified && !editable && ( - + placeholder="Key" + maxLength={1} + autoFocus + data-testid={`edit-shortcut-input-${key}`} + /> + + +
+ ) : ( + <> + - )} - - )} -
+ > + {formatShortcut(value, true)} + + {isModified && editable && ( + + + + + + Reset to default ({DEFAULT_KEYBOARD_SHORTCUTS[key]}) + + + )} + {isModified && !editable && ( + + )} + {editable && !isModified && ( + + )} + + )}
- ); - })} -
- {editingShortcut && - shortcutError && - SHORTCUT_CATEGORIES[editingShortcut] === category && ( -

{shortcutError}

- )} +
+ ); + })}
- ); - })} -
- + {editingShortcut && + shortcutError && + SHORTCUT_CATEGORIES[editingShortcut] === category && ( +

{shortcutError}

+ )} +
+ ); + })} +
); } diff --git a/apps/ui/src/components/views/board-view/board-controls.tsx b/apps/ui/src/components/views/board-view/board-controls.tsx index 8584bbdb..2baa7ceb 100644 --- a/apps/ui/src/components/views/board-view/board-controls.tsx +++ b/apps/ui/src/components/views/board-view/board-controls.tsx @@ -1,4 +1,4 @@ -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { ImageIcon } from 'lucide-react'; import { cn } from '@/lib/utils'; @@ -18,24 +18,22 @@ export function BoardControls({ isMounted, onShowBoardBackground }: BoardControl ); return ( - -
- {/* Board Background Button */} - - - - - -

Board Background Settings

-
-
-
-
+
+ {/* Board Background Button */} + + + + + +

Board Background Settings

+
+
+
); } diff --git a/apps/ui/src/components/views/board-view/components/kanban-card/card-badges.tsx b/apps/ui/src/components/views/board-view/components/kanban-card/card-badges.tsx index 4563bc06..90b709c2 100644 --- a/apps/ui/src/components/views/board-view/components/kanban-card/card-badges.tsx +++ b/apps/ui/src/components/views/board-view/components/kanban-card/card-badges.tsx @@ -2,7 +2,7 @@ import { memo, useEffect, useMemo, useState } from 'react'; import { Feature, useAppStore } from '@/store/app-store'; import { cn } from '@/lib/utils'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { AlertCircle, Lock, Hand, Sparkles, SkipForward } from 'lucide-react'; import { getBlockingDependencies } from '@automaker/dependency-resolver'; import { useShallow } from 'zustand/react/shallow'; @@ -28,24 +28,22 @@ export const CardBadges = memo(function CardBadges({ feature }: CardBadgesProps) return (
{/* Error badge */} - - - -
- -
-
- -

{feature.error}

-
-
-
+ + +
+ +
+
+ +

{feature.error}

+
+
); }); @@ -138,147 +136,137 @@ export const PriorityBadges = memo(function PriorityBadges({
{/* Priority badge */} {feature.priority && ( - - - -
- - {feature.priority === 1 ? 'H' : feature.priority === 2 ? 'M' : 'L'} - -
-
- -

- {feature.priority === 1 - ? 'High Priority' - : feature.priority === 2 - ? 'Medium Priority' - : 'Low Priority'} -

-
-
-
+ + +
+ + {feature.priority === 1 ? 'H' : feature.priority === 2 ? 'M' : 'L'} + +
+
+ +

+ {feature.priority === 1 + ? 'High Priority' + : feature.priority === 2 + ? 'Medium Priority' + : 'Low Priority'} +

+
+
)} {/* Manual verification badge */} {showManualVerification && ( - - - -
- -
-
- -

Manual verification required

-
-
-
+ + +
+ +
+
+ +

Manual verification required

+
+
)} {/* Blocked badge */} {isBlocked && ( - - - -
- -
-
- -

- Blocked by {blockingDependencies.length} incomplete{' '} - {blockingDependencies.length === 1 ? 'dependency' : 'dependencies'} -

-

- {blockingDependencies - .map((depId) => { - const dep = features.find((f) => f.id === depId); - return dep?.description || depId; - }) - .join(', ')} -

-
-
-
+ + +
+ +
+
+ +

+ Blocked by {blockingDependencies.length} incomplete{' '} + {blockingDependencies.length === 1 ? 'dependency' : 'dependencies'} +

+

+ {blockingDependencies + .map((depId) => { + const dep = features.find((f) => f.id === depId); + return dep?.description || depId; + }) + .join(', ')} +

+
+
)} {/* Just Finished badge */} {isJustFinished && ( - - - -
- -
-
- -

Agent just finished working on this feature

-
-
-
+ + +
+ +
+
+ +

Agent just finished working on this feature

+
+
)} {/* Pipeline exclusion badge */} {hasPipelineExclusions && ( - - - -
- -
-
- -

- {allPipelinesExcluded - ? 'All pipelines skipped' - : `${excludedStepCount} of ${totalPipelineSteps} pipeline${totalPipelineSteps !== 1 ? 's' : ''} skipped`} -

-

- {allPipelinesExcluded - ? 'This feature will skip all custom pipeline steps' - : 'Some custom pipeline steps will be skipped for this feature'} -

-
-
-
+ + +
+ +
+
+ +

+ {allPipelinesExcluded + ? 'All pipelines skipped' + : `${excludedStepCount} of ${totalPipelineSteps} pipeline${totalPipelineSteps !== 1 ? 's' : ''} skipped`} +

+

+ {allPipelinesExcluded + ? 'This feature will skip all custom pipeline steps' + : 'Some custom pipeline steps will be skipped for this feature'} +

+
+
)}
); diff --git a/apps/ui/src/components/views/board-view/components/list-view/list-row.tsx b/apps/ui/src/components/views/board-view/components/list-view/list-row.tsx index a3d10eb7..32b0f445 100644 --- a/apps/ui/src/components/views/board-view/components/list-view/list-row.tsx +++ b/apps/ui/src/components/views/board-view/components/list-view/list-row.tsx @@ -3,7 +3,7 @@ // @ts-nocheck import { memo, useCallback, useState, useEffect } from 'react'; import { cn } from '@/lib/utils'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { AlertCircle, Lock, Hand, Sparkles, FileText } from 'lucide-react'; import type { Feature } from '@/store/app-store'; import { RowActions, type RowActionHandlers } from './row-actions'; @@ -149,29 +149,27 @@ const IndicatorBadges = memo(function IndicatorBadges({ return (
- - {badges.map((badge) => ( - - -
- -
-
- -

{badge.tooltip}

-
-
- ))} -
+ {badges.map((badge) => ( + + +
+ +
+
+ +

{badge.tooltip}

+
+
+ ))}
); }); diff --git a/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx index c8ff7825..b3dedc6a 100644 --- a/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx @@ -50,7 +50,7 @@ import { } from '../shared'; import type { WorkMode } from '../shared'; import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { getAncestors, formatAncestorContextForPrompt, @@ -528,26 +528,24 @@ export function AddFeatureDialog({ AI & Execution
- - - - - - -

Change default model and planning settings for new features

-
-
-
+ + + + + +

Change default model and planning settings for new features

+
+
@@ -578,24 +576,22 @@ export function AddFeatureDialog({ compact /> ) : ( - - - -
- {}} - testIdPrefix="add-feature-planning" - compact - disabled - /> -
-
- -

Planning modes are only available for Claude Provider

-
-
-
+ + +
+ {}} + testIdPrefix="add-feature-planning" + compact + disabled + /> +
+
+ +

Planning modes are only available for Claude Provider

+
+
)}
diff --git a/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx index 7d25c4a5..ebf91c09 100644 --- a/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx @@ -41,7 +41,7 @@ import { } from '../shared'; import type { WorkMode } from '../shared'; import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { DependencyTreeDialog } from './dependency-tree-dialog'; import { isClaudeModel, supportsReasoningEffort } from '@automaker/types'; @@ -420,26 +420,24 @@ export function EditFeatureDialog({ AI & Execution
- - - - - - -

Change default model and planning settings for new features

-
-
-
+ + + + + +

Change default model and planning settings for new features

+
+
@@ -470,24 +468,22 @@ export function EditFeatureDialog({ compact /> ) : ( - - - -
- {}} - testIdPrefix="edit-feature-planning" - compact - disabled - /> -
-
- -

Planning modes are only available for Claude Provider

-
-
-
+ + +
+ {}} + testIdPrefix="edit-feature-planning" + compact + disabled + /> +
+
+ +

Planning modes are only available for Claude Provider

+
+
)}
diff --git a/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx index 07189e87..61b86e53 100644 --- a/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx @@ -24,7 +24,7 @@ import type { WorkMode } from '../shared'; import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector'; import { isCursorModel, isClaudeModel, type PhaseModelEntry } from '@automaker/types'; import { cn } from '@/lib/utils'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; interface MassEditDialogProps { open: boolean; @@ -302,37 +302,35 @@ export function MassEditDialog({ /> ) : ( - - - -
-
-
- - -
-
-
- {}} - testIdPrefix="mass-edit-planning" - disabled - /> + + +
+
+
+ +
- - -

Planning modes are only available for Claude Provider

-
- - +
+ {}} + testIdPrefix="mass-edit-planning" + disabled + /> +
+
+
+ +

Planning modes are only available for Claude Provider

+
+
)} {/* Priority */} diff --git a/apps/ui/src/components/views/board-view/kanban-board.tsx b/apps/ui/src/components/views/board-view/kanban-board.tsx index 040b4690..9da06723 100644 --- a/apps/ui/src/components/views/board-view/kanban-board.tsx +++ b/apps/ui/src/components/views/board-view/kanban-board.tsx @@ -13,7 +13,7 @@ import { Button } from '@/components/ui/button'; import { KanbanColumn, KanbanCard, EmptyStateCard } from './components'; import { Feature, useAppStore, formatShortcut } from '@/store/app-store'; import { Archive, Settings2, CheckSquare, GripVertical, Plus, CheckCircle2 } from 'lucide-react'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { useResponsiveKanban } from '@/hooks/use-responsive-kanban'; import { getColumnsWithPipeline, type ColumnId } from './constants'; import type { PipelineConfig } from '@automaker/types'; @@ -358,49 +358,47 @@ export function KanbanBoard({ contentClassName="perf-contain" headerAction={ column.id === 'verified' ? ( - -
- {columnFeatures.length > 0 && ( - - - - - -

Complete All

-
-
- )} +
+ {columnFeatures.length > 0 && ( -

Completed Features ({completedCount})

+

Complete All

-
- + )} + + + + + +

Completed Features ({completedCount})

+
+
+
) : column.id === 'backlog' ? (
@@ -340,78 +338,72 @@ export function WorktreeTab({ )} {hasChanges && ( - - - - - - {changedFilesCount ?? '!'} - - - -

- {changedFilesCount ?? 'Some'} uncommitted file - {changedFilesCount !== 1 ? 's' : ''} -

-
-
-
+ + + + + {changedFilesCount ?? '!'} + + + +

+ {changedFilesCount ?? 'Some'} uncommitted file + {changedFilesCount !== 1 ? 's' : ''} +

+
+
)} {prBadge} )} {isDevServerRunning && ( - - - - - - -

Open dev server (:{devServerInfo?.port})

-
-
-
+ + + + + +

Open dev server (:{devServerInfo?.port})

+
+
)} {isAutoModeRunning && ( - - - - - - - - -

Auto Mode Running

-
-
-
+ + + + + + + +

Auto Mode Running

+
+
)} - -
- {/* Zoom controls */} - - - - - Zoom In - +
+ {/* Zoom controls */} + + + + + Zoom In + - - - - - Zoom Out - + + + + + Zoom Out + - - - - - Fit View - + + + + + Fit View + -
+
- {/* Layout controls */} - - - - - Horizontal Layout - + {/* Layout controls */} + + + + + Horizontal Layout + - - - - - Vertical Layout - + + + + + Vertical Layout + -
+
- {/* Lock toggle */} - - - - - {isLocked ? 'Unlock Nodes' : 'Lock Nodes'} - -
- + {/* Lock toggle */} + + + + + {isLocked ? 'Unlock Nodes' : 'Lock Nodes'} + +
); } diff --git a/apps/ui/src/components/views/graph-view/components/graph-filter-controls.tsx b/apps/ui/src/components/views/graph-view/components/graph-filter-controls.tsx index 35af041b..16c9abf6 100644 --- a/apps/ui/src/components/views/graph-view/components/graph-filter-controls.tsx +++ b/apps/ui/src/components/views/graph-view/components/graph-filter-controls.tsx @@ -4,7 +4,7 @@ import { Checkbox } from '@/components/ui/checkbox'; import { Switch } from '@/components/ui/switch'; import { Input } from '@/components/ui/input'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { Filter, X, @@ -115,248 +115,252 @@ export function GraphFilterControls({ return ( - -
- {/* Search Input */} -
- - onSearchQueryChange(e.target.value)} - className="h-8 w-48 pl-8 pr-8 text-sm bg-background/50" - /> - {searchQuery && ( - - )} -
- - {/* Divider */} -
- - {/* Category Filter Dropdown */} - - - - - - - - Filter by Category - - -
-
- Categories -
- - {/* Select All option */} -
- 0 - } - onCheckedChange={handleSelectAllCategories} - /> - - {selectedCategories.length === availableCategories.length - ? 'Deselect All' - : 'Select All'} - -
- -
- - {/* Category list */} -
- {availableCategories.length === 0 ? ( -
- No categories available -
- ) : ( - availableCategories.map((category) => ( -
handleCategoryToggle(category)} - > - handleCategoryToggle(category)} - /> - {category} -
- )) - )} -
-
- - - - {/* Status Filter Dropdown */} - - - - - - - - Filter by Status - - -
-
Status
- - {/* Select All option */} -
- - - {selectedStatuses.length === STATUS_FILTER_OPTIONS.length - ? 'Deselect All' - : 'Select All'} - -
- -
- - {/* Status list */} -
- {STATUS_FILTER_OPTIONS.map((status) => { - const config = statusDisplayConfig[status]; - const StatusIcon = config.icon; - return ( -
handleStatusToggle(status)} - > - handleStatusToggle(status)} - /> - - {config.label} -
- ); - })} -
-
- - - - {/* Divider */} -
- - {/* Positive/Negative Filter Toggle */} - - -
- - -
-
- - {isNegativeFilter - ? 'Negative filter: Highlighting non-matching nodes' - : 'Positive filter: Highlighting matching nodes'} - -
- - {/* Clear Filters Button - only show when filters are active */} - {hasActiveFilter && ( - <> -
- - - - - Clear All Filters - - +
+ {/* Search Input */} +
+ + onSearchQueryChange(e.target.value)} + className="h-8 w-48 pl-8 pr-8 text-sm bg-background/50" + /> + {searchQuery && ( + )}
- + + {/* Divider */} +
+ + {/* Category Filter Dropdown */} + + + + + + + + Filter by Category + + e.preventDefault()} + > +
+
Categories
+ + {/* Select All option */} +
+ 0 + } + onCheckedChange={handleSelectAllCategories} + /> + + {selectedCategories.length === availableCategories.length + ? 'Deselect All' + : 'Select All'} + +
+ +
+ + {/* Category list */} +
+ {availableCategories.length === 0 ? ( +
+ No categories available +
+ ) : ( + availableCategories.map((category) => ( +
handleCategoryToggle(category)} + > + handleCategoryToggle(category)} + /> + {category} +
+ )) + )} +
+
+ + + + {/* Status Filter Dropdown */} + + + + + + + + Filter by Status + + e.preventDefault()} + > +
+
Status
+ + {/* Select All option */} +
+ + + {selectedStatuses.length === STATUS_FILTER_OPTIONS.length + ? 'Deselect All' + : 'Select All'} + +
+ +
+ + {/* Status list */} +
+ {STATUS_FILTER_OPTIONS.map((status) => { + const config = statusDisplayConfig[status]; + const StatusIcon = config.icon; + return ( +
handleStatusToggle(status)} + > + handleStatusToggle(status)} + /> + + {config.label} +
+ ); + })} +
+
+ + + + {/* Divider */} +
+ + {/* Positive/Negative Filter Toggle */} + + +
+ + +
+
+ + {isNegativeFilter + ? 'Negative filter: Highlighting non-matching nodes' + : 'Positive filter: Highlighting matching nodes'} + +
+ + {/* Clear Filters Button - only show when filters are active */} + {hasActiveFilter && ( + <> +
+ + + + + Clear All Filters + + + )} +
); } diff --git a/apps/ui/src/components/views/graph-view/components/task-node.tsx b/apps/ui/src/components/views/graph-view/components/task-node.tsx index 16cf6817..98b95c46 100644 --- a/apps/ui/src/components/views/graph-view/components/task-node.tsx +++ b/apps/ui/src/components/views/graph-view/components/task-node.tsx @@ -26,7 +26,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; type TaskNodeProps = NodeProps & { data: TaskNodeData; @@ -286,50 +286,44 @@ export const TaskNode = memo(function TaskNode({ data, selected }: TaskNodeProps {/* Blocked indicator */} {data.isBlocked && !data.error && data.status === 'backlog' && ( - - - -
- -
-
- -

Blocked by {data.blockingDependencies.length} dependencies

-
-
-
+ + +
+ +
+
+ +

Blocked by {data.blockingDependencies.length} dependencies

+
+
)} {/* Error indicator */} {data.error && ( - - - -
- -
-
- -

{data.error}

-
-
-
+ + +
+ +
+
+ +

{data.error}

+
+
)} {/* Stopped indicator - task is in_progress but not actively running */} {isStopped && ( - - - -
- -
-
- -

Task paused - click menu to resume

-
-
-
+ + +
+ +
+
+ +

Task paused - click menu to resume

+
+
)} {/* Actions dropdown */} diff --git a/apps/ui/src/components/views/settings-view/account/account-section.tsx b/apps/ui/src/components/views/settings-view/account/account-section.tsx index d10049fc..abacd8ee 100644 --- a/apps/ui/src/components/views/settings-view/account/account-section.tsx +++ b/apps/ui/src/components/views/settings-view/account/account-section.tsx @@ -8,7 +8,7 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { toast } from 'sonner'; import { LogOut, User, Code2, RefreshCw } from 'lucide-react'; import { Spinner } from '@/components/ui/spinner'; @@ -134,24 +134,22 @@ export function AccountSection() { })} - - - - - - -

Refresh available editors

-
-
-
+ + + + + +

Refresh available editors

+
+