@rag-widget/chat-widget 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/accessibility.test.d.ts +1 -0
- package/dist/components/ChatWidget.test.d.ts +1 -0
- package/dist/components/home/BookmarksRow.d.ts +6 -0
- package/dist/components/home/BookmarksRow.test.d.ts +1 -0
- package/dist/components/home/HeaderSection.d.ts +6 -0
- package/dist/components/home/HeaderSection.test.d.ts +1 -0
- package/dist/components/home/StartChatCard.d.ts +6 -0
- package/dist/components/home/StartChatCard.test.d.ts +1 -0
- package/dist/components/home/TicketCategoryList.d.ts +7 -0
- package/dist/components/home/TicketCategoryList.test.d.ts +1 -0
- package/dist/components/home/index.d.ts +8 -0
- package/dist/components/views/HomeView.d.ts +9 -0
- package/dist/components/views/HomeView.test.d.ts +1 -0
- package/dist/components/views/index.d.ts +2 -0
- package/dist/hooks/useViewNavigation.d.ts +10 -0
- package/dist/hooks/useViewNavigation.test.d.ts +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.esm.js +206 -41
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +229 -58
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/providers/ChatWidgetProvider.d.ts +7 -1
- package/dist/providers/ChatWidgetProvider.test.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/dist/test/setup.d.ts +1 -0
- package/dist/types/homeView.test.d.ts +1 -0
- package/dist/types/index.d.ts +22 -0
- package/package.json +13 -4
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/hooks/useChatWidget.ts","../src/components/ChatBubble.tsx","../src/components/ChatWindow.tsx","../src/components/ChatWidget.tsx","../src/providers/ChatWidgetProvider.tsx"],"sourcesContent":["import { useState, useCallback, useRef, useEffect } from 'react';\r\nimport type { Message, WidgetConfig, ChatSession, ApiResponse } from '../types';\r\n\r\ninterface UseChatWidgetOptions {\r\n apiKey: string;\r\n widgetId: string;\r\n apiBaseUrl: string;\r\n onError?: (error: Error) => void;\r\n onMessageSent?: (message: string) => void;\r\n onMessageReceived?: (message: Message) => void;\r\n}\r\n\r\ninterface UseChatWidgetReturn {\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConnected: boolean;\r\n config: WidgetConfig | null;\r\n error: Error | null;\r\n sendMessage: (content: string) => Promise<void>;\r\n clearMessages: () => void;\r\n retry: () => void;\r\n}\r\n\r\nexport function useChatWidget(options: UseChatWidgetOptions): UseChatWidgetReturn {\r\n const { apiKey, widgetId, apiBaseUrl, onError, onMessageSent, onMessageReceived } = options;\r\n\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [config, setConfig] = useState<WidgetConfig | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [session, setSession] = useState<ChatSession | null>(null);\r\n\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n\r\n // Fetch widget configuration on mount\r\n useEffect(() => {\r\n fetchConfig();\r\n return () => {\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n };\r\n }, [apiKey, widgetId]);\r\n\r\n const fetchConfig = useCallback(async () => {\r\n try {\r\n const response = await fetch(`${apiBaseUrl}/api/v1/widget/${widgetId}/config`, {\r\n headers: {\r\n 'X-API-Key': apiKey\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch config: ${response.status}`);\r\n }\r\n\r\n const result: ApiResponse<WidgetConfig> = await response.json();\r\n\r\n if (result.status === 'success' && result.data) {\r\n setConfig(result.data);\r\n setIsConnected(true);\r\n setError(null);\r\n } else {\r\n throw new Error(result.message || 'Failed to load widget configuration');\r\n }\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error('Unknown error');\r\n setError(error);\r\n setIsConnected(false);\r\n onError?.(error);\r\n }\r\n }, [apiKey, widgetId, apiBaseUrl, onError]);\r\n\r\n const createSession = useCallback(async (): Promise<ChatSession> => {\r\n const response = await fetch(`${apiBaseUrl}/api/v1/widget/${widgetId}/sessions`, {\r\n method: 'POST',\r\n headers: {\r\n 'X-API-Key': apiKey,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to create session: ${response.status}`);\r\n }\r\n\r\n const result: ApiResponse<ChatSession> = await response.json();\r\n\r\n if (result.status === 'success' && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.message || 'Failed to create session');\r\n }, [apiKey, widgetId, apiBaseUrl]);\r\n\r\n const sendMessage = useCallback(async (content: string) => {\r\n if (!content.trim() || isLoading) return;\r\n\r\n // Cancel any ongoing request\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n abortControllerRef.current = new AbortController();\r\n\r\n const userMessage: Message = {\r\n id: `msg-${Date.now()}`,\r\n role: 'user',\r\n content: content.trim(),\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n setIsLoading(true);\r\n setError(null);\r\n onMessageSent?.(content);\r\n\r\n try {\r\n // Ensure we have a session\r\n let currentSession = session;\r\n if (!currentSession || new Date() > new Date(currentSession.expiresAt)) {\r\n currentSession = await createSession();\r\n setSession(currentSession);\r\n }\r\n\r\n // Create placeholder for assistant message\r\n const assistantMessageId = `msg-${Date.now()}-assistant`;\r\n const assistantMessage: Message = {\r\n id: assistantMessageId,\r\n role: 'assistant',\r\n content: '',\r\n timestamp: new Date(),\r\n isStreaming: true\r\n };\r\n setMessages(prev => [...prev, assistantMessage]);\r\n\r\n // Send message with SSE streaming\r\n const response = await fetch(\r\n `${apiBaseUrl}/api/v1/widget/${widgetId}/sessions/${currentSession.sessionId}/messages`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'X-API-Key': apiKey,\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'text/event-stream'\r\n },\r\n body: JSON.stringify({ message: content }),\r\n signal: abortControllerRef.current.signal\r\n }\r\n );\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to send message: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n const decoder = new TextDecoder();\r\n let fullContent = '';\r\n\r\n if (reader) {\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n const chunk = decoder.decode(value, { stream: true });\r\n const lines = chunk.split('\\n');\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data: ')) {\r\n try {\r\n const data = JSON.parse(line.slice(6));\r\n\r\n if (data.type === 'chunk') {\r\n fullContent += data.content;\r\n setMessages(prev =>\r\n prev.map(msg =>\r\n msg.id === assistantMessageId\r\n ? { ...msg, content: fullContent }\r\n : msg\r\n )\r\n );\r\n } else if (data.type === 'done') {\r\n setMessages(prev =>\r\n prev.map(msg =>\r\n msg.id === assistantMessageId\r\n ? { ...msg, isStreaming: false, sources: data.sources }\r\n : msg\r\n )\r\n );\r\n\r\n const finalMessage: Message = {\r\n id: assistantMessageId,\r\n role: 'assistant',\r\n content: fullContent,\r\n timestamp: new Date(),\r\n sources: data.sources\r\n };\r\n onMessageReceived?.(finalMessage);\r\n }\r\n } catch {\r\n // Ignore parse errors for partial SSE data\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n if ((err as Error).name === 'AbortError') {\r\n // Request was cancelled, ignore\r\n return;\r\n }\r\n\r\n const error = err instanceof Error ? err : new Error('Failed to send message');\r\n setError(error);\r\n onError?.(error);\r\n\r\n // Remove the incomplete assistant message\r\n setMessages(prev => prev.filter(msg => !msg.isStreaming));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [apiKey, widgetId, apiBaseUrl, session, isLoading, createSession, onError, onMessageSent, onMessageReceived]);\r\n\r\n const clearMessages = useCallback(() => {\r\n setMessages([]);\r\n setSession(null);\r\n }, []);\r\n\r\n const retry = useCallback(() => {\r\n setError(null);\r\n fetchConfig();\r\n }, [fetchConfig]);\r\n\r\n return {\r\n messages,\r\n isLoading,\r\n isConnected,\r\n config,\r\n error,\r\n sendMessage,\r\n clearMessages,\r\n retry\r\n };\r\n}\r\n","import React from 'react';\r\nimport type { ChatBubbleProps } from '../types';\r\n\r\nconst ChatIcon: React.FC = () => (\r\n <svg\r\n className=\"rag-chat-bubble-icon\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\" />\r\n <path d=\"M7 9h10v2H7zm0-3h10v2H7z\" />\r\n </svg>\r\n);\r\n\r\nconst CloseIcon: React.FC = () => (\r\n <svg\r\n className=\"rag-chat-bubble-icon\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n </svg>\r\n);\r\n\r\nexport const ChatBubble: React.FC<ChatBubbleProps> = ({\r\n isOpen,\r\n onClick,\r\n primaryColor = '#007bff',\r\n position = 'bottom-right',\r\n unreadCount = 0\r\n}) => {\r\n return (\r\n <button\r\n className={`rag-chat-bubble ${position}`}\r\n onClick={onClick}\r\n style={{ backgroundColor: primaryColor }}\r\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\r\n type=\"button\"\r\n >\r\n {isOpen ? <CloseIcon /> : <ChatIcon />}\r\n {!isOpen && unreadCount > 0 && (\r\n <span className=\"rag-chat-bubble-badge\">\r\n {unreadCount > 9 ? '9+' : unreadCount}\r\n </span>\r\n )}\r\n </button>\r\n );\r\n};\r\n\r\nexport default ChatBubble;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport type { ChatWindowProps, Message } from '../types';\r\n\r\nconst CloseIcon: React.FC = () => (\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\r\n />\r\n </svg>\r\n);\r\n\r\nconst SendIcon: React.FC = () => (\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\r\n </svg>\r\n);\r\n\r\nconst LoadingDots: React.FC = () => (\r\n <div className=\"rag-chat-loading\">\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n </div>\r\n);\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n}\r\n\r\nconst MessageBubble: React.FC<MessageBubbleProps> = ({ message }) => (\r\n <div className={`rag-chat-message ${message.role}`}>\r\n {message.isStreaming && !message.content ? (\r\n <LoadingDots />\r\n ) : (\r\n <p className=\"rag-chat-message-content\">{message.content}</p>\r\n )}\r\n {message.sources && message.sources.length > 0 && (\r\n <div className=\"rag-chat-message-sources\">\r\n <div className=\"rag-chat-message-sources-title\">Sources:</div>\r\n {message.sources.map((source, index) => (\r\n <div key={index} className=\"rag-chat-message-source\">\r\n {source.title}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nexport const ChatWindow: React.FC<ChatWindowProps> = ({\r\n isOpen,\r\n onClose,\r\n config,\r\n messages,\r\n isLoading,\r\n onSendMessage\r\n}) => {\r\n const [inputValue, setInputValue] = useState('');\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n // Scroll to bottom when new messages arrive\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }, [messages]);\r\n\r\n // Focus input when window opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n inputRef.current?.focus();\r\n }\r\n }, [isOpen]);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (inputValue.trim() && !isLoading) {\r\n onSendMessage(inputValue.trim());\r\n setInputValue('');\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSubmit(e);\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n const position = config?.position || 'bottom-right';\r\n const primaryColor = config?.primaryColor || '#007bff';\r\n\r\n return (\r\n <div\r\n className={`rag-chat-window ${position}`}\r\n style={{ '--rag-primary-color': primaryColor } as React.CSSProperties}\r\n >\r\n <div className=\"rag-chat-header\" style={{ backgroundColor: primaryColor }}>\r\n <h3 className=\"rag-chat-header-title\">{config?.name || 'Chat'}</h3>\r\n <button\r\n className=\"rag-chat-header-close\"\r\n onClick={onClose}\r\n aria-label=\"Close chat\"\r\n type=\"button\"\r\n >\r\n <CloseIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"rag-chat-messages\">\r\n {messages.length === 0 && (config?.uspText || config?.greeting) && (\r\n <div className=\"rag-chat-greeting\">\r\n {config?.uspText && (\r\n <p className=\"rag-chat-usp-text\">{config.uspText}</p>\r\n )}\r\n {config?.greeting && (\r\n <p className=\"rag-chat-greeting-text\">{config.greeting}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {messages.map(message => (\r\n <MessageBubble key={message.id} message={message} />\r\n ))}\r\n\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <form className=\"rag-chat-input-container\" onSubmit={handleSubmit}>\r\n <textarea\r\n ref={inputRef}\r\n className=\"rag-chat-input\"\r\n value={inputValue}\r\n onChange={e => setInputValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={config?.placeholder || 'Type a message...'}\r\n rows={1}\r\n maxLength={config?.allowedMessageLength || 2000}\r\n disabled={isLoading}\r\n />\r\n <button\r\n type=\"submit\"\r\n className=\"rag-chat-send-button\"\r\n disabled={!inputValue.trim() || isLoading}\r\n style={{ backgroundColor: primaryColor }}\r\n aria-label=\"Send message\"\r\n >\r\n <SendIcon />\r\n </button>\r\n </form>\r\n\r\n {config?.showPoweredBy && (\r\n <div className=\"rag-chat-powered-by\">\r\n Powered by <a href=\"https://rag-widget.com\" target=\"_blank\" rel=\"noopener noreferrer\">RAG Widget</a>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatWindow;\r\n","import React, { useState } from 'react';\r\nimport { useChatWidget } from '../hooks/useChatWidget';\r\nimport { ChatBubble } from './ChatBubble';\r\nimport { ChatWindow } from './ChatWindow';\r\nimport type { ChatWidgetProps } from '../types';\r\nimport '../styles/widget.css';\r\n\r\nexport const ChatWidget: React.FC<ChatWidgetProps> = ({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl = '',\r\n position,\r\n primaryColor,\r\n greeting,\r\n placeholder,\r\n showPoweredBy,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n // Determine the API base URL\r\n const baseUrl = apiBaseUrl || (typeof window !== 'undefined' ? window.location.origin : '');\r\n\r\n const {\r\n messages,\r\n isLoading,\r\n isConnected,\r\n config,\r\n error,\r\n sendMessage,\r\n retry\r\n } = useChatWidget({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl: baseUrl,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n });\r\n\r\n // Merge props with fetched config (props take precedence)\r\n const mergedConfig = config ? {\r\n ...config,\r\n position: position || config.position,\r\n primaryColor: primaryColor || config.primaryColor,\r\n greeting: greeting || config.greeting,\r\n placeholder: placeholder || config.placeholder,\r\n showPoweredBy: showPoweredBy !== undefined ? showPoweredBy : config.showPoweredBy\r\n } : null;\r\n\r\n const handleToggle = () => {\r\n setIsOpen(prev => !prev);\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n // Show error state in the window if there's an error\r\n if (error && isOpen) {\r\n return (\r\n <div className=\"rag-chat-widget\">\r\n <ChatBubble\r\n isOpen={isOpen}\r\n onClick={handleToggle}\r\n primaryColor={primaryColor || '#007bff'}\r\n position={position || 'bottom-right'}\r\n />\r\n <div className={`rag-chat-window ${position || 'bottom-right'}`}>\r\n <div className=\"rag-chat-header\" style={{ backgroundColor: primaryColor || '#007bff' }}>\r\n <h3 className=\"rag-chat-header-title\">Chat</h3>\r\n <button className=\"rag-chat-header-close\" onClick={handleClose} type=\"button\">\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n <div className=\"rag-chat-error\">\r\n <p className=\"rag-chat-error-message\">\r\n {error.message || 'Unable to connect. Please try again.'}\r\n </p>\r\n <button className=\"rag-chat-error-retry\" onClick={retry} type=\"button\">\r\n Retry\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"rag-chat-widget\">\r\n <ChatBubble\r\n isOpen={isOpen}\r\n onClick={handleToggle}\r\n primaryColor={mergedConfig?.primaryColor || primaryColor || '#007bff'}\r\n position={mergedConfig?.position || position || 'bottom-right'}\r\n />\r\n {mergedConfig && (\r\n <ChatWindow\r\n isOpen={isOpen}\r\n onClose={handleClose}\r\n config={mergedConfig}\r\n messages={messages}\r\n isLoading={isLoading}\r\n onSendMessage={sendMessage}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatWidget;\r\n","import React, { createContext, useContext, useMemo } from 'react';\r\nimport type { ChatWidgetProps, WidgetConfig, Message } from '../types';\r\nimport { useChatWidget } from '../hooks/useChatWidget';\r\n\r\ninterface ChatWidgetContextValue {\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConnected: boolean;\r\n config: WidgetConfig | null;\r\n error: Error | null;\r\n sendMessage: (content: string) => Promise<void>;\r\n clearMessages: () => void;\r\n retry: () => void;\r\n}\r\n\r\nconst ChatWidgetContext = createContext<ChatWidgetContextValue | null>(null);\r\n\r\nexport interface ChatWidgetProviderProps extends Omit<ChatWidgetProps, 'position' | 'primaryColor' | 'greeting' | 'placeholder' | 'showPoweredBy'> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const ChatWidgetProvider: React.FC<ChatWidgetProviderProps> = ({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl = '',\r\n onError,\r\n onMessageSent,\r\n onMessageReceived,\r\n children\r\n}) => {\r\n const baseUrl = apiBaseUrl || (typeof window !== 'undefined' ? window.location.origin : '');\r\n\r\n const chatWidget = useChatWidget({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl: baseUrl,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n });\r\n\r\n const value = useMemo(() => ({\r\n messages: chatWidget.messages,\r\n isLoading: chatWidget.isLoading,\r\n isConnected: chatWidget.isConnected,\r\n config: chatWidget.config,\r\n error: chatWidget.error,\r\n sendMessage: chatWidget.sendMessage,\r\n clearMessages: chatWidget.clearMessages,\r\n retry: chatWidget.retry\r\n }), [chatWidget]);\r\n\r\n return (\r\n <ChatWidgetContext.Provider value={value}>\r\n {children}\r\n </ChatWidgetContext.Provider>\r\n );\r\n};\r\n\r\nexport const useChatWidgetContext = (): ChatWidgetContextValue => {\r\n const context = useContext(ChatWidgetContext);\r\n if (!context) {\r\n throw new Error('useChatWidgetContext must be used within a ChatWidgetProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport default ChatWidgetProvider;\r\n"],"names":["_jsxs","_jsx","CloseIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/hooks/useChatWidget.ts","../src/hooks/useViewNavigation.ts","../src/components/ChatBubble.tsx","../src/components/home/HeaderSection.tsx","../src/components/home/StartChatCard.tsx","../src/components/home/TicketCategoryList.tsx","../src/components/home/BookmarksRow.tsx","../src/components/views/HomeView.tsx","../src/components/ChatWidget.tsx","../src/components/ChatWindow.tsx","../src/providers/ChatWidgetProvider.tsx"],"sourcesContent":["import { useState, useCallback, useRef, useEffect } from 'react';\r\nimport type { Message, WidgetConfig, ChatSession, ApiResponse } from '../types';\r\n\r\ninterface UseChatWidgetOptions {\r\n apiKey: string;\r\n widgetId: string;\r\n apiBaseUrl: string;\r\n onError?: (error: Error) => void;\r\n onMessageSent?: (message: string) => void;\r\n onMessageReceived?: (message: Message) => void;\r\n}\r\n\r\ninterface UseChatWidgetReturn {\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConnected: boolean;\r\n config: WidgetConfig | null;\r\n error: Error | null;\r\n sendMessage: (content: string) => Promise<void>;\r\n clearMessages: () => void;\r\n retry: () => void;\r\n}\r\n\r\nexport function useChatWidget(options: UseChatWidgetOptions): UseChatWidgetReturn {\r\n const { apiKey, widgetId, apiBaseUrl, onError, onMessageSent, onMessageReceived } = options;\r\n\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [config, setConfig] = useState<WidgetConfig | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [session, setSession] = useState<ChatSession | null>(null);\r\n\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n\r\n // Fetch widget configuration on mount\r\n useEffect(() => {\r\n fetchConfig();\r\n return () => {\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n };\r\n }, [apiKey, widgetId]);\r\n\r\n const fetchConfig = useCallback(async () => {\r\n try {\r\n const response = await fetch(`${apiBaseUrl}/api/v1/widget/${widgetId}/config`, {\r\n headers: {\r\n 'X-API-Key': apiKey\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch config: ${response.status}`);\r\n }\r\n\r\n const result: ApiResponse<WidgetConfig> = await response.json();\r\n\r\n if (result.status === 'success' && result.data) {\r\n setConfig(result.data);\r\n setIsConnected(true);\r\n setError(null);\r\n } else {\r\n throw new Error(result.message || 'Failed to load widget configuration');\r\n }\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error('Unknown error');\r\n setError(error);\r\n setIsConnected(false);\r\n onError?.(error);\r\n }\r\n }, [apiKey, widgetId, apiBaseUrl, onError]);\r\n\r\n const createSession = useCallback(async (): Promise<ChatSession> => {\r\n const response = await fetch(`${apiBaseUrl}/api/v1/widget/${widgetId}/sessions`, {\r\n method: 'POST',\r\n headers: {\r\n 'X-API-Key': apiKey,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to create session: ${response.status}`);\r\n }\r\n\r\n const result: ApiResponse<ChatSession> = await response.json();\r\n\r\n if (result.status === 'success' && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.message || 'Failed to create session');\r\n }, [apiKey, widgetId, apiBaseUrl]);\r\n\r\n const sendMessage = useCallback(async (content: string) => {\r\n if (!content.trim() || isLoading) return;\r\n\r\n // Cancel any ongoing request\r\n if (abortControllerRef.current) {\r\n abortControllerRef.current.abort();\r\n }\r\n abortControllerRef.current = new AbortController();\r\n\r\n const userMessage: Message = {\r\n id: `msg-${Date.now()}`,\r\n role: 'user',\r\n content: content.trim(),\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n setIsLoading(true);\r\n setError(null);\r\n onMessageSent?.(content);\r\n\r\n try {\r\n // Ensure we have a session\r\n let currentSession = session;\r\n if (!currentSession || new Date() > new Date(currentSession.expiresAt)) {\r\n currentSession = await createSession();\r\n setSession(currentSession);\r\n }\r\n\r\n // Create placeholder for assistant message\r\n const assistantMessageId = `msg-${Date.now()}-assistant`;\r\n const assistantMessage: Message = {\r\n id: assistantMessageId,\r\n role: 'assistant',\r\n content: '',\r\n timestamp: new Date(),\r\n isStreaming: true\r\n };\r\n setMessages(prev => [...prev, assistantMessage]);\r\n\r\n // Send message with SSE streaming\r\n const response = await fetch(\r\n `${apiBaseUrl}/api/v1/widget/${widgetId}/sessions/${currentSession.sessionId}/messages`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'X-API-Key': apiKey,\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'text/event-stream'\r\n },\r\n body: JSON.stringify({ message: content }),\r\n signal: abortControllerRef.current.signal\r\n }\r\n );\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to send message: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n const decoder = new TextDecoder();\r\n let fullContent = '';\r\n\r\n if (reader) {\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n const chunk = decoder.decode(value, { stream: true });\r\n const lines = chunk.split('\\n');\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data: ')) {\r\n try {\r\n const data = JSON.parse(line.slice(6));\r\n\r\n if (data.type === 'chunk') {\r\n fullContent += data.content;\r\n setMessages(prev =>\r\n prev.map(msg =>\r\n msg.id === assistantMessageId\r\n ? { ...msg, content: fullContent }\r\n : msg\r\n )\r\n );\r\n } else if (data.type === 'done') {\r\n setMessages(prev =>\r\n prev.map(msg =>\r\n msg.id === assistantMessageId\r\n ? { ...msg, isStreaming: false, sources: data.sources }\r\n : msg\r\n )\r\n );\r\n\r\n const finalMessage: Message = {\r\n id: assistantMessageId,\r\n role: 'assistant',\r\n content: fullContent,\r\n timestamp: new Date(),\r\n sources: data.sources\r\n };\r\n onMessageReceived?.(finalMessage);\r\n }\r\n } catch {\r\n // Ignore parse errors for partial SSE data\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n if ((err as Error).name === 'AbortError') {\r\n // Request was cancelled, ignore\r\n return;\r\n }\r\n\r\n const error = err instanceof Error ? err : new Error('Failed to send message');\r\n setError(error);\r\n onError?.(error);\r\n\r\n // Remove the incomplete assistant message\r\n setMessages(prev => prev.filter(msg => !msg.isStreaming));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [apiKey, widgetId, apiBaseUrl, session, isLoading, createSession, onError, onMessageSent, onMessageReceived]);\r\n\r\n const clearMessages = useCallback(() => {\r\n setMessages([]);\r\n setSession(null);\r\n }, []);\r\n\r\n const retry = useCallback(() => {\r\n setError(null);\r\n fetchConfig();\r\n }, [fetchConfig]);\r\n\r\n return {\r\n messages,\r\n isLoading,\r\n isConnected,\r\n config,\r\n error,\r\n sendMessage,\r\n clearMessages,\r\n retry\r\n };\r\n}\r\n","import { useState, useCallback } from 'react';\r\nimport type { WidgetView } from '../types';\r\n\r\ninterface ViewNavigationState {\r\n currentView: WidgetView;\r\n previousView: WidgetView | null;\r\n}\r\n\r\nexport interface UseViewNavigationReturn {\r\n currentView: WidgetView;\r\n previousView: WidgetView | null;\r\n canGoBack: boolean;\r\n navigateToChat: () => void;\r\n navigateToHome: () => void;\r\n goBack: () => void;\r\n}\r\n\r\nexport const useViewNavigation = (\r\n initialView: WidgetView = 'home'\r\n): UseViewNavigationReturn => {\r\n const [state, setState] = useState<ViewNavigationState>({\r\n currentView: initialView,\r\n previousView: null,\r\n });\r\n\r\n const navigateToChat = useCallback(() => {\r\n setState((prev) => ({\r\n currentView: 'chat',\r\n previousView: prev.currentView,\r\n }));\r\n }, []);\r\n\r\n const navigateToHome = useCallback(() => {\r\n setState((prev) => ({\r\n currentView: 'home',\r\n previousView: prev.currentView,\r\n }));\r\n }, []);\r\n\r\n const goBack = useCallback(() => {\r\n if (state.currentView !== 'home') {\r\n setState((prev) => ({\r\n currentView: 'home',\r\n previousView: prev.currentView,\r\n }));\r\n }\r\n }, [state.currentView]);\r\n\r\n const canGoBack = state.currentView !== 'home';\r\n\r\n return {\r\n currentView: state.currentView,\r\n previousView: state.previousView,\r\n canGoBack,\r\n navigateToChat,\r\n navigateToHome,\r\n goBack,\r\n };\r\n};\r\n","import React from 'react';\r\nimport type { ChatBubbleProps } from '../types';\r\n\r\nconst ChatIcon: React.FC = () => (\r\n <svg\r\n className=\"rag-chat-bubble-icon\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\" />\r\n <path d=\"M7 9h10v2H7zm0-3h10v2H7z\" />\r\n </svg>\r\n);\r\n\r\nconst CloseIcon: React.FC = () => (\r\n <svg\r\n className=\"rag-chat-bubble-icon\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n </svg>\r\n);\r\n\r\nexport const ChatBubble: React.FC<ChatBubbleProps> = ({\r\n isOpen,\r\n onClick,\r\n primaryColor = '#007bff',\r\n position = 'bottom-right',\r\n unreadCount = 0\r\n}) => {\r\n return (\r\n <button\r\n className={`rag-chat-bubble ${position}`}\r\n onClick={onClick}\r\n style={{ backgroundColor: primaryColor }}\r\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\r\n type=\"button\"\r\n >\r\n {isOpen ? <CloseIcon /> : <ChatIcon />}\r\n {!isOpen && unreadCount > 0 && (\r\n <span className=\"rag-chat-bubble-badge\">\r\n {unreadCount > 9 ? '9+' : unreadCount}\r\n </span>\r\n )}\r\n </button>\r\n );\r\n};\r\n\r\nexport default ChatBubble;\r\n","import React from 'react';\r\n\r\nexport interface HeaderSectionProps {\r\n greeting: string;\r\n logoUrl?: string;\r\n}\r\n\r\nexport const HeaderSection: React.FC<HeaderSectionProps> = ({\r\n greeting,\r\n logoUrl,\r\n}) => {\r\n return (\r\n <div className=\"rag-home-header\">\r\n {logoUrl && (\r\n <img\r\n src={logoUrl}\r\n alt=\"Logo\"\r\n className=\"rag-home-logo\"\r\n />\r\n )}\r\n <h2 className=\"rag-home-greeting\">{greeting}</h2>\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport interface StartChatCardProps {\r\n onStartChat: () => void;\r\n subtitle?: string;\r\n}\r\n\r\nconst ChatIcon: React.FC = () => (\r\n <svg\r\n data-testid=\"chat-icon\"\r\n className=\"rag-start-chat-card__icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\nconst ArrowIcon: React.FC = () => (\r\n <svg\r\n data-testid=\"arrow-icon\"\r\n className=\"rag-start-chat-card__arrow\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M9 18l6-6-6-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const StartChatCard = React.forwardRef<HTMLButtonElement, StartChatCardProps>(({\r\n onStartChat,\r\n subtitle,\r\n}, ref) => {\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n onStartChat();\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className=\"rag-start-chat-card\"\r\n onClick={onStartChat}\r\n onKeyDown={handleKeyDown}\r\n aria-label=\"Start new chat conversation\"\r\n >\r\n <ChatIcon />\r\n <div className=\"rag-start-chat-card__content\">\r\n <div className=\"rag-start-chat-card__title\">Start new chat</div>\r\n {subtitle && (\r\n <div className=\"rag-start-chat-card__subtitle\">{subtitle}</div>\r\n )}\r\n </div>\r\n <ArrowIcon />\r\n </button>\r\n );\r\n});\r\n\r\n// Display name for debugging\r\nStartChatCard.displayName = 'StartChatCard';\r\n","import React from 'react';\r\nimport type { TicketCategory } from '../../types';\r\n\r\nexport interface TicketCategoryListProps {\r\n categories: TicketCategory[];\r\n onCategoryClick: (categoryId: string) => void;\r\n}\r\n\r\nconst ChevronIcon: React.FC = () => (\r\n <svg\r\n className=\"rag-ticket-category__chevron\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M9 18l6-6-6-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport const TicketCategoryList: React.FC<TicketCategoryListProps> = ({\r\n categories,\r\n onCategoryClick,\r\n}) => {\r\n const enabledCategories = categories.filter((cat) => cat.enabled);\r\n\r\n if (enabledCategories.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"rag-ticket-section\">\r\n <div className=\"rag-ticket-section__title\">Submit a ticket</div>\r\n <div className=\"rag-ticket-list\">\r\n {enabledCategories.map((category) => (\r\n <button\r\n key={category.id}\r\n type=\"button\"\r\n className=\"rag-ticket-category\"\r\n onClick={() => onCategoryClick(category.id)}\r\n aria-label={`Submit ${category.label} ticket`}\r\n >\r\n <span className=\"rag-ticket-category__icon\">{category.icon}</span>\r\n <span className=\"rag-ticket-category__label\">{category.label}</span>\r\n <ChevronIcon />\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport type { Bookmark } from '../../types';\r\n\r\nexport interface BookmarksRowProps {\r\n bookmarks: Bookmark[];\r\n}\r\n\r\nexport const BookmarksRow: React.FC<BookmarksRowProps> = ({ bookmarks }) => {\r\n if (bookmarks.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <nav className=\"rag-bookmarks-section\" role=\"navigation\" aria-label=\"Quick links\">\r\n <div className=\"rag-bookmarks-section__title\" id=\"bookmarks-title\">Bookmarks</div>\r\n <div className=\"rag-bookmarks-row\" aria-labelledby=\"bookmarks-title\">\r\n {bookmarks.map((bookmark) => (\r\n <a\r\n key={bookmark.id}\r\n href={bookmark.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"rag-bookmark\"\r\n aria-label={`${bookmark.label} - opens in new tab`}\r\n >\r\n <span className=\"rag-bookmark__icon\" aria-hidden=\"true\">{bookmark.icon}</span>\r\n <span className=\"rag-bookmark__label\">{bookmark.label}</span>\r\n </a>\r\n ))}\r\n </div>\r\n </nav>\r\n );\r\n};\r\n","import React, { useEffect, useRef } from 'react';\r\nimport type { WidgetConfig } from '../../types';\r\nimport { HeaderSection } from '../home/HeaderSection';\r\nimport { StartChatCard } from '../home/StartChatCard';\r\nimport { TicketCategoryList } from '../home/TicketCategoryList';\r\nimport { BookmarksRow } from '../home/BookmarksRow';\r\n\r\nexport interface HomeViewProps {\r\n config: WidgetConfig;\r\n onStartChat: () => void;\r\n onTicketCategoryClick?: (categoryId: string) => void;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport const HomeView: React.FC<HomeViewProps> = ({\r\n config,\r\n onStartChat,\r\n onTicketCategoryClick,\r\n autoFocus = false,\r\n}) => {\r\n const homeConfig = config.homeView;\r\n const startChatRef = useRef<HTMLButtonElement>(null);\r\n\r\n // Auto-focus first interactive element when autoFocus is enabled\r\n useEffect(() => {\r\n if (autoFocus && startChatRef.current) {\r\n startChatRef.current.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n // Don't render if home view is not enabled or missing\r\n if (!homeConfig?.enabled) {\r\n return null;\r\n }\r\n\r\n // Use homeView greeting, fallback to widget greeting\r\n const greeting = homeConfig.greeting || config.greeting;\r\n\r\n const handleTicketCategoryClick = (categoryId: string) => {\r\n if (onTicketCategoryClick) {\r\n onTicketCategoryClick(categoryId);\r\n } else {\r\n // Default behavior: log \"Coming soon\" message\r\n console.log('Ticket category clicked (Coming soon):', categoryId);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"rag-home-view\" role=\"region\" aria-label=\"Help Center Home\">\r\n <HeaderSection\r\n greeting={greeting}\r\n logoUrl={homeConfig.logoUrl}\r\n />\r\n\r\n {homeConfig.showStartChat && (\r\n <StartChatCard\r\n ref={startChatRef}\r\n onStartChat={onStartChat}\r\n subtitle=\"How can we help you?\"\r\n />\r\n )}\r\n\r\n {homeConfig.ticketCategories && homeConfig.ticketCategories.length > 0 && (\r\n <TicketCategoryList\r\n categories={homeConfig.ticketCategories}\r\n onCategoryClick={handleTicketCategoryClick}\r\n />\r\n )}\r\n\r\n {homeConfig.bookmarks && homeConfig.bookmarks.length > 0 && (\r\n <BookmarksRow bookmarks={homeConfig.bookmarks} />\r\n )}\r\n\r\n {config.showPoweredBy && (\r\n <div className=\"rag-home-footer\">\r\n Powered by <a href=\"https://rag-widget.com\" target=\"_blank\" rel=\"noopener noreferrer\">RAG Widget</a>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useChatWidget } from '../hooks/useChatWidget';\r\nimport { useViewNavigation } from '../hooks/useViewNavigation';\r\nimport { ChatBubble } from './ChatBubble';\r\nimport { ChatWindow } from './ChatWindow';\r\nimport { HomeView } from './views/HomeView';\r\nimport type { ChatWidgetProps, WidgetView } from '../types';\r\nimport '../styles/widget.css';\r\n\r\nexport const ChatWidget: React.FC<ChatWidgetProps> = ({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl = '',\r\n position,\r\n primaryColor,\r\n greeting,\r\n placeholder,\r\n showPoweredBy,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n // Determine the API base URL\r\n const baseUrl = apiBaseUrl || (typeof window !== 'undefined' ? window.location.origin : '');\r\n\r\n const {\r\n messages,\r\n isLoading,\r\n config,\r\n error,\r\n sendMessage,\r\n retry\r\n } = useChatWidget({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl: baseUrl,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n });\r\n\r\n // Merge props with fetched config (props take precedence)\r\n const mergedConfig = config ? {\r\n ...config,\r\n position: position || config.position,\r\n primaryColor: primaryColor || config.primaryColor,\r\n greeting: greeting || config.greeting,\r\n placeholder: placeholder || config.placeholder,\r\n showPoweredBy: showPoweredBy !== undefined ? showPoweredBy : config.showPoweredBy\r\n } : null;\r\n\r\n // Determine initial view based on home view configuration\r\n const homeViewEnabled = mergedConfig?.homeView?.enabled ?? false;\r\n const initialView: WidgetView = homeViewEnabled ? 'home' : 'chat';\r\n\r\n const {\r\n currentView,\r\n canGoBack,\r\n navigateToChat,\r\n navigateToHome,\r\n } = useViewNavigation(initialView);\r\n\r\n // Update view when config loads - fixes race condition where config isn't\r\n // available on first render but homeView.enabled is true\r\n useEffect(() => {\r\n if (mergedConfig?.homeView?.enabled && currentView === 'chat') {\r\n navigateToHome();\r\n }\r\n }, [mergedConfig?.homeView?.enabled]);\r\n\r\n const handleToggle = () => {\r\n setIsOpen(prev => !prev);\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const handleStartChat = () => {\r\n navigateToChat();\r\n };\r\n\r\n const handleBack = () => {\r\n navigateToHome();\r\n };\r\n\r\n const effectivePrimaryColor = mergedConfig?.primaryColor || primaryColor || '#007bff';\r\n const effectivePosition = mergedConfig?.position || position || 'bottom-right';\r\n\r\n // Show error state in the window if there's an error\r\n if (error && isOpen) {\r\n return (\r\n <div className=\"rag-chat-widget\">\r\n <ChatBubble\r\n isOpen={isOpen}\r\n onClick={handleToggle}\r\n primaryColor={effectivePrimaryColor}\r\n position={effectivePosition}\r\n />\r\n <div className={`rag-chat-window ${effectivePosition}`}>\r\n <div className=\"rag-chat-header\" style={{ backgroundColor: effectivePrimaryColor }}>\r\n <h3 className=\"rag-chat-header-title\">Chat</h3>\r\n <button\r\n className=\"rag-chat-header-close\"\r\n onClick={handleClose}\r\n type=\"button\"\r\n aria-label=\"Close chat\"\r\n >\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n <div className=\"rag-chat-error\">\r\n <p className=\"rag-chat-error-message\">\r\n {error.message || 'Unable to connect. Please try again.'}\r\n </p>\r\n <button className=\"rag-chat-error-retry\" onClick={retry} type=\"button\">\r\n Retry\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Determine which view to render\r\n const shouldShowHomeView = currentView === 'home' && homeViewEnabled && mergedConfig;\r\n const shouldShowChatView = currentView === 'chat' || !homeViewEnabled;\r\n\r\n return (\r\n <div className=\"rag-chat-widget\">\r\n <ChatBubble\r\n isOpen={isOpen}\r\n onClick={handleToggle}\r\n primaryColor={effectivePrimaryColor}\r\n position={effectivePosition}\r\n />\r\n {isOpen && mergedConfig && (\r\n <div\r\n className={`rag-chat-window ${effectivePosition}`}\r\n style={{ '--rag-primary-color': effectivePrimaryColor } as React.CSSProperties}\r\n >\r\n {/* Header */}\r\n <div className=\"rag-chat-header\" style={{ backgroundColor: effectivePrimaryColor }}>\r\n <div className=\"rag-chat-header-left\">\r\n {canGoBack && (\r\n <button\r\n className=\"rag-chat-header-back\"\r\n onClick={handleBack}\r\n type=\"button\"\r\n aria-label=\"Back to home\"\r\n >\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\r\n />\r\n </svg>\r\n </button>\r\n )}\r\n <h3 className=\"rag-chat-header-title\">{mergedConfig.name || 'Chat'}</h3>\r\n </div>\r\n <button\r\n className=\"rag-chat-header-close\"\r\n onClick={handleClose}\r\n aria-label=\"Close chat\"\r\n type=\"button\"\r\n >\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* View Container */}\r\n <div className=\"rag-view-container\">\r\n {shouldShowHomeView && (\r\n <HomeView\r\n config={mergedConfig}\r\n onStartChat={handleStartChat}\r\n />\r\n )}\r\n {shouldShowChatView && (\r\n <ChatWindowContent\r\n config={mergedConfig}\r\n messages={messages}\r\n isLoading={isLoading}\r\n onSendMessage={sendMessage}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// Extracted chat window content (without header)\r\ninterface ChatWindowContentProps {\r\n config: NonNullable<ReturnType<typeof useChatWidget>['config']>;\r\n messages: ReturnType<typeof useChatWidget>['messages'];\r\n isLoading: boolean;\r\n onSendMessage: (message: string) => Promise<void>;\r\n}\r\n\r\nconst ChatWindowContent: React.FC<ChatWindowContentProps> = ({\r\n config,\r\n messages,\r\n isLoading,\r\n onSendMessage,\r\n}) => {\r\n const [inputValue, setInputValue] = React.useState('');\r\n const messagesEndRef = React.useRef<HTMLDivElement>(null);\r\n const inputRef = React.useRef<HTMLTextAreaElement>(null);\r\n\r\n // Scroll to bottom when new messages arrive\r\n React.useEffect(() => {\r\n if (messagesEndRef.current && typeof messagesEndRef.current.scrollIntoView === 'function') {\r\n messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }, [messages]);\r\n\r\n // Focus input when content mounts\r\n React.useEffect(() => {\r\n inputRef.current?.focus();\r\n }, []);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (inputValue.trim() && !isLoading) {\r\n onSendMessage(inputValue.trim());\r\n setInputValue('');\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSubmit(e);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"rag-chat-messages\">\r\n {messages.length === 0 && (config.uspText || config.greeting) && (\r\n <div className=\"rag-chat-greeting\">\r\n {config.uspText && (\r\n <p className=\"rag-chat-usp-text\">{config.uspText}</p>\r\n )}\r\n {config.greeting && (\r\n <p className=\"rag-chat-greeting-text\">{config.greeting}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {messages.map(message => (\r\n <div key={message.id} className={`rag-chat-message ${message.role}`}>\r\n {message.isStreaming && !message.content ? (\r\n <div className=\"rag-chat-loading\">\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n </div>\r\n ) : (\r\n <p className=\"rag-chat-message-content\">{message.content}</p>\r\n )}\r\n {message.sources && message.sources.length > 0 && (\r\n <div className=\"rag-chat-message-sources\">\r\n <div className=\"rag-chat-message-sources-title\">Sources:</div>\r\n {message.sources.map((source, index) => (\r\n <div key={index} className=\"rag-chat-message-source\">\r\n {source.title}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <form className=\"rag-chat-input-container\" onSubmit={handleSubmit}>\r\n <textarea\r\n ref={inputRef}\r\n className=\"rag-chat-input\"\r\n value={inputValue}\r\n onChange={e => setInputValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={config.placeholder || 'Type a message...'}\r\n rows={1}\r\n maxLength={config.allowedMessageLength || 2000}\r\n disabled={isLoading}\r\n />\r\n <button\r\n type=\"submit\"\r\n className=\"rag-chat-send-button\"\r\n disabled={!inputValue.trim() || isLoading}\r\n style={{ backgroundColor: config.primaryColor }}\r\n aria-label=\"Send message\"\r\n >\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\r\n </svg>\r\n </button>\r\n </form>\r\n\r\n {config.showPoweredBy && (\r\n <div className=\"rag-chat-powered-by\">\r\n Powered by <a href=\"https://rag-widget.com\" target=\"_blank\" rel=\"noopener noreferrer\">RAG Widget</a>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default ChatWidget;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport type { ChatWindowProps, Message } from '../types';\r\n\r\nconst CloseIcon: React.FC = () => (\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\r\n />\r\n </svg>\r\n);\r\n\r\nconst SendIcon: React.FC = () => (\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\r\n </svg>\r\n);\r\n\r\nconst LoadingDots: React.FC = () => (\r\n <div className=\"rag-chat-loading\">\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n <div className=\"rag-chat-loading-dot\" />\r\n </div>\r\n);\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n}\r\n\r\nconst MessageBubble: React.FC<MessageBubbleProps> = ({ message }) => (\r\n <div className={`rag-chat-message ${message.role}`}>\r\n {message.isStreaming && !message.content ? (\r\n <LoadingDots />\r\n ) : (\r\n <p className=\"rag-chat-message-content\">{message.content}</p>\r\n )}\r\n {message.sources && message.sources.length > 0 && (\r\n <div className=\"rag-chat-message-sources\">\r\n <div className=\"rag-chat-message-sources-title\">Sources:</div>\r\n {message.sources.map((source, index) => (\r\n <div key={index} className=\"rag-chat-message-source\">\r\n {source.title}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nexport const ChatWindow: React.FC<ChatWindowProps> = ({\r\n isOpen,\r\n onClose,\r\n config,\r\n messages,\r\n isLoading,\r\n onSendMessage\r\n}) => {\r\n const [inputValue, setInputValue] = useState('');\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n // Scroll to bottom when new messages arrive\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }, [messages]);\r\n\r\n // Focus input when window opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n inputRef.current?.focus();\r\n }\r\n }, [isOpen]);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (inputValue.trim() && !isLoading) {\r\n onSendMessage(inputValue.trim());\r\n setInputValue('');\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSubmit(e);\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n const position = config?.position || 'bottom-right';\r\n const primaryColor = config?.primaryColor || '#007bff';\r\n\r\n return (\r\n <div\r\n className={`rag-chat-window ${position}`}\r\n style={{ '--rag-primary-color': primaryColor } as React.CSSProperties}\r\n >\r\n <div className=\"rag-chat-header\" style={{ backgroundColor: primaryColor }}>\r\n <h3 className=\"rag-chat-header-title\">{config?.name || 'Chat'}</h3>\r\n <button\r\n className=\"rag-chat-header-close\"\r\n onClick={onClose}\r\n aria-label=\"Close chat\"\r\n type=\"button\"\r\n >\r\n <CloseIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"rag-chat-messages\">\r\n {messages.length === 0 && (config?.uspText || config?.greeting) && (\r\n <div className=\"rag-chat-greeting\">\r\n {config?.uspText && (\r\n <p className=\"rag-chat-usp-text\">{config.uspText}</p>\r\n )}\r\n {config?.greeting && (\r\n <p className=\"rag-chat-greeting-text\">{config.greeting}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {messages.map(message => (\r\n <MessageBubble key={message.id} message={message} />\r\n ))}\r\n\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <form className=\"rag-chat-input-container\" onSubmit={handleSubmit}>\r\n <textarea\r\n ref={inputRef}\r\n className=\"rag-chat-input\"\r\n value={inputValue}\r\n onChange={e => setInputValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={config?.placeholder || 'Type a message...'}\r\n rows={1}\r\n maxLength={config?.allowedMessageLength || 2000}\r\n disabled={isLoading}\r\n />\r\n <button\r\n type=\"submit\"\r\n className=\"rag-chat-send-button\"\r\n disabled={!inputValue.trim() || isLoading}\r\n style={{ backgroundColor: primaryColor }}\r\n aria-label=\"Send message\"\r\n >\r\n <SendIcon />\r\n </button>\r\n </form>\r\n\r\n {config?.showPoweredBy && (\r\n <div className=\"rag-chat-powered-by\">\r\n Powered by <a href=\"https://rag-widget.com\" target=\"_blank\" rel=\"noopener noreferrer\">RAG Widget</a>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatWindow;\r\n","import React, { createContext, useContext, useMemo } from 'react';\r\nimport type { ChatWidgetProps, WidgetConfig, Message, WidgetView } from '../types';\r\nimport { useChatWidget } from '../hooks/useChatWidget';\r\nimport { useViewNavigation } from '../hooks/useViewNavigation';\r\n\r\ninterface ChatWidgetContextValue {\r\n // Chat state\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConnected: boolean;\r\n config: WidgetConfig | null;\r\n error: Error | null;\r\n sendMessage: (content: string) => Promise<void>;\r\n clearMessages: () => void;\r\n retry: () => void;\r\n // View navigation\r\n currentView: WidgetView;\r\n previousView: WidgetView | null;\r\n canGoBack: boolean;\r\n navigateToChat: () => void;\r\n navigateToHome: () => void;\r\n goBack: () => void;\r\n}\r\n\r\nconst ChatWidgetContext = createContext<ChatWidgetContextValue | null>(null);\r\n\r\nexport interface ChatWidgetProviderProps extends Omit<ChatWidgetProps, 'position' | 'primaryColor' | 'greeting' | 'placeholder' | 'showPoweredBy'> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const ChatWidgetProvider: React.FC<ChatWidgetProviderProps> = ({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl = '',\r\n onError,\r\n onMessageSent,\r\n onMessageReceived,\r\n children\r\n}) => {\r\n const baseUrl = apiBaseUrl || (typeof window !== 'undefined' ? window.location.origin : '');\r\n\r\n const chatWidget = useChatWidget({\r\n apiKey,\r\n widgetId,\r\n apiBaseUrl: baseUrl,\r\n onError,\r\n onMessageSent,\r\n onMessageReceived\r\n });\r\n\r\n // Determine initial view based on config\r\n // If homeView is enabled, start with home; otherwise start with chat\r\n const homeViewEnabled = chatWidget.config?.homeView?.enabled ?? false;\r\n const initialView: WidgetView = homeViewEnabled ? 'home' : 'chat';\r\n\r\n const viewNavigation = useViewNavigation(initialView);\r\n\r\n const value = useMemo(() => ({\r\n // Chat state\r\n messages: chatWidget.messages,\r\n isLoading: chatWidget.isLoading,\r\n isConnected: chatWidget.isConnected,\r\n config: chatWidget.config,\r\n error: chatWidget.error,\r\n sendMessage: chatWidget.sendMessage,\r\n clearMessages: chatWidget.clearMessages,\r\n retry: chatWidget.retry,\r\n // View navigation\r\n currentView: viewNavigation.currentView,\r\n previousView: viewNavigation.previousView,\r\n canGoBack: viewNavigation.canGoBack,\r\n navigateToChat: viewNavigation.navigateToChat,\r\n navigateToHome: viewNavigation.navigateToHome,\r\n goBack: viewNavigation.goBack,\r\n }), [chatWidget, viewNavigation]);\r\n\r\n return (\r\n <ChatWidgetContext.Provider value={value}>\r\n {children}\r\n </ChatWidgetContext.Provider>\r\n );\r\n};\r\n\r\nexport const useChatWidgetContext = (): ChatWidgetContextValue => {\r\n const context = useContext(ChatWidgetContext);\r\n if (!context) {\r\n throw new Error('useChatWidgetContext must be used within a ChatWidgetProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport default ChatWidgetProvider;\r\n"],"names":["ChatIcon","_jsxs","_jsx","CloseIcon","_Fragment"],"mappings":"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"}
|