mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-04 09:13:08 +00:00
Merge pull request #695 from AutoMaker-Org/feature/bug-create-global-tooltip-provider-in-main-app-fi-ge48
refactor: Create global TooltipProvider in app.tsx to eliminate duplication
This commit is contained in:
@@ -7,6 +7,7 @@ import { useSettingsSync } from './hooks/use-settings-sync';
|
|||||||
import { useCursorStatusInit } from './hooks/use-cursor-status-init';
|
import { useCursorStatusInit } from './hooks/use-cursor-status-init';
|
||||||
import { useProviderAuthInit } from './hooks/use-provider-auth-init';
|
import { useProviderAuthInit } from './hooks/use-provider-auth-init';
|
||||||
import { useAppStore } from './store/app-store';
|
import { useAppStore } from './store/app-store';
|
||||||
|
import { TooltipProvider } from '@/components/ui/tooltip';
|
||||||
import './styles/global.css';
|
import './styles/global.css';
|
||||||
import './styles/theme-imports';
|
import './styles/theme-imports';
|
||||||
import './styles/font-imports';
|
import './styles/font-imports';
|
||||||
@@ -75,9 +76,9 @@ export default function App() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<TooltipProvider delayDuration={300}>
|
||||||
<RouterProvider router={router} />
|
<RouterProvider router={router} />
|
||||||
{showSplash && !disableSplashScreen && <SplashScreen onComplete={handleSplashComplete} />}
|
{showSplash && !disableSplashScreen && <SplashScreen onComplete={handleSplashComplete} />}
|
||||||
</>
|
</TooltipProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { formatShortcut } from '@/store/app-store';
|
|||||||
import { Activity, Settings, BookOpen, MessageSquare, ExternalLink } from 'lucide-react';
|
import { Activity, Settings, BookOpen, MessageSquare, ExternalLink } from 'lucide-react';
|
||||||
import { useOSDetection } from '@/hooks/use-os-detection';
|
import { useOSDetection } from '@/hooks/use-os-detection';
|
||||||
import { getElectronAPI } from '@/lib/electron';
|
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 {
|
function getOSAbbreviation(os: string): string {
|
||||||
switch (os) {
|
switch (os) {
|
||||||
@@ -72,7 +72,6 @@ export function SidebarFooter({
|
|||||||
<div className="flex flex-col items-center py-2 px-2 gap-1">
|
<div className="flex flex-col items-center py-2 px-2 gap-1">
|
||||||
{/* Running Agents */}
|
{/* Running Agents */}
|
||||||
{!hideRunningAgents && (
|
{!hideRunningAgents && (
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -121,11 +120,9 @@ export function SidebarFooter({
|
|||||||
)}
|
)}
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Settings */}
|
{/* Settings */}
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -147,10 +144,7 @@ export function SidebarFooter({
|
|||||||
data-testid="settings-button"
|
data-testid="settings-button"
|
||||||
>
|
>
|
||||||
<Settings
|
<Settings
|
||||||
className={cn(
|
className={cn('w-[18px] h-[18px]', isActiveRoute('settings') && 'text-brand-500')}
|
||||||
'w-[18px] h-[18px]',
|
|
||||||
isActiveRoute('settings') && 'text-brand-500'
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
@@ -161,11 +155,9 @@ export function SidebarFooter({
|
|||||||
</span>
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
|
|
||||||
{/* Documentation */}
|
{/* Documentation */}
|
||||||
{!hideWiki && (
|
{!hideWiki && (
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -185,11 +177,9 @@ export function SidebarFooter({
|
|||||||
Documentation
|
Documentation
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Feedback */}
|
{/* Feedback */}
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -209,7 +199,6 @@ export function SidebarFooter({
|
|||||||
Feedback
|
Feedback
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
DropdownMenuSeparator,
|
DropdownMenuSeparator,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from '@/components/ui/dropdown-menu';
|
} from '@/components/ui/dropdown-menu';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
|
|
||||||
interface SidebarHeaderProps {
|
interface SidebarHeaderProps {
|
||||||
sidebarOpen: boolean;
|
sidebarOpen: boolean;
|
||||||
@@ -92,7 +92,6 @@ export function SidebarHeader({
|
|||||||
isMac && isElectron() && 'pt-[10px]'
|
isMac && isElectron() && 'pt-[10px]'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -139,14 +138,12 @@ export function SidebarHeader({
|
|||||||
Go to Dashboard
|
Go to Dashboard
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
|
|
||||||
{/* Collapsed project icon with dropdown */}
|
{/* Collapsed project icon with dropdown */}
|
||||||
{currentProject && (
|
{currentProject && (
|
||||||
<>
|
<>
|
||||||
<div className="w-full h-px bg-border/40 my-2" />
|
<div className="w-full h-px bg-border/40 my-2" />
|
||||||
<DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>
|
<DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
@@ -163,7 +160,6 @@ export function SidebarHeader({
|
|||||||
{currentProject.name}
|
{currentProject.name}
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
<DropdownMenuContent
|
<DropdownMenuContent
|
||||||
align="start"
|
align="start"
|
||||||
side="right"
|
side="right"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from '@/components/ui/dropdown-menu';
|
} from '@/components/ui/dropdown-menu';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
|
|
||||||
// Map section labels to icons
|
// Map section labels to icons
|
||||||
const sectionIcons: Record<string, React.ComponentType<{ className?: string }>> = {
|
const sectionIcons: Record<string, React.ComponentType<{ className?: string }>> = {
|
||||||
@@ -158,7 +158,6 @@ export function SidebarNavigation({
|
|||||||
{/* Section icon with dropdown (collapsed sidebar) */}
|
{/* Section icon with dropdown (collapsed sidebar) */}
|
||||||
{section.label && !sidebarOpen && SectionIcon && section.collapsible && isCollapsed && (
|
{section.label && !sidebarOpen && SectionIcon && section.collapsible && isCollapsed && (
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<TooltipProvider delayDuration={0}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
@@ -178,7 +177,6 @@ export function SidebarNavigation({
|
|||||||
{section.label}
|
{section.label}
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
<DropdownMenuContent side="right" align="start" sideOffset={8} className="w-48">
|
<DropdownMenuContent side="right" align="start" sideOffset={8} className="w-48">
|
||||||
{section.items.map((item) => {
|
{section.items.map((item) => {
|
||||||
const ItemIcon = item.icon;
|
const ItemIcon = item.icon;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
} from '@/store/app-store';
|
} from '@/store/app-store';
|
||||||
import type { KeyboardShortcuts } from '@/store/app-store';
|
import type { KeyboardShortcuts } from '@/store/app-store';
|
||||||
import { cn } from '@/lib/utils';
|
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 { Input } from '@/components/ui/input';
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
import { CheckCircle2, X, RotateCcw, Edit2 } from 'lucide-react';
|
import { CheckCircle2, X, RotateCcw, Edit2 } from 'lucide-react';
|
||||||
@@ -305,7 +305,6 @@ export function KeyboardMap({ onKeySelect, selectedKey, className }: KeyboardMap
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
|
||||||
<div className={cn('space-y-4', className)} data-testid="keyboard-map">
|
<div className={cn('space-y-4', className)} data-testid="keyboard-map">
|
||||||
{/* Legend */}
|
{/* Legend */}
|
||||||
<div className="flex flex-wrap gap-4 justify-center text-xs">
|
<div className="flex flex-wrap gap-4 justify-center text-xs">
|
||||||
@@ -341,8 +340,8 @@ export function KeyboardMap({ onKeySelect, selectedKey, className }: KeyboardMap
|
|||||||
shortcuts configured
|
shortcuts configured
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<strong className="text-foreground">{Object.keys(keyToShortcuts).length}</strong> keys
|
<strong className="text-foreground">{Object.keys(keyToShortcuts).length}</strong> keys in
|
||||||
in use
|
use
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<strong className="text-foreground">
|
<strong className="text-foreground">
|
||||||
@@ -352,7 +351,6 @@ export function KeyboardMap({ onKeySelect, selectedKey, className }: KeyboardMap
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,7 +506,6 @@ export function ShortcutReferencePanel({ editable = false }: ShortcutReferencePa
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
|
||||||
<div className="space-y-4" data-testid="shortcut-reference-panel">
|
<div className="space-y-4" data-testid="shortcut-reference-panel">
|
||||||
{editable && (
|
{editable && (
|
||||||
<div className="flex justify-end">
|
<div className="flex justify-end">
|
||||||
@@ -698,6 +695,5 @@ export function ShortcutReferencePanel({ editable = false }: ShortcutReferencePa
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 { ImageIcon } from 'lucide-react';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
@@ -18,7 +18,6 @@ export function BoardControls({ isMounted, onShowBoardBackground }: BoardControl
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
{/* Board Background Button */}
|
{/* Board Background Button */}
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
@@ -36,6 +35,5 @@ export function BoardControls({ isMounted, onShowBoardBackground }: BoardControl
|
|||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { memo, useEffect, useMemo, useState } from 'react';
|
import { memo, useEffect, useMemo, useState } from 'react';
|
||||||
import { Feature, useAppStore } from '@/store/app-store';
|
import { Feature, useAppStore } from '@/store/app-store';
|
||||||
import { cn } from '@/lib/utils';
|
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 { AlertCircle, Lock, Hand, Sparkles, SkipForward } from 'lucide-react';
|
||||||
import { getBlockingDependencies } from '@automaker/dependency-resolver';
|
import { getBlockingDependencies } from '@automaker/dependency-resolver';
|
||||||
import { useShallow } from 'zustand/react/shallow';
|
import { useShallow } from 'zustand/react/shallow';
|
||||||
@@ -28,7 +28,6 @@ export const CardBadges = memo(function CardBadges({ feature }: CardBadgesProps)
|
|||||||
return (
|
return (
|
||||||
<div className="flex flex-wrap items-center gap-1.5 px-3 pt-1.5 min-h-[24px]">
|
<div className="flex flex-wrap items-center gap-1.5 px-3 pt-1.5 min-h-[24px]">
|
||||||
{/* Error badge */}
|
{/* Error badge */}
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -45,7 +44,6 @@ export const CardBadges = memo(function CardBadges({ feature }: CardBadgesProps)
|
|||||||
<p>{feature.error}</p>
|
<p>{feature.error}</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -138,7 +136,6 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
<div className="absolute top-2 left-2 flex items-center gap-1">
|
<div className="absolute top-2 left-2 flex items-center gap-1">
|
||||||
{/* Priority badge */}
|
{/* Priority badge */}
|
||||||
{feature.priority && (
|
{feature.priority && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -168,12 +165,10 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Manual verification badge */}
|
{/* Manual verification badge */}
|
||||||
{showManualVerification && (
|
{showManualVerification && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -190,12 +185,10 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
<p>Manual verification required</p>
|
<p>Manual verification required</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Blocked badge */}
|
{/* Blocked badge */}
|
||||||
{isBlocked && (
|
{isBlocked && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -223,12 +216,10 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Just Finished badge */}
|
{/* Just Finished badge */}
|
||||||
{isJustFinished && (
|
{isJustFinished && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -245,12 +236,10 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
<p>Agent just finished working on this feature</p>
|
<p>Agent just finished working on this feature</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Pipeline exclusion badge */}
|
{/* Pipeline exclusion badge */}
|
||||||
{hasPipelineExclusions && (
|
{hasPipelineExclusions && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -278,7 +267,6 @@ export const PriorityBadges = memo(function PriorityBadges({
|
|||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
import { memo, useCallback, useState, useEffect } from 'react';
|
import { memo, useCallback, useState, useEffect } from 'react';
|
||||||
import { cn } from '@/lib/utils';
|
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 { AlertCircle, Lock, Hand, Sparkles, FileText } from 'lucide-react';
|
||||||
import type { Feature } from '@/store/app-store';
|
import type { Feature } from '@/store/app-store';
|
||||||
import { RowActions, type RowActionHandlers } from './row-actions';
|
import { RowActions, type RowActionHandlers } from './row-actions';
|
||||||
@@ -149,7 +149,6 @@ const IndicatorBadges = memo(function IndicatorBadges({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex items-center gap-1 ml-2">
|
<div className="flex items-center gap-1 ml-2">
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
{badges.map((badge) => (
|
{badges.map((badge) => (
|
||||||
<Tooltip key={badge.key}>
|
<Tooltip key={badge.key}>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
@@ -171,7 +170,6 @@ const IndicatorBadges = memo(function IndicatorBadges({
|
|||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
))}
|
))}
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import {
|
|||||||
} from '../shared';
|
} from '../shared';
|
||||||
import type { WorkMode } from '../shared';
|
import type { WorkMode } from '../shared';
|
||||||
import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector';
|
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 {
|
import {
|
||||||
getAncestors,
|
getAncestors,
|
||||||
formatAncestorContextForPrompt,
|
formatAncestorContextForPrompt,
|
||||||
@@ -528,7 +528,6 @@ export function AddFeatureDialog({
|
|||||||
<Cpu className="w-4 h-4 text-muted-foreground" />
|
<Cpu className="w-4 h-4 text-muted-foreground" />
|
||||||
<span>AI & Execution</span>
|
<span>AI & Execution</span>
|
||||||
</div>
|
</div>
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -547,7 +546,6 @@ export function AddFeatureDialog({
|
|||||||
<p>Change default model and planning settings for new features</p>
|
<p>Change default model and planning settings for new features</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
@@ -578,7 +576,6 @@ export function AddFeatureDialog({
|
|||||||
compact
|
compact
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div>
|
<div>
|
||||||
@@ -595,7 +592,6 @@ export function AddFeatureDialog({
|
|||||||
<p>Planning modes are only available for Claude Provider</p>
|
<p>Planning modes are only available for Claude Provider</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import {
|
|||||||
} from '../shared';
|
} from '../shared';
|
||||||
import type { WorkMode } from '../shared';
|
import type { WorkMode } from '../shared';
|
||||||
import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector';
|
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 { DependencyTreeDialog } from './dependency-tree-dialog';
|
||||||
import { isClaudeModel, supportsReasoningEffort } from '@automaker/types';
|
import { isClaudeModel, supportsReasoningEffort } from '@automaker/types';
|
||||||
|
|
||||||
@@ -420,7 +420,6 @@ export function EditFeatureDialog({
|
|||||||
<Cpu className="w-4 h-4 text-muted-foreground" />
|
<Cpu className="w-4 h-4 text-muted-foreground" />
|
||||||
<span>AI & Execution</span>
|
<span>AI & Execution</span>
|
||||||
</div>
|
</div>
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<button
|
<button
|
||||||
@@ -439,7 +438,6 @@ export function EditFeatureDialog({
|
|||||||
<p>Change default model and planning settings for new features</p>
|
<p>Change default model and planning settings for new features</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
@@ -470,7 +468,6 @@ export function EditFeatureDialog({
|
|||||||
compact
|
compact
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div>
|
<div>
|
||||||
@@ -487,7 +484,6 @@ export function EditFeatureDialog({
|
|||||||
<p>Planning modes are only available for Claude Provider</p>
|
<p>Planning modes are only available for Claude Provider</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import type { WorkMode } from '../shared';
|
|||||||
import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector';
|
import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector';
|
||||||
import { isCursorModel, isClaudeModel, type PhaseModelEntry } from '@automaker/types';
|
import { isCursorModel, isClaudeModel, type PhaseModelEntry } from '@automaker/types';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
|
|
||||||
interface MassEditDialogProps {
|
interface MassEditDialogProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@@ -302,7 +302,6 @@ export function MassEditDialog({
|
|||||||
/>
|
/>
|
||||||
</FieldWrapper>
|
</FieldWrapper>
|
||||||
) : (
|
) : (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div
|
<div
|
||||||
@@ -332,7 +331,6 @@ export function MassEditDialog({
|
|||||||
<p>Planning modes are only available for Claude Provider</p>
|
<p>Planning modes are only available for Claude Provider</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Priority */}
|
{/* Priority */}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { Button } from '@/components/ui/button';
|
|||||||
import { KanbanColumn, KanbanCard, EmptyStateCard } from './components';
|
import { KanbanColumn, KanbanCard, EmptyStateCard } from './components';
|
||||||
import { Feature, useAppStore, formatShortcut } from '@/store/app-store';
|
import { Feature, useAppStore, formatShortcut } from '@/store/app-store';
|
||||||
import { Archive, Settings2, CheckSquare, GripVertical, Plus, CheckCircle2 } from 'lucide-react';
|
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 { useResponsiveKanban } from '@/hooks/use-responsive-kanban';
|
||||||
import { getColumnsWithPipeline, type ColumnId } from './constants';
|
import { getColumnsWithPipeline, type ColumnId } from './constants';
|
||||||
import type { PipelineConfig } from '@automaker/types';
|
import type { PipelineConfig } from '@automaker/types';
|
||||||
@@ -358,7 +358,6 @@ export function KanbanBoard({
|
|||||||
contentClassName="perf-contain"
|
contentClassName="perf-contain"
|
||||||
headerAction={
|
headerAction={
|
||||||
column.id === 'verified' ? (
|
column.id === 'verified' ? (
|
||||||
<TooltipProvider>
|
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
{columnFeatures.length > 0 && (
|
{columnFeatures.length > 0 && (
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
@@ -400,7 +399,6 @@ export function KanbanBoard({
|
|||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
) : column.id === 'backlog' ? (
|
) : column.id === 'backlog' ? (
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { ReactElement, ReactNode } from 'react';
|
import type { ReactElement, ReactNode } from 'react';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
|
|
||||||
interface TooltipWrapperProps {
|
interface TooltipWrapperProps {
|
||||||
/** The element to wrap with a tooltip */
|
/** The element to wrap with a tooltip */
|
||||||
@@ -29,7 +29,6 @@ export function TooltipWrapper({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
{/* The div wrapper is necessary for tooltips to work on disabled elements */}
|
{/* The div wrapper is necessary for tooltips to work on disabled elements */}
|
||||||
@@ -39,6 +38,5 @@ export function TooltipWrapper({
|
|||||||
<p>{tooltipContent}</p>
|
<p>{tooltipContent}</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { DropdownMenuItem } from '@/components/ui/dropdown-menu';
|
import { DropdownMenuItem } from '@/components/ui/dropdown-menu';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
import { Check, CircleDot, Globe, GitPullRequest, FlaskConical } from 'lucide-react';
|
import { Check, CircleDot, Globe, GitPullRequest, FlaskConical } from 'lucide-react';
|
||||||
import { Spinner } from '@/components/ui/spinner';
|
import { Spinner } from '@/components/ui/spinner';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
@@ -101,14 +101,12 @@ export function WorktreeDropdownItem({
|
|||||||
|
|
||||||
{/* Branch name with optional tooltip */}
|
{/* Branch name with optional tooltip */}
|
||||||
{isBranchNameTruncated ? (
|
{isBranchNameTruncated ? (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>{branchNameElement}</TooltipTrigger>
|
<TooltipTrigger asChild>{branchNameElement}</TooltipTrigger>
|
||||||
<TooltipContent>
|
<TooltipContent>
|
||||||
<p className="font-mono text-xs">{worktree.branch}</p>
|
<p className="font-mono text-xs">{worktree.branch}</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
) : (
|
) : (
|
||||||
branchNameElement
|
branchNameElement
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
DropdownMenuGroup,
|
DropdownMenuGroup,
|
||||||
} from '@/components/ui/dropdown-menu';
|
} from '@/components/ui/dropdown-menu';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
import {
|
import {
|
||||||
GitBranch,
|
GitBranch,
|
||||||
ChevronDown,
|
ChevronDown,
|
||||||
@@ -335,14 +335,12 @@ export function WorktreeDropdown({
|
|||||||
const dropdownTrigger = <DropdownMenuTrigger asChild>{triggerButton}</DropdownMenuTrigger>;
|
const dropdownTrigger = <DropdownMenuTrigger asChild>{triggerButton}</DropdownMenuTrigger>;
|
||||||
|
|
||||||
const triggerWithTooltip = isBranchNameTruncated ? (
|
const triggerWithTooltip = isBranchNameTruncated ? (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>{dropdownTrigger}</TooltipTrigger>
|
<TooltipTrigger asChild>{dropdownTrigger}</TooltipTrigger>
|
||||||
<TooltipContent>
|
<TooltipContent>
|
||||||
<p className="font-mono text-xs">{displayBranch}</p>
|
<p className="font-mono text-xs">{displayBranch}</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
) : (
|
) : (
|
||||||
dropdownTrigger
|
dropdownTrigger
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button';
|
|||||||
import { Globe, CircleDot, GitPullRequest } from 'lucide-react';
|
import { Globe, CircleDot, GitPullRequest } from 'lucide-react';
|
||||||
import { Spinner } from '@/components/ui/spinner';
|
import { Spinner } from '@/components/ui/spinner';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
import { useDroppable } from '@dnd-kit/core';
|
import { useDroppable } from '@dnd-kit/core';
|
||||||
import type {
|
import type {
|
||||||
WorktreeInfo,
|
WorktreeInfo,
|
||||||
@@ -271,7 +271,6 @@ export function WorktreeTab({
|
|||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{hasChanges && (
|
{hasChanges && (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<span
|
<span
|
||||||
@@ -293,7 +292,6 @@ export function WorktreeTab({
|
|||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
{prBadge}
|
{prBadge}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -340,7 +338,6 @@ export function WorktreeTab({
|
|||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{hasChanges && (
|
{hasChanges && (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<span
|
<span
|
||||||
@@ -362,14 +359,12 @@ export function WorktreeTab({
|
|||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
{prBadge}
|
{prBadge}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{isDevServerRunning && (
|
{isDevServerRunning && (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
@@ -391,11 +386,9 @@ export function WorktreeTab({
|
|||||||
<p>Open dev server (:{devServerInfo?.port})</p>
|
<p>Open dev server (:{devServerInfo?.port})</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{isAutoModeRunning && (
|
{isAutoModeRunning && (
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<span
|
<span
|
||||||
@@ -411,7 +404,6 @@ export function WorktreeTab({
|
|||||||
<p>Auto Mode Running</p>
|
<p>Auto Mode Running</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<WorktreeActionsDropdown
|
<WorktreeActionsDropdown
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useReactFlow, Panel } from '@xyflow/react';
|
import { useReactFlow, Panel } from '@xyflow/react';
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
import {
|
import {
|
||||||
ZoomIn,
|
ZoomIn,
|
||||||
ZoomOut,
|
ZoomOut,
|
||||||
@@ -30,7 +30,6 @@ export function GraphControls({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Panel position="bottom-left" className="flex flex-col gap-2">
|
<Panel position="bottom-left" className="flex flex-col gap-2">
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<div
|
<div
|
||||||
className="flex flex-col gap-1 p-1.5 rounded-lg backdrop-blur-sm border border-border shadow-lg text-popover-foreground"
|
className="flex flex-col gap-1 p-1.5 rounded-lg backdrop-blur-sm border border-border shadow-lg text-popover-foreground"
|
||||||
style={{ backgroundColor: 'color-mix(in oklch, var(--popover) 90%, transparent)' }}
|
style={{ backgroundColor: 'color-mix(in oklch, var(--popover) 90%, transparent)' }}
|
||||||
@@ -132,7 +131,6 @@ export function GraphControls({
|
|||||||
<TooltipContent side="right">{isLocked ? 'Unlock Nodes' : 'Lock Nodes'}</TooltipContent>
|
<TooltipContent side="right">{isLocked ? 'Unlock Nodes' : 'Lock Nodes'}</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
</Panel>
|
</Panel>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Checkbox } from '@/components/ui/checkbox';
|
|||||||
import { Switch } from '@/components/ui/switch';
|
import { Switch } from '@/components/ui/switch';
|
||||||
import { Input } from '@/components/ui/input';
|
import { Input } from '@/components/ui/input';
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
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 {
|
import {
|
||||||
Filter,
|
Filter,
|
||||||
X,
|
X,
|
||||||
@@ -115,7 +115,6 @@ export function GraphFilterControls({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Panel position="top-left" className="flex items-center gap-2">
|
<Panel position="top-left" className="flex items-center gap-2">
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<div
|
<div
|
||||||
className="flex items-center gap-2 p-2 rounded-lg backdrop-blur-sm border border-border shadow-lg text-popover-foreground"
|
className="flex items-center gap-2 p-2 rounded-lg backdrop-blur-sm border border-border shadow-lg text-popover-foreground"
|
||||||
style={{ backgroundColor: 'color-mix(in oklch, var(--popover) 90%, transparent)' }}
|
style={{ backgroundColor: 'color-mix(in oklch, var(--popover) 90%, transparent)' }}
|
||||||
@@ -165,11 +164,13 @@ export function GraphFilterControls({
|
|||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent>Filter by Category</TooltipContent>
|
<TooltipContent>Filter by Category</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<PopoverContent align="start" className="w-56 p-2">
|
<PopoverContent
|
||||||
|
align="start"
|
||||||
|
className="w-56 p-2"
|
||||||
|
onOpenAutoFocus={(e) => e.preventDefault()}
|
||||||
|
>
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<div className="text-xs font-medium text-muted-foreground px-2 py-1">
|
<div className="text-xs font-medium text-muted-foreground px-2 py-1">Categories</div>
|
||||||
Categories
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Select All option */}
|
{/* Select All option */}
|
||||||
<div
|
<div
|
||||||
@@ -239,7 +240,11 @@ export function GraphFilterControls({
|
|||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent>Filter by Status</TooltipContent>
|
<TooltipContent>Filter by Status</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<PopoverContent align="start" className="w-56 p-2">
|
<PopoverContent
|
||||||
|
align="start"
|
||||||
|
className="w-56 p-2"
|
||||||
|
onOpenAutoFocus={(e) => e.preventDefault()}
|
||||||
|
>
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<div className="text-xs font-medium text-muted-foreground px-2 py-1">Status</div>
|
<div className="text-xs font-medium text-muted-foreground px-2 py-1">Status</div>
|
||||||
|
|
||||||
@@ -356,7 +361,6 @@ export function GraphFilterControls({
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</TooltipProvider>
|
|
||||||
</Panel>
|
</Panel>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import {
|
|||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from '@/components/ui/dropdown-menu';
|
} 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 & {
|
type TaskNodeProps = NodeProps & {
|
||||||
data: TaskNodeData;
|
data: TaskNodeData;
|
||||||
@@ -286,7 +286,6 @@ export const TaskNode = memo(function TaskNode({ data, selected }: TaskNodeProps
|
|||||||
|
|
||||||
{/* Blocked indicator */}
|
{/* Blocked indicator */}
|
||||||
{data.isBlocked && !data.error && data.status === 'backlog' && (
|
{data.isBlocked && !data.error && data.status === 'backlog' && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div className="p-1 rounded bg-orange-500/20">
|
<div className="p-1 rounded bg-orange-500/20">
|
||||||
@@ -297,12 +296,10 @@ export const TaskNode = memo(function TaskNode({ data, selected }: TaskNodeProps
|
|||||||
<p>Blocked by {data.blockingDependencies.length} dependencies</p>
|
<p>Blocked by {data.blockingDependencies.length} dependencies</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Error indicator */}
|
{/* Error indicator */}
|
||||||
{data.error && (
|
{data.error && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div className="p-1 rounded bg-[var(--status-error-bg)]">
|
<div className="p-1 rounded bg-[var(--status-error-bg)]">
|
||||||
@@ -313,12 +310,10 @@ export const TaskNode = memo(function TaskNode({ data, selected }: TaskNodeProps
|
|||||||
<p>{data.error}</p>
|
<p>{data.error}</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Stopped indicator - task is in_progress but not actively running */}
|
{/* Stopped indicator - task is in_progress but not actively running */}
|
||||||
{isStopped && (
|
{isStopped && (
|
||||||
<TooltipProvider delayDuration={200}>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<div className="p-1 rounded bg-[var(--status-warning-bg)]">
|
<div className="p-1 rounded bg-[var(--status-warning-bg)]">
|
||||||
@@ -329,7 +324,6 @@ export const TaskNode = memo(function TaskNode({ data, selected }: TaskNodeProps
|
|||||||
<p>Task paused - click menu to resume</p>
|
<p>Task paused - click menu to resume</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Actions dropdown */}
|
{/* Actions dropdown */}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
SelectTrigger,
|
SelectTrigger,
|
||||||
SelectValue,
|
SelectValue,
|
||||||
} from '@/components/ui/select';
|
} 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 { toast } from 'sonner';
|
||||||
import { LogOut, User, Code2, RefreshCw } from 'lucide-react';
|
import { LogOut, User, Code2, RefreshCw } from 'lucide-react';
|
||||||
import { Spinner } from '@/components/ui/spinner';
|
import { Spinner } from '@/components/ui/spinner';
|
||||||
@@ -134,7 +134,6 @@ export function AccountSection() {
|
|||||||
})}
|
})}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
<TooltipProvider>
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
@@ -151,7 +150,6 @@ export function AccountSection() {
|
|||||||
<p>Refresh available editors</p>
|
<p>Refresh available editors</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user