import type { ChatMessagePart, TransientPart } from "../../types"; import TextPart from "./TextPart"; import StepPart from "./StepPart"; import StatusPart from "./StatusPart"; import ProductsPart from "./ProductsPart"; interface MessagePartRendererProps { part: ChatMessagePart; partComponents?: Record< string, React.ComponentType<{ part: ChatMessagePart | TransientPart }> >; } export function MessagePartRenderer({ part, partComponents, }: MessagePartRendererProps) { switch (part.type) { case "text": return ; case "step": return ; case "data-products": if (partComponents?.["data-products"]) { const Custom = partComponents["data-products"]; return ; } return ; case "source-url": case "source-document": if (partComponents?.[part.type]) { const Custom = partComponents[part.type]; return ; } return null; default: return null; } } export interface TransientPartRendererProps { part: TransientPart; partComponents?: Record< string, React.ComponentType<{ part: ChatMessagePart | TransientPart }> >; } export function TransientPartRenderer({ part, partComponents, }: TransientPartRendererProps) { switch (part.type) { case "data-status": if (partComponents?.["data-status"]) { const Custom = partComponents["data-status"]; return ; } return ; default: return null; } }