import { Play } from "lucide-react";
import type { IssueWorkProduct } from "@paperclipai/shared";
import {
formatBytes,
getIssueOutputs,
isImageContentType,
isVideoLikeOutput,
outputFilename,
type IssueOutputItem,
} from "@/lib/issue-output";
import { OutputPrimaryCard } from "./OutputPrimaryCard";
import { OutputRow } from "./OutputRow";
import { cn, relativeTime } from "@/lib/utils";
interface IssueOutputSectionProps {
workProducts: IssueWorkProduct[] | null | undefined;
/** Optional resolver for the artifact creator's display name. */
resolveCreatorName?: (item: IssueOutputItem) => string | null;
onMediaClick?: (item: IssueOutputItem) => void;
}
function isMediaOutput(item: IssueOutputItem) {
const meta = item.metadata;
return Boolean(meta && (
isImageContentType(meta.contentType) ||
isVideoLikeOutput(meta.contentType, meta.originalFilename)
));
}
function OutputMediaPreview({
item,
creatorName,
onMediaClick,
}: {
item: IssueOutputItem;
creatorName?: string | null;
onMediaClick?: (item: IssueOutputItem) => void;
}) {
const meta = item.metadata;
if (!meta) return null;
const filename = outputFilename(item);
const isVideo = isVideoLikeOutput(meta.contentType, meta.originalFilename);
const metaBits = [meta.contentType, formatBytes(meta.byteSize)];
if (creatorName) metaBits.push(creatorName);
metaBits.push(relativeTime(item.createdAt));
const preview = (
<>
{isVideo ? (
) : (
)}
{filename}
{metaBits.join(" · ")}
Also produced
{mediaRest.length > 0 ? (