'use client' // ============================================================================= // ComplianceAdvisorWidget — shared constants and sub-components // ============================================================================= // ============================================================================= // EXAMPLE QUESTIONS // ============================================================================= export const EXAMPLE_QUESTIONS: Record = { vvt: [ 'Was ist ein Verarbeitungsverzeichnis?', 'Welche Informationen muss ich erfassen?', 'Wie dokumentiere ich die Rechtsgrundlage?', ], 'compliance-scope': [ 'Was bedeutet L3?', 'Wann brauche ich eine DSFA?', 'Was ist der Unterschied zwischen L2 und L3?', ], tom: [ 'Was sind TOM?', 'Welche Massnahmen sind erforderlich?', 'Wie dokumentiere ich Verschluesselung?', ], dsfa: [ 'Was ist eine DSFA?', 'Wann ist eine DSFA verpflichtend?', 'Wie bewerte ich Risiken?', ], loeschfristen: [ 'Wie definiere ich Loeschfristen?', 'Was ist der Unterschied zwischen Loeschpflicht und Aufbewahrungspflicht?', 'Wann muss ich Daten loeschen?', ], default: [ 'Wie starte ich mit dem SDK?', 'Was ist der erste Schritt?', 'Welche Compliance-Anforderungen gelten fuer KI-Systeme?', ], } // ============================================================================= // TYPES // ============================================================================= export interface Message { id: string role: 'user' | 'agent' content: string timestamp: Date } // ============================================================================= // EmptyState — shown when no messages yet // ============================================================================= interface EmptyStateProps { exampleQuestions: string[] onExampleClick: (question: string) => void } export function AdvisorEmptyState({ exampleQuestions, onExampleClick }: EmptyStateProps) { return (

Willkommen beim Compliance Advisor

Stellen Sie Fragen zu DSGVO, KI-Verordnung und mehr.

Beispielfragen:

{exampleQuestions.map((question, idx) => ( ))}
) } // ============================================================================= // MessageList — renders messages + typing indicator // ============================================================================= interface MessageListProps { messages: Message[] isTyping: boolean messagesEndRef: React.RefObject } export function AdvisorMessageList({ messages, isTyping, messagesEndRef }: MessageListProps) { return ( <> {messages.map((message) => (

{message.content || (message.role === 'agent' && isTyping ? '' : message.content)}

{message.timestamp.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' })}

))} {isTyping && (
)}
) }