diff --git a/panel/src/app/(dashboard)/prompter/page.tsx b/panel/src/app/(dashboard)/prompter/page.tsx index 8f451c02..83abf9b2 100644 --- a/panel/src/app/(dashboard)/prompter/page.tsx +++ b/panel/src/app/(dashboard)/prompter/page.tsx @@ -3,6 +3,7 @@ import { useEffect, useRef } from "react"; import { Loader2, Sparkles, X } from "lucide-react"; import { Button } from "@/components/ui/button"; +import { HelpTip } from "@/components/ui/help-tip"; import { usePrompter } from "@/hooks/use-prompter"; import { Team } from "@/types"; import { @@ -77,16 +78,25 @@ export default function PrompterPage() { {/* End chat — reap the agent and return to the form (any chat state) */} {!showForm && state !== "success" && ( - + + {/* disabled sets pointer-events:none on the Button, which would + swallow hover — the tip sits on a wrapping span instead. */} + + + + )} diff --git a/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx b/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx index 0cd333f9..667ed112 100644 --- a/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx +++ b/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx @@ -29,6 +29,7 @@ import { AlertTriangle, ArrowLeft } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; +import { HelpTip } from "@/components/ui/help-tip"; interface TaskDetailPageProps { params: Promise<{ taskId: string }>; @@ -415,12 +416,14 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) { if (error || !task) { return (
- - - + + + + + @@ -432,9 +435,11 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) { "The task you're looking for doesn't exist or has been deleted."}

- - - + + + + +
@@ -474,12 +479,14 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) { task.team !== Team.MAIN_PM && (
{task.team === Team.BOARD && ( - + + + )}
diff --git a/panel/src/app/(dashboard)/tasks/page.tsx b/panel/src/app/(dashboard)/tasks/page.tsx index 4fc229eb..5ce971eb 100644 --- a/panel/src/app/(dashboard)/tasks/page.tsx +++ b/panel/src/app/(dashboard)/tasks/page.tsx @@ -18,6 +18,7 @@ import type { TaskFilters as TaskApiFilters } from "@/lib/api/tasks"; import { Skeleton } from "@/components/ui/skeleton"; import { usePageRefresh } from "@/hooks"; import { useScrollRestorationStore } from "@/lib/stores"; +import { HelpTip } from "@/components/ui/help-tip"; function TasksPageContent() { const router = useRouter(); @@ -304,9 +305,11 @@ function TasksPageContent() {

Tasks

-

- Manage and track all tasks across teams -

+ +

+ Manage and track all tasks across teams +

+
diff --git a/panel/src/components/git/__tests__/code-snippet.test.tsx b/panel/src/components/git/__tests__/code-snippet.test.tsx index c6a48e5f..b77393bb 100644 --- a/panel/src/components/git/__tests__/code-snippet.test.tsx +++ b/panel/src/components/git/__tests__/code-snippet.test.tsx @@ -71,6 +71,9 @@ describe("CodeSnippet", () => { // The active line's content is "b"; its row carries the highlight class. const row = screen.getByText("b").parentElement; expect(row?.className).toContain("bg-blue-500/15"); + // The active line's number is now a real HelpTip trigger (Radix injects + // data-state via asChild), not a bare span. + expect(screen.getByText("2").getAttribute("data-state")).toBe("closed"); }); it("renders the fail-open hint on an error", () => { diff --git a/panel/src/components/git/code-snippet.tsx b/panel/src/components/git/code-snippet.tsx index cbe64ca4..56339931 100644 --- a/panel/src/components/git/code-snippet.tsx +++ b/panel/src/components/git/code-snippet.tsx @@ -4,6 +4,7 @@ import { useGitFile } from "@/hooks/use-git"; import { Skeleton } from "@/components/ui/skeleton"; import { ScrollArea } from "@/components/ui/scroll-area"; import { cn } from "@/lib/utils"; +import { HelpTip } from "@/components/ui/help-tip"; interface CodeSnippetProps { branch: string | null | undefined; @@ -64,9 +65,11 @@ export function CodeSnippet({ "bg-blue-500/15 ring-1 ring-inset ring-blue-500/30", )} > - - {lineNo} - + + + {lineNo} + + {text || " "}
); @@ -74,10 +77,12 @@ export function CodeSnippet({ {data.truncated && ( -

- showing lines {data.start_line}–{data.start_line + lines.length - 1}{" "} - of {data.total_lines} -

+ +

+ showing lines {data.start_line}– + {data.start_line + lines.length - 1} of {data.total_lines} +

+
)}
); diff --git a/panel/src/components/git/git-actions-panel.tsx b/panel/src/components/git/git-actions-panel.tsx index 769faaec..f24f99ca 100644 --- a/panel/src/components/git/git-actions-panel.tsx +++ b/panel/src/components/git/git-actions-panel.tsx @@ -150,28 +150,51 @@ export function GitActionsPanel({ open={showCommitDialog} onOpenChange={handleCommitDialogOpenChange} > - - - + + + + + Commit Changes
- + + +