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
TypeScript
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 };