Files
kandev/apps/web/components/task/chat/transcript-nav-group.tsx
T
2026-07-30 12:35:26 +01:00

47 lines
1.5 KiB
TypeScript

"use client";
import { ShareButton } from "@/components/task/share/share-button";
import { ScrollToLastPromptButton, ScrollToStartButton } from "./scroll-to-last-prompt-button";
export type TranscriptNavGroupProps = {
canShare: boolean;
taskId: string | null;
sessionId: string | null;
showScrollToLastPrompt?: boolean;
onScrollToLastPrompt?: () => void;
/** Where the last prompt sits relative to the viewport, i.e. which way
* `onScrollToLastPrompt` will actually move the transcript. Defaults to
* "up" for callers that don't track directionality. */
lastPromptScrollDirection?: "up" | "down";
showScrollToStart?: boolean;
onScrollToStart?: () => void;
};
/** The "jump" buttons (scroll-to-start, scroll-to-last-prompt) plus Share,
* grouped together and right-aligned in the chat status bar. */
export function TranscriptNavGroup({
canShare,
taskId,
sessionId,
showScrollToLastPrompt,
onScrollToLastPrompt,
lastPromptScrollDirection,
showScrollToStart,
onScrollToStart,
}: TranscriptNavGroupProps) {
return (
<div className="ml-auto flex shrink-0 items-center gap-1.5">
{showScrollToStart && onScrollToStart && <ScrollToStartButton onClick={onScrollToStart} />}
{showScrollToLastPrompt && onScrollToLastPrompt && (
<ScrollToLastPromptButton
onClick={onScrollToLastPrompt}
direction={lastPromptScrollDirection}
/>
)}
{canShare && taskId && sessionId && (
<ShareButton taskId={taskId} sessionId={sessionId} iconOnly />
)}
</div>
);
}