vox-ai-react 1.0.0 → 1.0.1

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.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  export interface VoxChatProps {
3
3
  apiKey: string;
4
+ apiUrl?: string;
4
5
  agentName?: string;
5
6
  position?: 'bottom-right' | 'bottom-left';
6
7
  theme?: 'dark' | 'light' | 'auto';
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useState, useRef, useEffect } from 'react';
3
3
 
4
- const VoxChat = ({ apiKey, agentName = 'VOX-01', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 48, borderRadius = 0, iconColor, onOpen, onClose, onMessage, }) => {
4
+ const VoxChat = ({ apiKey, apiUrl = 'https://api.vox.ai', agentName = 'VOX-01', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 48, borderRadius = 0, iconColor, onOpen, onClose, onMessage, }) => {
5
5
  const [isOpen, setIsOpen] = useState(false);
6
6
  const [messages, setMessages] = useState([]);
7
7
  const [input, setInput] = useState('');
@@ -53,7 +53,7 @@ const VoxChat = ({ apiKey, agentName = 'VOX-01', position = 'bottom-right', them
53
53
  setInput('');
54
54
  setIsLoading(true);
55
55
  try {
56
- const response = await fetch('https://api.vox.ai/v1/chat', {
56
+ const response = await fetch(`${apiUrl}/api/v1/chat`, {
57
57
  method: 'POST',
58
58
  headers: {
59
59
  'Content-Type': 'application/json',
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n agentName?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light' | 'auto';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: string, role: 'user' | 'assistant') => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n agentName = 'VOX-01',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 48,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // Determine actual theme\r\n const actualTheme = theme === 'auto' \r\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\r\n : theme;\r\n\r\n // Default colors based on theme\r\n const defaultButtonColor = actualTheme === 'dark' ? '#000000' : '#ffffff';\r\n const defaultIconColor = actualTheme === 'dark' ? '#ffffff' : '#000000';\r\n const finalButtonColor = buttonColor || defaultButtonColor;\r\n const finalIconColor = iconColor || defaultIconColor;\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n // Add welcome message\r\n setMessages([{\r\n id: 'welcome',\r\n role: 'assistant',\r\n text: `Hello! I'm ${agentName}. How can I help you today?`,\r\n timestamp: new Date()\r\n }]);\r\n }, [agentName]);\r\n\r\n const handleOpen = () => {\r\n setIsOpen(true);\r\n onOpen?.();\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n onClose?.();\r\n };\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: input,\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n onMessage?.(input, 'user');\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch('https://api.vox.ai/v1/chat', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`\r\n },\r\n body: JSON.stringify({\r\n message: userMessage.text,\r\n history: messages.map(m => ({ role: m.role, content: m.text }))\r\n })\r\n });\r\n\r\n const data = await response.json();\r\n \r\n const assistantMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: data.response || 'Sorry, I encountered an error.',\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, assistantMessage]);\r\n onMessage?.(assistantMessage.text, 'assistant');\r\n } catch (error) {\r\n const errorMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date()\r\n };\r\n setMessages(prev => [...prev, errorMessage]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { left: '16px' } \r\n : { right: '16px' };\r\n\r\n const colors = actualTheme === 'dark' ? {\r\n bg: '#000000',\r\n bgSecondary: '#18181b',\r\n border: '#27272a',\r\n text: '#ffffff',\r\n textSecondary: '#a1a1aa',\r\n userBubble: '#27272a',\r\n assistantBubble: '#000000',\r\n } : {\r\n bg: '#ffffff',\r\n bgSecondary: '#f4f4f5',\r\n border: '#e4e4e7',\r\n text: '#000000',\r\n textSecondary: '#71717a',\r\n userBubble: '#f4f4f5',\r\n assistantBubble: '#ffffff',\r\n };\r\n\r\n return (\r\n <>\r\n {/* Chat Window */}\r\n {isOpen && (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '80px',\r\n ...positionStyles,\r\n width: '380px',\r\n maxWidth: 'calc(100vw - 32px)',\r\n height: '500px',\r\n maxHeight: 'calc(100vh - 120px)',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 9999,\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: '16px',\r\n borderBottom: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <div>\r\n <div style={{ \r\n fontSize: '10px', \r\n fontWeight: 900, \r\n color: colors.text,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em'\r\n }}>\r\n {agentName}\r\n </div>\r\n <div style={{ \r\n fontSize: '9px', \r\n color: colors.textSecondary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <span style={{\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#22c55e',\r\n borderRadius: '50%'\r\n }}></span>\r\n Online\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleClose}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n color: colors.textSecondary,\r\n cursor: 'pointer',\r\n padding: '4px',\r\n }}\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Messages */}\r\n <div\r\n ref={scrollRef}\r\n style={{\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n }}\r\n >\r\n {messages.map((msg) => (\r\n <div\r\n key={msg.id}\r\n style={{\r\n display: 'flex',\r\n justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: '80%',\r\n padding: '10px 14px',\r\n backgroundColor: msg.role === 'user' ? colors.userBubble : colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {msg.text}\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div\r\n style={{\r\n padding: '10px 14px',\r\n backgroundColor: colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.textSecondary,\r\n fontSize: '13px',\r\n }}\r\n >\r\n Typing...\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <form\r\n onSubmit={handleSend}\r\n style={{\r\n padding: '16px',\r\n borderTop: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n gap: '8px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"Type a message...\"\r\n style={{\r\n flex: 1,\r\n padding: '10px 14px',\r\n backgroundColor: colors.bgSecondary,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n outline: 'none',\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '10px 16px',\r\n backgroundColor: colors.text,\r\n color: colors.bg,\r\n border: 'none',\r\n fontSize: '11px',\r\n fontWeight: 700,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n cursor: input.trim() && !isLoading ? 'pointer' : 'not-allowed',\r\n opacity: input.trim() && !isLoading ? 1 : 0.5,\r\n }}\r\n >\r\n Send\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n\r\n {/* Launcher Button */}\r\n {!isOpen && (\r\n <button\r\n onClick={handleOpen}\r\n style={{\r\n position: 'fixed',\r\n bottom: '16px',\r\n ...positionStyles,\r\n width: `${buttonSize}px`,\r\n height: `${buttonSize}px`,\r\n backgroundColor: finalButtonColor,\r\n borderRadius: `${borderRadius}px`,\r\n border: 'none',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 9999,\r\n transition: 'transform 0.2s, box-shadow 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n >\r\n <svg\r\n width={buttonSize * 0.4}\r\n height={buttonSize * 0.4}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={finalIconColor}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light' | 'auto';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: string, role: 'user' | 'assistant') => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n apiUrl = 'https://api.vox.ai',\r\n agentName = 'VOX-01',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 48,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // Determine actual theme\r\n const actualTheme = theme === 'auto' \r\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\r\n : theme;\r\n\r\n // Default colors based on theme\r\n const defaultButtonColor = actualTheme === 'dark' ? '#000000' : '#ffffff';\r\n const defaultIconColor = actualTheme === 'dark' ? '#ffffff' : '#000000';\r\n const finalButtonColor = buttonColor || defaultButtonColor;\r\n const finalIconColor = iconColor || defaultIconColor;\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n // Add welcome message\r\n setMessages([{\r\n id: 'welcome',\r\n role: 'assistant',\r\n text: `Hello! I'm ${agentName}. How can I help you today?`,\r\n timestamp: new Date()\r\n }]);\r\n }, [agentName]);\r\n\r\n const handleOpen = () => {\r\n setIsOpen(true);\r\n onOpen?.();\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n onClose?.();\r\n };\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: input,\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n onMessage?.(input, 'user');\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`\r\n },\r\n body: JSON.stringify({\r\n message: userMessage.text,\r\n history: messages.map(m => ({ role: m.role, content: m.text }))\r\n })\r\n });\r\n\r\n const data = await response.json();\r\n \r\n const assistantMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: data.response || 'Sorry, I encountered an error.',\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, assistantMessage]);\r\n onMessage?.(assistantMessage.text, 'assistant');\r\n } catch (error) {\r\n const errorMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date()\r\n };\r\n setMessages(prev => [...prev, errorMessage]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { left: '16px' } \r\n : { right: '16px' };\r\n\r\n const colors = actualTheme === 'dark' ? {\r\n bg: '#000000',\r\n bgSecondary: '#18181b',\r\n border: '#27272a',\r\n text: '#ffffff',\r\n textSecondary: '#a1a1aa',\r\n userBubble: '#27272a',\r\n assistantBubble: '#000000',\r\n } : {\r\n bg: '#ffffff',\r\n bgSecondary: '#f4f4f5',\r\n border: '#e4e4e7',\r\n text: '#000000',\r\n textSecondary: '#71717a',\r\n userBubble: '#f4f4f5',\r\n assistantBubble: '#ffffff',\r\n };\r\n\r\n return (\r\n <>\r\n {/* Chat Window */}\r\n {isOpen && (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '80px',\r\n ...positionStyles,\r\n width: '380px',\r\n maxWidth: 'calc(100vw - 32px)',\r\n height: '500px',\r\n maxHeight: 'calc(100vh - 120px)',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 9999,\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: '16px',\r\n borderBottom: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <div>\r\n <div style={{ \r\n fontSize: '10px', \r\n fontWeight: 900, \r\n color: colors.text,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em'\r\n }}>\r\n {agentName}\r\n </div>\r\n <div style={{ \r\n fontSize: '9px', \r\n color: colors.textSecondary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <span style={{\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#22c55e',\r\n borderRadius: '50%'\r\n }}></span>\r\n Online\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleClose}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n color: colors.textSecondary,\r\n cursor: 'pointer',\r\n padding: '4px',\r\n }}\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Messages */}\r\n <div\r\n ref={scrollRef}\r\n style={{\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n }}\r\n >\r\n {messages.map((msg) => (\r\n <div\r\n key={msg.id}\r\n style={{\r\n display: 'flex',\r\n justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: '80%',\r\n padding: '10px 14px',\r\n backgroundColor: msg.role === 'user' ? colors.userBubble : colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {msg.text}\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div\r\n style={{\r\n padding: '10px 14px',\r\n backgroundColor: colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.textSecondary,\r\n fontSize: '13px',\r\n }}\r\n >\r\n Typing...\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <form\r\n onSubmit={handleSend}\r\n style={{\r\n padding: '16px',\r\n borderTop: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n gap: '8px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"Type a message...\"\r\n style={{\r\n flex: 1,\r\n padding: '10px 14px',\r\n backgroundColor: colors.bgSecondary,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n outline: 'none',\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '10px 16px',\r\n backgroundColor: colors.text,\r\n color: colors.bg,\r\n border: 'none',\r\n fontSize: '11px',\r\n fontWeight: 700,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n cursor: input.trim() && !isLoading ? 'pointer' : 'not-allowed',\r\n opacity: input.trim() && !isLoading ? 1 : 0.5,\r\n }}\r\n >\r\n Send\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n\r\n {/* Launcher Button */}\r\n {!isOpen && (\r\n <button\r\n onClick={handleOpen}\r\n style={{\r\n position: 'fixed',\r\n bottom: '16px',\r\n ...positionStyles,\r\n width: `${buttonSize}px`,\r\n height: `${buttonSize}px`,\r\n backgroundColor: finalButtonColor,\r\n borderRadius: `${borderRadius}px`,\r\n border: 'none',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 9999,\r\n transition: 'transform 0.2s, box-shadow 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n >\r\n <svg\r\n width={buttonSize * 0.4}\r\n height={buttonSize * 0.4}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={finalIconColor}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var react = require('react');
7
7
 
8
- const VoxChat = ({ apiKey, agentName = 'VOX-01', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 48, borderRadius = 0, iconColor, onOpen, onClose, onMessage, }) => {
8
+ const VoxChat = ({ apiKey, apiUrl = 'https://api.vox.ai', agentName = 'VOX-01', position = 'bottom-right', theme = 'dark', buttonColor, buttonSize = 48, borderRadius = 0, iconColor, onOpen, onClose, onMessage, }) => {
9
9
  const [isOpen, setIsOpen] = react.useState(false);
10
10
  const [messages, setMessages] = react.useState([]);
11
11
  const [input, setInput] = react.useState('');
@@ -57,7 +57,7 @@ const VoxChat = ({ apiKey, agentName = 'VOX-01', position = 'bottom-right', them
57
57
  setInput('');
58
58
  setIsLoading(true);
59
59
  try {
60
- const response = await fetch('https://api.vox.ai/v1/chat', {
60
+ const response = await fetch(`${apiUrl}/api/v1/chat`, {
61
61
  method: 'POST',
62
62
  headers: {
63
63
  'Content-Type': 'application/json',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n agentName?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light' | 'auto';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: string, role: 'user' | 'assistant') => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n agentName = 'VOX-01',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 48,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // Determine actual theme\r\n const actualTheme = theme === 'auto' \r\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\r\n : theme;\r\n\r\n // Default colors based on theme\r\n const defaultButtonColor = actualTheme === 'dark' ? '#000000' : '#ffffff';\r\n const defaultIconColor = actualTheme === 'dark' ? '#ffffff' : '#000000';\r\n const finalButtonColor = buttonColor || defaultButtonColor;\r\n const finalIconColor = iconColor || defaultIconColor;\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n // Add welcome message\r\n setMessages([{\r\n id: 'welcome',\r\n role: 'assistant',\r\n text: `Hello! I'm ${agentName}. How can I help you today?`,\r\n timestamp: new Date()\r\n }]);\r\n }, [agentName]);\r\n\r\n const handleOpen = () => {\r\n setIsOpen(true);\r\n onOpen?.();\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n onClose?.();\r\n };\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: input,\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n onMessage?.(input, 'user');\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch('https://api.vox.ai/v1/chat', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`\r\n },\r\n body: JSON.stringify({\r\n message: userMessage.text,\r\n history: messages.map(m => ({ role: m.role, content: m.text }))\r\n })\r\n });\r\n\r\n const data = await response.json();\r\n \r\n const assistantMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: data.response || 'Sorry, I encountered an error.',\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, assistantMessage]);\r\n onMessage?.(assistantMessage.text, 'assistant');\r\n } catch (error) {\r\n const errorMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date()\r\n };\r\n setMessages(prev => [...prev, errorMessage]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { left: '16px' } \r\n : { right: '16px' };\r\n\r\n const colors = actualTheme === 'dark' ? {\r\n bg: '#000000',\r\n bgSecondary: '#18181b',\r\n border: '#27272a',\r\n text: '#ffffff',\r\n textSecondary: '#a1a1aa',\r\n userBubble: '#27272a',\r\n assistantBubble: '#000000',\r\n } : {\r\n bg: '#ffffff',\r\n bgSecondary: '#f4f4f5',\r\n border: '#e4e4e7',\r\n text: '#000000',\r\n textSecondary: '#71717a',\r\n userBubble: '#f4f4f5',\r\n assistantBubble: '#ffffff',\r\n };\r\n\r\n return (\r\n <>\r\n {/* Chat Window */}\r\n {isOpen && (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '80px',\r\n ...positionStyles,\r\n width: '380px',\r\n maxWidth: 'calc(100vw - 32px)',\r\n height: '500px',\r\n maxHeight: 'calc(100vh - 120px)',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 9999,\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: '16px',\r\n borderBottom: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <div>\r\n <div style={{ \r\n fontSize: '10px', \r\n fontWeight: 900, \r\n color: colors.text,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em'\r\n }}>\r\n {agentName}\r\n </div>\r\n <div style={{ \r\n fontSize: '9px', \r\n color: colors.textSecondary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <span style={{\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#22c55e',\r\n borderRadius: '50%'\r\n }}></span>\r\n Online\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleClose}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n color: colors.textSecondary,\r\n cursor: 'pointer',\r\n padding: '4px',\r\n }}\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Messages */}\r\n <div\r\n ref={scrollRef}\r\n style={{\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n }}\r\n >\r\n {messages.map((msg) => (\r\n <div\r\n key={msg.id}\r\n style={{\r\n display: 'flex',\r\n justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: '80%',\r\n padding: '10px 14px',\r\n backgroundColor: msg.role === 'user' ? colors.userBubble : colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {msg.text}\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div\r\n style={{\r\n padding: '10px 14px',\r\n backgroundColor: colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.textSecondary,\r\n fontSize: '13px',\r\n }}\r\n >\r\n Typing...\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <form\r\n onSubmit={handleSend}\r\n style={{\r\n padding: '16px',\r\n borderTop: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n gap: '8px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"Type a message...\"\r\n style={{\r\n flex: 1,\r\n padding: '10px 14px',\r\n backgroundColor: colors.bgSecondary,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n outline: 'none',\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '10px 16px',\r\n backgroundColor: colors.text,\r\n color: colors.bg,\r\n border: 'none',\r\n fontSize: '11px',\r\n fontWeight: 700,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n cursor: input.trim() && !isLoading ? 'pointer' : 'not-allowed',\r\n opacity: input.trim() && !isLoading ? 1 : 0.5,\r\n }}\r\n >\r\n Send\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n\r\n {/* Launcher Button */}\r\n {!isOpen && (\r\n <button\r\n onClick={handleOpen}\r\n style={{\r\n position: 'fixed',\r\n bottom: '16px',\r\n ...positionStyles,\r\n width: `${buttonSize}px`,\r\n height: `${buttonSize}px`,\r\n backgroundColor: finalButtonColor,\r\n borderRadius: `${borderRadius}px`,\r\n border: 'none',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 9999,\r\n transition: 'transform 0.2s, box-shadow 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n >\r\n <svg\r\n width={buttonSize * 0.4}\r\n height={buttonSize * 0.4}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={finalIconColor}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["useState","useRef","useEffect","_jsxs","_Fragment","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface VoxChatProps {\r\n apiKey: string;\r\n apiUrl?: string;\r\n agentName?: string;\r\n position?: 'bottom-right' | 'bottom-left';\r\n theme?: 'dark' | 'light' | 'auto';\r\n buttonColor?: string;\r\n buttonSize?: number;\r\n borderRadius?: number;\r\n iconColor?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: string, role: 'user' | 'assistant') => void;\r\n}\r\n\r\ninterface Message {\r\n id: string;\r\n role: 'user' | 'assistant';\r\n text: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport const VoxChat: React.FC<VoxChatProps> = ({\r\n apiKey,\r\n apiUrl = 'https://api.vox.ai',\r\n agentName = 'VOX-01',\r\n position = 'bottom-right',\r\n theme = 'dark',\r\n buttonColor,\r\n buttonSize = 48,\r\n borderRadius = 0,\r\n iconColor,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [input, setInput] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // Determine actual theme\r\n const actualTheme = theme === 'auto' \r\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\r\n : theme;\r\n\r\n // Default colors based on theme\r\n const defaultButtonColor = actualTheme === 'dark' ? '#000000' : '#ffffff';\r\n const defaultIconColor = actualTheme === 'dark' ? '#ffffff' : '#000000';\r\n const finalButtonColor = buttonColor || defaultButtonColor;\r\n const finalIconColor = iconColor || defaultIconColor;\r\n\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n // Add welcome message\r\n setMessages([{\r\n id: 'welcome',\r\n role: 'assistant',\r\n text: `Hello! I'm ${agentName}. How can I help you today?`,\r\n timestamp: new Date()\r\n }]);\r\n }, [agentName]);\r\n\r\n const handleOpen = () => {\r\n setIsOpen(true);\r\n onOpen?.();\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n onClose?.();\r\n };\r\n\r\n const handleSend = async (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!input.trim() || isLoading) return;\r\n\r\n const userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: input,\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, userMessage]);\r\n onMessage?.(input, 'user');\r\n setInput('');\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch(`${apiUrl}/api/v1/chat`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`\r\n },\r\n body: JSON.stringify({\r\n message: userMessage.text,\r\n history: messages.map(m => ({ role: m.role, content: m.text }))\r\n })\r\n });\r\n\r\n const data = await response.json();\r\n \r\n const assistantMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: data.response || 'Sorry, I encountered an error.',\r\n timestamp: new Date()\r\n };\r\n\r\n setMessages(prev => [...prev, assistantMessage]);\r\n onMessage?.(assistantMessage.text, 'assistant');\r\n } catch (error) {\r\n const errorMessage: Message = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'assistant',\r\n text: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date()\r\n };\r\n setMessages(prev => [...prev, errorMessage]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const positionStyles = position === 'bottom-left' \r\n ? { left: '16px' } \r\n : { right: '16px' };\r\n\r\n const colors = actualTheme === 'dark' ? {\r\n bg: '#000000',\r\n bgSecondary: '#18181b',\r\n border: '#27272a',\r\n text: '#ffffff',\r\n textSecondary: '#a1a1aa',\r\n userBubble: '#27272a',\r\n assistantBubble: '#000000',\r\n } : {\r\n bg: '#ffffff',\r\n bgSecondary: '#f4f4f5',\r\n border: '#e4e4e7',\r\n text: '#000000',\r\n textSecondary: '#71717a',\r\n userBubble: '#f4f4f5',\r\n assistantBubble: '#ffffff',\r\n };\r\n\r\n return (\r\n <>\r\n {/* Chat Window */}\r\n {isOpen && (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '80px',\r\n ...positionStyles,\r\n width: '380px',\r\n maxWidth: 'calc(100vw - 32px)',\r\n height: '500px',\r\n maxHeight: 'calc(100vh - 120px)',\r\n backgroundColor: colors.bg,\r\n border: `1px solid ${colors.border}`,\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n zIndex: 9999,\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: '16px',\r\n borderBottom: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <div>\r\n <div style={{ \r\n fontSize: '10px', \r\n fontWeight: 900, \r\n color: colors.text,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em'\r\n }}>\r\n {agentName}\r\n </div>\r\n <div style={{ \r\n fontSize: '9px', \r\n color: colors.textSecondary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.1em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <span style={{\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#22c55e',\r\n borderRadius: '50%'\r\n }}></span>\r\n Online\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleClose}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n color: colors.textSecondary,\r\n cursor: 'pointer',\r\n padding: '4px',\r\n }}\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Messages */}\r\n <div\r\n ref={scrollRef}\r\n style={{\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n }}\r\n >\r\n {messages.map((msg) => (\r\n <div\r\n key={msg.id}\r\n style={{\r\n display: 'flex',\r\n justifyContent: msg.role === 'user' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: '80%',\r\n padding: '10px 14px',\r\n backgroundColor: msg.role === 'user' ? colors.userBubble : colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {msg.text}\r\n </div>\r\n </div>\r\n ))}\r\n {isLoading && (\r\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\r\n <div\r\n style={{\r\n padding: '10px 14px',\r\n backgroundColor: colors.assistantBubble,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.textSecondary,\r\n fontSize: '13px',\r\n }}\r\n >\r\n Typing...\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <form\r\n onSubmit={handleSend}\r\n style={{\r\n padding: '16px',\r\n borderTop: `1px solid ${colors.border}`,\r\n display: 'flex',\r\n gap: '8px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={input}\r\n onChange={(e) => setInput(e.target.value)}\r\n placeholder=\"Type a message...\"\r\n style={{\r\n flex: 1,\r\n padding: '10px 14px',\r\n backgroundColor: colors.bgSecondary,\r\n border: `1px solid ${colors.border}`,\r\n color: colors.text,\r\n fontSize: '13px',\r\n outline: 'none',\r\n }}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!input.trim() || isLoading}\r\n style={{\r\n padding: '10px 16px',\r\n backgroundColor: colors.text,\r\n color: colors.bg,\r\n border: 'none',\r\n fontSize: '11px',\r\n fontWeight: 700,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n cursor: input.trim() && !isLoading ? 'pointer' : 'not-allowed',\r\n opacity: input.trim() && !isLoading ? 1 : 0.5,\r\n }}\r\n >\r\n Send\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n\r\n {/* Launcher Button */}\r\n {!isOpen && (\r\n <button\r\n onClick={handleOpen}\r\n style={{\r\n position: 'fixed',\r\n bottom: '16px',\r\n ...positionStyles,\r\n width: `${buttonSize}px`,\r\n height: `${buttonSize}px`,\r\n backgroundColor: finalButtonColor,\r\n borderRadius: `${borderRadius}px`,\r\n border: 'none',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 9999,\r\n transition: 'transform 0.2s, box-shadow 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n >\r\n <svg\r\n width={buttonSize * 0.4}\r\n height={buttonSize * 0.4}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={finalIconColor}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\" />\r\n </svg>\r\n </button>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default VoxChat;\r\n"],"names":["useState","useRef","useEffect","_jsxs","_Fragment","_jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vox-ai-react",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "VOX AI Chat Widget for React applications",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",