import { ChevronLeft, ChevronRight } from "lucide-react"; import type { Issue } from "@paperclipai/shared"; import type { IssueSiblingNavigation as IssueSiblingNavigationState } from "@/lib/issue-detail-subissues"; import { createIssueDetailPath, withIssueDetailHeaderSeed } from "@/lib/issueDetailBreadcrumb"; import { cn } from "@/lib/utils"; import { Link } from "@/lib/router"; import { StatusIcon } from "./StatusIcon"; type IssueSiblingNavigationProps = { navigation: IssueSiblingNavigationState | null; linkState?: unknown; }; export function IssueSiblingNavigation({ navigation, linkState }: IssueSiblingNavigationProps) { if (!navigation) return null; return ( ); } function SiblingLink({ direction, issue, linkState, className, }: { direction: "previous" | "next"; issue: Issue; linkState?: unknown; className?: string; }) { const issuePathId = issue.identifier ?? issue.id; const label = direction === "previous" ? "Previous" : "Next"; const ariaDirection = direction === "previous" ? "Previous sub-task" : "Next sub-task"; const identifier = issue.identifier ?? issue.id.slice(0, 8); const Icon = direction === "previous" ? ChevronLeft : ChevronRight; return ( card; Card renders a div and would break anchor semantics (C5a Run 3) to={createIssueDetailPath(issuePathId)} state={withIssueDetailHeaderSeed(linkState, issue)} issuePrefetch={issue} issueQuicklookSide="top" issueQuicklookAlign={direction === "previous" ? "start" : "end"} aria-label={`${ariaDirection}: ${identifier} - ${issue.title}`} className={cn( "group min-w-0 rounded-lg border border-border bg-card px-3 py-2.5 text-left no-underline transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-(length:--rad-3) focus-visible:ring-ring", direction === "next" && "sm:text-right", className, )} >