@mnexium/chat-react 1.0.6 → 1.0.7

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/index.js CHANGED
@@ -623,7 +623,7 @@ function MnexiumChat({
623
623
  backgroundColor: theme === "dark" ? "rgba(42, 42, 42, 0.6)" : "rgba(249, 250, 251, 0.6)",
624
624
  border: "none",
625
625
  borderRadius: "8px",
626
- fontSize: "14px",
626
+ fontSize: isMobile ? "16px" : "14px",
627
627
  color: t.text,
628
628
  outline: "none",
629
629
  transition: "box-shadow 0.15s ease"
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client/MnexiumChat.tsx"],"sourcesContent":["export { MnexiumChat, type MnexiumChatProps, type Message } from './client/MnexiumChat';\nexport { MnexiumChat as default } from './client/MnexiumChat';\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\n\nexport interface Message {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\nexport interface MnexiumChatProps {\n endpoint?: string;\n placeholder?: string;\n title?: string;\n buttonLabel?: string;\n position?: 'bottom-right' | 'bottom-left';\n primaryColor?: string;\n textColor?: string;\n defaultOpen?: boolean;\n logo?: string;\n theme?: 'light' | 'dark';\n welcomeIcon?: string;\n welcomeMessage?: string;\n history?: boolean;\n eagerInit?: boolean;\n}\n\nconst themes = {\n dark: {\n bg: '#1a1a1a',\n bgSecondary: '#2a2a2a',\n border: '#333',\n text: '#fff',\n textSecondary: '#e5e5e5',\n textMuted: '#888',\n inputBg: '#2a2a2a',\n inputBorder: '#444',\n codeBg: '#374151',\n codeBlockBg: '#1f2937',\n tableBorderColor: '#444',\n },\n light: {\n bg: '#ffffff',\n bgSecondary: '#f3f4f6',\n border: '#e5e7eb',\n text: '#111827',\n textSecondary: '#374151',\n textMuted: '#6b7280',\n inputBg: '#f9fafb',\n inputBorder: '#d1d5db',\n codeBg: '#e5e7eb',\n codeBlockBg: '#f3f4f6',\n tableBorderColor: '#d1d5db',\n },\n};\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 15);\n}\n\nfunction renderMarkdown(text: string, themeColors: { codeBg: string; codeBlockBg: string; tableBorderColor: string }): React.ReactNode {\n if (!text) return null;\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent: string[] = [];\n let inTable = false;\n let tableRows: string[][] = [];\n let isHeaderRow = true;\n\n const parseTableRow = (line: string): string[] => {\n return line.split('|').map(cell => cell.trim()).filter((_, idx, arr) => idx > 0 && idx < arr.length - 1 || (arr.length === 2 && idx === 0));\n };\n\n const isTableSeparator = (line: string): boolean => {\n return /^\\|?[\\s-:|]+\\|?$/.test(line) && line.includes('-');\n };\n\n const renderTable = (rows: string[][], key: number): React.ReactNode => {\n if (rows.length === 0) return null;\n const headerRow = rows[0];\n const bodyRows = rows.slice(1);\n \n return (\n <table key={key} style={{ \n borderCollapse: 'collapse', \n width: '100%', \n margin: '8px 0', \n fontSize: '13px',\n border: `1px solid ${themeColors.tableBorderColor}`,\n }}>\n <thead>\n <tr>\n {headerRow.map((cell, idx) => (\n <th key={idx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px', \n textAlign: 'left',\n fontWeight: 600,\n backgroundColor: themeColors.codeBlockBg,\n }}>\n {processInline(cell)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {bodyRows.map((row, rowIdx) => (\n <tr key={rowIdx}>\n {row.map((cell, cellIdx) => (\n <td key={cellIdx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px',\n }}>\n {processInline(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n };\n\n const processInline = (line: string): React.ReactNode => {\n const parts: React.ReactNode[] = [];\n let remaining = line;\n let key = 0;\n\n while (remaining.length > 0) {\n const codeMatch = remaining.match(/`([^`]+)`/);\n const boldMatch = remaining.match(/\\*\\*([^*]+)\\*\\*/);\n const italicMatch = remaining.match(/\\*([^*]+)\\*/);\n const linkMatch = remaining.match(/\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\n const matches = [\n codeMatch ? { type: 'code', match: codeMatch, index: codeMatch.index! } : null,\n boldMatch ? { type: 'bold', match: boldMatch, index: boldMatch.index! } : null,\n italicMatch ? { type: 'italic', match: italicMatch, index: italicMatch.index! } : null,\n linkMatch ? { type: 'link', match: linkMatch, index: linkMatch.index! } : null,\n ].filter(Boolean).sort((a, b) => a!.index - b!.index);\n\n if (matches.length === 0) {\n parts.push(remaining);\n break;\n }\n\n const first = matches[0]!;\n if (first.index > 0) {\n parts.push(remaining.substring(0, first.index));\n }\n\n if (first.type === 'code') {\n parts.push(\n <code key={key++} style={{ backgroundColor: themeColors.codeBg, padding: '2px 6px', borderRadius: '4px', fontSize: '13px' }}>\n {first.match![1]}\n </code>\n );\n } else if (first.type === 'bold') {\n parts.push(<strong key={key++}>{first.match![1]}</strong>);\n } else if (first.type === 'italic') {\n parts.push(<em key={key++}>{first.match![1]}</em>);\n } else if (first.type === 'link') {\n parts.push(\n <a key={key++} href={first.match![2]} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'inherit', textDecoration: 'underline' }}>\n {first.match![1]}\n </a>\n );\n }\n\n remaining = remaining.substring(first.index + first.match![0].length);\n }\n\n return parts.length === 1 ? parts[0] : parts;\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inTable) {\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeContent = [];\n } else {\n elements.push(\n <pre key={i} style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n inCodeBlock = false;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent.push(line);\n continue;\n }\n\n // Table handling\n const isTableRow = line.includes('|') && line.trim().startsWith('|');\n if (isTableRow) {\n if (isTableSeparator(line)) {\n // Skip separator row (e.g., |---|---|)\n continue;\n }\n if (!inTable) {\n inTable = true;\n tableRows = [];\n }\n tableRows.push(parseTableRow(line));\n continue;\n } else if (inTable) {\n // End of table\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n\n if (line.startsWith('### ')) {\n elements.push(<h4 key={i} style={{ margin: '12px 0 8px', fontSize: '14px', fontWeight: 600 }}>{processInline(line.slice(4))}</h4>);\n } else if (line.startsWith('## ')) {\n elements.push(<h3 key={i} style={{ margin: '12px 0 8px', fontSize: '15px', fontWeight: 600 }}>{processInline(line.slice(3))}</h3>);\n } else if (line.startsWith('# ')) {\n elements.push(<h2 key={i} style={{ margin: '12px 0 8px', fontSize: '16px', fontWeight: 600 }}>{processInline(line.slice(2))}</h2>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'disc' }}>{processInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n const content = line.replace(/^\\d+\\.\\s/, '');\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'decimal' }}>{processInline(content)}</li>);\n } else if (line.trim() === '') {\n elements.push(<br key={i} />);\n } else {\n elements.push(<p key={i} style={{ margin: '4px 0' }}>{processInline(line)}</p>);\n }\n }\n\n // Handle unclosed table at end\n if (inTable && tableRows.length > 0) {\n elements.push(renderTable(tableRows, lines.length));\n }\n\n if (inCodeBlock && codeContent.length > 0) {\n elements.push(\n <pre key=\"final-code\" style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n }\n\n return <div>{elements}</div>;\n}\n\nexport function MnexiumChat({\n endpoint = '/api/mnx',\n placeholder = 'Type a message...',\n title = 'Ask AI',\n buttonLabel = 'Ask AI',\n position = 'bottom-right',\n primaryColor = '#facc15',\n textColor = '#000',\n defaultOpen = false,\n logo,\n theme = 'dark',\n welcomeIcon = '👋',\n welcomeMessage = 'How can I help you today?',\n history = false,\n eagerInit = true,\n}: MnexiumChatProps) {\n const t = themes[theme];\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [chatSize, setChatSize] = useState<'small' | 'medium' | 'large'>('medium');\n const [isMobile, setIsMobile] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, []);\n\n useEffect(() => {\n const checkMobile = () => setIsMobile(window.innerWidth < 480);\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n useEffect(() => {\n scrollToBottom();\n }, [messages, scrollToBottom]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!eagerInit && !isOpen) return;\n \n const bootstrap = async () => {\n if (isInitialized) return;\n \n try {\n const res = await fetch(`${endpoint}/bootstrap`);\n if (!res.ok) throw new Error('Failed to bootstrap');\n \n const data = await res.json();\n \n if (history && data.chat_id) {\n try {\n const historyRes = await fetch(`${endpoint}/conversations/${data.chat_id}`);\n if (historyRes.ok) {\n const historyData = await historyRes.json();\n if (historyData.messages && Array.isArray(historyData.messages)) {\n setMessages(historyData.messages.map((m: { role: string; content: string }) => ({\n id: generateId(),\n role: m.role as 'user' | 'assistant',\n content: m.content,\n timestamp: new Date(),\n })));\n }\n }\n } catch {\n // History endpoint is optional\n }\n }\n \n setIsInitialized(true);\n } catch (err) {\n setError('Failed to initialize chat');\n console.error('Bootstrap error:', err);\n }\n };\n\n bootstrap();\n }, [endpoint, isOpen, isInitialized, history, eagerInit]);\n\n const sendMessage = async () => {\n if (!input.trim() || isLoading || isStreaming) return;\n\n const userMessage: Message = {\n id: generateId(),\n role: 'user',\n content: input.trim(),\n timestamp: new Date(),\n };\n\n setMessages(prev => [...prev, userMessage]);\n setInput('');\n setIsLoading(true);\n setError(null);\n\n const assistantMessageId = generateId();\n\n try {\n const res = await fetch(`${endpoint}/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: userMessage.content }),\n });\n\n if (!res.ok) throw new Error('Failed to send message');\n if (!res.body) throw new Error('No response body');\n\n setIsLoading(false);\n setIsStreaming(true);\n\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n setMessages(prev => [...prev, assistantMessage]);\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (buffer.startsWith('data: ')) {\n const data = buffer.slice(6);\n if (data !== '[DONE]') {\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n } catch (err) {\n setError('Failed to send message');\n console.error('Chat error:', err);\n setMessages(prev => prev.filter(m => m.id !== assistantMessageId));\n } finally {\n setIsLoading(false);\n setIsStreaming(false);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n\n const startNewChat = async () => {\n try {\n const res = await fetch(`${endpoint}/new-chat`, { method: 'POST' });\n if (res.ok) {\n setMessages([]);\n }\n } catch {\n // Fallback: just clear messages locally\n setMessages([]);\n }\n };\n\n const positionStyles = position === 'bottom-right' \n ? { right: '20px', bottom: '20px' }\n : { left: '20px', bottom: '20px' };\n\n const chatPositionStyles = position === 'bottom-right'\n ? { right: '0', bottom: '60px' }\n : { left: '0', bottom: '60px' };\n\n return (\n <>\n <style>{`\n @keyframes mnx-typing {\n 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n }\n @keyframes mnx-fade-in {\n from { opacity: 0; transform: translateY(10px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes mnx-fade-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.95); }\n }\n @keyframes mnx-slide-up {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes mnx-pulse {\n 0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n 50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); }\n 100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n }\n .mnx-typing-dot:nth-child(1) { animation-delay: 0s; }\n .mnx-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .mnx-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n .mnx-btn-icon {\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n `}</style>\n\n <div style={{\n position: 'fixed',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...positionStyles,\n }}>\n {isOpen && (\n <div style={{\n position: isMobile ? 'fixed' : 'absolute',\n ...(isMobile ? {\n left: '8px',\n right: '8px',\n bottom: '70px',\n top: 'auto',\n } : chatPositionStyles),\n width: isMobile ? 'calc(100vw - 16px)' : (chatSize === 'small' ? '320px' : chatSize === 'large' ? '547px' : '380px'),\n height: isMobile ? 'calc(100vh - 90px)' : (chatSize === 'small' ? '400px' : chatSize === 'large' ? '600px' : '500px'),\n maxHeight: isMobile ? 'calc(100vh - 90px)' : undefined,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n backdropFilter: 'blur(8px) saturate(180%)',\n WebkitBackdropFilter: 'blur(16px) saturate(180%)',\n borderRadius: isMobile ? '16px 16px 16px 16px' : '16px',\n border: `1px solid ${primaryColor}33`,\n boxShadow: theme === 'dark' ? '0 25px 50px -12px rgba(0, 0, 0, 0.5)' : '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n animation: isMobile ? 'mnx-slide-up 0.3s ease-out' : 'mnx-fade-in 0.2s ease-out',\n transform: 'translateZ(0)',\n isolation: 'isolate',\n transition: 'width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 8px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.7)' : 'rgba(255, 255, 255, 0.7)',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{\n width: '32px',\n height: '32px',\n backgroundColor: primaryColor,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n }}>\n {logo ? (\n <img src={logo} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </div>\n <span style={{ color: t.text, fontWeight: 600, fontSize: '15px' }}>{title}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button\n onClick={startNewChat}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"New chat\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>\n </svg>\n </button>\n {!isMobile && (\n <button\n onClick={() => setChatSize(prev => prev === 'small' ? 'medium' : prev === 'medium' ? 'large' : 'small')}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease',\n }}\n title={`Size: ${chatSize}`}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {chatSize === 'small' ? (\n <>\n <polyline points=\"15 3 21 3 21 9\"/>\n <polyline points=\"9 21 3 21 3 15\"/>\n </>\n ) : chatSize === 'large' ? (\n <>\n <polyline points=\"4 14 4 20 10 20\"/>\n <polyline points=\"20 10 20 4 14 4\"/>\n </>\n ) : (\n <>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/>\n </>\n )}\n </svg>\n </button>\n )}\n <button\n onClick={() => setIsOpen(false)}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px 8px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n }}>\n {!isInitialized && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted }}>\n Initializing...\n </div>\n )}\n {error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: '#ef4444' }}>\n {error}\n </div>\n )}\n {isInitialized && messages.length === 0 && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted, textAlign: 'center' }}>\n <div>\n <div style={{ fontSize: '24px', marginBottom: '8px' }}>{welcomeIcon}</div>\n <div>{welcomeMessage}</div>\n </div>\n </div>\n )}\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n maxWidth: '85%',\n padding: '10px 14px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n ...(message.role === 'user' \n ? { \n alignSelf: 'flex-end',\n backgroundColor: `${primaryColor}cc`,\n color: textColor,\n borderBottomRightRadius: '4px',\n }\n : {\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n color: t.textSecondary,\n borderBottomLeftRadius: '4px',\n }\n ),\n }}\n >\n {message.role === 'assistant' ? renderMarkdown(message.content, { codeBg: t.codeBg, codeBlockBg: t.codeBlockBg, tableBorderColor: t.tableBorderColor }) : message.content}\n </div>\n ))}\n {isLoading && (\n <div style={{\n display: 'flex',\n gap: '4px',\n padding: '10px 14px',\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n borderRadius: '12px',\n borderBottomLeftRadius: '4px',\n }}>\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: '8px 8px',\n borderTop: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.5)' : 'rgba(255, 255, 255, 0.5)',\n }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={!isInitialized || isLoading || isStreaming}\n style={{\n flex: 1,\n padding: '10px 14px',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.6)' : 'rgba(249, 250, 251, 0.6)',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n color: t.text,\n outline: 'none',\n transition: 'box-shadow 0.15s ease',\n }}\n onFocus={e => {\n e.currentTarget.style.boxShadow = `0 0 0 2px ${primaryColor}`;\n }}\n onBlur={e => {\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n <button\n onClick={sendMessage}\n disabled={!isInitialized || !input.trim() || isLoading || isStreaming}\n style={{\n padding: '10px 16px',\n backgroundColor: !isInitialized || !input.trim() || isLoading || isStreaming ? t.inputBorder : primaryColor,\n color: '#000',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: !isInitialized || !input.trim() || isLoading || isStreaming ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/>\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\"/>\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: isMobile ? '0' : '8px',\n padding: isMobile ? '14px' : '12px 16px',\n backgroundColor: primaryColor,\n color: textColor,\n border: 'none',\n borderRadius: isMobile ? '50%' : '12px',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n minWidth: isMobile ? '56px' : undefined,\n minHeight: isMobile ? '56px' : undefined,\n justifyContent: 'center',\n }}\n onMouseEnter={e => {\n e.currentTarget.style.transform = 'scale(1.05)';\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.4)';\n }}\n onMouseLeave={e => {\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.3)';\n }}\n >\n <span \n className={`mnx-btn-icon ${isOpen ? 'open' : ''}`}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n >\n {isOpen ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n ) : logo ? (\n <img src={logo} alt=\"\" style={{ height: '28px', width: 'auto', objectFit: 'contain' }} />\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </span>\n {!isMobile && (\n <span style={{ \n display: 'inline-flex',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n position: 'relative',\n height: '1.2em',\n alignItems: 'center',\n }}>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(-100%)' : 'translateY(0)',\n opacity: isOpen ? 0 : 1,\n maxWidth: isOpen ? '0' : '300px',\n }}>\n {buttonLabel}\n </span>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(0)' : 'translateY(100%)',\n opacity: isOpen ? 1 : 0,\n maxWidth: isOpen ? '50px' : '0',\n overflow: 'hidden',\n }}>\n Close\n </span>\n </span>\n )}\n </button>\n </div>\n </>\n );\n}\n\nexport default MnexiumChat;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client/MnexiumChat.tsx"],"sourcesContent":["export { MnexiumChat, type MnexiumChatProps, type Message } from './client/MnexiumChat';\nexport { MnexiumChat as default } from './client/MnexiumChat';\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\n\nexport interface Message {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\nexport interface MnexiumChatProps {\n endpoint?: string;\n placeholder?: string;\n title?: string;\n buttonLabel?: string;\n position?: 'bottom-right' | 'bottom-left';\n primaryColor?: string;\n textColor?: string;\n defaultOpen?: boolean;\n logo?: string;\n theme?: 'light' | 'dark';\n welcomeIcon?: string;\n welcomeMessage?: string;\n history?: boolean;\n eagerInit?: boolean;\n}\n\nconst themes = {\n dark: {\n bg: '#1a1a1a',\n bgSecondary: '#2a2a2a',\n border: '#333',\n text: '#fff',\n textSecondary: '#e5e5e5',\n textMuted: '#888',\n inputBg: '#2a2a2a',\n inputBorder: '#444',\n codeBg: '#374151',\n codeBlockBg: '#1f2937',\n tableBorderColor: '#444',\n },\n light: {\n bg: '#ffffff',\n bgSecondary: '#f3f4f6',\n border: '#e5e7eb',\n text: '#111827',\n textSecondary: '#374151',\n textMuted: '#6b7280',\n inputBg: '#f9fafb',\n inputBorder: '#d1d5db',\n codeBg: '#e5e7eb',\n codeBlockBg: '#f3f4f6',\n tableBorderColor: '#d1d5db',\n },\n};\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 15);\n}\n\nfunction renderMarkdown(text: string, themeColors: { codeBg: string; codeBlockBg: string; tableBorderColor: string }): React.ReactNode {\n if (!text) return null;\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent: string[] = [];\n let inTable = false;\n let tableRows: string[][] = [];\n let isHeaderRow = true;\n\n const parseTableRow = (line: string): string[] => {\n return line.split('|').map(cell => cell.trim()).filter((_, idx, arr) => idx > 0 && idx < arr.length - 1 || (arr.length === 2 && idx === 0));\n };\n\n const isTableSeparator = (line: string): boolean => {\n return /^\\|?[\\s-:|]+\\|?$/.test(line) && line.includes('-');\n };\n\n const renderTable = (rows: string[][], key: number): React.ReactNode => {\n if (rows.length === 0) return null;\n const headerRow = rows[0];\n const bodyRows = rows.slice(1);\n \n return (\n <table key={key} style={{ \n borderCollapse: 'collapse', \n width: '100%', \n margin: '8px 0', \n fontSize: '13px',\n border: `1px solid ${themeColors.tableBorderColor}`,\n }}>\n <thead>\n <tr>\n {headerRow.map((cell, idx) => (\n <th key={idx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px', \n textAlign: 'left',\n fontWeight: 600,\n backgroundColor: themeColors.codeBlockBg,\n }}>\n {processInline(cell)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {bodyRows.map((row, rowIdx) => (\n <tr key={rowIdx}>\n {row.map((cell, cellIdx) => (\n <td key={cellIdx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px',\n }}>\n {processInline(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n };\n\n const processInline = (line: string): React.ReactNode => {\n const parts: React.ReactNode[] = [];\n let remaining = line;\n let key = 0;\n\n while (remaining.length > 0) {\n const codeMatch = remaining.match(/`([^`]+)`/);\n const boldMatch = remaining.match(/\\*\\*([^*]+)\\*\\*/);\n const italicMatch = remaining.match(/\\*([^*]+)\\*/);\n const linkMatch = remaining.match(/\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\n const matches = [\n codeMatch ? { type: 'code', match: codeMatch, index: codeMatch.index! } : null,\n boldMatch ? { type: 'bold', match: boldMatch, index: boldMatch.index! } : null,\n italicMatch ? { type: 'italic', match: italicMatch, index: italicMatch.index! } : null,\n linkMatch ? { type: 'link', match: linkMatch, index: linkMatch.index! } : null,\n ].filter(Boolean).sort((a, b) => a!.index - b!.index);\n\n if (matches.length === 0) {\n parts.push(remaining);\n break;\n }\n\n const first = matches[0]!;\n if (first.index > 0) {\n parts.push(remaining.substring(0, first.index));\n }\n\n if (first.type === 'code') {\n parts.push(\n <code key={key++} style={{ backgroundColor: themeColors.codeBg, padding: '2px 6px', borderRadius: '4px', fontSize: '13px' }}>\n {first.match![1]}\n </code>\n );\n } else if (first.type === 'bold') {\n parts.push(<strong key={key++}>{first.match![1]}</strong>);\n } else if (first.type === 'italic') {\n parts.push(<em key={key++}>{first.match![1]}</em>);\n } else if (first.type === 'link') {\n parts.push(\n <a key={key++} href={first.match![2]} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'inherit', textDecoration: 'underline' }}>\n {first.match![1]}\n </a>\n );\n }\n\n remaining = remaining.substring(first.index + first.match![0].length);\n }\n\n return parts.length === 1 ? parts[0] : parts;\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inTable) {\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeContent = [];\n } else {\n elements.push(\n <pre key={i} style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n inCodeBlock = false;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent.push(line);\n continue;\n }\n\n // Table handling\n const isTableRow = line.includes('|') && line.trim().startsWith('|');\n if (isTableRow) {\n if (isTableSeparator(line)) {\n // Skip separator row (e.g., |---|---|)\n continue;\n }\n if (!inTable) {\n inTable = true;\n tableRows = [];\n }\n tableRows.push(parseTableRow(line));\n continue;\n } else if (inTable) {\n // End of table\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n\n if (line.startsWith('### ')) {\n elements.push(<h4 key={i} style={{ margin: '12px 0 8px', fontSize: '14px', fontWeight: 600 }}>{processInline(line.slice(4))}</h4>);\n } else if (line.startsWith('## ')) {\n elements.push(<h3 key={i} style={{ margin: '12px 0 8px', fontSize: '15px', fontWeight: 600 }}>{processInline(line.slice(3))}</h3>);\n } else if (line.startsWith('# ')) {\n elements.push(<h2 key={i} style={{ margin: '12px 0 8px', fontSize: '16px', fontWeight: 600 }}>{processInline(line.slice(2))}</h2>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'disc' }}>{processInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n const content = line.replace(/^\\d+\\.\\s/, '');\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'decimal' }}>{processInline(content)}</li>);\n } else if (line.trim() === '') {\n elements.push(<br key={i} />);\n } else {\n elements.push(<p key={i} style={{ margin: '4px 0' }}>{processInline(line)}</p>);\n }\n }\n\n // Handle unclosed table at end\n if (inTable && tableRows.length > 0) {\n elements.push(renderTable(tableRows, lines.length));\n }\n\n if (inCodeBlock && codeContent.length > 0) {\n elements.push(\n <pre key=\"final-code\" style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n }\n\n return <div>{elements}</div>;\n}\n\nexport function MnexiumChat({\n endpoint = '/api/mnx',\n placeholder = 'Type a message...',\n title = 'Ask AI',\n buttonLabel = 'Ask AI',\n position = 'bottom-right',\n primaryColor = '#facc15',\n textColor = '#000',\n defaultOpen = false,\n logo,\n theme = 'dark',\n welcomeIcon = '👋',\n welcomeMessage = 'How can I help you today?',\n history = false,\n eagerInit = true,\n}: MnexiumChatProps) {\n const t = themes[theme];\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [chatSize, setChatSize] = useState<'small' | 'medium' | 'large'>('medium');\n const [isMobile, setIsMobile] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, []);\n\n useEffect(() => {\n const checkMobile = () => setIsMobile(window.innerWidth < 480);\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n useEffect(() => {\n scrollToBottom();\n }, [messages, scrollToBottom]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!eagerInit && !isOpen) return;\n \n const bootstrap = async () => {\n if (isInitialized) return;\n \n try {\n const res = await fetch(`${endpoint}/bootstrap`);\n if (!res.ok) throw new Error('Failed to bootstrap');\n \n const data = await res.json();\n \n if (history && data.chat_id) {\n try {\n const historyRes = await fetch(`${endpoint}/conversations/${data.chat_id}`);\n if (historyRes.ok) {\n const historyData = await historyRes.json();\n if (historyData.messages && Array.isArray(historyData.messages)) {\n setMessages(historyData.messages.map((m: { role: string; content: string }) => ({\n id: generateId(),\n role: m.role as 'user' | 'assistant',\n content: m.content,\n timestamp: new Date(),\n })));\n }\n }\n } catch {\n // History endpoint is optional\n }\n }\n \n setIsInitialized(true);\n } catch (err) {\n setError('Failed to initialize chat');\n console.error('Bootstrap error:', err);\n }\n };\n\n bootstrap();\n }, [endpoint, isOpen, isInitialized, history, eagerInit]);\n\n const sendMessage = async () => {\n if (!input.trim() || isLoading || isStreaming) return;\n\n const userMessage: Message = {\n id: generateId(),\n role: 'user',\n content: input.trim(),\n timestamp: new Date(),\n };\n\n setMessages(prev => [...prev, userMessage]);\n setInput('');\n setIsLoading(true);\n setError(null);\n\n const assistantMessageId = generateId();\n\n try {\n const res = await fetch(`${endpoint}/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: userMessage.content }),\n });\n\n if (!res.ok) throw new Error('Failed to send message');\n if (!res.body) throw new Error('No response body');\n\n setIsLoading(false);\n setIsStreaming(true);\n\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n setMessages(prev => [...prev, assistantMessage]);\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (buffer.startsWith('data: ')) {\n const data = buffer.slice(6);\n if (data !== '[DONE]') {\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n } catch (err) {\n setError('Failed to send message');\n console.error('Chat error:', err);\n setMessages(prev => prev.filter(m => m.id !== assistantMessageId));\n } finally {\n setIsLoading(false);\n setIsStreaming(false);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n\n const startNewChat = async () => {\n try {\n const res = await fetch(`${endpoint}/new-chat`, { method: 'POST' });\n if (res.ok) {\n setMessages([]);\n }\n } catch {\n // Fallback: just clear messages locally\n setMessages([]);\n }\n };\n\n const positionStyles = position === 'bottom-right' \n ? { right: '20px', bottom: '20px' }\n : { left: '20px', bottom: '20px' };\n\n const chatPositionStyles = position === 'bottom-right'\n ? { right: '0', bottom: '60px' }\n : { left: '0', bottom: '60px' };\n\n return (\n <>\n <style>{`\n @keyframes mnx-typing {\n 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n }\n @keyframes mnx-fade-in {\n from { opacity: 0; transform: translateY(10px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes mnx-fade-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.95); }\n }\n @keyframes mnx-slide-up {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes mnx-pulse {\n 0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n 50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); }\n 100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n }\n .mnx-typing-dot:nth-child(1) { animation-delay: 0s; }\n .mnx-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .mnx-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n .mnx-btn-icon {\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n `}</style>\n\n <div style={{\n position: 'fixed',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...positionStyles,\n }}>\n {isOpen && (\n <div style={{\n position: isMobile ? 'fixed' : 'absolute',\n ...(isMobile ? {\n left: '8px',\n right: '8px',\n bottom: '70px',\n top: 'auto',\n } : chatPositionStyles),\n width: isMobile ? 'calc(100vw - 16px)' : (chatSize === 'small' ? '320px' : chatSize === 'large' ? '547px' : '380px'),\n height: isMobile ? 'calc(100vh - 90px)' : (chatSize === 'small' ? '400px' : chatSize === 'large' ? '600px' : '500px'),\n maxHeight: isMobile ? 'calc(100vh - 90px)' : undefined,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n backdropFilter: 'blur(8px) saturate(180%)',\n WebkitBackdropFilter: 'blur(16px) saturate(180%)',\n borderRadius: isMobile ? '16px 16px 16px 16px' : '16px',\n border: `1px solid ${primaryColor}33`,\n boxShadow: theme === 'dark' ? '0 25px 50px -12px rgba(0, 0, 0, 0.5)' : '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n animation: isMobile ? 'mnx-slide-up 0.3s ease-out' : 'mnx-fade-in 0.2s ease-out',\n transform: 'translateZ(0)',\n isolation: 'isolate',\n transition: 'width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 8px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.7)' : 'rgba(255, 255, 255, 0.7)',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{\n width: '32px',\n height: '32px',\n backgroundColor: primaryColor,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n }}>\n {logo ? (\n <img src={logo} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </div>\n <span style={{ color: t.text, fontWeight: 600, fontSize: '15px' }}>{title}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button\n onClick={startNewChat}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"New chat\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>\n </svg>\n </button>\n {!isMobile && (\n <button\n onClick={() => setChatSize(prev => prev === 'small' ? 'medium' : prev === 'medium' ? 'large' : 'small')}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease',\n }}\n title={`Size: ${chatSize}`}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {chatSize === 'small' ? (\n <>\n <polyline points=\"15 3 21 3 21 9\"/>\n <polyline points=\"9 21 3 21 3 15\"/>\n </>\n ) : chatSize === 'large' ? (\n <>\n <polyline points=\"4 14 4 20 10 20\"/>\n <polyline points=\"20 10 20 4 14 4\"/>\n </>\n ) : (\n <>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/>\n </>\n )}\n </svg>\n </button>\n )}\n <button\n onClick={() => setIsOpen(false)}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px 8px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n }}>\n {!isInitialized && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted }}>\n Initializing...\n </div>\n )}\n {error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: '#ef4444' }}>\n {error}\n </div>\n )}\n {isInitialized && messages.length === 0 && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted, textAlign: 'center' }}>\n <div>\n <div style={{ fontSize: '24px', marginBottom: '8px' }}>{welcomeIcon}</div>\n <div>{welcomeMessage}</div>\n </div>\n </div>\n )}\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n maxWidth: '85%',\n padding: '10px 14px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n ...(message.role === 'user' \n ? { \n alignSelf: 'flex-end',\n backgroundColor: `${primaryColor}cc`,\n color: textColor,\n borderBottomRightRadius: '4px',\n }\n : {\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n color: t.textSecondary,\n borderBottomLeftRadius: '4px',\n }\n ),\n }}\n >\n {message.role === 'assistant' ? renderMarkdown(message.content, { codeBg: t.codeBg, codeBlockBg: t.codeBlockBg, tableBorderColor: t.tableBorderColor }) : message.content}\n </div>\n ))}\n {isLoading && (\n <div style={{\n display: 'flex',\n gap: '4px',\n padding: '10px 14px',\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n borderRadius: '12px',\n borderBottomLeftRadius: '4px',\n }}>\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: '8px 8px',\n borderTop: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.5)' : 'rgba(255, 255, 255, 0.5)',\n }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={!isInitialized || isLoading || isStreaming}\n style={{\n flex: 1,\n padding: '10px 14px',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.6)' : 'rgba(249, 250, 251, 0.6)',\n border: 'none',\n borderRadius: '8px',\n fontSize: isMobile ? '16px' : '14px',\n color: t.text,\n outline: 'none',\n transition: 'box-shadow 0.15s ease',\n }}\n onFocus={e => {\n e.currentTarget.style.boxShadow = `0 0 0 2px ${primaryColor}`;\n }}\n onBlur={e => {\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n <button\n onClick={sendMessage}\n disabled={!isInitialized || !input.trim() || isLoading || isStreaming}\n style={{\n padding: '10px 16px',\n backgroundColor: !isInitialized || !input.trim() || isLoading || isStreaming ? t.inputBorder : primaryColor,\n color: '#000',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: !isInitialized || !input.trim() || isLoading || isStreaming ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/>\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\"/>\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: isMobile ? '0' : '8px',\n padding: isMobile ? '14px' : '12px 16px',\n backgroundColor: primaryColor,\n color: textColor,\n border: 'none',\n borderRadius: isMobile ? '50%' : '12px',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n minWidth: isMobile ? '56px' : undefined,\n minHeight: isMobile ? '56px' : undefined,\n justifyContent: 'center',\n }}\n onMouseEnter={e => {\n e.currentTarget.style.transform = 'scale(1.05)';\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.4)';\n }}\n onMouseLeave={e => {\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.3)';\n }}\n >\n <span \n className={`mnx-btn-icon ${isOpen ? 'open' : ''}`}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n >\n {isOpen ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n ) : logo ? (\n <img src={logo} alt=\"\" style={{ height: '28px', width: 'auto', objectFit: 'contain' }} />\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </span>\n {!isMobile && (\n <span style={{ \n display: 'inline-flex',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n position: 'relative',\n height: '1.2em',\n alignItems: 'center',\n }}>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(-100%)' : 'translateY(0)',\n opacity: isOpen ? 0 : 1,\n maxWidth: isOpen ? '0' : '300px',\n }}>\n {buttonLabel}\n </span>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(0)' : 'translateY(100%)',\n opacity: isOpen ? 1 : 0,\n maxWidth: isOpen ? '50px' : '0',\n overflow: 'hidden',\n }}>\n Close\n </span>\n </span>\n )}\n </button>\n </div>\n </>\n );\n}\n\nexport default MnexiumChat;\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -597,7 +597,7 @@ function MnexiumChat({
597
597
  backgroundColor: theme === "dark" ? "rgba(42, 42, 42, 0.6)" : "rgba(249, 250, 251, 0.6)",
598
598
  border: "none",
599
599
  borderRadius: "8px",
600
- fontSize: "14px",
600
+ fontSize: isMobile ? "16px" : "14px",
601
601
  color: t.text,
602
602
  outline: "none",
603
603
  transition: "box-shadow 0.15s ease"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/MnexiumChat.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\n\nexport interface Message {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\nexport interface MnexiumChatProps {\n endpoint?: string;\n placeholder?: string;\n title?: string;\n buttonLabel?: string;\n position?: 'bottom-right' | 'bottom-left';\n primaryColor?: string;\n textColor?: string;\n defaultOpen?: boolean;\n logo?: string;\n theme?: 'light' | 'dark';\n welcomeIcon?: string;\n welcomeMessage?: string;\n history?: boolean;\n eagerInit?: boolean;\n}\n\nconst themes = {\n dark: {\n bg: '#1a1a1a',\n bgSecondary: '#2a2a2a',\n border: '#333',\n text: '#fff',\n textSecondary: '#e5e5e5',\n textMuted: '#888',\n inputBg: '#2a2a2a',\n inputBorder: '#444',\n codeBg: '#374151',\n codeBlockBg: '#1f2937',\n tableBorderColor: '#444',\n },\n light: {\n bg: '#ffffff',\n bgSecondary: '#f3f4f6',\n border: '#e5e7eb',\n text: '#111827',\n textSecondary: '#374151',\n textMuted: '#6b7280',\n inputBg: '#f9fafb',\n inputBorder: '#d1d5db',\n codeBg: '#e5e7eb',\n codeBlockBg: '#f3f4f6',\n tableBorderColor: '#d1d5db',\n },\n};\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 15);\n}\n\nfunction renderMarkdown(text: string, themeColors: { codeBg: string; codeBlockBg: string; tableBorderColor: string }): React.ReactNode {\n if (!text) return null;\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent: string[] = [];\n let inTable = false;\n let tableRows: string[][] = [];\n let isHeaderRow = true;\n\n const parseTableRow = (line: string): string[] => {\n return line.split('|').map(cell => cell.trim()).filter((_, idx, arr) => idx > 0 && idx < arr.length - 1 || (arr.length === 2 && idx === 0));\n };\n\n const isTableSeparator = (line: string): boolean => {\n return /^\\|?[\\s-:|]+\\|?$/.test(line) && line.includes('-');\n };\n\n const renderTable = (rows: string[][], key: number): React.ReactNode => {\n if (rows.length === 0) return null;\n const headerRow = rows[0];\n const bodyRows = rows.slice(1);\n \n return (\n <table key={key} style={{ \n borderCollapse: 'collapse', \n width: '100%', \n margin: '8px 0', \n fontSize: '13px',\n border: `1px solid ${themeColors.tableBorderColor}`,\n }}>\n <thead>\n <tr>\n {headerRow.map((cell, idx) => (\n <th key={idx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px', \n textAlign: 'left',\n fontWeight: 600,\n backgroundColor: themeColors.codeBlockBg,\n }}>\n {processInline(cell)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {bodyRows.map((row, rowIdx) => (\n <tr key={rowIdx}>\n {row.map((cell, cellIdx) => (\n <td key={cellIdx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px',\n }}>\n {processInline(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n };\n\n const processInline = (line: string): React.ReactNode => {\n const parts: React.ReactNode[] = [];\n let remaining = line;\n let key = 0;\n\n while (remaining.length > 0) {\n const codeMatch = remaining.match(/`([^`]+)`/);\n const boldMatch = remaining.match(/\\*\\*([^*]+)\\*\\*/);\n const italicMatch = remaining.match(/\\*([^*]+)\\*/);\n const linkMatch = remaining.match(/\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\n const matches = [\n codeMatch ? { type: 'code', match: codeMatch, index: codeMatch.index! } : null,\n boldMatch ? { type: 'bold', match: boldMatch, index: boldMatch.index! } : null,\n italicMatch ? { type: 'italic', match: italicMatch, index: italicMatch.index! } : null,\n linkMatch ? { type: 'link', match: linkMatch, index: linkMatch.index! } : null,\n ].filter(Boolean).sort((a, b) => a!.index - b!.index);\n\n if (matches.length === 0) {\n parts.push(remaining);\n break;\n }\n\n const first = matches[0]!;\n if (first.index > 0) {\n parts.push(remaining.substring(0, first.index));\n }\n\n if (first.type === 'code') {\n parts.push(\n <code key={key++} style={{ backgroundColor: themeColors.codeBg, padding: '2px 6px', borderRadius: '4px', fontSize: '13px' }}>\n {first.match![1]}\n </code>\n );\n } else if (first.type === 'bold') {\n parts.push(<strong key={key++}>{first.match![1]}</strong>);\n } else if (first.type === 'italic') {\n parts.push(<em key={key++}>{first.match![1]}</em>);\n } else if (first.type === 'link') {\n parts.push(\n <a key={key++} href={first.match![2]} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'inherit', textDecoration: 'underline' }}>\n {first.match![1]}\n </a>\n );\n }\n\n remaining = remaining.substring(first.index + first.match![0].length);\n }\n\n return parts.length === 1 ? parts[0] : parts;\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inTable) {\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeContent = [];\n } else {\n elements.push(\n <pre key={i} style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n inCodeBlock = false;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent.push(line);\n continue;\n }\n\n // Table handling\n const isTableRow = line.includes('|') && line.trim().startsWith('|');\n if (isTableRow) {\n if (isTableSeparator(line)) {\n // Skip separator row (e.g., |---|---|)\n continue;\n }\n if (!inTable) {\n inTable = true;\n tableRows = [];\n }\n tableRows.push(parseTableRow(line));\n continue;\n } else if (inTable) {\n // End of table\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n\n if (line.startsWith('### ')) {\n elements.push(<h4 key={i} style={{ margin: '12px 0 8px', fontSize: '14px', fontWeight: 600 }}>{processInline(line.slice(4))}</h4>);\n } else if (line.startsWith('## ')) {\n elements.push(<h3 key={i} style={{ margin: '12px 0 8px', fontSize: '15px', fontWeight: 600 }}>{processInline(line.slice(3))}</h3>);\n } else if (line.startsWith('# ')) {\n elements.push(<h2 key={i} style={{ margin: '12px 0 8px', fontSize: '16px', fontWeight: 600 }}>{processInline(line.slice(2))}</h2>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'disc' }}>{processInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n const content = line.replace(/^\\d+\\.\\s/, '');\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'decimal' }}>{processInline(content)}</li>);\n } else if (line.trim() === '') {\n elements.push(<br key={i} />);\n } else {\n elements.push(<p key={i} style={{ margin: '4px 0' }}>{processInline(line)}</p>);\n }\n }\n\n // Handle unclosed table at end\n if (inTable && tableRows.length > 0) {\n elements.push(renderTable(tableRows, lines.length));\n }\n\n if (inCodeBlock && codeContent.length > 0) {\n elements.push(\n <pre key=\"final-code\" style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n }\n\n return <div>{elements}</div>;\n}\n\nexport function MnexiumChat({\n endpoint = '/api/mnx',\n placeholder = 'Type a message...',\n title = 'Ask AI',\n buttonLabel = 'Ask AI',\n position = 'bottom-right',\n primaryColor = '#facc15',\n textColor = '#000',\n defaultOpen = false,\n logo,\n theme = 'dark',\n welcomeIcon = '👋',\n welcomeMessage = 'How can I help you today?',\n history = false,\n eagerInit = true,\n}: MnexiumChatProps) {\n const t = themes[theme];\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [chatSize, setChatSize] = useState<'small' | 'medium' | 'large'>('medium');\n const [isMobile, setIsMobile] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, []);\n\n useEffect(() => {\n const checkMobile = () => setIsMobile(window.innerWidth < 480);\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n useEffect(() => {\n scrollToBottom();\n }, [messages, scrollToBottom]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!eagerInit && !isOpen) return;\n \n const bootstrap = async () => {\n if (isInitialized) return;\n \n try {\n const res = await fetch(`${endpoint}/bootstrap`);\n if (!res.ok) throw new Error('Failed to bootstrap');\n \n const data = await res.json();\n \n if (history && data.chat_id) {\n try {\n const historyRes = await fetch(`${endpoint}/conversations/${data.chat_id}`);\n if (historyRes.ok) {\n const historyData = await historyRes.json();\n if (historyData.messages && Array.isArray(historyData.messages)) {\n setMessages(historyData.messages.map((m: { role: string; content: string }) => ({\n id: generateId(),\n role: m.role as 'user' | 'assistant',\n content: m.content,\n timestamp: new Date(),\n })));\n }\n }\n } catch {\n // History endpoint is optional\n }\n }\n \n setIsInitialized(true);\n } catch (err) {\n setError('Failed to initialize chat');\n console.error('Bootstrap error:', err);\n }\n };\n\n bootstrap();\n }, [endpoint, isOpen, isInitialized, history, eagerInit]);\n\n const sendMessage = async () => {\n if (!input.trim() || isLoading || isStreaming) return;\n\n const userMessage: Message = {\n id: generateId(),\n role: 'user',\n content: input.trim(),\n timestamp: new Date(),\n };\n\n setMessages(prev => [...prev, userMessage]);\n setInput('');\n setIsLoading(true);\n setError(null);\n\n const assistantMessageId = generateId();\n\n try {\n const res = await fetch(`${endpoint}/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: userMessage.content }),\n });\n\n if (!res.ok) throw new Error('Failed to send message');\n if (!res.body) throw new Error('No response body');\n\n setIsLoading(false);\n setIsStreaming(true);\n\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n setMessages(prev => [...prev, assistantMessage]);\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (buffer.startsWith('data: ')) {\n const data = buffer.slice(6);\n if (data !== '[DONE]') {\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n } catch (err) {\n setError('Failed to send message');\n console.error('Chat error:', err);\n setMessages(prev => prev.filter(m => m.id !== assistantMessageId));\n } finally {\n setIsLoading(false);\n setIsStreaming(false);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n\n const startNewChat = async () => {\n try {\n const res = await fetch(`${endpoint}/new-chat`, { method: 'POST' });\n if (res.ok) {\n setMessages([]);\n }\n } catch {\n // Fallback: just clear messages locally\n setMessages([]);\n }\n };\n\n const positionStyles = position === 'bottom-right' \n ? { right: '20px', bottom: '20px' }\n : { left: '20px', bottom: '20px' };\n\n const chatPositionStyles = position === 'bottom-right'\n ? { right: '0', bottom: '60px' }\n : { left: '0', bottom: '60px' };\n\n return (\n <>\n <style>{`\n @keyframes mnx-typing {\n 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n }\n @keyframes mnx-fade-in {\n from { opacity: 0; transform: translateY(10px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes mnx-fade-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.95); }\n }\n @keyframes mnx-slide-up {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes mnx-pulse {\n 0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n 50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); }\n 100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n }\n .mnx-typing-dot:nth-child(1) { animation-delay: 0s; }\n .mnx-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .mnx-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n .mnx-btn-icon {\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n `}</style>\n\n <div style={{\n position: 'fixed',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...positionStyles,\n }}>\n {isOpen && (\n <div style={{\n position: isMobile ? 'fixed' : 'absolute',\n ...(isMobile ? {\n left: '8px',\n right: '8px',\n bottom: '70px',\n top: 'auto',\n } : chatPositionStyles),\n width: isMobile ? 'calc(100vw - 16px)' : (chatSize === 'small' ? '320px' : chatSize === 'large' ? '547px' : '380px'),\n height: isMobile ? 'calc(100vh - 90px)' : (chatSize === 'small' ? '400px' : chatSize === 'large' ? '600px' : '500px'),\n maxHeight: isMobile ? 'calc(100vh - 90px)' : undefined,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n backdropFilter: 'blur(8px) saturate(180%)',\n WebkitBackdropFilter: 'blur(16px) saturate(180%)',\n borderRadius: isMobile ? '16px 16px 16px 16px' : '16px',\n border: `1px solid ${primaryColor}33`,\n boxShadow: theme === 'dark' ? '0 25px 50px -12px rgba(0, 0, 0, 0.5)' : '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n animation: isMobile ? 'mnx-slide-up 0.3s ease-out' : 'mnx-fade-in 0.2s ease-out',\n transform: 'translateZ(0)',\n isolation: 'isolate',\n transition: 'width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 8px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.7)' : 'rgba(255, 255, 255, 0.7)',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{\n width: '32px',\n height: '32px',\n backgroundColor: primaryColor,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n }}>\n {logo ? (\n <img src={logo} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </div>\n <span style={{ color: t.text, fontWeight: 600, fontSize: '15px' }}>{title}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button\n onClick={startNewChat}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"New chat\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>\n </svg>\n </button>\n {!isMobile && (\n <button\n onClick={() => setChatSize(prev => prev === 'small' ? 'medium' : prev === 'medium' ? 'large' : 'small')}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease',\n }}\n title={`Size: ${chatSize}`}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {chatSize === 'small' ? (\n <>\n <polyline points=\"15 3 21 3 21 9\"/>\n <polyline points=\"9 21 3 21 3 15\"/>\n </>\n ) : chatSize === 'large' ? (\n <>\n <polyline points=\"4 14 4 20 10 20\"/>\n <polyline points=\"20 10 20 4 14 4\"/>\n </>\n ) : (\n <>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/>\n </>\n )}\n </svg>\n </button>\n )}\n <button\n onClick={() => setIsOpen(false)}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px 8px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n }}>\n {!isInitialized && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted }}>\n Initializing...\n </div>\n )}\n {error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: '#ef4444' }}>\n {error}\n </div>\n )}\n {isInitialized && messages.length === 0 && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted, textAlign: 'center' }}>\n <div>\n <div style={{ fontSize: '24px', marginBottom: '8px' }}>{welcomeIcon}</div>\n <div>{welcomeMessage}</div>\n </div>\n </div>\n )}\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n maxWidth: '85%',\n padding: '10px 14px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n ...(message.role === 'user' \n ? { \n alignSelf: 'flex-end',\n backgroundColor: `${primaryColor}cc`,\n color: textColor,\n borderBottomRightRadius: '4px',\n }\n : {\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n color: t.textSecondary,\n borderBottomLeftRadius: '4px',\n }\n ),\n }}\n >\n {message.role === 'assistant' ? renderMarkdown(message.content, { codeBg: t.codeBg, codeBlockBg: t.codeBlockBg, tableBorderColor: t.tableBorderColor }) : message.content}\n </div>\n ))}\n {isLoading && (\n <div style={{\n display: 'flex',\n gap: '4px',\n padding: '10px 14px',\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n borderRadius: '12px',\n borderBottomLeftRadius: '4px',\n }}>\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: '8px 8px',\n borderTop: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.5)' : 'rgba(255, 255, 255, 0.5)',\n }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={!isInitialized || isLoading || isStreaming}\n style={{\n flex: 1,\n padding: '10px 14px',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.6)' : 'rgba(249, 250, 251, 0.6)',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n color: t.text,\n outline: 'none',\n transition: 'box-shadow 0.15s ease',\n }}\n onFocus={e => {\n e.currentTarget.style.boxShadow = `0 0 0 2px ${primaryColor}`;\n }}\n onBlur={e => {\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n <button\n onClick={sendMessage}\n disabled={!isInitialized || !input.trim() || isLoading || isStreaming}\n style={{\n padding: '10px 16px',\n backgroundColor: !isInitialized || !input.trim() || isLoading || isStreaming ? t.inputBorder : primaryColor,\n color: '#000',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: !isInitialized || !input.trim() || isLoading || isStreaming ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/>\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\"/>\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: isMobile ? '0' : '8px',\n padding: isMobile ? '14px' : '12px 16px',\n backgroundColor: primaryColor,\n color: textColor,\n border: 'none',\n borderRadius: isMobile ? '50%' : '12px',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n minWidth: isMobile ? '56px' : undefined,\n minHeight: isMobile ? '56px' : undefined,\n justifyContent: 'center',\n }}\n onMouseEnter={e => {\n e.currentTarget.style.transform = 'scale(1.05)';\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.4)';\n }}\n onMouseLeave={e => {\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.3)';\n }}\n >\n <span \n className={`mnx-btn-icon ${isOpen ? 'open' : ''}`}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n >\n {isOpen ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n ) : logo ? (\n <img src={logo} alt=\"\" style={{ height: '28px', width: 'auto', objectFit: 'contain' }} />\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </span>\n {!isMobile && (\n <span style={{ \n display: 'inline-flex',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n position: 'relative',\n height: '1.2em',\n alignItems: 'center',\n }}>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(-100%)' : 'translateY(0)',\n opacity: isOpen ? 0 : 1,\n maxWidth: isOpen ? '0' : '300px',\n }}>\n {buttonLabel}\n </span>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(0)' : 'translateY(100%)',\n opacity: isOpen ? 1 : 0,\n maxWidth: isOpen ? '50px' : '0',\n overflow: 'hidden',\n }}>\n Close\n </span>\n </span>\n )}\n </button>\n </div>\n </>\n );\n}\n\nexport default MnexiumChat;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/client/MnexiumChat.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\n\nexport interface Message {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\nexport interface MnexiumChatProps {\n endpoint?: string;\n placeholder?: string;\n title?: string;\n buttonLabel?: string;\n position?: 'bottom-right' | 'bottom-left';\n primaryColor?: string;\n textColor?: string;\n defaultOpen?: boolean;\n logo?: string;\n theme?: 'light' | 'dark';\n welcomeIcon?: string;\n welcomeMessage?: string;\n history?: boolean;\n eagerInit?: boolean;\n}\n\nconst themes = {\n dark: {\n bg: '#1a1a1a',\n bgSecondary: '#2a2a2a',\n border: '#333',\n text: '#fff',\n textSecondary: '#e5e5e5',\n textMuted: '#888',\n inputBg: '#2a2a2a',\n inputBorder: '#444',\n codeBg: '#374151',\n codeBlockBg: '#1f2937',\n tableBorderColor: '#444',\n },\n light: {\n bg: '#ffffff',\n bgSecondary: '#f3f4f6',\n border: '#e5e7eb',\n text: '#111827',\n textSecondary: '#374151',\n textMuted: '#6b7280',\n inputBg: '#f9fafb',\n inputBorder: '#d1d5db',\n codeBg: '#e5e7eb',\n codeBlockBg: '#f3f4f6',\n tableBorderColor: '#d1d5db',\n },\n};\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 15);\n}\n\nfunction renderMarkdown(text: string, themeColors: { codeBg: string; codeBlockBg: string; tableBorderColor: string }): React.ReactNode {\n if (!text) return null;\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent: string[] = [];\n let inTable = false;\n let tableRows: string[][] = [];\n let isHeaderRow = true;\n\n const parseTableRow = (line: string): string[] => {\n return line.split('|').map(cell => cell.trim()).filter((_, idx, arr) => idx > 0 && idx < arr.length - 1 || (arr.length === 2 && idx === 0));\n };\n\n const isTableSeparator = (line: string): boolean => {\n return /^\\|?[\\s-:|]+\\|?$/.test(line) && line.includes('-');\n };\n\n const renderTable = (rows: string[][], key: number): React.ReactNode => {\n if (rows.length === 0) return null;\n const headerRow = rows[0];\n const bodyRows = rows.slice(1);\n \n return (\n <table key={key} style={{ \n borderCollapse: 'collapse', \n width: '100%', \n margin: '8px 0', \n fontSize: '13px',\n border: `1px solid ${themeColors.tableBorderColor}`,\n }}>\n <thead>\n <tr>\n {headerRow.map((cell, idx) => (\n <th key={idx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px', \n textAlign: 'left',\n fontWeight: 600,\n backgroundColor: themeColors.codeBlockBg,\n }}>\n {processInline(cell)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {bodyRows.map((row, rowIdx) => (\n <tr key={rowIdx}>\n {row.map((cell, cellIdx) => (\n <td key={cellIdx} style={{ \n border: `1px solid ${themeColors.tableBorderColor}`, \n padding: '8px',\n }}>\n {processInline(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n };\n\n const processInline = (line: string): React.ReactNode => {\n const parts: React.ReactNode[] = [];\n let remaining = line;\n let key = 0;\n\n while (remaining.length > 0) {\n const codeMatch = remaining.match(/`([^`]+)`/);\n const boldMatch = remaining.match(/\\*\\*([^*]+)\\*\\*/);\n const italicMatch = remaining.match(/\\*([^*]+)\\*/);\n const linkMatch = remaining.match(/\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\n const matches = [\n codeMatch ? { type: 'code', match: codeMatch, index: codeMatch.index! } : null,\n boldMatch ? { type: 'bold', match: boldMatch, index: boldMatch.index! } : null,\n italicMatch ? { type: 'italic', match: italicMatch, index: italicMatch.index! } : null,\n linkMatch ? { type: 'link', match: linkMatch, index: linkMatch.index! } : null,\n ].filter(Boolean).sort((a, b) => a!.index - b!.index);\n\n if (matches.length === 0) {\n parts.push(remaining);\n break;\n }\n\n const first = matches[0]!;\n if (first.index > 0) {\n parts.push(remaining.substring(0, first.index));\n }\n\n if (first.type === 'code') {\n parts.push(\n <code key={key++} style={{ backgroundColor: themeColors.codeBg, padding: '2px 6px', borderRadius: '4px', fontSize: '13px' }}>\n {first.match![1]}\n </code>\n );\n } else if (first.type === 'bold') {\n parts.push(<strong key={key++}>{first.match![1]}</strong>);\n } else if (first.type === 'italic') {\n parts.push(<em key={key++}>{first.match![1]}</em>);\n } else if (first.type === 'link') {\n parts.push(\n <a key={key++} href={first.match![2]} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'inherit', textDecoration: 'underline' }}>\n {first.match![1]}\n </a>\n );\n }\n\n remaining = remaining.substring(first.index + first.match![0].length);\n }\n\n return parts.length === 1 ? parts[0] : parts;\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inTable) {\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n if (!inCodeBlock) {\n inCodeBlock = true;\n codeContent = [];\n } else {\n elements.push(\n <pre key={i} style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n inCodeBlock = false;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent.push(line);\n continue;\n }\n\n // Table handling\n const isTableRow = line.includes('|') && line.trim().startsWith('|');\n if (isTableRow) {\n if (isTableSeparator(line)) {\n // Skip separator row (e.g., |---|---|)\n continue;\n }\n if (!inTable) {\n inTable = true;\n tableRows = [];\n }\n tableRows.push(parseTableRow(line));\n continue;\n } else if (inTable) {\n // End of table\n elements.push(renderTable(tableRows, i - tableRows.length));\n inTable = false;\n tableRows = [];\n }\n\n if (line.startsWith('### ')) {\n elements.push(<h4 key={i} style={{ margin: '12px 0 8px', fontSize: '14px', fontWeight: 600 }}>{processInline(line.slice(4))}</h4>);\n } else if (line.startsWith('## ')) {\n elements.push(<h3 key={i} style={{ margin: '12px 0 8px', fontSize: '15px', fontWeight: 600 }}>{processInline(line.slice(3))}</h3>);\n } else if (line.startsWith('# ')) {\n elements.push(<h2 key={i} style={{ margin: '12px 0 8px', fontSize: '16px', fontWeight: 600 }}>{processInline(line.slice(2))}</h2>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'disc' }}>{processInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n const content = line.replace(/^\\d+\\.\\s/, '');\n elements.push(<li key={i} style={{ marginLeft: '16px', listStyleType: 'decimal' }}>{processInline(content)}</li>);\n } else if (line.trim() === '') {\n elements.push(<br key={i} />);\n } else {\n elements.push(<p key={i} style={{ margin: '4px 0' }}>{processInline(line)}</p>);\n }\n }\n\n // Handle unclosed table at end\n if (inTable && tableRows.length > 0) {\n elements.push(renderTable(tableRows, lines.length));\n }\n\n if (inCodeBlock && codeContent.length > 0) {\n elements.push(\n <pre key=\"final-code\" style={{ backgroundColor: themeColors.codeBlockBg, padding: '12px', borderRadius: '8px', overflow: 'auto', fontSize: '13px', margin: '8px 0' }}>\n <code>{codeContent.join('\\n')}</code>\n </pre>\n );\n }\n\n return <div>{elements}</div>;\n}\n\nexport function MnexiumChat({\n endpoint = '/api/mnx',\n placeholder = 'Type a message...',\n title = 'Ask AI',\n buttonLabel = 'Ask AI',\n position = 'bottom-right',\n primaryColor = '#facc15',\n textColor = '#000',\n defaultOpen = false,\n logo,\n theme = 'dark',\n welcomeIcon = '👋',\n welcomeMessage = 'How can I help you today?',\n history = false,\n eagerInit = true,\n}: MnexiumChatProps) {\n const t = themes[theme];\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [chatSize, setChatSize] = useState<'small' | 'medium' | 'large'>('medium');\n const [isMobile, setIsMobile] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, []);\n\n useEffect(() => {\n const checkMobile = () => setIsMobile(window.innerWidth < 480);\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n useEffect(() => {\n scrollToBottom();\n }, [messages, scrollToBottom]);\n\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!eagerInit && !isOpen) return;\n \n const bootstrap = async () => {\n if (isInitialized) return;\n \n try {\n const res = await fetch(`${endpoint}/bootstrap`);\n if (!res.ok) throw new Error('Failed to bootstrap');\n \n const data = await res.json();\n \n if (history && data.chat_id) {\n try {\n const historyRes = await fetch(`${endpoint}/conversations/${data.chat_id}`);\n if (historyRes.ok) {\n const historyData = await historyRes.json();\n if (historyData.messages && Array.isArray(historyData.messages)) {\n setMessages(historyData.messages.map((m: { role: string; content: string }) => ({\n id: generateId(),\n role: m.role as 'user' | 'assistant',\n content: m.content,\n timestamp: new Date(),\n })));\n }\n }\n } catch {\n // History endpoint is optional\n }\n }\n \n setIsInitialized(true);\n } catch (err) {\n setError('Failed to initialize chat');\n console.error('Bootstrap error:', err);\n }\n };\n\n bootstrap();\n }, [endpoint, isOpen, isInitialized, history, eagerInit]);\n\n const sendMessage = async () => {\n if (!input.trim() || isLoading || isStreaming) return;\n\n const userMessage: Message = {\n id: generateId(),\n role: 'user',\n content: input.trim(),\n timestamp: new Date(),\n };\n\n setMessages(prev => [...prev, userMessage]);\n setInput('');\n setIsLoading(true);\n setError(null);\n\n const assistantMessageId = generateId();\n\n try {\n const res = await fetch(`${endpoint}/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: userMessage.content }),\n });\n\n if (!res.ok) throw new Error('Failed to send message');\n if (!res.body) throw new Error('No response body');\n\n setIsLoading(false);\n setIsStreaming(true);\n\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n setMessages(prev => [...prev, assistantMessage]);\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (buffer.startsWith('data: ')) {\n const data = buffer.slice(6);\n if (data !== '[DONE]') {\n try {\n const parsed = JSON.parse(data);\n const content = parsed.choices?.[0]?.delta?.content;\n if (content) {\n setMessages(prev =>\n prev.map(m =>\n m.id === assistantMessageId\n ? { ...m, content: m.content + content }\n : m\n )\n );\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n } catch (err) {\n setError('Failed to send message');\n console.error('Chat error:', err);\n setMessages(prev => prev.filter(m => m.id !== assistantMessageId));\n } finally {\n setIsLoading(false);\n setIsStreaming(false);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n\n const startNewChat = async () => {\n try {\n const res = await fetch(`${endpoint}/new-chat`, { method: 'POST' });\n if (res.ok) {\n setMessages([]);\n }\n } catch {\n // Fallback: just clear messages locally\n setMessages([]);\n }\n };\n\n const positionStyles = position === 'bottom-right' \n ? { right: '20px', bottom: '20px' }\n : { left: '20px', bottom: '20px' };\n\n const chatPositionStyles = position === 'bottom-right'\n ? { right: '0', bottom: '60px' }\n : { left: '0', bottom: '60px' };\n\n return (\n <>\n <style>{`\n @keyframes mnx-typing {\n 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n }\n @keyframes mnx-fade-in {\n from { opacity: 0; transform: translateY(10px) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes mnx-fade-out {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.95); }\n }\n @keyframes mnx-slide-up {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes mnx-pulse {\n 0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n 50% { box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); }\n 100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }\n }\n .mnx-typing-dot:nth-child(1) { animation-delay: 0s; }\n .mnx-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .mnx-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n .mnx-btn-icon {\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n `}</style>\n\n <div style={{\n position: 'fixed',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...positionStyles,\n }}>\n {isOpen && (\n <div style={{\n position: isMobile ? 'fixed' : 'absolute',\n ...(isMobile ? {\n left: '8px',\n right: '8px',\n bottom: '70px',\n top: 'auto',\n } : chatPositionStyles),\n width: isMobile ? 'calc(100vw - 16px)' : (chatSize === 'small' ? '320px' : chatSize === 'large' ? '547px' : '380px'),\n height: isMobile ? 'calc(100vh - 90px)' : (chatSize === 'small' ? '400px' : chatSize === 'large' ? '600px' : '500px'),\n maxHeight: isMobile ? 'calc(100vh - 90px)' : undefined,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n backdropFilter: 'blur(8px) saturate(180%)',\n WebkitBackdropFilter: 'blur(16px) saturate(180%)',\n borderRadius: isMobile ? '16px 16px 16px 16px' : '16px',\n border: `1px solid ${primaryColor}33`,\n boxShadow: theme === 'dark' ? '0 25px 50px -12px rgba(0, 0, 0, 0.5)' : '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n animation: isMobile ? 'mnx-slide-up 0.3s ease-out' : 'mnx-fade-in 0.2s ease-out',\n transform: 'translateZ(0)',\n isolation: 'isolate',\n transition: 'width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 8px',\n borderBottom: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.7)' : 'rgba(255, 255, 255, 0.7)',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{\n width: '32px',\n height: '32px',\n backgroundColor: primaryColor,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n }}>\n {logo ? (\n <img src={logo} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </div>\n <span style={{ color: t.text, fontWeight: 600, fontSize: '15px' }}>{title}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <button\n onClick={startNewChat}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"New chat\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>\n </svg>\n </button>\n {!isMobile && (\n <button\n onClick={() => setChatSize(prev => prev === 'small' ? 'medium' : prev === 'medium' ? 'large' : 'small')}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '6px',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease',\n }}\n title={`Size: ${chatSize}`}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {chatSize === 'small' ? (\n <>\n <polyline points=\"15 3 21 3 21 9\"/>\n <polyline points=\"9 21 3 21 3 15\"/>\n </>\n ) : chatSize === 'large' ? (\n <>\n <polyline points=\"4 14 4 20 10 20\"/>\n <polyline points=\"20 10 20 4 14 4\"/>\n </>\n ) : (\n <>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/>\n </>\n )}\n </svg>\n </button>\n )}\n <button\n onClick={() => setIsOpen(false)}\n style={{\n background: 'none',\n border: 'none',\n color: t.textMuted,\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px 8px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n }}>\n {!isInitialized && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted }}>\n Initializing...\n </div>\n )}\n {error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: '#ef4444' }}>\n {error}\n </div>\n )}\n {isInitialized && messages.length === 0 && !error && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', color: t.textMuted, textAlign: 'center' }}>\n <div>\n <div style={{ fontSize: '24px', marginBottom: '8px' }}>{welcomeIcon}</div>\n <div>{welcomeMessage}</div>\n </div>\n </div>\n )}\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n maxWidth: '85%',\n padding: '10px 14px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n ...(message.role === 'user' \n ? { \n alignSelf: 'flex-end',\n backgroundColor: `${primaryColor}cc`,\n color: textColor,\n borderBottomRightRadius: '4px',\n }\n : {\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n color: t.textSecondary,\n borderBottomLeftRadius: '4px',\n }\n ),\n }}\n >\n {message.role === 'assistant' ? renderMarkdown(message.content, { codeBg: t.codeBg, codeBlockBg: t.codeBlockBg, tableBorderColor: t.tableBorderColor }) : message.content}\n </div>\n ))}\n {isLoading && (\n <div style={{\n display: 'flex',\n gap: '4px',\n padding: '10px 14px',\n alignSelf: 'flex-start',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.7)' : 'rgba(243, 244, 246, 0.7)',\n borderRadius: '12px',\n borderBottomLeftRadius: '4px',\n }}>\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n <div className=\"mnx-typing-dot\" style={{ width: '6px', height: '6px', backgroundColor: t.textMuted, borderRadius: '50%', animation: 'mnx-typing 1.4s infinite ease-in-out' }} />\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: '8px 8px',\n borderTop: `1px solid ${t.border}`,\n backgroundColor: theme === 'dark' ? 'rgba(26, 26, 26, 0.5)' : 'rgba(255, 255, 255, 0.5)',\n }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={!isInitialized || isLoading || isStreaming}\n style={{\n flex: 1,\n padding: '10px 14px',\n backgroundColor: theme === 'dark' ? 'rgba(42, 42, 42, 0.6)' : 'rgba(249, 250, 251, 0.6)',\n border: 'none',\n borderRadius: '8px',\n fontSize: isMobile ? '16px' : '14px',\n color: t.text,\n outline: 'none',\n transition: 'box-shadow 0.15s ease',\n }}\n onFocus={e => {\n e.currentTarget.style.boxShadow = `0 0 0 2px ${primaryColor}`;\n }}\n onBlur={e => {\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n <button\n onClick={sendMessage}\n disabled={!isInitialized || !input.trim() || isLoading || isStreaming}\n style={{\n padding: '10px 16px',\n backgroundColor: !isInitialized || !input.trim() || isLoading || isStreaming ? t.inputBorder : primaryColor,\n color: '#000',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: !isInitialized || !input.trim() || isLoading || isStreaming ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/>\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\"/>\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: isMobile ? '0' : '8px',\n padding: isMobile ? '14px' : '12px 16px',\n backgroundColor: primaryColor,\n color: textColor,\n border: 'none',\n borderRadius: isMobile ? '50%' : '12px',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n minWidth: isMobile ? '56px' : undefined,\n minHeight: isMobile ? '56px' : undefined,\n justifyContent: 'center',\n }}\n onMouseEnter={e => {\n e.currentTarget.style.transform = 'scale(1.05)';\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.4)';\n }}\n onMouseLeave={e => {\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.3)';\n }}\n >\n <span \n className={`mnx-btn-icon ${isOpen ? 'open' : ''}`}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n >\n {isOpen ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n ) : logo ? (\n <img src={logo} alt=\"\" style={{ height: '28px', width: 'auto', objectFit: 'contain' }} />\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\"/>\n <path d=\"M2 17l10 5 10-5\"/>\n <path d=\"M2 12l10 5 10-5\"/>\n </svg>\n )}\n </span>\n {!isMobile && (\n <span style={{ \n display: 'inline-flex',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n position: 'relative',\n height: '1.2em',\n alignItems: 'center',\n }}>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(-100%)' : 'translateY(0)',\n opacity: isOpen ? 0 : 1,\n maxWidth: isOpen ? '0' : '300px',\n }}>\n {buttonLabel}\n </span>\n <span style={{\n display: 'inline-block',\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s, max-width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transform: isOpen ? 'translateY(0)' : 'translateY(100%)',\n opacity: isOpen ? 1 : 0,\n maxWidth: isOpen ? '50px' : '0',\n overflow: 'hidden',\n }}>\n Close\n </span>\n </span>\n )}\n </button>\n </div>\n </>\n );\n}\n\nexport default MnexiumChat;\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnexium/chat-react",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Drop-in React chat widget with AI memory powered by Mnexium",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",