import { FileCode, FileText, LucideIcon, Paperclip } from 'lucide-react' import { cn } from '../../lib/utils' import { Badge } from '../../ui/badge' import { Button } from '../../ui/button' import { DocumentArtifact, CodeArtifact, isEqualArtifact, Artifact, } from './artifacts' import { useChatCanvas } from './context' const IconMap: Record = { code: FileCode, document: FileText, } export function ArtifactCard({ data, getTitle = getCardTitle, iconMap = IconMap, className, }: { data: Artifact getTitle?: (data: Artifact) => string iconMap?: Record className?: string }) { const { openArtifactInCanvas, getArtifactVersion, restoreArtifact, displayedArtifact, } = useChatCanvas() const { versionNumber, isLatest } = getArtifactVersion(data) const Icon = iconMap[data.type] || Paperclip const title = getTitle(data) const isDisplayed = displayedArtifact && isEqualArtifact(data, displayedArtifact) return (
openArtifactInCanvas(data)} >
Version {versionNumber}
{title}
{isLatest ? ( Latest ) : ( )}
) } const getCardTitle = (artifact: Artifact) => { if (artifact.type === 'code') { const { file_name } = artifact.data as CodeArtifact['data'] return file_name } if (artifact.type === 'document') { const { title } = artifact.data as DocumentArtifact['data'] return title } return 'Generated Artifact' }