export type Sentiment = | 'very-dissatisfied' | 'dissatisfied' | 'neutral' | 'satisfied' | 'very-satisfied' export interface FeedbackUser { id?: string email?: string name?: string } export interface FeedbackMetadata { url: string timestamp: string viewport: { width: number; height: number } userAgent: string } export interface FeedbackData { sentiment: Sentiment message?: string user?: FeedbackUser context?: Record metadata?: FeedbackMetadata } export interface FeedbackProps { /** Display variant */ variant?: 'popover' | 'modal' /** Popover position relative to trigger */ side?: 'top' | 'bottom' | 'left' | 'right' /** Trigger button label (icon-only if not set) */ triggerLabel?: string /** Dialog/popover title */ title?: string /** User information for attribution */ user?: FeedbackUser /** App-specific context (conversationId, featureName, etc.) */ context?: Record /** Auto-capture URL, timestamp, viewport, userAgent */ captureMetadata?: boolean /** Callback when feedback submitted (takes precedence over apiEndpoint) */ onSubmit?: (data: FeedbackData) => Promise | void /** API endpoint to POST feedback to */ apiEndpoint?: string /** Textarea placeholder */ placeholder?: string /** Submit button label */ submitLabel?: string /** Additional class for trigger button */ className?: string }