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 (
Failed to load image
); } return (
Image attachment setError(true)} />
); }); const AudioAttachment = memo(function AudioAttachment({ src, filename, className, }: { src: string; filename?: string; className?: string; }) { return (
); }); 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 ( ); } };