aizek-chatbot 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cx.ts","../src/components/Button.tsx","../src/hooks/useChatbot.ts","../src/services/chatWidgetApi.ts","../src/styles/messageStyles.ts","../src/styles/inputStyles.ts","../src/styles/headerStyles.ts","../src/styles/containerStyles.ts","../src/styles/loadingStyles.ts","../src/components/FloatingChat.tsx"],"names":["React","jsx","OpenAI","useState","useEffect","useRef","jsxs","ReactMarkdown","remarkGfm","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export function cx(...args: Array<string | false | null | undefined>): string {\r\n return args.filter(Boolean).join(\" \");\r\n}","import * as React from \"react\";\r\nimport { cx } from \"../utils/cx\";\r\nimport { ButtonProps, ButtonSize, ButtonVariant } from \"../types/button\";\r\n\r\n\r\n\r\n\r\nconst base: React.CSSProperties = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: 12,\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n transition: \"background-color .2s ease, color .2s ease, border-color .2s ease\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n};\r\n\r\n\r\nconst sizes: Record<ButtonSize, React.CSSProperties> = {\r\n sm: { height: 36, padding: \"0 12px\", fontSize: 14 },\r\n md: { height: 40, padding: \"0 16px\", fontSize: 16 },\r\n lg: { height: 44, padding: \"0 20px\", fontSize: 18 },\r\n};\r\n\r\n\r\nconst palette = {\r\n brand: {\r\n primary: \"#2563eb\",\r\n primaryHover: \"#1d4ed8\",\r\n },\r\n};\r\n\r\n\r\nfunction styleFor(variant: ButtonVariant): React.CSSProperties {\r\n switch (variant) {\r\n case \"outline\":\r\n return {\r\n background: \"transparent\",\r\n color: palette.brand.primary,\r\n border: `1px solid ${palette.brand.primary}`,\r\n };\r\n case \"ghost\":\r\n return {\r\n background: \"transparent\",\r\n color: palette.brand.primary,\r\n border: \"1px solid transparent\",\r\n };\r\n default:\r\n return {\r\n background: palette.brand.primary,\r\n color: \"#fff\",\r\n border: \"1px solid transparent\",\r\n };\r\n }\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ variant = \"primary\", size = \"md\", style, className, onMouseEnter, onMouseLeave, ...props }, ref) => {\r\n const [hover, setHover] = React.useState(false);\r\n\r\n\r\n const hoverStyle: React.CSSProperties =\r\n variant === \"primary\"\r\n ? { background: hover ? palette.brand.primaryHover : palette.brand.primary }\r\n : variant === \"outline\"\r\n ? { borderColor: hover ? palette.brand.primaryHover : palette.brand.primary }\r\n : { background: hover ? \"rgba(37, 99, 235, 0.08)\" : \"transparent\" };\r\n\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n className={cx(\"rui-btn\", className)}\r\n style={{ ...base, ...sizes[size], ...styleFor(variant), ...(hover ? hoverStyle : {}), ...style }}\r\n onMouseEnter={(e) => {\r\n setHover(true);\r\n onMouseEnter?.(e);\r\n }}\r\n onMouseLeave={(e) => {\r\n setHover(false);\r\n onMouseLeave?.(e);\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = \"Button\";","import { useState } from 'react';\r\nimport { Message } from '../types/chatbot';\r\nimport OpenAI from \"openai\";\r\n\r\n\r\nexport interface UseChatbotOptions {\r\n apiKey?: string;\r\n mcpUrl?: string;\r\n userToken?: string;\r\n}\r\n\r\nexport const useChatbot = (options: UseChatbotOptions = {}) => {\r\n const { mcpUrl, apiKey } = options;\r\n const client = new OpenAI({ apiKey: apiKey, dangerouslyAllowBrowser: true });\r\n\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const generateId = () => {\r\n return Date.now().toString() + Math.random().toString(36).substr(2, 9);\r\n };\r\n\r\n const addMessage = (content: string, role: 'user' | 'assistant') => {\r\n const newMessage: Message = {\r\n id: generateId(),\r\n content,\r\n role,\r\n timestamp: new Date(),\r\n };\r\n setMessages(prev => [...prev, newMessage]);\r\n return newMessage;\r\n };\r\n\r\n const sendMessage = async (message: string) => {\r\n if (!message.trim() || isLoading) return;\r\n\r\n addMessage(message, 'user');\r\n setIsLoading(true);\r\n console.log(options.userToken);\r\n\r\n\r\n try {\r\n const resp = await client.responses.create({\r\n model: \"gpt-5\",\r\n tools: [\r\n {\r\n type: \"mcp\",\r\n server_label: \"aizek-mcp\",\r\n server_url: mcpUrl,\r\n require_approval: \"never\",\r\n headers: {\r\n Authorization: options.userToken ? `Bearer ${options.userToken}` : ''\r\n }\r\n\r\n },\r\n ],\r\n input: message,\r\n });\r\n\r\n\r\n let responseText = '';\r\n\r\n if (resp && Array.isArray(resp)) {\r\n\r\n // Find the message type in the response\r\n const messageItem = resp.find(item => item.type === \"message\");\r\n\r\n if (messageItem && messageItem.content && Array.isArray(messageItem.content)) {\r\n\r\n const textContent = messageItem.content.find((content: any) => content.type === \"output_text\");\r\n\r\n if (textContent && textContent.text) {\r\n responseText = textContent.text;\r\n }\r\n }\r\n } else {\r\n\r\n if (resp && resp.output_text) {\r\n responseText = resp.output_text;\r\n }\r\n else if (typeof resp === 'string') {\r\n responseText = resp;\r\n }\r\n }\r\n\r\n if (!responseText) {\r\n responseText = `\"${message}\" mesajınızı aldım. Size nasıl yardımcı olabilirim?`;\r\n }\r\n\r\n // Add assistant response\r\n addMessage(responseText, 'assistant');\r\n setIsLoading(false);\r\n\r\n } catch (error) {\r\n console.error('Error sending message:', error);\r\n addMessage('Üzgünüm, bir hata oluştu. Lütfen tekrar deneyin.', 'assistant');\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n\r\n\r\n return {\r\n messages,\r\n isLoading,\r\n sendMessage,\r\n addMessage,\r\n };\r\n};\r\n","import { ChatWidgetApiResponse, ChatWidgetSettings } from '../types/chatbot';\r\n\r\nconst API_BASE_URL = 'https://api.elviz24.com';\r\n\r\nexport const fetchChatWidgetSettings = async (clientId: string): Promise<ChatWidgetApiResponse> => {\r\n try {\r\n const response = await fetch(`${API_BASE_URL}/ChatWidgetSettings/GetByClientId?client_id=${clientId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const data: ChatWidgetApiResponse = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching chat widget settings:', error);\r\n throw error;\r\n }\r\n};\r\n\r\nexport const mapApiSettingsToConfig = (apiSettings: ChatWidgetSettings | null) => {\r\n if (!apiSettings) {\r\n return null;\r\n }\r\n\r\n // Map API button_size to our internal format\r\n const buttonSizeMap = {\r\n 'small': 'sm' as const,\r\n 'medium': 'md' as const,\r\n 'large': 'lg' as const,\r\n };\r\n\r\n return {\r\n welcomeMessage: apiSettings.welcome_message,\r\n buttonBackground: apiSettings.button_background,\r\n placeholder: apiSettings.placeholder,\r\n buttonPosition: apiSettings.button_position,\r\n buttonSize: buttonSizeMap[apiSettings.button_size] || 'md',\r\n chatWidth: apiSettings.chat_width,\r\n chatHeight: apiSettings.chat_height,\r\n showTypingIndicator: apiSettings.show_typing_indicator,\r\n initialOpen: apiSettings.initial_open,\r\n headerBackground: apiSettings.header_background,\r\n companyLogo: apiSettings.company_logo || undefined,\r\n companyName: apiSettings.company_name,\r\n };\r\n};\r\n","import { Message } from \"../types/chatbot\";\r\n\r\nexport const getMessageBubbleStyles = (isUser: boolean): React.CSSProperties => ({\r\n maxWidth: '80%',\r\n padding: '12px 16px',\r\n borderRadius: isUser ? '18px 18px 4px 18px' : '18px 18px 18px 4px',\r\n marginBottom: '8px',\r\n wordWrap: 'break-word',\r\n lineHeight: 1.4,\r\n fontSize: '14px',\r\n position: 'relative',\r\n ...(isUser ? {\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#ffffff',\r\n marginLeft: 'auto',\r\n marginRight: '0',\r\n } : {\r\n background: '#f8fafc',\r\n color: '#334155',\r\n border: '1px solid #e2e8f0',\r\n marginLeft: '0',\r\n marginRight: 'auto',\r\n })\r\n});\r\n\r\nexport const getTimeStyles = (isUser: boolean): React.CSSProperties => ({\r\n fontSize: '11px',\r\n opacity: 0.7,\r\n marginTop: '4px',\r\n textAlign: isUser ? 'right' : 'left',\r\n});\r\n\r\nexport const getMarkdownStyles = (): React.CSSProperties => ({\r\n lineHeight: 1.6,\r\n});\r\n\r\nexport const getMarkdownElementStyles = (isUser: boolean): string => `\r\n .markdown-content p {\r\n margin: 0 0 12px 0;\r\n line-height: 1.6;\r\n }\r\n .markdown-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n .markdown-content ul {\r\n margin: 12px 0 16px 0;\r\n padding-left: 0;\r\n list-style: none;\r\n }\r\n .markdown-content li {\r\n margin-bottom: 12px;\r\n line-height: 1.6;\r\n padding: 12px 16px;\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#ffffff'};\r\n border-radius: 12px;\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.2)' : '#e2e8f0'};\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\r\n position: relative;\r\n transition: all 0.2s ease;\r\n }\r\n .markdown-content li:hover {\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n }\r\n .markdown-content li::before {\r\n content: \"•\";\r\n color: ${isUser ? '#ffffff' : '#667eea'};\r\n font-weight: bold;\r\n font-size: 18px;\r\n position: absolute;\r\n left: -8px;\r\n top: 12px;\r\n }\r\n .markdown-content li strong {\r\n display: block;\r\n font-size: 15px;\r\n margin-bottom: 4px;\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n }\r\n .markdown-content li em {\r\n display: block;\r\n font-size: 13px;\r\n opacity: 0.8;\r\n margin-top: 4px;\r\n }\r\n .markdown-content strong {\r\n font-weight: 600;\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n }\r\n .markdown-content em {\r\n font-style: italic;\r\n opacity: 0.9;\r\n }\r\n .markdown-content code {\r\n background: ${isUser ? 'rgba(255,255,255,0.2)' : '#f1f5f9'};\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\r\n font-size: 13px;\r\n }\r\n .markdown-content pre {\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#f8fafc'};\r\n padding: 12px;\r\n border-radius: 8px;\r\n overflow-x: auto;\r\n margin: 8px 0;\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.2)' : '#e2e8f0'};\r\n }\r\n .markdown-content pre code {\r\n background: none;\r\n padding: 0;\r\n }\r\n .markdown-content blockquote {\r\n border-left: 3px solid ${isUser ? 'rgba(255,255,255,0.5)' : '#cbd5e1'};\r\n padding-left: 12px;\r\n margin: 8px 0;\r\n opacity: 0.8;\r\n }\r\n .markdown-content h1, .markdown-content h2, .markdown-content h3 {\r\n margin: 16px 0 8px 0;\r\n font-weight: 600;\r\n }\r\n .markdown-content h1 {\r\n font-size: 18px;\r\n }\r\n .markdown-content h2 {\r\n font-size: 16px;\r\n }\r\n .markdown-content h3 {\r\n font-size: 15px;\r\n }\r\n .markdown-content table {\r\n border-collapse: collapse;\r\n width: 100%;\r\n margin: 8px 0;\r\n }\r\n .markdown-content th, .markdown-content td {\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.3)' : '#e2e8f0'};\r\n padding: 8px 12px;\r\n text-align: left;\r\n }\r\n .markdown-content th {\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#f8fafc'};\r\n font-weight: 600;\r\n }\r\n \r\n /* Enhanced list styling */\r\n .markdown-content li {\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n \r\n .markdown-content li::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 4px;\r\n height: 100%;\r\n background: linear-gradient(135deg, ${isUser ? '#ffffff' : '#667eea'}, ${isUser ? 'rgba(255,255,255,0.5)' : '#764ba2'});\r\n border-radius: 0 2px 2px 0;\r\n }\r\n \r\n /* Product name styling */\r\n .markdown-content li strong:first-child {\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n font-size: 16px;\r\n font-weight: 700;\r\n display: block;\r\n margin-bottom: 8px;\r\n }\r\n \r\n /* Product details styling */\r\n .markdown-content li strong:not(:first-child) {\r\n color: ${isUser ? '#ffffff' : '#059669'};\r\n font-size: 13px;\r\n font-weight: 600;\r\n margin-right: 8px;\r\n }\r\n \r\n /* Add some spacing between product details */\r\n .markdown-content li br + * {\r\n margin-top: 4px;\r\n }\r\n \r\n /* Hover effect enhancement */\r\n .markdown-content li:hover::after {\r\n width: 6px;\r\n background: linear-gradient(135deg, ${isUser ? '#ffffff' : '#667eea'}, ${isUser ? '#ffffff' : '#764ba2'});\r\n }\r\n`;\r\n\r\nexport const getMessageContainerStyles = (isUser: boolean): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: isUser ? 'flex-end' : 'flex-start',\r\n width: '100%',\r\n});\r\n","export const getInputContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n gap: '12px',\r\n padding: '16px',\r\n background: '#ffffff',\r\n borderTop: '1px solid #e2e8f0',\r\n borderRadius: '0 0 12px 12px',\r\n});\r\n\r\nexport const getTextareaStyles = (isLoading: boolean): React.CSSProperties => ({\r\n flex: 1,\r\n minHeight: '44px',\r\n maxHeight: '120px',\r\n padding: '12px 16px',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '22px',\r\n fontSize: '14px',\r\n lineHeight: 1.4,\r\n resize: 'none',\r\n outline: 'none',\r\n transition: 'border-color 0.2s ease, box-shadow 0.2s ease',\r\n fontFamily: 'inherit',\r\n background: '#f8fafc',\r\n color: '#334155',\r\n ...(isLoading ? {\r\n opacity: 0.6,\r\n cursor: 'not-allowed'\r\n } : {})\r\n});\r\n\r\nexport const getSendButtonStyles = (isLoading: boolean, hasMessage: boolean): React.CSSProperties => ({\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n background: isLoading || !hasMessage ? '#e2e8f0' : 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#ffffff',\r\n cursor: isLoading || !hasMessage ? 'not-allowed' : 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s ease',\r\n fontSize: '16px',\r\n});\r\n","export const getHeaderStyles = (headerBackground: string): React.CSSProperties => ({\r\n padding: '16px 20px',\r\n background: headerBackground,\r\n color: '#ffffff',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n});\r\n\r\nexport const getLogoContainerStyles = (): React.CSSProperties => ({\r\n width: '40px',\r\n height: '40px',\r\n borderRadius: '50%',\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '18px',\r\n overflow: 'hidden',\r\n});\r\n\r\nexport const getLogoImageStyles = (): React.CSSProperties => ({\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n borderRadius: '50%',\r\n});\r\n\r\nexport const getLogoTextStyles = (): React.CSSProperties => ({\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const getCompanyNameStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n fontSize: '16px',\r\n fontWeight: 600,\r\n});\r\n\r\nexport const getStatusTextStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n fontSize: '12px',\r\n opacity: 0.8,\r\n});\r\n","export const getButtonSizes = () => ({\r\n sm: { width: '50px', height: '50px', fontSize: '20px' },\r\n md: { width: '60px', height: '60px', fontSize: '24px' },\r\n lg: { width: '70px', height: '70px', fontSize: '28px' }\r\n});\r\n\r\nexport const getFloatingButtonStyles = (\r\n buttonPosition: 'bottom-left' | 'bottom-right',\r\n buttonSize: 'sm' | 'md' | 'lg',\r\n buttonBackground: string,\r\n isOpen: boolean\r\n): React.CSSProperties => {\r\n const buttonSizes = getButtonSizes();\r\n const buttonSizeStyle = buttonSizes[buttonSize];\r\n\r\n return {\r\n position: 'fixed',\r\n [buttonPosition === 'bottom-left' ? 'left' : 'right']: '20px',\r\n bottom: '20px',\r\n width: buttonSizeStyle.width,\r\n height: buttonSizeStyle.height,\r\n borderRadius: '50%',\r\n background: buttonBackground,\r\n border: 'none',\r\n color: '#ffffff',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: buttonSizeStyle.fontSize,\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n transition: 'all 0.3s ease',\r\n zIndex: 1000,\r\n transform: isOpen ? 'scale(0.9)' : 'scale(1)',\r\n };\r\n};\r\n\r\nexport const getChatContainerStyles = (\r\n buttonPosition: 'bottom-left' | 'bottom-right',\r\n chatWidth: string,\r\n chatHeight: string,\r\n isOpen: boolean\r\n): React.CSSProperties => ({\r\n position: 'fixed',\r\n [buttonPosition === 'bottom-left' ? 'left' : 'right']: '20px',\r\n bottom: '90px',\r\n width: chatWidth,\r\n height: chatHeight,\r\n zIndex: 9999999,\r\n transform: isOpen ? 'translateY(0) scale(1)' : 'translateY(20px) scale(0.95)',\r\n opacity: isOpen ? 1 : 0,\r\n visibility: isOpen ? 'visible' : 'hidden',\r\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\r\n transformOrigin: buttonPosition === 'bottom-left' ? 'bottom left' : 'bottom right',\r\n});\r\n\r\nexport const getOverlayStyles = (isOpen: boolean): React.CSSProperties => ({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: 'rgba(0, 0, 0, 0.1)',\r\n zIndex: 998,\r\n opacity: isOpen ? 1 : 0,\r\n visibility: isOpen ? 'visible' : 'hidden',\r\n transition: 'all 0.3s ease',\r\n});\r\n\r\nexport const getChatbotContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n background: '#ffffff',\r\n borderRadius: '12px',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\r\n border: '1px solid #e2e8f0',\r\n overflow: 'hidden',\r\n});\r\n\r\nexport const getMessagesContainerStyles = (): React.CSSProperties => ({\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px',\r\n background: '#f8fafc',\r\n});\r\n\r\nexport const getEmptyStateStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n color: '#64748b',\r\n textAlign: 'center',\r\n padding: '40px 20px',\r\n});\r\n","export const getLoadingSpinnerStyles = (): React.CSSProperties => ({\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid transparent',\r\n borderTop: '2px solid currentColor',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite',\r\n});\r\n","\"use client\"\r\nimport { AizekChatBotProps, Message, BackendConfig } from \"../types/chatbot\";\r\nimport { useChatbot } from \"../hooks/useChatbot\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport ReactMarkdown from 'react-markdown';\r\nimport remarkGfm from 'remark-gfm';\r\nimport { fetchChatWidgetSettings, mapApiSettingsToConfig } from \"../services/chatWidgetApi\";\r\nimport { getMessageBubbleStyles, getTimeStyles, getMarkdownStyles, getMarkdownElementStyles, getMessageContainerStyles, getInputContainerStyles, getTextareaStyles, getSendButtonStyles, getHeaderStyles, getLogoContainerStyles, getLogoImageStyles, getLogoTextStyles, getCompanyNameStyles, getStatusTextStyles, getFloatingButtonStyles, getChatContainerStyles, getOverlayStyles, getChatbotContainerStyles, getMessagesContainerStyles, getEmptyStateStyles, getLoadingSpinnerStyles } from \"../styles\";\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({ clientId, userToken }) => {\r\n const defaultConfig: BackendConfig = {\r\n welcomeMessage: 'Merhaba! Size nasıl yardımcı olabilirim?',\r\n buttonBackground: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n placeholder: \"Mesajınızı yazın...\",\r\n buttonPosition: 'bottom-left',\r\n buttonSize: 'md',\r\n chatWidth: '400px',\r\n chatHeight: '600px',\r\n showTypingIndicator: true,\r\n initialOpen: true,\r\n headerBackground: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n companyLogo: undefined,\r\n companyName: 'AI Asistan',\r\n };\r\n\r\n const [config, setConfig] = useState<BackendConfig>(defaultConfig);\r\n const [isConfigLoading, setIsConfigLoading] = useState(true);\r\n const [finalMcpUrl, setFinalMcpUrl] = useState<string>('');\r\n const [apiKey, setApiKey] = useState<string>('');\r\n const { welcomeMessage, buttonBackground, placeholder, buttonPosition, buttonSize, chatWidth, chatHeight, showTypingIndicator, initialOpen, headerBackground, companyLogo, companyName } = config;\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const apiResponse = await fetchChatWidgetSettings(clientId);\r\n\r\n setFinalMcpUrl(apiResponse.data.mcp_url);\r\n setApiKey(apiResponse.data.openai_key || '');\r\n\r\n const apiConfig = mapApiSettingsToConfig(apiResponse.data.chat_widget_settings);\r\n if (apiConfig) {\r\n setConfig(apiConfig);\r\n }\r\n } catch (error) {\r\n console.error('Failed to load chat widget config:', error);\r\n setFinalMcpUrl('');\r\n } finally {\r\n setIsConfigLoading(false);\r\n }\r\n };\r\n\r\n loadConfig();\r\n }, [clientId]);\r\n\r\n const internalChatbot = useChatbot({ mcpUrl: finalMcpUrl, apiKey: apiKey, userToken });\r\n\r\n const messages = internalChatbot.messages;\r\n const isLoading = internalChatbot.isLoading;\r\n const handleSendMessage = internalChatbot.sendMessage;\r\n\r\n const toggleChat = () => {\r\n const newIsOpen = !isOpen;\r\n setIsOpen(newIsOpen);\r\n };\r\n\r\n useEffect(() => {\r\n setIsOpen(initialOpen);\r\n }, [initialOpen]);\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }, [messages]);\r\n\r\n\r\n\r\n const MessageBubble: React.FC<{ message: Message }> = ({ message }) => {\r\n const isUser = message.role === 'user';\r\n\r\n return (\r\n <div style={getMessageContainerStyles(isUser)}>\r\n <style>{getMarkdownElementStyles(isUser)}</style>\r\n <div style={getMessageBubbleStyles(isUser)}>\r\n <div style={getMarkdownStyles()} className=\"markdown-content\">\r\n <ReactMarkdown remarkPlugins={[remarkGfm]}>\r\n {message.content}\r\n </ReactMarkdown>\r\n </div>\r\n {message.isTyping && (\r\n <div style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n marginLeft: '8px'\r\n }}>\r\n <TypingDots />\r\n </div>\r\n )}\r\n </div>\r\n <div style={getTimeStyles(isUser)}>\r\n {message.timestamp.toLocaleTimeString('tr-TR', {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const TypingDots: React.FC = () => {\r\n const [dots, setDots] = useState('');\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n setDots(prev => {\r\n if (prev === '...') return '';\r\n return prev + '.';\r\n });\r\n }, 500);\r\n\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n return <span>{dots}</span>;\r\n };\r\n\r\n const ChatInput: React.FC = () => {\r\n const [message, setMessage] = useState(\"\");\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (message.trim() && !isLoading) {\r\n handleSendMessage(message.trim());\r\n setMessage(\"\");\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSubmit(e);\r\n }\r\n };\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n setMessage(e.target.value);\r\n\r\n const textarea = e.target;\r\n textarea.style.height = 'auto';\r\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\r\n };\r\n\r\n return (\r\n <form onSubmit={handleSubmit} style={getInputContainerStyles()}>\r\n <textarea\r\n ref={textareaRef}\r\n value={message}\r\n onChange={handleInputChange}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n disabled={isLoading}\r\n style={getTextareaStyles(isLoading)}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !message.trim()}\r\n style={getSendButtonStyles(isLoading, !!message.trim())}\r\n onMouseEnter={(e) => {\r\n if (!isLoading && message.trim()) {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n >\r\n {isLoading ? (\r\n <LoadingSpinner />\r\n ) : (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\r\n </svg>\r\n )}\r\n </button>\r\n </form>\r\n );\r\n };\r\n\r\n const LoadingSpinner: React.FC = () => {\r\n return <div style={getLoadingSpinnerStyles()} />;\r\n };\r\n\r\n\r\n // Show loading state while config is being fetched\r\n if (isConfigLoading) {\r\n return (\r\n <div style={getFloatingButtonStyles(buttonPosition, buttonSize, buttonBackground, false)}>\r\n <div style={getLoadingSpinnerStyles()} />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n style={getOverlayStyles(isOpen)}\r\n onClick={toggleChat}\r\n className=\"floating-chat-overlay\"\r\n />\r\n )}\r\n\r\n <div style={getChatContainerStyles(buttonPosition, chatWidth, chatHeight, isOpen)} className=\"floating-chat-container\">\r\n <div style={getChatbotContainerStyles()}>\r\n <div style={getHeaderStyles(headerBackground)}>\r\n <div style={getLogoContainerStyles()}>\r\n {companyLogo ? (\r\n companyLogo.startsWith('http') || companyLogo.startsWith('data:') ? (\r\n <img\r\n src={companyLogo}\r\n alt=\"Company Logo\"\r\n style={getLogoImageStyles()}\r\n />\r\n ) : (\r\n <span style={getLogoTextStyles()}>\r\n {companyLogo}\r\n </span>\r\n )\r\n ) : (\r\n '🤖'\r\n )}\r\n </div>\r\n <div>\r\n <h3 style={getCompanyNameStyles()}>\r\n {companyName}\r\n </h3>\r\n <p style={getStatusTextStyles()}>\r\n {isLoading ? 'Yazıyor...' : 'Çevrimiçi'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div style={getMessagesContainerStyles()}>\r\n {messages.length === 0 ? (\r\n <div style={getEmptyStateStyles()}>\r\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>💬</div>\r\n <h4 style={{ margin: '0 0 8px 0', fontSize: '18px' }}>\r\n {welcomeMessage}\r\n </h4>\r\n <p style={{ margin: 0, fontSize: '14px', opacity: 0.8 }}>\r\n Aşağıdaki alana mesajınızı yazarak başlayabilirsiniz.\r\n </p>\r\n </div>\r\n ) : (\r\n messages.map((message) => (\r\n <MessageBubble key={message.id} message={message} />\r\n ))\r\n )}\r\n\r\n {showTypingIndicator && isLoading && messages.length > 0 && (\r\n <MessageBubble\r\n message={{\r\n id: 'typing',\r\n content: '',\r\n role: 'assistant',\r\n timestamp: new Date(),\r\n isTyping: true\r\n }}\r\n />\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput />\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={toggleChat}\r\n style={getFloatingButtonStyles(buttonPosition, buttonSize, buttonBackground, isOpen)}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = isOpen ? 'scale(0.85)' : 'scale(1.1)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.25)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = isOpen ? 'scale(0.9)' : 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n className=\"floating-chat-button\"\r\n aria-label={isOpen ? 'Chati kapat' : 'Chati aç'}\r\n >\r\n {isOpen ? (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4l4 4 4-4h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\" />\r\n </svg>\r\n )}\r\n </button>\r\n </>\r\n );\r\n};"]}
1
+ {"version":3,"sources":["../src/utils/cx.ts","../src/components/Button.tsx","../src/hooks/useChatbot.ts","../src/services/chatWidgetApi.ts","../src/styles/messageStyles.ts","../src/styles/inputStyles.ts","../src/styles/headerStyles.ts","../src/styles/containerStyles.ts","../src/styles/loadingStyles.ts","../src/components/FloatingChat.tsx"],"names":["React","jsx","OpenAI","useState","useEffect","useRef","jsxs","ReactMarkdown","remarkGfm","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export function cx(...args: Array<string | false | null | undefined>): string {\r\n return args.filter(Boolean).join(\" \");\r\n}","import * as React from \"react\";\r\nimport { cx } from \"../utils/cx\";\r\nimport { ButtonProps, ButtonSize, ButtonVariant } from \"../types/button\";\r\n\r\n\r\n\r\n\r\nconst base: React.CSSProperties = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: 12,\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n transition: \"background-color .2s ease, color .2s ease, border-color .2s ease\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n};\r\n\r\n\r\nconst sizes: Record<ButtonSize, React.CSSProperties> = {\r\n sm: { height: 36, padding: \"0 12px\", fontSize: 14 },\r\n md: { height: 40, padding: \"0 16px\", fontSize: 16 },\r\n lg: { height: 44, padding: \"0 20px\", fontSize: 18 },\r\n};\r\n\r\n\r\nconst palette = {\r\n brand: {\r\n primary: \"#2563eb\",\r\n primaryHover: \"#1d4ed8\",\r\n },\r\n};\r\n\r\n\r\nfunction styleFor(variant: ButtonVariant): React.CSSProperties {\r\n switch (variant) {\r\n case \"outline\":\r\n return {\r\n background: \"transparent\",\r\n color: palette.brand.primary,\r\n border: `1px solid ${palette.brand.primary}`,\r\n };\r\n case \"ghost\":\r\n return {\r\n background: \"transparent\",\r\n color: palette.brand.primary,\r\n border: \"1px solid transparent\",\r\n };\r\n default:\r\n return {\r\n background: palette.brand.primary,\r\n color: \"#fff\",\r\n border: \"1px solid transparent\",\r\n };\r\n }\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ variant = \"primary\", size = \"md\", style, className, onMouseEnter, onMouseLeave, ...props }, ref) => {\r\n const [hover, setHover] = React.useState(false);\r\n\r\n\r\n const hoverStyle: React.CSSProperties =\r\n variant === \"primary\"\r\n ? { background: hover ? palette.brand.primaryHover : palette.brand.primary }\r\n : variant === \"outline\"\r\n ? { borderColor: hover ? palette.brand.primaryHover : palette.brand.primary }\r\n : { background: hover ? \"rgba(37, 99, 235, 0.08)\" : \"transparent\" };\r\n\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n className={cx(\"rui-btn\", className)}\r\n style={{ ...base, ...sizes[size], ...styleFor(variant), ...(hover ? hoverStyle : {}), ...style }}\r\n onMouseEnter={(e) => {\r\n setHover(true);\r\n onMouseEnter?.(e);\r\n }}\r\n onMouseLeave={(e) => {\r\n setHover(false);\r\n onMouseLeave?.(e);\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = \"Button\";","import { useState } from 'react';\r\nimport { Message } from '../types/chatbot';\r\nimport OpenAI from \"openai\";\r\n\r\n\r\nexport interface UseChatbotOptions {\r\n apiKey?: string;\r\n mcpUrl?: string;\r\n userToken?: string;\r\n}\r\n\r\nexport const useChatbot = (options: UseChatbotOptions = {}) => {\r\n const { mcpUrl, apiKey } = options;\r\n const client = new OpenAI({ apiKey: apiKey, dangerouslyAllowBrowser: true });\r\n const [responseId, setResponseId] = useState<string | null>(null);\r\n\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const generateId = () => {\r\n return Date.now().toString() + Math.random().toString(36).substr(2, 9);\r\n };\r\n\r\n const addMessage = (content: string, role: 'user' | 'assistant') => {\r\n const newMessage: Message = {\r\n id: generateId(),\r\n content,\r\n role,\r\n timestamp: new Date(),\r\n };\r\n setMessages(prev => [...prev, newMessage]);\r\n return newMessage;\r\n };\r\n\r\n const sendMessage = async (message: string) => {\r\n if (!message.trim() || isLoading) return;\r\n\r\n addMessage(message, 'user');\r\n setIsLoading(true);\r\n\r\n\r\n try {\r\n let resp: OpenAI.Responses.Response & { _request_id?: string | null; };\r\n if (options.userToken) {\r\n resp = await client.responses.create({\r\n model: \"gpt-5\",\r\n tools: [\r\n {\r\n type: \"mcp\",\r\n server_label: \"aizek-mcp\",\r\n server_url: mcpUrl,\r\n require_approval: \"never\",\r\n headers: {\r\n Authorization: `Bearer ${options.userToken}`\r\n }\r\n\r\n },\r\n ],\r\n input: message,\r\n previous_response_id: responseId || undefined,\r\n });\r\n\r\n } else {\r\n resp = await client.responses.create({\r\n model: \"gpt-5\",\r\n tools: [\r\n {\r\n type: \"mcp\",\r\n server_label: \"aizek-mcp\",\r\n server_url: mcpUrl,\r\n require_approval: \"never\",\r\n\r\n },\r\n ],\r\n input: message,\r\n previous_response_id: responseId || undefined,\r\n });\r\n }\r\n\r\n setResponseId(resp.id);\r\n\r\n\r\n let responseText = '';\r\n\r\n if (resp && Array.isArray(resp)) {\r\n\r\n // Find the message type in the response\r\n const messageItem = resp.find(item => item.type === \"message\");\r\n\r\n if (messageItem && messageItem.content && Array.isArray(messageItem.content)) {\r\n\r\n const textContent = messageItem.content.find((content: any) => content.type === \"output_text\");\r\n\r\n if (textContent && textContent.text) {\r\n responseText = textContent.text;\r\n }\r\n }\r\n } else {\r\n\r\n if (resp && resp.output_text) {\r\n responseText = resp.output_text;\r\n }\r\n else if (typeof resp === 'string') {\r\n responseText = resp;\r\n }\r\n }\r\n\r\n if (!responseText) {\r\n responseText = `\"${message}\" mesajınızı aldım. Size nasıl yardımcı olabilirim?`;\r\n }\r\n\r\n // Add assistant response\r\n addMessage(responseText, 'assistant');\r\n setIsLoading(false);\r\n\r\n } catch (error) {\r\n console.error('Error sending message:', error);\r\n addMessage('Üzgünüm, bir hata oluştu. Lütfen tekrar deneyin.', 'assistant');\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n\r\n\r\n return {\r\n messages,\r\n isLoading,\r\n sendMessage,\r\n addMessage,\r\n };\r\n};\r\n","import { ChatWidgetApiResponse, ChatWidgetSettings } from '../types/chatbot';\r\n\r\nconst API_BASE_URL = 'https://api.elviz24.com';\r\n\r\nexport const fetchChatWidgetSettings = async (clientId: string): Promise<ChatWidgetApiResponse> => {\r\n try {\r\n const response = await fetch(`${API_BASE_URL}/ChatWidgetSettings/GetByClientId?client_id=${clientId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const data: ChatWidgetApiResponse = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching chat widget settings:', error);\r\n throw error;\r\n }\r\n};\r\n\r\nexport const mapApiSettingsToConfig = (apiSettings: ChatWidgetSettings | null) => {\r\n if (!apiSettings) {\r\n return null;\r\n }\r\n\r\n // Map API button_size to our internal format\r\n const buttonSizeMap = {\r\n 'small': 'sm' as const,\r\n 'medium': 'md' as const,\r\n 'large': 'lg' as const,\r\n };\r\n\r\n return {\r\n welcomeMessage: apiSettings.welcome_message,\r\n buttonBackground: apiSettings.button_background,\r\n placeholder: apiSettings.placeholder,\r\n buttonPosition: apiSettings.button_position,\r\n buttonSize: buttonSizeMap[apiSettings.button_size] || 'md',\r\n chatWidth: apiSettings.chat_width,\r\n chatHeight: apiSettings.chat_height,\r\n showTypingIndicator: apiSettings.show_typing_indicator,\r\n initialOpen: apiSettings.initial_open,\r\n headerBackground: apiSettings.header_background,\r\n companyLogo: apiSettings.company_logo || undefined,\r\n companyName: apiSettings.company_name,\r\n };\r\n};\r\n","import { Message } from \"../types/chatbot\";\r\n\r\nexport const getMessageBubbleStyles = (isUser: boolean): React.CSSProperties => ({\r\n maxWidth: '80%',\r\n padding: '12px 16px',\r\n borderRadius: isUser ? '18px 18px 4px 18px' : '18px 18px 18px 4px',\r\n marginBottom: '8px',\r\n wordWrap: 'break-word',\r\n lineHeight: 1.4,\r\n fontSize: '14px',\r\n position: 'relative',\r\n ...(isUser ? {\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#ffffff',\r\n marginLeft: 'auto',\r\n marginRight: '0',\r\n } : {\r\n background: '#f8fafc',\r\n color: '#334155',\r\n border: '1px solid #e2e8f0',\r\n marginLeft: '0',\r\n marginRight: 'auto',\r\n })\r\n});\r\n\r\nexport const getTimeStyles = (isUser: boolean): React.CSSProperties => ({\r\n fontSize: '11px',\r\n opacity: 0.7,\r\n marginTop: '4px',\r\n textAlign: isUser ? 'right' : 'left',\r\n});\r\n\r\nexport const getMarkdownStyles = (): React.CSSProperties => ({\r\n lineHeight: 1.6,\r\n});\r\n\r\nexport const getMarkdownElementStyles = (isUser: boolean): string => `\r\n .markdown-content p {\r\n margin: 0 0 12px 0;\r\n line-height: 1.6;\r\n }\r\n .markdown-content p:last-child {\r\n margin-bottom: 0;\r\n }\r\n .markdown-content ul {\r\n margin: 12px 0 16px 0;\r\n padding-left: 0;\r\n list-style: none;\r\n }\r\n .markdown-content li {\r\n margin-bottom: 12px;\r\n line-height: 1.6;\r\n padding: 12px 16px;\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#ffffff'};\r\n border-radius: 12px;\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.2)' : '#e2e8f0'};\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\r\n position: relative;\r\n transition: all 0.2s ease;\r\n }\r\n .markdown-content li:hover {\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n }\r\n .markdown-content li::before {\r\n content: \"•\";\r\n color: ${isUser ? '#ffffff' : '#667eea'};\r\n font-weight: bold;\r\n font-size: 18px;\r\n position: absolute;\r\n left: -8px;\r\n top: 12px;\r\n }\r\n .markdown-content li strong {\r\n display: block;\r\n font-size: 15px;\r\n margin-bottom: 4px;\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n }\r\n .markdown-content li em {\r\n display: block;\r\n font-size: 13px;\r\n opacity: 0.8;\r\n margin-top: 4px;\r\n }\r\n .markdown-content strong {\r\n font-weight: 600;\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n }\r\n .markdown-content em {\r\n font-style: italic;\r\n opacity: 0.9;\r\n }\r\n .markdown-content code {\r\n background: ${isUser ? 'rgba(255,255,255,0.2)' : '#f1f5f9'};\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\r\n font-size: 13px;\r\n }\r\n .markdown-content pre {\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#f8fafc'};\r\n padding: 12px;\r\n border-radius: 8px;\r\n overflow-x: auto;\r\n margin: 8px 0;\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.2)' : '#e2e8f0'};\r\n }\r\n .markdown-content pre code {\r\n background: none;\r\n padding: 0;\r\n }\r\n .markdown-content blockquote {\r\n border-left: 3px solid ${isUser ? 'rgba(255,255,255,0.5)' : '#cbd5e1'};\r\n padding-left: 12px;\r\n margin: 8px 0;\r\n opacity: 0.8;\r\n }\r\n .markdown-content h1, .markdown-content h2, .markdown-content h3 {\r\n margin: 16px 0 8px 0;\r\n font-weight: 600;\r\n }\r\n .markdown-content h1 {\r\n font-size: 18px;\r\n }\r\n .markdown-content h2 {\r\n font-size: 16px;\r\n }\r\n .markdown-content h3 {\r\n font-size: 15px;\r\n }\r\n .markdown-content table {\r\n border-collapse: collapse;\r\n width: 100%;\r\n margin: 8px 0;\r\n }\r\n .markdown-content th, .markdown-content td {\r\n border: 1px solid ${isUser ? 'rgba(255,255,255,0.3)' : '#e2e8f0'};\r\n padding: 8px 12px;\r\n text-align: left;\r\n }\r\n .markdown-content th {\r\n background: ${isUser ? 'rgba(255,255,255,0.1)' : '#f8fafc'};\r\n font-weight: 600;\r\n }\r\n \r\n /* Enhanced list styling */\r\n .markdown-content li {\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n \r\n .markdown-content li::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 4px;\r\n height: 100%;\r\n background: linear-gradient(135deg, ${isUser ? '#ffffff' : '#667eea'}, ${isUser ? 'rgba(255,255,255,0.5)' : '#764ba2'});\r\n border-radius: 0 2px 2px 0;\r\n }\r\n \r\n /* Product name styling */\r\n .markdown-content li strong:first-child {\r\n color: ${isUser ? '#ffffff' : '#1e293b'};\r\n font-size: 16px;\r\n font-weight: 700;\r\n display: block;\r\n margin-bottom: 8px;\r\n }\r\n \r\n /* Product details styling */\r\n .markdown-content li strong:not(:first-child) {\r\n color: ${isUser ? '#ffffff' : '#059669'};\r\n font-size: 13px;\r\n font-weight: 600;\r\n margin-right: 8px;\r\n }\r\n \r\n /* Add some spacing between product details */\r\n .markdown-content li br + * {\r\n margin-top: 4px;\r\n }\r\n \r\n /* Hover effect enhancement */\r\n .markdown-content li:hover::after {\r\n width: 6px;\r\n background: linear-gradient(135deg, ${isUser ? '#ffffff' : '#667eea'}, ${isUser ? '#ffffff' : '#764ba2'});\r\n }\r\n`;\r\n\r\nexport const getMessageContainerStyles = (isUser: boolean): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: isUser ? 'flex-end' : 'flex-start',\r\n width: '100%',\r\n});\r\n","export const getInputContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n gap: '12px',\r\n padding: '16px',\r\n background: '#ffffff',\r\n borderTop: '1px solid #e2e8f0',\r\n borderRadius: '0 0 12px 12px',\r\n});\r\n\r\nexport const getTextareaStyles = (isLoading: boolean): React.CSSProperties => ({\r\n flex: 1,\r\n minHeight: '44px',\r\n maxHeight: '120px',\r\n padding: '12px 16px',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '22px',\r\n fontSize: '14px',\r\n lineHeight: 1.4,\r\n resize: 'none',\r\n outline: 'none',\r\n transition: 'border-color 0.2s ease, box-shadow 0.2s ease',\r\n fontFamily: 'inherit',\r\n background: '#f8fafc',\r\n color: '#334155',\r\n ...(isLoading ? {\r\n opacity: 0.6,\r\n cursor: 'not-allowed'\r\n } : {})\r\n});\r\n\r\nexport const getSendButtonStyles = (isLoading: boolean, hasMessage: boolean): React.CSSProperties => ({\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n background: isLoading || !hasMessage ? '#e2e8f0' : 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#ffffff',\r\n cursor: isLoading || !hasMessage ? 'not-allowed' : 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s ease',\r\n fontSize: '16px',\r\n});\r\n","export const getHeaderStyles = (headerBackground: string): React.CSSProperties => ({\r\n padding: '16px 20px',\r\n background: headerBackground,\r\n color: '#ffffff',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n});\r\n\r\nexport const getLogoContainerStyles = (): React.CSSProperties => ({\r\n width: '40px',\r\n height: '40px',\r\n borderRadius: '50%',\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '18px',\r\n overflow: 'hidden',\r\n});\r\n\r\nexport const getLogoImageStyles = (): React.CSSProperties => ({\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n borderRadius: '50%',\r\n});\r\n\r\nexport const getLogoTextStyles = (): React.CSSProperties => ({\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const getCompanyNameStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n fontSize: '16px',\r\n fontWeight: 600,\r\n});\r\n\r\nexport const getStatusTextStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n fontSize: '12px',\r\n opacity: 0.8,\r\n});\r\n","export const getButtonSizes = () => ({\r\n sm: { width: '50px', height: '50px', fontSize: '20px' },\r\n md: { width: '60px', height: '60px', fontSize: '24px' },\r\n lg: { width: '70px', height: '70px', fontSize: '28px' }\r\n});\r\n\r\nexport const getFloatingButtonStyles = (\r\n buttonPosition: 'bottom-left' | 'bottom-right',\r\n buttonSize: 'sm' | 'md' | 'lg',\r\n buttonBackground: string,\r\n isOpen: boolean\r\n): React.CSSProperties => {\r\n const buttonSizes = getButtonSizes();\r\n const buttonSizeStyle = buttonSizes[buttonSize];\r\n\r\n return {\r\n position: 'fixed',\r\n [buttonPosition === 'bottom-left' ? 'left' : 'right']: '20px',\r\n bottom: '20px',\r\n width: buttonSizeStyle.width,\r\n height: buttonSizeStyle.height,\r\n borderRadius: '50%',\r\n background: buttonBackground,\r\n border: 'none',\r\n color: '#ffffff',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: buttonSizeStyle.fontSize,\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n transition: 'all 0.3s ease',\r\n zIndex: 1000,\r\n transform: isOpen ? 'scale(0.9)' : 'scale(1)',\r\n };\r\n};\r\n\r\nexport const getChatContainerStyles = (\r\n buttonPosition: 'bottom-left' | 'bottom-right',\r\n chatWidth: string,\r\n chatHeight: string,\r\n isOpen: boolean\r\n): React.CSSProperties => ({\r\n position: 'fixed',\r\n [buttonPosition === 'bottom-left' ? 'left' : 'right']: '20px',\r\n bottom: '90px',\r\n width: chatWidth,\r\n height: chatHeight,\r\n zIndex: 9999999,\r\n transform: isOpen ? 'translateY(0) scale(1)' : 'translateY(20px) scale(0.95)',\r\n opacity: isOpen ? 1 : 0,\r\n visibility: isOpen ? 'visible' : 'hidden',\r\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\r\n transformOrigin: buttonPosition === 'bottom-left' ? 'bottom left' : 'bottom right',\r\n});\r\n\r\nexport const getOverlayStyles = (isOpen: boolean): React.CSSProperties => ({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: 'rgba(0, 0, 0, 0.1)',\r\n zIndex: 998,\r\n opacity: isOpen ? 1 : 0,\r\n visibility: isOpen ? 'visible' : 'hidden',\r\n transition: 'all 0.3s ease',\r\n});\r\n\r\nexport const getChatbotContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n background: '#ffffff',\r\n borderRadius: '12px',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\r\n border: '1px solid #e2e8f0',\r\n overflow: 'hidden',\r\n});\r\n\r\nexport const getMessagesContainerStyles = (): React.CSSProperties => ({\r\n flex: 1,\r\n overflowY: 'auto',\r\n padding: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px',\r\n background: '#f8fafc',\r\n});\r\n\r\nexport const getEmptyStateStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n color: '#64748b',\r\n textAlign: 'center',\r\n padding: '40px 20px',\r\n});\r\n","export const getLoadingSpinnerStyles = (): React.CSSProperties => ({\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid transparent',\r\n borderTop: '2px solid currentColor',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite',\r\n});\r\n","\"use client\"\r\nimport { AizekChatBotProps, Message, BackendConfig } from \"../types/chatbot\";\r\nimport { useChatbot } from \"../hooks/useChatbot\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport ReactMarkdown from 'react-markdown';\r\nimport remarkGfm from 'remark-gfm';\r\nimport { fetchChatWidgetSettings, mapApiSettingsToConfig } from \"../services/chatWidgetApi\";\r\nimport { getMessageBubbleStyles, getTimeStyles, getMarkdownStyles, getMarkdownElementStyles, getMessageContainerStyles, getInputContainerStyles, getTextareaStyles, getSendButtonStyles, getHeaderStyles, getLogoContainerStyles, getLogoImageStyles, getLogoTextStyles, getCompanyNameStyles, getStatusTextStyles, getFloatingButtonStyles, getChatContainerStyles, getOverlayStyles, getChatbotContainerStyles, getMessagesContainerStyles, getEmptyStateStyles, getLoadingSpinnerStyles } from \"../styles\";\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({ clientId, userToken }) => {\r\n const defaultConfig: BackendConfig = {\r\n welcomeMessage: 'Merhaba! Size nasıl yardımcı olabilirim?',\r\n buttonBackground: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n placeholder: \"Mesajınızı yazın...\",\r\n buttonPosition: 'bottom-left',\r\n buttonSize: 'md',\r\n chatWidth: '400px',\r\n chatHeight: '600px',\r\n showTypingIndicator: true,\r\n initialOpen: true,\r\n headerBackground: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n companyLogo: undefined,\r\n companyName: 'AI Asistan',\r\n };\r\n\r\n const [config, setConfig] = useState<BackendConfig>(defaultConfig);\r\n const [isConfigLoading, setIsConfigLoading] = useState(true);\r\n const [finalMcpUrl, setFinalMcpUrl] = useState<string>('');\r\n const [apiKey, setApiKey] = useState<string>('');\r\n const { welcomeMessage, buttonBackground, placeholder, buttonPosition, buttonSize, chatWidth, chatHeight, showTypingIndicator, initialOpen, headerBackground, companyLogo, companyName } = config;\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const apiResponse = await fetchChatWidgetSettings(clientId);\r\n\r\n setFinalMcpUrl(apiResponse.data.mcp_url);\r\n setApiKey(apiResponse.data.openai_key || '');\r\n\r\n const apiConfig = mapApiSettingsToConfig(apiResponse.data.chat_widget_settings);\r\n if (apiConfig) {\r\n setConfig(apiConfig);\r\n }\r\n } catch (error) {\r\n console.error('Failed to load chat widget config:', error);\r\n setFinalMcpUrl('');\r\n } finally {\r\n setIsConfigLoading(false);\r\n }\r\n };\r\n\r\n loadConfig();\r\n }, [clientId]);\r\n\r\n const internalChatbot = useChatbot({ mcpUrl: finalMcpUrl, apiKey: apiKey, userToken });\r\n\r\n const messages = internalChatbot.messages;\r\n const isLoading = internalChatbot.isLoading;\r\n const handleSendMessage = internalChatbot.sendMessage;\r\n\r\n const toggleChat = () => {\r\n const newIsOpen = !isOpen;\r\n setIsOpen(newIsOpen);\r\n };\r\n\r\n useEffect(() => {\r\n setIsOpen(initialOpen);\r\n }, [initialOpen]);\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }, [messages]);\r\n\r\n\r\n\r\n const MessageBubble: React.FC<{ message: Message }> = ({ message }) => {\r\n const isUser = message.role === 'user';\r\n\r\n return (\r\n <div style={getMessageContainerStyles(isUser)}>\r\n <style>{getMarkdownElementStyles(isUser)}</style>\r\n <div style={getMessageBubbleStyles(isUser)}>\r\n <div style={getMarkdownStyles()} className=\"markdown-content\">\r\n <ReactMarkdown remarkPlugins={[remarkGfm]}>\r\n {message.content}\r\n </ReactMarkdown>\r\n </div>\r\n {message.isTyping && (\r\n <div style={{\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n marginLeft: '8px'\r\n }}>\r\n <TypingDots />\r\n </div>\r\n )}\r\n </div>\r\n <div style={getTimeStyles(isUser)}>\r\n {message.timestamp.toLocaleTimeString('tr-TR', {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const TypingDots: React.FC = () => {\r\n const [dots, setDots] = useState('');\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n setDots(prev => {\r\n if (prev === '...') return '';\r\n return prev + '.';\r\n });\r\n }, 500);\r\n\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n return <span>{dots}</span>;\r\n };\r\n\r\n const ChatInput: React.FC = () => {\r\n const [message, setMessage] = useState(\"\");\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (message.trim() && !isLoading) {\r\n handleSendMessage(message.trim());\r\n setMessage(\"\");\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSubmit(e);\r\n }\r\n };\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n setMessage(e.target.value);\r\n\r\n const textarea = e.target;\r\n textarea.style.height = 'auto';\r\n textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px';\r\n };\r\n\r\n return (\r\n <form onSubmit={handleSubmit} style={getInputContainerStyles()}>\r\n <textarea\r\n ref={textareaRef}\r\n value={message}\r\n onChange={handleInputChange}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n disabled={isLoading}\r\n style={getTextareaStyles(isLoading)}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !message.trim()}\r\n style={getSendButtonStyles(isLoading, !!message.trim())}\r\n onMouseEnter={(e) => {\r\n if (!isLoading && message.trim()) {\r\n e.currentTarget.style.transform = 'scale(1.05)';\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = 'scale(1)';\r\n }}\r\n >\r\n {isLoading ? (\r\n <LoadingSpinner />\r\n ) : (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\r\n </svg>\r\n )}\r\n </button>\r\n </form>\r\n );\r\n };\r\n\r\n const LoadingSpinner: React.FC = () => {\r\n return <div style={getLoadingSpinnerStyles()} />;\r\n };\r\n\r\n\r\n // Show loading state while config is being fetched\r\n if (isConfigLoading) {\r\n return (\r\n <div style={getFloatingButtonStyles(buttonPosition, buttonSize, buttonBackground, false)}>\r\n <div style={getLoadingSpinnerStyles()} />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n style={getOverlayStyles(isOpen)}\r\n onClick={toggleChat}\r\n className=\"floating-chat-overlay\"\r\n />\r\n )}\r\n\r\n <div style={getChatContainerStyles(buttonPosition, chatWidth, chatHeight, isOpen)} className=\"floating-chat-container\">\r\n <div style={getChatbotContainerStyles()}>\r\n <div style={getHeaderStyles(headerBackground)}>\r\n <div style={getLogoContainerStyles()}>\r\n {companyLogo ? (\r\n companyLogo.startsWith('http') || companyLogo.startsWith('data:') ? (\r\n <img\r\n src={companyLogo}\r\n alt=\"Company Logo\"\r\n style={getLogoImageStyles()}\r\n />\r\n ) : (\r\n <span style={getLogoTextStyles()}>\r\n {companyLogo}\r\n </span>\r\n )\r\n ) : (\r\n '🤖'\r\n )}\r\n </div>\r\n <div>\r\n <h3 style={getCompanyNameStyles()}>\r\n {companyName}\r\n </h3>\r\n <p style={getStatusTextStyles()}>\r\n {isLoading ? 'Yazıyor...' : 'Çevrimiçi'}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div style={getMessagesContainerStyles()}>\r\n {messages.length === 0 ? (\r\n <div style={getEmptyStateStyles()}>\r\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>💬</div>\r\n <h4 style={{ margin: '0 0 8px 0', fontSize: '18px' }}>\r\n {welcomeMessage}\r\n </h4>\r\n <p style={{ margin: 0, fontSize: '14px', opacity: 0.8 }}>\r\n Aşağıdaki alana mesajınızı yazarak başlayabilirsiniz.\r\n </p>\r\n </div>\r\n ) : (\r\n messages.map((message) => (\r\n <MessageBubble key={message.id} message={message} />\r\n ))\r\n )}\r\n\r\n {showTypingIndicator && isLoading && messages.length > 0 && (\r\n <MessageBubble\r\n message={{\r\n id: 'typing',\r\n content: '',\r\n role: 'assistant',\r\n timestamp: new Date(),\r\n isTyping: true\r\n }}\r\n />\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput />\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={toggleChat}\r\n style={getFloatingButtonStyles(buttonPosition, buttonSize, buttonBackground, isOpen)}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = isOpen ? 'scale(0.85)' : 'scale(1.1)';\r\n e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.25)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.transform = isOpen ? 'scale(0.9)' : 'scale(1)';\r\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';\r\n }}\r\n className=\"floating-chat-button\"\r\n aria-label={isOpen ? 'Chati kapat' : 'Chati aç'}\r\n >\r\n {isOpen ? (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4l4 4 4-4h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\" />\r\n </svg>\r\n )}\r\n </button>\r\n </>\r\n );\r\n};"]}