import React, { memo, useState } from "react";
import type { InputContentSource } from "@copilotkit/shared";
import { getSourceUrl, getDocumentIcon } from "@copilotkit/shared";
interface AttachmentRendererProps {
type: "image" | "audio" | "video" | "document";
source: InputContentSource;
filename?: string;
className?: string;
}
const ImageAttachment = memo(function ImageAttachment({
src,
className,
}: {
src: string;
className?: string;
}) {
const [error, setError] = useState(false);
if (error) {
return (
);
}
return (

setError(true)}
/>
);
});
const AudioAttachment = memo(function AudioAttachment({
src,
filename,
className,
}: {
src: string;
filename?: string;
className?: string;
}) {
return (
{filename && (
{filename}
)}
);
});
const VideoAttachment = memo(function VideoAttachment({
src,
className,
}: {
src: string;
className?: string;
}) {
return (
);
});
const DocumentAttachment = memo(function DocumentAttachment({
source,
filename,
className,
}: {
source: InputContentSource;
filename?: string;
className?: string;
}) {
return (
{getDocumentIcon(source.mimeType ?? "")}
{filename || source.mimeType || "Unknown type"}
);
});
export const AttachmentRenderer: React.FC = ({
type,
source,
filename,
className,
}) => {
const src = getSourceUrl(source);
switch (type) {
case "image":
return ;
case "audio":
return (
);
case "video":
return ;
case "document":
return (
);
}
};