import type { Meta, StoryObj } from "@storybook/react-vite";
import { ArrowRight, User } from "lucide-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import {
AssigneeChip,
AssigneeRunningBanner,
ComposerHandoffPreviewRow,
ComposerMentionCoach,
HandoffWakeRow,
InterruptAssignConfirm,
PauseAffectsSummaryView,
RunStatusBadge,
type HandoffChipResolvers,
} from "@/components/interrupt-handoff/InterruptHandoffViews";
import {
computeComposerHandoffPreview,
computePauseAffectsSummary,
describeReassignInterrupt,
} from "@/lib/interrupt-handoff";
/**
* Visual states for the interrupt-handoff UX clarity work (PAP-10669). Each card
* is one row of the design's state matrix: interrupted → handed to QA,
* interrupted → waiting on user, and no agent selected.
*/
const resolvers: HandoffChipResolvers = {
agentMap: new Map([
["agent-claude", { name: "ClaudeCoder", icon: null }],
["agent-qa", { name: "QA", icon: null }],
]),
currentUserId: "user-board",
resolveUserLabel: (id) => (id === "user-board" ? "Riley Board" : null),
};
const claude = { agentId: "agent-claude", userId: null };
const qa = { agentId: "agent-qa", userId: null };
const board = { agentId: null, userId: "user-board" };
const unassigned = { agentId: null, userId: null };
function ActivityCard({
title,
state,
to,
interruptedRunAttached,
composerTarget,
composerCurrent,
composerHasActiveRun,
}: {
title: string;
state: string;
to: { agentId: string | null; userId: string | null };
interruptedRunAttached?: boolean;
composerTarget: string;
composerCurrent: string;
composerHasActiveRun: boolean;
}) {
const preview = computeComposerHandoffPreview({
reassignTarget: composerTarget,
currentAssigneeValue: composerCurrent,
hasActiveRun: composerHasActiveRun,
bodyHasAgentMention: false,
plainNameCandidate: null,
});
return (