aizek-chatbot 1.0.9 → 1.0.10
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.cjs +282 -118
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +281 -118
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -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/styles/alertStyles.ts","../src/components/FloatingChat.tsx"],"names":["React","jsx","OpenAI","useState","config","useEffect","useRef","jsxs","ReactMarkdown","remarkGfm","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AuthConfig, HeadersType } from \"../types/chatbot\";\r\n\r\nexport function cx(...args: Array<string | false | null | undefined>): string {\r\n return args.filter(Boolean).join(\" \");\r\n}\r\n\r\nexport function validateHeaders(\r\n headers: HeadersType,\r\n authConfig: AuthConfig,\r\n opts: { caseSensitive?: boolean; allowExtra?: boolean } = {}\r\n) {\r\n const { caseSensitive = false, allowExtra = false } = opts;\r\n\r\n const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [normalize(k), v.trim()]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [normalize(k), v.trim()]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\r\n\r\n const requiredSet = new Set(authKeys);\r\n\r\n const missingKeys = authKeys.filter(k => !headerKeys.includes(k));\r\n const extraKeys = headerKeys.filter(k => !requiredSet.has(k));\r\n\r\n // 🔍 1. Gerekli tüm key’ler mevcut mu?\r\n const hasAllRequired = missingKeys.length === 0;\r\n // 🔍 2. Fazla key var mı?\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n // 🔍 3. Gerekli değerler boş mu?\r\n const emptyValueKeys = authKeys.filter(k => {\r\n const val = headerEntries.find(([key]) => key === k)?.[1];\r\n return !val || val.length === 0;\r\n });\r\n\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\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, BackendConfig } 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 headers?: Record<string, string>;\r\n config?: BackendConfig;\r\n}\r\n\r\nexport const useChatbot = (options: UseChatbotOptions = {}) => {\r\n const { mcpUrl, apiKey, config } = 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\r\n const getHtmlUiInstructions = (config?: BackendConfig) => {\r\n const headerColor = config?.headerBackground || \"#f5f5f5\";\r\n const accentColor = config?.buttonBackground || \"#007bff\";\r\n const companyName = config?.companyName || \"AI Assistant\";\r\n const companyLogo = config?.companyLogo || \"🤖\";\r\n\r\n return `\r\nYou are a helpful assistant that creates UI using ONLY HTML tags.\r\n\r\nYour task:\r\n- Read the user message and respond.\r\n- Render your response as a small HTML layout (card OR table OR mini-table).\r\n- Use inline CSS styles.\r\n- Use a clean, light (white-based) theme.\r\n- Use branding and colors from options.config.\r\n- Return ONLY raw HTML (no markdown, no backticks, no JSON, no explanations).\r\n\r\n====================\r\nTHEME & BRANDING (from options.config)\r\n====================\r\nThe chat widget configuration provides:\r\n\r\n- Header Background Color: ${headerColor}\r\n- Button / Accent Color: ${accentColor}\r\n- Company Name: ${companyName}\r\n- Company Logo: ${companyLogo}\r\n\r\nHow to use these:\r\n- Use Header Background Color mainly for top headers, title strips, or main highlight areas.\r\n- Use Button / Accent Color for important accents: borders, highlights, small badges, table headers, key text highlights, links, etc.\r\n- Use a white or very light background for main surfaces.\r\n- Text color should generally be dark (#111–#333) for readability.\r\n\r\nDo NOT create real interactive buttons. You can visually style elements using the accent color, but you must NOT use <button>.\r\n\r\n====================\r\nALLOWED / FORBIDDEN TAGS\r\n====================\r\nYou may use ANY NON-INTERACTIVE HTML element, for example:\r\n- Text and headings:\r\n <h1>, <h2>, <h3>, <h4>, <h5>, <h6>,\r\n <p>, <span>, <strong>, <em>, <small>, <blockquote>, <code>, <pre>\r\n- Layout:\r\n <div>, <section>, <article>, <header>, <footer>\r\n- Lists:\r\n <ul>, <ol>, <li>\r\n- Tables:\r\n <table>, <thead>, <tbody>, <tr>, <th>, <td>\r\n- Media:\r\n <img>, <figure>, <figcaption>\r\n- Links (non-interactive navigation style only):\r\n <a>\r\n\r\nFORBIDDEN (NEVER USE):\r\n- <button>, <input>, <textarea>, <select>, <option>, <form>, <label>\r\n- <details>, <summary>, <dialog>\r\n- <video> or <audio> with controls for user interaction\r\n- Any inline event handlers like onclick, onmouseover, etc.\r\n- <script> or any JavaScript code.\r\n\r\n====================\r\nLAYOUT TYPE RULES\r\n====================\r\nYou have exactly THREE layout types you can use:\r\n\r\n1) CARD\r\n2) TABLE\r\n3) MINI TABLE\r\n\r\nFor EACH response:\r\n- You MUST choose exactly ONE of these layout types.\r\n- You MUST NOT mix layout types in the same response.\r\n (Do NOT render card + table together, or table + mini-table together.)\r\n\r\nWhich layout to choose:\r\n- CARD (DEFAULT):\r\n - Use this for normal answers, explanations, descriptions, welcome messages,\r\n and any content that is mostly free text.\r\n- TABLE:\r\n - Use this ONLY when the content is clearly structured with multiple columns\r\n (for example: comparisons, lists of items with several attributes).\r\n- MINI TABLE:\r\n - Use this for small, compact key-value style data\r\n (for example: a few fields like \"Token\", \"Price\", \"Network\"),\r\n or when a full table would be visually too heavy.\r\n\r\nIf the user does NOT explicitly ask for a table or very structured data,\r\nyou MUST use the CARD layout.\r\n\r\n====================\r\nSTYLE RULES\r\n====================\r\nGeneral style (CARD or container):\r\n- Use a main wrapper <div> with styles similar to:\r\n background: #ffffff;\r\n color: #111111;\r\n border: 1px solid #e5e5e5;\r\n border-radius: 8px;\r\n padding: 12px;\r\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n- You may add a top header area using the header background color:\r\n background: ${headerColor};\r\n\r\nUse branding:\r\n- Include the company logo and name in a subtle way when appropriate\r\n (for example, in a small header bar):\r\n - Logo (emoji or image) on the left,\r\n - Company name text next to it.\r\n\r\nTypography:\r\n- Titles: 18–22px, bold.\r\n- Body text: 12–16px, regular.\r\n- Line-height should be comfortable (around 1.4–1.6).\r\n\r\nTables:\r\n- Use <table> with <thead> and <tbody> where appropriate.\r\n- Header row background: ${accentColor};\r\n- Header row text color: #ffffff;\r\n- Body rows background: #ffffff;\r\n- Row borders: 1px solid #e5e5e5 (or a faint version of the border color).\r\n\r\nMini table:\r\n- Can be a simple two-column table or stacked key-value pairs.\r\n- Keep it compact (less padding, fewer rows).\r\n\r\nLinks:\r\n- You can use <a> for styling or static URLs.\r\n- Use the accent color for links:\r\n color: ${accentColor};\r\n\r\n====================\r\nOUTPUT FORMAT\r\n====================\r\nYour final output MUST follow these rules:\r\n- Output ONLY a single HTML snippet.\r\n- Do NOT wrap it in backticks or markdown.\r\n- Do NOT include any explanation text.\r\n- Do NOT include JSON.\r\n- Must use exactly ONE of: card, table, mini table.\r\n- Must respect allowed/forbidden tags.\r\n- Must use colors derived from:\r\n - header_background\r\n - button_background\r\n and otherwise a light theme.\r\n\r\n====================\r\nBEHAVIOR SUMMARY\r\n====================\r\n1) Read the user message.\r\n2) Decide whether CARD, TABLE, or MINI TABLE is most suitable.\r\n3) Generate a single HTML layout using only allowed, non-interactive tags.\r\n4) Style the layout with inline CSS using:\r\n - ${headerColor} for header areas,\r\n - ${accentColor} for accents,\r\n - white/light backgrounds and dark text.\r\n5) Return ONLY the HTML snippet.\r\n`;\r\n };\r\n\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.config);\r\n\r\n\r\n try {\r\n let resp: OpenAI.Responses.Response & { _request_id?: string | null; };\r\n console.log(options.headers);\r\n\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: options.headers || {}\r\n },\r\n ],\r\n input: message,\r\n previous_response_id: responseId || undefined,\r\n instructions: getHtmlUiInstructions(options.config)\r\n\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 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\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 console.log(data);\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","export const getAlertContainerStyles = (type: 'error' | 'warning' | 'success'): React.CSSProperties => {\r\n const colors = {\r\n error: {\r\n background: 'linear-gradient(135deg, #ef4444 0%, #dc2626 100%)',\r\n border: '#dc2626',\r\n shadow: 'rgba(239, 68, 68, 0.2)',\r\n },\r\n warning: {\r\n background: 'linear-gradient(135deg, #f59e0b 0%, #d97706 100%)',\r\n border: '#d97706',\r\n shadow: 'rgba(245, 158, 11, 0.2)',\r\n },\r\n success: {\r\n background: 'linear-gradient(135deg, #10b981 0%, #059669 100%)',\r\n border: '#059669',\r\n shadow: 'rgba(16, 185, 129, 0.2)',\r\n },\r\n };\r\n\r\n const selectedColor = colors[type];\r\n\r\n return {\r\n background: selectedColor.background,\r\n border: `1px solid ${selectedColor.border}`,\r\n borderRadius: '12px',\r\n padding: '14px 16px',\r\n margin: '12px 16px',\r\n boxShadow: `0 4px 12px ${selectedColor.shadow}`,\r\n color: '#ffffff',\r\n fontSize: '13px',\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n gap: '12px',\r\n position: 'relative',\r\n animation: 'slideDown 0.3s ease-out',\r\n };\r\n};\r\n\r\nexport const getAlertIconContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '24px',\r\n height: '24px',\r\n flexShrink: 0,\r\n marginTop: '2px',\r\n});\r\n\r\nexport const getAlertContentStyles = (): React.CSSProperties => ({\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n});\r\n\r\nexport const getAlertTitleStyles = (): React.CSSProperties => ({\r\n fontWeight: 600,\r\n fontSize: '14px',\r\n margin: 0,\r\n lineHeight: 1.4,\r\n});\r\n\r\nexport const getAlertMessageStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n lineHeight: 1.5,\r\n opacity: 0.95,\r\n});\r\n\r\nexport const getAlertListStyles = (): React.CSSProperties => ({\r\n margin: '8px 0 0 0',\r\n paddingLeft: '20px',\r\n listStyle: 'none',\r\n});\r\n\r\nexport const getAlertListItemStyles = (): React.CSSProperties => ({\r\n marginBottom: '4px',\r\n position: 'relative',\r\n paddingLeft: '12px',\r\n lineHeight: 1.4,\r\n});\r\n\r\nexport const getAlertCloseButtonStyles = (): React.CSSProperties => ({\r\n position: 'absolute',\r\n top: '12px',\r\n right: '12px',\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n border: 'none',\r\n borderRadius: '6px',\r\n width: '24px',\r\n height: '24px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n color: '#ffffff',\r\n transition: 'all 0.2s ease',\r\n padding: 0,\r\n});\r\n\r\nexport const getAlertAnimationStyles = (): string => `\r\n @keyframes slideDown {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n`;\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, getAlertContainerStyles, getAlertIconContainerStyles, getAlertContentStyles, getAlertTitleStyles, getAlertMessageStyles, getAlertListStyles, getAlertListItemStyles, getAlertCloseButtonStyles, getAlertAnimationStyles } from \"../styles\";\r\nimport { validateHeaders } from \"../utils/cx\";\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({ clientId, headers }) => {\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 const [headerValidation, setHeaderValidation] = useState<{\r\n isValid: boolean;\r\n missingKeys: string[];\r\n extraKeys: string[];\r\n emptyValueKeys: string[];\r\n } | null>(null);\r\n const [showAlert, setShowAlert] = useState(true);\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n console.log(\"render\");\r\n\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const apiResponse = await fetchChatWidgetSettings(clientId);\r\n if (headers && apiResponse.data.auth_config) {\r\n const validationResult = validateHeaders(headers, apiResponse.data.auth_config, {\r\n allowExtra: false,\r\n caseSensitive: true,\r\n });\r\n\r\n console.log(validationResult);\r\n\r\n setHeaderValidation(validationResult);\r\n }\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, headers, config });\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 {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 : <div dangerouslySetInnerHTML={{ __html: message.content }} />\r\n }\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 HeaderValidationAlert: React.FC = () => {\r\n if (!headerValidation || !showAlert) return null;\r\n\r\n const { isValid, missingKeys, extraKeys, emptyValueKeys } = headerValidation;\r\n\r\n // Eğer her şey geçerliyse, alert gösterme\r\n if (isValid && missingKeys.length === 0 && extraKeys.length === 0 && emptyValueKeys.length === 0) {\r\n return null;\r\n }\r\n\r\n // Hata tipini belirle\r\n const hasErrors = missingKeys.length > 0 || emptyValueKeys.length > 0;\r\n const hasWarnings = extraKeys.length > 0;\r\n const alertType = hasErrors ? 'error' : 'warning';\r\n\r\n const getAlertIcon = () => {\r\n if (hasErrors) {\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\r\n </svg>\r\n );\r\n }\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\r\n </svg>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <style>{getAlertAnimationStyles()}</style>\r\n <div style={getAlertContainerStyles(alertType)}>\r\n <div style={getAlertIconContainerStyles()}>\r\n {getAlertIcon()}\r\n </div>\r\n <div style={getAlertContentStyles()}>\r\n <h4 style={getAlertTitleStyles()}>\r\n {hasErrors ? 'Header Doğrulama Hatası' : 'Header Uyarısı'}\r\n </h4>\r\n <p style={getAlertMessageStyles()}>\r\n {hasErrors && hasWarnings\r\n ? 'Header yapılandırmanızda hatalar ve uyarılar bulundu.'\r\n : hasErrors\r\n ? 'Header yapılandırmanızda hatalar bulundu.'\r\n : 'Header yapılandırmanızda fazla anahtarlar bulundu.'}\r\n </p>\r\n\r\n {missingKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: '13px' }}>Eksik Header'lar:</strong>\r\n <ul style={getAlertListStyles()}>\r\n {missingKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '2px',\r\n fontWeight: 'bold'\r\n }}>•</span>\r\n <code style={{\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n padding: '2px 6px',\r\n borderRadius: '4px',\r\n fontFamily: 'monospace',\r\n fontSize: '12px'\r\n }}>{key}</code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {emptyValueKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: '13px' }}>Boş Değerli Header'lar:</strong>\r\n <ul style={getAlertListStyles()}>\r\n {emptyValueKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '2px',\r\n fontWeight: 'bold'\r\n }}>•</span>\r\n <code style={{\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n padding: '2px 6px',\r\n borderRadius: '4px',\r\n fontFamily: 'monospace',\r\n fontSize: '12px'\r\n }}>{key}</code>\r\n <span style={{\r\n marginLeft: '6px',\r\n fontSize: '11px',\r\n opacity: 0.9\r\n }}>(değer boş olamaz)</span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {extraKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: '13px' }}>Fazla Header'lar:</strong>\r\n <ul style={getAlertListStyles()}>\r\n {extraKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '2px',\r\n fontWeight: 'bold'\r\n }}>•</span>\r\n <code style={{\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n padding: '2px 6px',\r\n borderRadius: '4px',\r\n fontFamily: 'monospace',\r\n fontSize: '12px'\r\n }}>{key}</code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setShowAlert(false)}\r\n style={getAlertCloseButtonStyles()}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.background = 'rgba(255, 255, 255, 0.3)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.background = 'rgba(255, 255, 255, 0.2)';\r\n }}\r\n aria-label=\"Uyarıyı kapat\"\r\n >\r\n <svg width=\"16\" height=\"16\" 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 </button>\r\n </div>\r\n </>\r\n );\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 <HeaderValidationAlert />\r\n\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/styles/alertStyles.ts","../src/components/FloatingChat.tsx"],"names":["React","jsx","OpenAI","useState","config","useEffect","useRef","DOMPurify","jsxs","ReactMarkdown","remarkGfm","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AuthConfig, HeadersType } from \"../types/chatbot\";\r\n\r\nexport function cx(...args: Array<string | false | null | undefined>): string {\r\n return args.filter(Boolean).join(\" \");\r\n}\r\n\r\nexport function validateHeaders(\r\n headers: HeadersType,\r\n authConfig: AuthConfig,\r\n opts: { caseSensitive?: boolean; allowExtra?: boolean } = {}\r\n) {\r\n const { caseSensitive = false, allowExtra = false } = opts;\r\n\r\n const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [normalize(k), v.trim()]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [normalize(k), v.trim()]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\r\n\r\n const requiredSet = new Set(authKeys);\r\n\r\n const missingKeys = authKeys.filter(k => !headerKeys.includes(k));\r\n const extraKeys = headerKeys.filter(k => !requiredSet.has(k));\r\n\r\n // 🔍 1. Gerekli tüm key’ler mevcut mu?\r\n const hasAllRequired = missingKeys.length === 0;\r\n // 🔍 2. Fazla key var mı?\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n // 🔍 3. Gerekli değerler boş mu?\r\n const emptyValueKeys = authKeys.filter(k => {\r\n const val = headerEntries.find(([key]) => key === k)?.[1];\r\n return !val || val.length === 0;\r\n });\r\n\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\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, BackendConfig } from \"../types/chatbot\";\r\nimport OpenAI from \"openai\";\r\n\r\nexport interface UseChatbotOptions {\r\n apiKey?: string;\r\n mcpUrl?: string;\r\n headers?: Record<string, string>;\r\n config?: BackendConfig;\r\n}\r\n\r\nexport const useChatbot = (options: UseChatbotOptions = {}) => {\r\n const { mcpUrl, apiKey, config } = 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 getHtmlUiInstructions = (config?: BackendConfig) => {\r\n const headerColor = config?.headerBackground || \"#f5f5f5\";\r\n const accentColor = config?.buttonBackground || \"#007bff\";\r\n\r\n return `\r\nYou are a helpful assistant that creates UI using ONLY HTML tags.\r\n\r\nYour task:\r\n- Read the user message and respond.\r\n- Render your response as a small HTML layout (card OR table OR mini-table).\r\n- Use inline CSS styles.\r\n- Use a clean, light (white-based) theme.\r\n- Use colors from options.config (headerBackground, buttonBackground).\r\n- Return ONLY raw HTML (no markdown, no backticks, no JSON, no explanations).\r\n\r\n====================\r\nTHEME (from options.config)\r\n====================\r\nThe chat widget configuration provides:\r\n\r\n- Header Background Color: ${headerColor}\r\n- Button / Accent Color: ${accentColor}\r\n\r\nHow to use these:\r\n- Use Header Background Color mainly for top headers, title strips, or main highlight areas.\r\n- Use Button / Accent Color for important accents: borders, highlights, badges, table headers, key text highlights, links, etc.\r\n- Use a white or very light background for main surfaces.\r\n- Text color should generally be dark (#111–#333) for readability.\r\n\r\n====================\r\nALLOWED / FORBIDDEN TAGS\r\n====================\r\nYou may use ANY NON-INTERACTIVE HTML element, for example:\r\n- Text and headings:\r\n <h1>, <h2>, <h3>, <h4>, <h5>, <h6>,\r\n <p>, <span>, <strong>, <em>, <small>, <blockquote>, <code>, <pre>\r\n- Layout:\r\n <div>, <section>, <article>, <header>, <footer>\r\n- Lists:\r\n <ul>, <ol>, <li>\r\n- Tables:\r\n <table>, <thead>, <tbody>, <tr>, <th>, <td>\r\n- Media:\r\n <img>, <figure>, <figcaption>\r\n- Links (non-interactive navigation style only):\r\n <a>\r\n\r\nGENERAL RULE:\r\n- In NORMAL responses, you MUST NOT use <button>.\r\n\r\nFORBIDDEN (NORMAL MODE):\r\n- <button>, <input>, <textarea>, <select>, <option>, <form>, <label>\r\n- <details>, <summary>, <dialog>\r\n- <video> or <audio> with controls for user interaction\r\n- Any inline event handlers like onclick, onmouseover, etc.\r\n- <script> or any JavaScript code.\r\n\r\n====================\r\nLAYOUT TYPE RULES\r\n====================\r\nYou have exactly THREE layout types you can use:\r\n\r\n1) CARD\r\n2) TABLE\r\n3) MINI TABLE\r\n\r\nFor EACH response:\r\n- You MUST choose exactly ONE of these layout types.\r\n- You MUST NOT mix layout types in the same response.\r\n (Do NOT render card + table together, or table + mini-table together.)\r\n\r\nWhich layout to choose:\r\n- CARD (DEFAULT):\r\n - Use this for normal answers, explanations, descriptions, welcome messages,\r\n and any content that is mostly free text.\r\n- TABLE:\r\n - Use this ONLY when the content is clearly structured with multiple columns\r\n (for example: comparisons, lists of items with several attributes).\r\n- MINI TABLE:\r\n - Use this for small, compact key-value style data\r\n (for example: a few fields like \"Token\", \"Price\", \"Network\"),\r\n or when a full table would be visually too heavy.\r\n\r\nIf the user does NOT explicitly ask for a table or very structured data,\r\nyou MUST use the CARD layout.\r\n\r\n====================\r\nSTYLE RULES\r\n====================\r\nGeneral style (CARD or container):\r\n- Use a main wrapper <div> with styles similar to:\r\n background: #ffffff;\r\n color: #111111;\r\n border: 1px solid #e5e5e5;\r\n border-radius: 8px;\r\n padding: 12px;\r\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n\r\nHeader area (if you use one):\r\n- You may add a top header area using the header background color:\r\n background: ${headerColor};\r\n\r\nTypography:\r\n- Titles: 18–22px, bold.\r\n- Body text: 12–16px, regular.\r\n- Line-height should be comfortable (around 1.4–1.6).\r\n\r\nTables:\r\n- Use <table> with <thead> and <tbody> where appropriate.\r\n- Header row background: ${accentColor};\r\n- Header row text color: #ffffff;\r\n- Body rows background: #ffffff;\r\n- Row borders: 1px solid #e5e5e5 (or a faint version of the border color).\r\n\r\nMini table:\r\n- Can be a simple two-column table or stacked key-value pairs.\r\n- Keep it compact (less padding, fewer rows).\r\n\r\nLinks:\r\n- You can use <a> for styling or static URLs.\r\n- Use the accent color for links:\r\n color: ${accentColor};\r\n\r\n====================\r\nCONFIRMATION MODE (SPECIAL CASE)\r\n====================\r\nSometimes, during a workflow or tool usage, you may need the user to confirm an action\r\n(e.g., deleting a workflow, sending a transaction, performing an irreversible change).\r\n\r\nIn such CONFIRMATION cases ONLY:\r\n- You ARE allowed to use exactly TWO <button> elements.\r\n- They MUST be rendered with these exact data attributes:\r\n\r\n <button data-ai-action=\"approve\">Onayla</button>\r\n <button data-ai-action=\"cancel\">Vazgeç</button>\r\n\r\nRules for confirmation buttons:\r\n- Do NOT add onclick or any other JS event attributes.\r\n- Do NOT add custom data attributes besides data-ai-action.\r\n- The host application will detect these buttons by data-ai-action\r\n and will send the following messages back to you:\r\n \"__APPROVE__\" when the user clicks \"Onayla\"\r\n \"__CANCEL__\" when the user clicks \"Vazgeç\"\r\n\r\nBehavior after user choice:\r\n- When you receive \"__APPROVE__\", behave as if the user confirmed YES.\r\n- When you receive \"__CANCEL__\", behave as if the user declined or cancelled.\r\n- After that, go back to NORMAL mode and return standard HTML output again\r\n (card, table, or mini table, WITHOUT <button>).\r\n\r\nIMPORTANT:\r\n- In NORMAL responses (no confirmation needed), you MUST NOT use <button>.\r\n- In CONFIRMATION MODE, you MUST use exactly these two buttons and NO others.\r\n\r\n====================\r\nOUTPUT FORMAT\r\n====================\r\nYour final output MUST follow these rules:\r\n- Output ONLY a single HTML snippet.\r\n- Do NOT wrap it in backticks or markdown.\r\n- Do NOT include any explanation text.\r\n- Do NOT include JSON.\r\n- Must use exactly ONE of: card, table, mini table.\r\n- Must respect allowed/forbidden tags.\r\n- Must use colors derived from:\r\n - headerBackground\r\n - buttonBackground\r\n and otherwise a light theme.\r\n\r\n====================\r\nBEHAVIOR SUMMARY\r\n====================\r\n1) Read the user message.\r\n2) If it is a normal response:\r\n - Decide whether CARD, TABLE, or MINI TABLE is most suitable.\r\n - Generate a single HTML layout using only allowed, non-interactive tags (no <button>).\r\n3) If you need explicit user confirmation:\r\n - Enter CONFIRMATION MODE.\r\n - Render a short explanation AND exactly two <button> elements with:\r\n data-ai-action=\"approve\" and data-ai-action=\"cancel\".\r\n4) Style the layout with inline CSS using:\r\n - ${headerColor} for header areas,\r\n - ${accentColor} for accents,\r\n - white/light backgrounds and dark text.\r\n5) Return ONLY the HTML snippet.\r\n`;\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.config);\r\n\r\n try {\r\n let resp: OpenAI.Responses.Response & { _request_id?: string | null };\r\n console.log(options.headers);\r\n\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: options.headers || {},\r\n },\r\n ],\r\n input: message,\r\n previous_response_id: responseId || undefined,\r\n instructions: getHtmlUiInstructions(options.config),\r\n });\r\n\r\n setResponseId(resp.id);\r\n\r\n let responseText = \"\";\r\n\r\n if (resp && Array.isArray(resp)) {\r\n const messageItem = resp.find((item) => item.type === \"message\");\r\n\r\n if (\r\n messageItem &&\r\n messageItem.content &&\r\n Array.isArray(messageItem.content)\r\n ) {\r\n const textContent = messageItem.content.find(\r\n (content: any) => content.type === \"output_text\"\r\n );\r\n\r\n if (textContent && textContent.text) {\r\n responseText = textContent.text;\r\n }\r\n }\r\n } else {\r\n if (resp && (resp as any).output_text) {\r\n responseText = (resp as any).output_text;\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 addMessage(responseText, \"assistant\");\r\n setIsLoading(false);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n addMessage(\r\n \"Üzgünüm, bir hata oluştu. Lütfen tekrar deneyin.\",\r\n \"assistant\"\r\n );\r\n setIsLoading(false);\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\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 console.log(data);\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 = (\r\n isUser: boolean,\r\n isTyping: boolean\r\n): React.CSSProperties => ({\r\n display: !isTyping && !isUser ? \"none\" : \"block\",\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 ? {\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 : {\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\"\r\n }, ${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\"\r\n }, ${isUser ? \"#ffffff\" : \"#764ba2\"});\r\n }\r\n`;\r\n\r\nexport const getMessageContainerStyles = (\r\n isUser: boolean\r\n): 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","export const getAlertContainerStyles = (type: 'error' | 'warning' | 'success'): React.CSSProperties => {\r\n const colors = {\r\n error: {\r\n background: 'linear-gradient(135deg, #ef4444 0%, #dc2626 100%)',\r\n border: '#dc2626',\r\n shadow: 'rgba(239, 68, 68, 0.2)',\r\n },\r\n warning: {\r\n background: 'linear-gradient(135deg, #f59e0b 0%, #d97706 100%)',\r\n border: '#d97706',\r\n shadow: 'rgba(245, 158, 11, 0.2)',\r\n },\r\n success: {\r\n background: 'linear-gradient(135deg, #10b981 0%, #059669 100%)',\r\n border: '#059669',\r\n shadow: 'rgba(16, 185, 129, 0.2)',\r\n },\r\n };\r\n\r\n const selectedColor = colors[type];\r\n\r\n return {\r\n background: selectedColor.background,\r\n border: `1px solid ${selectedColor.border}`,\r\n borderRadius: '12px',\r\n padding: '14px 16px',\r\n margin: '12px 16px',\r\n boxShadow: `0 4px 12px ${selectedColor.shadow}`,\r\n color: '#ffffff',\r\n fontSize: '13px',\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n gap: '12px',\r\n position: 'relative',\r\n animation: 'slideDown 0.3s ease-out',\r\n };\r\n};\r\n\r\nexport const getAlertIconContainerStyles = (): React.CSSProperties => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '24px',\r\n height: '24px',\r\n flexShrink: 0,\r\n marginTop: '2px',\r\n});\r\n\r\nexport const getAlertContentStyles = (): React.CSSProperties => ({\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n});\r\n\r\nexport const getAlertTitleStyles = (): React.CSSProperties => ({\r\n fontWeight: 600,\r\n fontSize: '14px',\r\n margin: 0,\r\n lineHeight: 1.4,\r\n});\r\n\r\nexport const getAlertMessageStyles = (): React.CSSProperties => ({\r\n margin: 0,\r\n lineHeight: 1.5,\r\n opacity: 0.95,\r\n});\r\n\r\nexport const getAlertListStyles = (): React.CSSProperties => ({\r\n margin: '8px 0 0 0',\r\n paddingLeft: '20px',\r\n listStyle: 'none',\r\n});\r\n\r\nexport const getAlertListItemStyles = (): React.CSSProperties => ({\r\n marginBottom: '4px',\r\n position: 'relative',\r\n paddingLeft: '12px',\r\n lineHeight: 1.4,\r\n});\r\n\r\nexport const getAlertCloseButtonStyles = (): React.CSSProperties => ({\r\n position: 'absolute',\r\n top: '12px',\r\n right: '12px',\r\n background: 'rgba(255, 255, 255, 0.2)',\r\n border: 'none',\r\n borderRadius: '6px',\r\n width: '24px',\r\n height: '24px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n color: '#ffffff',\r\n transition: 'all 0.2s ease',\r\n padding: 0,\r\n});\r\n\r\nexport const getAlertAnimationStyles = (): string => `\r\n @keyframes slideDown {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n`;\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 DOMPurify from \"dompurify\";\r\n\r\nimport {\r\n fetchChatWidgetSettings,\r\n mapApiSettingsToConfig,\r\n} from \"../services/chatWidgetApi\";\r\nimport {\r\n getMessageBubbleStyles,\r\n getTimeStyles,\r\n getMarkdownStyles,\r\n getMarkdownElementStyles,\r\n getMessageContainerStyles,\r\n getInputContainerStyles,\r\n getTextareaStyles,\r\n getSendButtonStyles,\r\n getHeaderStyles,\r\n getLogoContainerStyles,\r\n getLogoImageStyles,\r\n getLogoTextStyles,\r\n getCompanyNameStyles,\r\n getStatusTextStyles,\r\n getFloatingButtonStyles,\r\n getChatContainerStyles,\r\n getOverlayStyles,\r\n getChatbotContainerStyles,\r\n getMessagesContainerStyles,\r\n getEmptyStateStyles,\r\n getLoadingSpinnerStyles,\r\n getAlertContainerStyles,\r\n getAlertIconContainerStyles,\r\n getAlertContentStyles,\r\n getAlertTitleStyles,\r\n getAlertMessageStyles,\r\n getAlertListStyles,\r\n getAlertListItemStyles,\r\n getAlertCloseButtonStyles,\r\n getAlertAnimationStyles,\r\n} from \"../styles\";\r\nimport { validateHeaders } from \"../utils/cx\";\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({\r\n clientId,\r\n headers,\r\n}) => {\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 {\r\n welcomeMessage,\r\n buttonBackground,\r\n placeholder,\r\n buttonPosition,\r\n buttonSize,\r\n chatWidth,\r\n chatHeight,\r\n showTypingIndicator,\r\n initialOpen,\r\n headerBackground,\r\n companyLogo,\r\n companyName,\r\n } = config;\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [headerValidation, setHeaderValidation] = useState<{\r\n isValid: boolean;\r\n missingKeys: string[];\r\n extraKeys: string[];\r\n emptyValueKeys: string[];\r\n } | null>(null);\r\n const [showAlert, setShowAlert] = useState(true);\r\n console.log(\"Component rendered\");\r\n\r\n useEffect(() => {\r\n console.log(\"use\");\r\n\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const apiResponse = await fetchChatWidgetSettings(clientId);\r\n if (headers && apiResponse.data.auth_config) {\r\n const validationResult = validateHeaders(\r\n headers,\r\n apiResponse.data.auth_config,\r\n {\r\n allowExtra: false,\r\n caseSensitive: true,\r\n }\r\n );\r\n\r\n console.log(validationResult);\r\n\r\n setHeaderValidation(validationResult);\r\n }\r\n\r\n setFinalMcpUrl(apiResponse.data.mcp_url);\r\n setApiKey(apiResponse.data.openai_key || \"\");\r\n\r\n const apiConfig = mapApiSettingsToConfig(\r\n apiResponse.data.chat_widget_settings\r\n );\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({\r\n mcpUrl: finalMcpUrl,\r\n apiKey: apiKey,\r\n headers,\r\n config,\r\n });\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 // ⭐ MessageBubble'a onAction prop'u eklendi\r\n const MessageBubble: React.FC<{\r\n message: Message;\r\n onAction: (msg: string) => void;\r\n }> = ({ message, onAction }) => {\r\n const isUser = message.role === \"user\";\r\n const cleanContent = DOMPurify.sanitize(message.content);\r\n\r\n // ⭐ Assistant HTML içindeki butonları dinlemek için ref\r\n const htmlRef = useRef<HTMLDivElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (!htmlRef.current || isUser) return;\r\n\r\n const root = htmlRef.current;\r\n\r\n const approveBtn = root.querySelector<HTMLButtonElement>(\r\n 'button[data-ai-action=\"approve\"]'\r\n );\r\n const cancelBtn = root.querySelector<HTMLButtonElement>(\r\n 'button[data-ai-action=\"cancel\"]'\r\n );\r\n\r\n const handleApprove = () => onAction(\"__APPROVE__\");\r\n const handleCancel = () => onAction(\"__CANCEL__\");\r\n\r\n if (approveBtn) approveBtn.addEventListener(\"click\", handleApprove);\r\n if (cancelBtn) cancelBtn.addEventListener(\"click\", handleCancel);\r\n\r\n return () => {\r\n if (approveBtn) approveBtn.removeEventListener(\"click\", handleApprove);\r\n if (cancelBtn) cancelBtn.removeEventListener(\"click\", handleCancel);\r\n };\r\n }, [message.content, isUser, onAction]);\r\n\r\n return (\r\n <div style={getMessageContainerStyles(isUser)}>\r\n <style>{getMarkdownElementStyles(isUser)}</style>\r\n <div style={getMessageBubbleStyles(isUser, message.isTyping ?? false)}>\r\n {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\r\n }\r\n\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 {!isUser &&\r\n <div dangerouslySetInnerHTML={{ __html: cleanContent }} />\r\n\r\n }\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 HeaderValidationAlert: React.FC = () => {\r\n if (!headerValidation || !showAlert) return null;\r\n\r\n const { isValid, missingKeys, extraKeys, emptyValueKeys } =\r\n headerValidation;\r\n\r\n if (\r\n isValid &&\r\n missingKeys.length === 0 &&\r\n extraKeys.length === 0 &&\r\n emptyValueKeys.length === 0\r\n ) {\r\n return null;\r\n }\r\n\r\n const hasErrors = missingKeys.length > 0 || emptyValueKeys.length > 0;\r\n const hasWarnings = extraKeys.length > 0;\r\n const alertType = hasErrors ? \"error\" : \"warning\";\r\n\r\n const getAlertIcon = () => {\r\n if (hasErrors) {\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\r\n </svg>\r\n );\r\n }\r\n return (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\r\n </svg>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <style>{getAlertAnimationStyles()}</style>\r\n <div style={getAlertContainerStyles(alertType)}>\r\n <div style={getAlertIconContainerStyles()}>{getAlertIcon()}</div>\r\n <div style={getAlertContentStyles()}>\r\n <h4 style={getAlertTitleStyles()}>\r\n {hasErrors ? \"Header Doğrulama Hatası\" : \"Header Uyarısı\"}\r\n </h4>\r\n <p style={getAlertMessageStyles()}>\r\n {hasErrors && hasWarnings\r\n ? \"Header yapılandırmanızda hatalar ve uyarılar bulundu.\"\r\n : hasErrors\r\n ? \"Header yapılandırmanızda hatalar bulundu.\"\r\n : \"Header yapılandırmanızda fazla anahtarlar bulundu.\"}\r\n </p>\r\n\r\n {missingKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: \"13px\" }}>Eksik Header'lar:</strong>\r\n <ul style={getAlertListStyles()}>\r\n {missingKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span\r\n style={{\r\n position: \"absolute\",\r\n left: \"0\",\r\n top: \"2px\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n •\r\n </span>\r\n <code\r\n style={{\r\n background: \"rgba(255, 255, 255, 0.2)\",\r\n padding: \"2px 6px\",\r\n borderRadius: \"4px\",\r\n fontFamily: \"monospace\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n {key}\r\n </code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {emptyValueKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: \"13px\" }}>\r\n Boş Değerli Header'lar:\r\n </strong>\r\n <ul style={getAlertListStyles()}>\r\n {emptyValueKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span\r\n style={{\r\n position: \"absolute\",\r\n left: \"0\",\r\n top: \"2px\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n •\r\n </span>\r\n <code\r\n style={{\r\n background: \"rgba(255, 255, 255, 0.2)\",\r\n padding: \"2px 6px\",\r\n borderRadius: \"4px\",\r\n fontFamily: \"monospace\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n {key}\r\n </code>\r\n <span\r\n style={{\r\n marginLeft: \"6px\",\r\n fontSize: \"11px\",\r\n opacity: 0.9,\r\n }}\r\n >\r\n (değer boş olamaz)\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {extraKeys.length > 0 && (\r\n <div>\r\n <strong style={{ fontSize: \"13px\" }}>Fazla Header'lar:</strong>\r\n <ul style={getAlertListStyles()}>\r\n {extraKeys.map((key, index) => (\r\n <li key={index} style={getAlertListItemStyles()}>\r\n <span\r\n style={{\r\n position: \"absolute\",\r\n left: \"0\",\r\n top: \"2px\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n •\r\n </span>\r\n <code\r\n style={{\r\n background: \"rgba(255, 255, 255, 0.2)\",\r\n padding: \"2px 6px\",\r\n borderRadius: \"4px\",\r\n fontFamily: \"monospace\",\r\n fontSize: \"12px\",\r\n }}\r\n >\r\n {key}\r\n </code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setShowAlert(false)}\r\n style={getAlertCloseButtonStyles()}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.3)\";\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.2)\";\r\n }}\r\n aria-label=\"Uyarıyı kapat\"\r\n >\r\n <svg width=\"16\" height=\"16\" 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 </button>\r\n </div>\r\n </>\r\n );\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 if (isConfigLoading) {\r\n return (\r\n <div\r\n style={getFloatingButtonStyles(\r\n buttonPosition,\r\n buttonSize,\r\n buttonBackground,\r\n false\r\n )}\r\n >\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\r\n style={getChatContainerStyles(\r\n buttonPosition,\r\n chatWidth,\r\n chatHeight,\r\n isOpen\r\n )}\r\n className=\"floating-chat-container\"\r\n >\r\n <div style={getChatbotContainerStyles()}>\r\n <div style={getHeaderStyles(headerBackground)}>\r\n <div style={getLogoContainerStyles()}>\r\n {companyLogo ? (\r\n companyLogo.startsWith(\"http\") ||\r\n 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()}>{companyLogo}</span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 style={getCompanyNameStyles()}>{companyName}</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 <HeaderValidationAlert />\r\n\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\r\n key={message.id}\r\n message={message}\r\n onAction={handleSendMessage} // ⭐ burada bağladık\r\n />\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 onAction={handleSendMessage}\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(\r\n buttonPosition,\r\n buttonSize,\r\n buttonBackground,\r\n isOpen\r\n )}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.transform = isOpen\r\n ? \"scale(0.85)\"\r\n : \"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};\r\n"]}
|