UNPKG

sandia-chatbot-widget

Version:

Production-ready Sandia AI Chatbot Widget v3.0 with advanced themes, animations, notifications, and enterprise features

199 lines (194 loc) 5.52 kB
import React from 'react'; interface WidgetStyles { position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'; primaryColor?: string; backgroundColor?: string; textColor?: string; borderRadius?: number; size?: 'sm' | 'md' | 'lg'; showPulse?: boolean; showBadge?: boolean; customIcon?: string; greeting?: string; theme?: 'modern' | 'classic' | 'minimal' | 'gradient'; shadowStyle?: 'soft' | 'hard' | 'glow' | 'none'; animation?: 'smooth' | 'bouncy' | 'slide' | 'fade' | 'none'; darkMode?: boolean; showAvatar?: boolean; showTimestamps?: boolean; soundEnabled?: boolean; notificationsEnabled?: boolean; allowFileUpload?: boolean; showTypingIndicator?: boolean; messagePersistence?: boolean; maxMessages?: number; autoMinimize?: number; customAvatar?: string; customCSS?: string; brandingEnabled?: boolean; highContrast?: boolean; reducedMotion?: boolean; mobileFullScreen?: boolean; swipeToClose?: boolean; } interface ChatConfiguration { quickReplies?: string[]; voiceEnabled?: boolean; voiceLanguage?: string; allowedFileTypes?: string[]; maxFileSize?: number; messagesPerMinute?: number; trackingEnabled?: boolean; customEvents?: string[]; } interface SandiaChatbotConfig { chatbotId: string; shareToken?: string; apiUrl?: string; styles?: WidgetStyles; chatConfig?: ChatConfiguration; onReady?: () => void; onOpen?: () => void; onClose?: () => void; onMinimize?: () => void; onRestore?: () => void; onMessage?: (message: { content: string; role: 'user' | 'assistant'; timestamp: Date; }) => void; onTyping?: (isTyping: boolean) => void; onError?: (error: Error) => void; onSubscriptionError?: (error: { message: string; upgradeRequired?: boolean; }) => void; onFileUpload?: (file: File) => void; onVoiceStart?: () => void; onVoiceEnd?: (transcript: string) => void; metadata?: Record<string, any>; debug?: boolean; version?: string; } interface Message { id: string; content: string; role: 'user' | 'assistant' | 'system'; timestamp: Date; metadata?: { conversationId?: string; fileAttachments?: Array<{ name: string; type: string; size: number; url?: string; }>; reactions?: string[]; edited?: boolean; error?: boolean; }; } interface ChatbotConfig { id: string; name: string; project: { name: string; }; widgetStyles: WidgetStyles; qaEntries: Array<{ question: string; answer: string; }>; qaEntriesCount: number; accessInfo?: { requiresAuth: boolean; hasShareToken: boolean; isAuthenticated: boolean; }; } interface ApiResponse<T = any> { success: boolean; data?: T; error?: string; message?: string; } interface EmbedValidationResult { allowed: boolean; reason?: string; upgradeRequired?: boolean; authRequired?: boolean; } interface SandiaWidgetProps { chatbotId: string; shareToken?: string; apiUrl?: string; styles?: Partial<WidgetStyles>; chatConfig?: Partial<ChatConfiguration>; onReady?: () => void; onOpen?: () => void; onClose?: () => void; onMinimize?: () => void; onRestore?: () => void; onMessage?: (message: { content: string; role: 'user' | 'assistant'; timestamp: Date; }) => void; onTyping?: (isTyping: boolean) => void; onError?: (error: Error) => void; onSubscriptionError?: (error: { message: string; upgradeRequired?: boolean; }) => void; onFileUpload?: (file: File) => void; onVoiceStart?: () => void; onVoiceEnd?: (transcript: string) => void; metadata?: Record<string, any>; debug?: boolean; version?: string; /** @deprecated Use styles.position instead */ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'; /** @deprecated Use styles.primaryColor instead */ primaryColor?: string; /** @deprecated Use styles.size instead */ size?: 'sm' | 'md' | 'lg'; } declare const SandiaWidget: React.FC<SandiaWidgetProps>; interface SandiaGlobal { chatbotId: string; shareToken?: string; styles?: WidgetStyles; chatConfig?: ChatConfiguration; apiUrl?: string; version?: string; metadata?: Record<string, any>; debug?: boolean; onReady?: () => void; onOpen?: () => void; onClose?: () => void; onMinimize?: () => void; onRestore?: () => void; onMessage?: (message: { content: string; role: 'user' | 'assistant'; timestamp: Date; }) => void; onTyping?: (isTyping: boolean) => void; onError?: (error: Error) => void; onSubscriptionError?: (error: { message: string; upgradeRequired?: boolean; }) => void; onFileUpload?: (file: File) => void; onVoiceStart?: () => void; onVoiceEnd?: (transcript: string) => void; } declare global { interface Window { SandiaChatbot?: SandiaGlobal; SandiaChatbotAPI?: any; } } declare function initSandiaChatbot(config?: SandiaGlobal): void; export { SandiaWidget, initSandiaChatbot }; export type { ApiResponse, ChatbotConfig, EmbedValidationResult, Message, SandiaChatbotConfig, SandiaWidgetProps, WidgetStyles };