"use client"; import type { ReactNode } from "react"; import { AgentTranscript, type AgentTranscriptClassNames, type AgentTranscriptProps, type TranscriptEntry } from "./AgentTranscript.tsx"; import { ChatComposer, type ChatComposerClassNames, type ChatComposerProps } from "./ChatComposer.tsx"; export interface AgentConversationClassNames { root: string; transcript: string; emptyState: string; composer: string; } export interface AgentConversationProps { entries: TranscriptEntry[]; className?: string; classNames?: Partial; emptyState?: ReactNode; transcriptClassName?: string; transcriptClassNames?: Partial; composerClassName?: string; composerClassNames?: Partial; transcriptProps?: Omit; composerProps?: Omit; } const DEFAULT_CLASS_NAMES: AgentConversationClassNames = { root: "sa-agent-conversation", transcript: "sa-agent-conversation-transcript", emptyState: "sa-agent-conversation-empty-state", composer: "sa-agent-conversation-composer", }; const cx = (...values: Array) => values.filter(Boolean).join(" "); const mergeClassNames = (defaults: AgentConversationClassNames, overrides?: Partial): AgentConversationClassNames => ({ root: cx(defaults.root, overrides?.root), transcript: cx(defaults.transcript, overrides?.transcript), emptyState: cx(defaults.emptyState, overrides?.emptyState), composer: cx(defaults.composer, overrides?.composer), }); export const AgentConversation = ({ entries, className, classNames: classNameOverrides, emptyState, transcriptClassName, transcriptClassNames, composerClassName, composerClassNames, transcriptProps, composerProps, }: AgentConversationProps) => { const resolvedClassNames = mergeClassNames(DEFAULT_CLASS_NAMES, classNameOverrides); const hasTranscriptContent = entries.length > 0 || Boolean(transcriptProps?.sessionError) || Boolean(transcriptProps?.eventError); return (
{hasTranscriptContent ? ( ) : emptyState ? (
{emptyState}
) : null} {composerProps ? ( ) : null}
); };