aizek-chatbot 1.0.28 → 1.0.30

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/global.ts","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/utils/chatbot.ts","../src/components/aizek-chat/index.tsx"],"names":["jsx","jsxs","useRef","Fragment","useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\r\nimport { AuthConfig, HeaderValidationResult, HeadersType } from \"../types/chatbot\";\r\nimport { StoredSession } from \"../types/global\";\r\n\r\nexport const SESSION_TTL_MS = 60 * 60 * 1000; // 1 saat\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const DEVICE_KEY = \"aizek_device_id_v1\";\r\nexport const ACTIVE_SESSION_KEY = \"aizek_active_session_v1\";\r\nexport const LOCAL_SESSIONS_KEY = \"aizek_sessions_v1\"; // StoredSession[]\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(headers: HeadersType, authConfig: AuthConfig, opts: { caseSensitive?: boolean; allowExtra?: boolean } = {}): HeaderValidationResult {\r\n // If we received headers but authConfig is missing/empty, return early with a warning\r\n if (headers && (!authConfig || Object.keys(authConfig).length === 0)) {\r\n return {\r\n isValid: false,\r\n missingKeys: [],\r\n extraKeys: [],\r\n emptyValueKeys: [],\r\n warning: \"Auth config boş ya da tanımsız, header doğrulaması yapılamıyor.\"\r\n };\r\n }\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 const hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\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}\r\n\r\nexport function getOrCreateDeviceId() {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_KEY, id);\r\n return id;\r\n}\r\n\r\nfunction now() {\r\n return Date.now();\r\n}\r\n\r\nexport function readStoredSessions(): StoredSession[] {\r\n try {\r\n const raw = localStorage.getItem(LOCAL_SESSIONS_KEY);\r\n const parsed = JSON.parse(raw ?? \"[]\");\r\n if (!Array.isArray(parsed)) return [];\r\n return parsed\r\n .filter((x) => x && typeof x.sessionId === \"string\" && typeof x.lastActive === \"number\")\r\n .slice(0, MAX_SESSIONS);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function writeStoredSessions(list: StoredSession[]) {\r\n localStorage.setItem(LOCAL_SESSIONS_KEY, JSON.stringify(list.slice(0, MAX_SESSIONS)));\r\n}\r\n\r\nexport function purgeExpiredLocalSessions(setActiveSessionIdState: Dispatch<SetStateAction<string | null>>) {\r\n const list = readStoredSessions();\r\n const filtered = list.filter((s) => now() - s.lastActive <= SESSION_TTL_MS);\r\n if (filtered.length !== list.length) writeStoredSessions(filtered);\r\n\r\n const active = getActiveSessionId();\r\n if (active && !filtered.some((s) => s.sessionId === active)) {\r\n setActiveSessionId(null);\r\n setActiveSessionIdState(null);\r\n }\r\n\r\n return filtered;\r\n}\r\n\r\nexport function getActiveSessionId(): string | null {\r\n return localStorage.getItem(ACTIVE_SESSION_KEY);\r\n}\r\n\r\nexport function setActiveSessionId(id: string | null) {\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_KEY, id);\r\n}\r\n\r\nexport function touchSession(sessionId: string) {\r\n const list = readStoredSessions();\r\n const next = list.map((s) => (s.sessionId === sessionId ? { ...s, lastActive: now() } : s));\r\n if (!next.some((s) => s.sessionId === sessionId)) next.unshift({ sessionId, lastActive: now() });\r\n writeStoredSessions(next.slice(0, MAX_SESSIONS));\r\n}\r\n\r\nexport function upsertSessionsFromServer(serverSessionIds: string[], setSessions: Dispatch<SetStateAction<string[]>>) {\r\n const local = readStoredSessions();\r\n const map = new Map(local.map((s) => [s.sessionId, s.lastActive]));\r\n\r\n const merged: StoredSession[] = serverSessionIds.slice(0, MAX_SESSIONS).map((sid) => ({\r\n sessionId: sid,\r\n lastActive: map.get(sid) ?? now(),\r\n }));\r\n\r\n writeStoredSessions(merged);\r\n setSessions(merged.map((x) => x.sessionId));\r\n return merged;\r\n}","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/chatbot\";\r\n\r\ninterface IHeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null\r\n showAlert: boolean,\r\n setShowAlert: Dispatch<SetStateAction<boolean>>\r\n}\r\nexport const HeaderAlert = ({ headerValidation, showAlert, setShowAlert }: IHeaderAlertProps) => {\r\n if (!headerValidation || !showAlert) return null;\r\n\r\n const { isValid, missingKeys, extraKeys, emptyValueKeys, warning } =\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 !warning\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 || !!warning;\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{getAlertIcon()}</div>\r\n <div className=\"alert-content\">\r\n <h4 className=\"alert-title\">\r\n {hasErrors ? \"Header Doğrulama Hatası\" : \"Header Uyarısı\"}\r\n </h4>\r\n <p className=\"alert-message\">\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>Eksik Header'lar:</strong>\r\n <ul className=\"alert-list\">\r\n {missingKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code>\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 >\r\n Boş Değerli Header'lar:\r\n </strong>\r\n <ul className=\"alert-list\">\r\n {emptyValueKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code >\r\n {key}\r\n </code>\r\n <span >\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 >Fazla Header'lar:</strong>\r\n <ul className=\"alert-list\">\r\n {extraKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code >\r\n {key}\r\n </code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {warning && (\r\n <div>\r\n <strong>Uyarı:</strong>\r\n <p className=\"alert-message\">{warning}</p>\r\n </div>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setShowAlert(false)}\r\n className=\"alert-close-button\"\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};","export const LoadingSpinner: React.FC = () => {\r\n return <div className=\"loading-spinner\" />;\r\n};","import { useRef, useState } from \"react\";\r\nimport { LoadingSpinner } from \"../loading-spinner\";\r\n\r\ninterface IChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n handleSendMessage: (message: string, approval?: boolean) => void\r\n}\r\n\r\nexport const ChatInput = ({ isLoading, placeholder, handleSendMessage }: IChatInputProps) => {\r\n const [message, setMessage] = useState(\"\");\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\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} className=\"input-container\">\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 className=\"textarea\"\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !message.trim()}\r\n className=\"send-button\"\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};","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData } from \"../../types/generative-ui\";\r\n\r\n\r\n\r\ntype GenericUIRendererProps = {\r\n uiData: UIData;\r\n onInteraction: (event: any) => void;\r\n};\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({ uiData, onInteraction }) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData || !uiData.components) return null;\r\n\r\n // Form değerlerini toplayan fonksiyon\r\n const collectFormValues = () => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: Record<string, any> = {};\r\n const inputs = containerRef.current.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>('input, textarea, select');\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute('name');\r\n if (name) {\r\n if (element instanceof HTMLInputElement && element.type === 'checkbox') {\r\n formData[name] = element.checked;\r\n } else if (element instanceof HTMLInputElement && element.type === 'radio') {\r\n if (element.checked) {\r\n formData[name] = element.value;\r\n }\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n const renderComponent = (comp: UIComponent): React.ReactNode => {\r\n switch (comp.type) {\r\n case \"text\":\r\n return (\r\n <p key={comp.id} className=\"gen-ui-text\">\r\n {comp.value ?? comp.label}\r\n </p>\r\n );\r\n\r\n case \"input\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-input-wrapper\">\r\n {comp.label && <label className=\"gen-ui-input-label\">{comp.label}</label>}\r\n {comp.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={comp.id}\r\n placeholder={comp.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={comp.id}\r\n type={comp.fieldType || \"text\"}\r\n placeholder={comp.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n );\r\n\r\n case \"select\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-select-wrapper\">\r\n {comp.label && <label className=\"gen-ui-select-label\">{comp.label}</label>}\r\n <select name={comp.id} className=\"gen-ui-select\">\r\n {comp.options?.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n );\r\n\r\n case \"button\":\r\n return (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: comp.label,\r\n buttonId: comp.buttonType,\r\n formData: formValues\r\n });\r\n }}\r\n key={comp.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {comp.label}\r\n </button>\r\n );\r\n\r\n case \"card\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-card\">\r\n {comp.label && <h2 className=\"gen-ui-card-title\">{comp.label}</h2>}\r\n {comp.value && <p className=\"gen-ui-card-content\">{comp.value}</p>}\r\n </div>\r\n );\r\n\r\n case \"list\":\r\n return (\r\n <ul key={comp.id} className=\"gen-ui-list\">\r\n {comp.items?.map((item) => (\r\n <li key={item.id} className=\"gen-ui-list-item\">\r\n {item.label ?? String(item.value ?? \"\")}\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <img\r\n key={comp.id}\r\n src={comp.url}\r\n alt={comp.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n );\r\n\r\n case \"link\":\r\n return (\r\n <a\r\n key={comp.id}\r\n href={comp.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {comp.label || comp.url}\r\n </a>\r\n );\r\n\r\n case \"table\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {comp.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {comp.columns.map((col) => (\r\n <th key={col} className=\"gen-ui-table-th\">\r\n {col}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n )}\r\n {comp.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {comp.rows.map((row, ridx) => (\r\n <tr key={ridx}>\r\n {row.map((cell, cidx) => (\r\n <td key={cidx} className=\"gen-ui-table-td\">\r\n {cell}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n )}\r\n </table>\r\n </div>\r\n );\r\n\r\n case \"form\":\r\n return (\r\n <form key={comp.id} className=\"gen-ui-form\">\r\n {comp.items?.map((field) => renderComponent(field))}\r\n </form>\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"generative-ui-container\" ref={containerRef}>\r\n {(uiData.title || uiData.description) && (\r\n <div className=\"generative-ui-header\">\r\n {uiData.title && (\r\n <h1 className=\"generative-ui-title\">{uiData.title}</h1>\r\n )}\r\n {uiData.description && (\r\n <p className=\"generative-ui-description\">{uiData.description}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {uiData.components.map((comp) => renderComponent(comp))}\r\n </div>\r\n );\r\n};\r\n\r\n","import { Message } from \"../../types/chatbot\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface IMessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: IMessageBubbleProps) => {\r\n console.log(\"MESSAGE\", message);\r\n\r\n const isUser = message.role === \"user\";\r\n const approval = message.role === \"approval\"\r\n\r\n if (approval) {\r\n return <></>\r\n }\r\n\r\n return (\r\n <div className={`message-container ${isUser ? \"user\" : \"assistant\"}`}>\r\n <div className={`message-bubble ${isUser ? \"user\" : \"assistant\"}`}>\r\n {isUser ? (\r\n message.text && (\r\n <div className=\"markdown-content\">{message.text}</div>\r\n )\r\n ) : (\r\n <>\r\n {message.text && (\r\n <div className=\"markdown-content\">\r\n <ReactMarkdown remarkPlugins={[remarkGfm]}>\r\n {message.text}\r\n </ReactMarkdown>\r\n </div>\r\n )}\r\n {message.ui && (\r\n <GenericUIRenderer\r\n uiData={message.ui}\r\n onInteraction={(event) => {\r\n console.log(\"event\", event);\r\n if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n\r\n } else {\r\n onAction(event.action, true);\r\n\r\n }\r\n\r\n }}\r\n />\r\n )}\r\n\r\n </>\r\n )}\r\n </div>\r\n\r\n <div className={`message-time ${isUser ? \"user\" : \"assistant\"}`}>\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","import { useEffect, useState } from \"react\";\r\n\r\nexport const TypingDots = () => {\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 (\r\n <div className=\"message-container assistant\">\r\n <div className=\"message-bubble assistant\">\r\n <div className=\"message-typing-indicator\">\r\n <span>{dots}</span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};","export const extractUIJsonFromText = (text: string): { cleanedText: string; uiData: any | null } => {\r\n const regex = /```ui-component([\\s\\S]*?)```/g;\r\n let cleaned = text;\r\n let match: RegExpExecArray | null;\r\n let uiData: any = null;\r\n\r\n while ((match = regex.exec(text)) !== null) {\r\n const block = match[1].trim();\r\n try {\r\n const parsed = JSON.parse(block);\r\n\r\n if (parsed && parsed.components && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map((comp: any, index: number) => {\r\n if (!comp.id || typeof comp.id !== \"string\" || !comp.id.trim()) {\r\n comp.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (comp.type === \"button\") {\r\n if (!comp.buttonType) {\r\n comp.buttonType = \"click\";\r\n }\r\n }\r\n\r\n if (comp.type === \"input\") {\r\n if (!comp.fieldType) {\r\n comp.fieldType = \"text\";\r\n }\r\n }\r\n\r\n if (comp.type === \"select\") {\r\n if (comp.options && Array.isArray(comp.options)) {\r\n const firstOption = comp.options[0];\r\n if (typeof firstOption === \"object\" && firstOption !== null) {\r\n if (\"label\" in firstOption || \"value\" in firstOption) {\r\n comp.options = comp.options.map((opt: any) =>\r\n opt.label || opt.value || String(opt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (comp.type === \"table\") {\r\n if (comp.columns && Array.isArray(comp.columns)) {\r\n const firstCol = comp.columns[0];\r\n if (typeof firstCol === \"object\" && firstCol !== null) {\r\n comp.columns = comp.columns.map((col: any) =>\r\n col.label || col.id || String(col)\r\n );\r\n }\r\n }\r\n\r\n if (comp.rows && Array.isArray(comp.rows)) {\r\n const firstRow = comp.rows[0];\r\n if (typeof firstRow === \"object\" && !Array.isArray(firstRow)) {\r\n comp.rows = comp.rows.map((row: any) => {\r\n if (Array.isArray(row)) return row;\r\n return Object.values(row).map((val: any) => {\r\n if (typeof val === \"object\" && val !== null) {\r\n if (val.type === \"image\" && val.src) return val.src;\r\n if (val.value !== undefined) return String(val.value);\r\n }\r\n return String(val || \"\");\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (comp.type === \"form\" && comp.items && Array.isArray(comp.items)) {\r\n comp.items = comp.items.map((field: any, fieldIndex: number) => {\r\n if (!field.id || !field.id.trim()) {\r\n field.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n if (field.optional !== undefined) {\r\n field.requiredField = !field.optional;\r\n delete field.optional;\r\n }\r\n\r\n if (field.required !== undefined) {\r\n field.requiredField = field.required;\r\n delete field.required;\r\n }\r\n\r\n if (field.type === \"input\" && !field.fieldType) {\r\n field.fieldType = \"text\";\r\n }\r\n\r\n if (field.type === \"select\" && field.options && Array.isArray(field.options)) {\r\n const firstOpt = field.options[0];\r\n if (typeof firstOpt === \"object\" && firstOpt !== null) {\r\n field.options = field.options.map((opt: any) =>\r\n opt.label || opt.value || String(opt)\r\n );\r\n }\r\n }\r\n\r\n return field;\r\n });\r\n }\r\n\r\n if (comp.type === \"list\" && comp.items && Array.isArray(comp.items)) {\r\n comp.items = comp.items.map((item: any, itemIndex: number) => {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n value: item,\r\n label: item\r\n };\r\n }\r\n if (!item.id || !item.id.trim()) {\r\n item.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return item;\r\n });\r\n }\r\n\r\n return comp;\r\n });\r\n\r\n uiData = parsed;\r\n }\r\n\r\n cleaned = cleaned.replace(match[0], \"\").trim();\r\n\r\n break;\r\n } catch (e) {\r\n console.error(\"Invalid ui-component JSON:\", e, block);\r\n }\r\n }\r\n\r\n return {\r\n cleanedText: cleaned,\r\n uiData: uiData\r\n };\r\n};\r\n\r\n","\"use client\";\r\nimport { AizekChatBotProps, ChatWidgetApiResponse, HeaderValidationResult, Message } from \"../../types/chatbot\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { getActiveSessionId, getOrCreateDeviceId, MAX_SESSIONS, purgeExpiredLocalSessions, readStoredSessions, setActiveSessionId, touchSession, upsertSessionsFromServer, validateHeaders, writeStoredSessions } from \"../../utils/global\";\r\nimport { HeaderAlert } from \"../header-alert\";\r\nimport { ChatInput } from \"../chat-input\";\r\nimport { MessageBubble } from \"../message-bubble\";\r\nimport { TypingDots } from \"../typing-dots\";\r\nimport { extractUIJsonFromText } from \"../../utils/chatbot\";\r\nimport { BaseResponse } from \"../../types/global\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\n\r\nimport \"../../styles/index.scss\";\r\n\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({\r\n clientId,\r\n headers,\r\n onMounted,\r\n onReady,\r\n onOpen,\r\n onClose,\r\n onMessage,\r\n onToolCall,\r\n onDisconnect,\r\n}) => {\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const [config, setConfig] = useState<ChatWidgetApiResponse>();\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isConfigLoading, setIsConfigLoading] = useState(true);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [headerValidation, setHeaderValidation] = useState<HeaderValidationResult | null>(null);\r\n const [showAlert, setShowAlert] = useState(true);\r\n\r\n const [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSessionId, setActiveSessionIdState] = useState<string | null>(null);\r\n const [activeTab, setActiveTab] = useState<\"home\" | \"messages\" | \"info\">(\"home\");\r\n const [messageView, setMessageView] = useState<\"list\" | \"detail\">(\"list\");\r\n\r\n const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\n // const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\n const createNewSession = async () => {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n if (sessions.length >= MAX_SESSIONS) {\r\n throw new Error(`You can open up to ${MAX_SESSIONS} sessions.`);\r\n }\r\n\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data: BaseResponse<any> = await res.json();\r\n if (!data.success) throw new Error(data.message || \"session create failed\");\r\n\r\n const sid: string = data.data.sessionId;\r\n const updatedSessions: string[] = data.data.sessions ?? [sid];\r\n\r\n upsertSessionsFromServer(updatedSessions, setSessions);\r\n setActiveSessionIdState(sid);\r\n setActiveSessionId(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n touchSession(sid);\r\n\r\n setMessages([]);\r\n return sid;\r\n };\r\n\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n\r\n const localActive = getActiveSessionId();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data: BaseResponse<any> = await response.json();\r\n if (!data.success) {\r\n setIsOpen(false);\r\n return;\r\n }\r\n\r\n setIsOpen(!!data.data.widget_config.initial_open);\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n const merged = upsertSessionsFromServer(serverSessions, setSessions);\r\n\r\n if (merged.length === 0) {\r\n const newSid = await createNewSession();\r\n setActiveSessionIdState(newSid);\r\n setActiveSessionId(newSid);\r\n return;\r\n }\r\n\r\n const mergedIds = merged.map((s) => s.sessionId);\r\n const nextActive =\r\n (localActive && mergedIds.includes(localActive) ? localActive : null) ?? mergedIds[0] ?? null;\r\n\r\n setActiveSessionIdState(nextActive);\r\n setActiveSessionId(nextActive);\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(headers, data.data.auth_config, {\r\n allowExtra: false,\r\n caseSensitive: true,\r\n });\r\n setHeaderValidation(validationResult);\r\n }\r\n\r\n onReady?.({ config: { ...data.data } });\r\n } catch (error) {\r\n console.error(\"Failed to load chat widget config:\", error);\r\n } finally {\r\n setIsConfigLoading(false);\r\n }\r\n };\r\n\r\n const getHistoryMessageBySessionId = async (sid: string) => {\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data = await response.json();\r\n if (!data.success) {\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n }\r\n\r\n const historyMessages: Message[] = [];\r\n\r\n if (data.data?.messages && Array.isArray(data.data.messages)) {\r\n for (const msg of data.data.messages) {\r\n let textContent = \"\";\r\n let uiData = null;\r\n\r\n // content string ise direkt kullan\r\n if (typeof msg.content === \"string\") {\r\n textContent = msg.content;\r\n }\r\n // content array ise type: \"text\" olanları birleştir\r\n else if (Array.isArray(msg.content)) {\r\n const textParts: string[] = [];\r\n\r\n for (const item of msg.content) {\r\n if (item.type === \"text\" && item.text) {\r\n textParts.push(item.text);\r\n }\r\n // tool_use ve tool_result gibi mesajları atla (bunlar UI'da gösterilmez)\r\n }\r\n\r\n textContent = textParts.join(\"\\n\");\r\n }\r\n\r\n // UI component'leri çıkar\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n textContent = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n // Mesajı ekle (boş mesajları atla)\r\n if (textContent.trim() || uiData) {\r\n historyMessages.push({\r\n text: textContent.trim() || undefined,\r\n ui: uiData,\r\n role: msg.role === \"user\" ? \"user\" : msg.role === \"assistant\" ? \"assistant\" : \"user\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n return historyMessages;\r\n } catch (error) {\r\n console.error(\"Error fetching message history:\", error);\r\n return [];\r\n }\r\n };\r\n\r\n\r\n useEffect(() => {\r\n onMounted?.();\r\n loadConfig();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const t = setInterval(() => {\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n }, 1000);\r\n\r\n return () => clearInterval(t);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (typeof config?.widget_config.initial_open === \"boolean\") {\r\n const open = config.widget_config.initial_open;\r\n setIsOpen(open);\r\n if (open) onOpen?.();\r\n else onClose?.();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSessionId && !isConfigLoading) {\r\n getHistoryMessageBySessionId(activeSessionId).then((historyMessages) => {\r\n setMessages(historyMessages);\r\n }).catch((error) => {\r\n console.error(\"Failed to load message history:\", error);\r\n });\r\n } else if (!activeSessionId) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSessionId, isConfigLoading]);\r\n\r\n const addMessage = (payload: Omit<Message, \"timestamp\" | \"id\">) => {\r\n const newMessage: Message = {\r\n text: payload.text,\r\n ui: payload.ui,\r\n role: payload.role,\r\n timestamp: new Date(),\r\n };\r\n\r\n onMessage?.(newMessage);\r\n setMessages((prev) => [...prev, newMessage]);\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n return newMessage;\r\n };\r\n\r\n const sendMessage = async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n { text: message, ui: undefined, role: approval ? \"approval\" : \"user\", timestamp: new Date() },\r\n ]);\r\n\r\n setIsLoading(true);\r\n\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n\r\n let sid = activeSessionId;\r\n if (!sid) sid = await createNewSession();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ message }),\r\n });\r\n\r\n // session expired olabilir -> 401 gelirse yeni session açıp retry\r\n if (response.status === 401) {\r\n // localde bu session’ı düşür\r\n const local = readStoredSessions().filter((s) => s.sessionId !== sid);\r\n writeStoredSessions(local);\r\n setSessions(local.map((x) => x.sessionId));\r\n setActiveSessionId(null);\r\n setActiveSessionIdState(null);\r\n\r\n const newSid = await createNewSession();\r\n\r\n const retry = await fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": newSid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ message }),\r\n });\r\n\r\n if (!retry.ok) throw new Error(`HTTP error ${retry.status}`);\r\n\r\n const retryJson = await retry.json();\r\n const text = JSON.stringify(retryJson.data);\r\n const { cleanedText, uiData } = extractUIJsonFromText(text);\r\n addMessage({ text: cleanedText, ui: uiData, role: \"assistant\" });\r\n\r\n touchSession(newSid);\r\n return;\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error ${response.status}`);\r\n }\r\n\r\n if (!response.body) {\r\n throw new Error(\"Streaming desteklenmiyor (response.body yok)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n const chunks = buffer.split(\"\\n\\n\");\r\n buffer = chunks.pop() ?? \"\";\r\n\r\n for (const rawChunk of chunks) {\r\n const line = rawChunk.split(\"\\n\").find((l) => l.startsWith(\"data:\"));\r\n\r\n if (!line) continue;\r\n\r\n const jsonStr = line.replace(/^data:\\s*/, \"\").trim();\r\n if (!jsonStr) continue;\r\n\r\n const event = JSON.parse(jsonStr) as {\r\n type: string;\r\n content?: string;\r\n };\r\n\r\n if (event.type === \"assistant_text\" && event.content) {\r\n const { cleanedText, uiData } = extractUIJsonFromText(event.content);\r\n addMessage({\r\n text: cleanedText,\r\n ui: uiData,\r\n role: \"assistant\",\r\n });\r\n }\r\n\r\n if (event.type === \"assistant_tool_result\" && event.content) {\r\n const toolInfoParsed = JSON.parse(event.content)\r\n\r\n onToolCall?.(toolInfoParsed);\r\n\r\n }\r\n\r\n if (event.type === \"error\" && event.content) {\r\n const { cleanedText, uiData } = extractUIJsonFromText(event.content);\r\n addMessage({\r\n text: cleanedText,\r\n ui: uiData,\r\n role: \"assistant\",\r\n });\r\n }\r\n }\r\n }\r\n touchSession(sid);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n addMessage({ text: \"Sorry, something went wrong. Please try again.\", role: \"assistant\" });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const disconnectActiveSession = async () => {\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n const sid = activeSessionId;\r\n if (!sid) return;\r\n\r\n await fetch(`${PROXY_BASE_URL}/aizek-disconnect?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ sessionId: sid }),\r\n });\r\n\r\n const nextStored = readStoredSessions().filter((s) => s.sessionId !== sid);\r\n writeStoredSessions(nextStored);\r\n\r\n const nextSessions = nextStored.map((x) => x.sessionId);\r\n setSessions(nextSessions);\r\n\r\n const nextActive = nextSessions[0] ?? null;\r\n setActiveSessionIdState(nextActive);\r\n setActiveSessionId(nextActive);\r\n\r\n setMessages([]);\r\n onDisconnect?.();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n setActiveSessionIdState(sid);\r\n setActiveSessionId(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n const getSessionLabel = (sid: string) => {\r\n const idx = sessions.indexOf(sid);\r\n return idx >= 0 ? `Chat ${idx + 1}` : \"Chat\";\r\n };\r\n\r\n const toggleChat = () => {\r\n const newIsOpen = !isOpen;\r\n setIsOpen(newIsOpen);\r\n\r\n if (newIsOpen) onOpen?.();\r\n else onClose?.();\r\n };\r\n\r\n const clean = sanitizeHtml(config?.widget_config.welcome_message ?? \"\", {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: {\r\n a: [\"href\", \"target\", \"rel\"]\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {isConfigLoading ? (\r\n <button\r\n className=\"floating-button bottom-right button-sizes medium loading-state\"\r\n style={{ background: \"#4f46e5\" }}\r\n aria-label=\"Loading\"\r\n >\r\n <div className=\"loading-spinner\" />\r\n </button>\r\n ) : (\r\n <>\r\n {isOpen && <div className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`} onClick={toggleChat} />}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{ width: config?.widget_config.chat_width, height: config?.widget_config.chat_height }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div className=\"header\" style={{ background: config?.widget_config.header_background }}>\r\n <div className=\"logo-container\">\r\n {config?.widget_config.company_logo ? (\r\n config?.widget_config.company_logo.startsWith(\"http\") ||\r\n config?.widget_config.company_logo.startsWith(\"data:\") ? (\r\n <img src={config?.widget_config.company_logo} alt=\"Company Logo\" className=\"logo-image\" />\r\n ) : (\r\n <span className=\"logo-text\">{config?.widget_config.company_logo}</span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">{config?.widget_config.company_name}</h3>\r\n <p className=\"status-text\">{isLoading ? \"Typing...\" : \"Online\"}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{config?.widget_config.company_name}</h3>\r\n <p className=\"panel-subtitle\">\r\n Ask anything. We keep your history and respond instantly.\r\n </p>\r\n <div className=\"home-actions\">\r\n <button\r\n className=\"primary-button\"\r\n onClick={async () => {\r\n try {\r\n await createNewSession();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }}\r\n disabled={isLoading || sessions.length >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button\r\n className=\"ghost-button\"\r\n onClick={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <div className=\"conversation-list\">\r\n <div className=\"list-header\">\r\n <div>\r\n <p className=\"eyebrow\">Conversations</p>\r\n <h4 className=\"panel-title\">Inbox</h4>\r\n </div>\r\n <button\r\n className=\"session-new-button\"\r\n onClick={async () => {\r\n try {\r\n await createNewSession();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }}\r\n disabled={sessions.length >= MAX_SESSIONS}\r\n >\r\n <span>+ New</span>\r\n </button>\r\n </div>\r\n\r\n {sessions.length === 0 ? (\r\n <div className=\"empty-list\">\r\n <div className=\"empty-state-icon\">💬</div>\r\n <h4 className=\"empty-state-title\">No conversations yet</h4>\r\n <p className=\"empty-state-description\">\r\n Start a new conversation to see it appear here.\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"conversation-items\">\r\n {sessions.map((sid) => (\r\n <button\r\n key={sid}\r\n className={`conversation-item ${sid === activeSessionId ? \"active\" : \"\"}`}\r\n onClick={() => handleSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionLabel(sid)}</p>\r\n <p className=\"conversation-sub\">Session ID: {sid.slice(0, 8)}...</p>\r\n </div>\r\n <span className=\"conversation-pill\">Open</span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"conversation-detail\">\r\n <div className=\"detail-header\">\r\n <div className=\"detail-header-left\">\r\n <button className=\"icon-button\" onClick={() => setMessageView(\"list\")} aria-label=\"Back\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M15 18l-6-6 6-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div className=\"detail-header-center\">\r\n <div className=\"detail-avatar\" aria-hidden=\"true\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 3c-4.418 0-8 3.134-8 7 0 2.382 1.362 4.486 3.5 5.737V21l4.07-2.13c.14.008.283.013.43.013 4.418 0 8-3.134 8-7s-3.582-7-8-7z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <div className=\"detail-title\">\r\n <div className=\"detail-title-row\">\r\n <strong className=\"detail-title-text\">\r\n {activeSessionId ? getSessionLabel(activeSessionId) : \"Chat\"}\r\n </strong>\r\n <span className={`status-dot ${isLoading ? \"typing\" : \"online\"}`} aria-hidden=\"true\" />\r\n </div>\r\n <p className=\"detail-subtitle\">{isLoading ? \"Yazıyor…\" : \"Online\"}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button\r\n className=\"icon-button\"\r\n onClick={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n aria-label=\"Bilgi\"\r\n >\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 17v-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M12 8h.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n className=\"icon-button danger\"\r\n onClick={disconnectActiveSession}\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M3 6h18\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M8 6V4h8v2\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6l1 16h10l1-16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert headerValidation={headerValidation} setShowAlert={setShowAlert} showAlert={showAlert} />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: clean }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble key={index} message={message} onAction={sendMessage} />\r\n ))}\r\n\r\n {config?.widget_config.show_typing_indicator && isLoading && <TypingDots />}\r\n </>\r\n )}\r\n\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n handleSendMessage={sendMessage}\r\n isLoading={isLoading}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <div className=\"info-panel\">\r\n <p className=\"eyebrow\">Info</p>\r\n <h4 className=\"panel-title\">Widget Details</h4>\r\n <ul className=\"info-list\">\r\n <li>\r\n <span>Company</span>\r\n <strong>{config?.widget_config.company_name}</strong>\r\n </li>\r\n <li>\r\n <span>Status</span>\r\n <strong>{isLoading ? \"Typing...\" : \"Online\"}</strong>\r\n </li>\r\n <li>\r\n <span>Conversations</span>\r\n <strong>{sessions.length}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n <button\r\n className={`nav-button ${activeTab === \"home\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"home\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Home\r\n </button>\r\n <button\r\n className={`nav-button ${activeTab === \"messages\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Messages\r\n </button>\r\n <button\r\n className={`nav-button ${activeTab === \"info\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Info\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={toggleChat}\r\n className={`floating-button ${config?.widget_config.button_position} button-sizes ${config?.widget_config.button_size} ${isOpen ? \"is-open\" : \"\"\r\n }`}\r\n style={{ background: config?.widget_config.button_background }}\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 );\r\n};\r\n"]}
1
+ {"version":3,"sources":["../src/utils/global.ts","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/utils/chatbot.ts","../src/components/aizek-chat/index.tsx"],"names":["jsx","jsxs","useRef","Fragment","useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\r\nimport { AuthConfig, HeaderValidationResult, HeadersType } from \"../types/chatbot\";\r\nimport { StoredSession } from \"../types/global\";\r\n\r\nexport const SESSION_TTL_MS = 60 * 60 * 1000; // 1 saat\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const DEVICE_KEY = \"aizek_device_id_v1\";\r\nexport const ACTIVE_SESSION_KEY = \"aizek_active_session_v1\";\r\nexport const LOCAL_SESSIONS_KEY = \"aizek_sessions_v1\"; // StoredSession[]\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(headers: HeadersType, authConfig: AuthConfig, opts: { caseSensitive?: boolean; allowExtra?: boolean } = {}): HeaderValidationResult {\r\n // If we received headers but authConfig is missing/empty, return early with a warning\r\n if (headers && (!authConfig || Object.keys(authConfig).length === 0)) {\r\n return {\r\n isValid: false,\r\n missingKeys: [],\r\n extraKeys: [],\r\n emptyValueKeys: [],\r\n warning: \"Auth config boş ya da tanımsız, header doğrulaması yapılamıyor.\"\r\n };\r\n }\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 const hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\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}\r\n\r\nexport function getOrCreateDeviceId() {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_KEY, id);\r\n return id;\r\n}\r\n\r\nfunction now() {\r\n return Date.now();\r\n}\r\n\r\nexport function readStoredSessions(): StoredSession[] {\r\n try {\r\n const raw = localStorage.getItem(LOCAL_SESSIONS_KEY);\r\n const parsed = JSON.parse(raw ?? \"[]\");\r\n if (!Array.isArray(parsed)) return [];\r\n return parsed\r\n .filter((x) => x && typeof x.sessionId === \"string\" && typeof x.lastActive === \"number\")\r\n .slice(0, MAX_SESSIONS);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function writeStoredSessions(list: StoredSession[]) {\r\n localStorage.setItem(LOCAL_SESSIONS_KEY, JSON.stringify(list.slice(0, MAX_SESSIONS)));\r\n}\r\n\r\nexport function purgeExpiredLocalSessions(setActiveSessionIdState: Dispatch<SetStateAction<string | null>>) {\r\n const list = readStoredSessions();\r\n const filtered = list.filter((s) => now() - s.lastActive <= SESSION_TTL_MS);\r\n if (filtered.length !== list.length) writeStoredSessions(filtered);\r\n\r\n const active = getActiveSessionId();\r\n if (active && !filtered.some((s) => s.sessionId === active)) {\r\n setActiveSessionId(null);\r\n setActiveSessionIdState(null);\r\n }\r\n\r\n return filtered;\r\n}\r\n\r\nexport function getActiveSessionId(): string | null {\r\n return localStorage.getItem(ACTIVE_SESSION_KEY);\r\n}\r\n\r\nexport function setActiveSessionId(id: string | null) {\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_KEY, id);\r\n}\r\n\r\nexport function touchSession(sessionId: string) {\r\n const list = readStoredSessions();\r\n const next = list.map((s) => (s.sessionId === sessionId ? { ...s, lastActive: now() } : s));\r\n if (!next.some((s) => s.sessionId === sessionId)) next.unshift({ sessionId, lastActive: now() });\r\n writeStoredSessions(next.slice(0, MAX_SESSIONS));\r\n}\r\n\r\nexport function upsertSessionsFromServer(serverSessionIds: string[], setSessions: Dispatch<SetStateAction<string[]>>) {\r\n const local = readStoredSessions();\r\n const map = new Map(local.map((s) => [s.sessionId, s.lastActive]));\r\n\r\n const merged: StoredSession[] = serverSessionIds.slice(0, MAX_SESSIONS).map((sid) => ({\r\n sessionId: sid,\r\n lastActive: map.get(sid) ?? now(),\r\n }));\r\n\r\n writeStoredSessions(merged);\r\n setSessions(merged.map((x) => x.sessionId));\r\n return merged;\r\n}","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/chatbot\";\r\n\r\ninterface IHeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null\r\n showAlert: boolean,\r\n setShowAlert: Dispatch<SetStateAction<boolean>>\r\n}\r\nexport const HeaderAlert = ({ headerValidation, showAlert, setShowAlert }: IHeaderAlertProps) => {\r\n if (!headerValidation || !showAlert) return null;\r\n\r\n const { isValid, missingKeys, extraKeys, emptyValueKeys, warning } =\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 !warning\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 || !!warning;\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{getAlertIcon()}</div>\r\n <div className=\"alert-content\">\r\n <h4 className=\"alert-title\">\r\n {hasErrors ? \"Header Doğrulama Hatası\" : \"Header Uyarısı\"}\r\n </h4>\r\n <p className=\"alert-message\">\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>Eksik Header'lar:</strong>\r\n <ul className=\"alert-list\">\r\n {missingKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code>\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 >\r\n Boş Değerli Header'lar:\r\n </strong>\r\n <ul className=\"alert-list\">\r\n {emptyValueKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code >\r\n {key}\r\n </code>\r\n <span >\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 >Fazla Header'lar:</strong>\r\n <ul className=\"alert-list\">\r\n {extraKeys.map((key, index) => (\r\n <li key={index} className=\"alert-list-item\">\r\n <span >\r\n •\r\n </span>\r\n <code >\r\n {key}\r\n </code>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {warning && (\r\n <div>\r\n <strong>Uyarı:</strong>\r\n <p className=\"alert-message\">{warning}</p>\r\n </div>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setShowAlert(false)}\r\n className=\"alert-close-button\"\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};","export const LoadingSpinner: React.FC = () => {\r\n return <div className=\"loading-spinner\" />;\r\n};","import { useRef, useState } from \"react\";\r\nimport { LoadingSpinner } from \"../loading-spinner\";\r\n\r\ninterface IChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n handleSendMessage: (message: string, approval?: boolean) => void\r\n}\r\n\r\nexport const ChatInput = ({ isLoading, placeholder, handleSendMessage }: IChatInputProps) => {\r\n const [message, setMessage] = useState(\"\");\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\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} className=\"input-container\">\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 className=\"textarea\"\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !message.trim()}\r\n className=\"send-button\"\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};","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData } from \"../../types/generative-ui\";\r\n\r\n\r\n\r\ntype GenericUIRendererProps = {\r\n uiData: UIData;\r\n onInteraction: (event: any) => void;\r\n};\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({ uiData, onInteraction }) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData || !uiData.components) return null;\r\n\r\n // Form değerlerini toplayan fonksiyon\r\n const collectFormValues = () => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: Record<string, any> = {};\r\n const inputs = containerRef.current.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>('input, textarea, select');\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute('name');\r\n if (name) {\r\n if (element instanceof HTMLInputElement && element.type === 'checkbox') {\r\n formData[name] = element.checked;\r\n } else if (element instanceof HTMLInputElement && element.type === 'radio') {\r\n if (element.checked) {\r\n formData[name] = element.value;\r\n }\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n const renderComponent = (comp: UIComponent): React.ReactNode => {\r\n switch (comp.type) {\r\n case \"text\":\r\n return (\r\n <p key={comp.id} className=\"gen-ui-text\">\r\n {comp.value ?? comp.label}\r\n </p>\r\n );\r\n\r\n case \"input\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-input-wrapper\">\r\n {comp.label && <label className=\"gen-ui-input-label\">{comp.label}</label>}\r\n {comp.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={comp.id}\r\n placeholder={comp.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={comp.id}\r\n type={comp.fieldType || \"text\"}\r\n placeholder={comp.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n );\r\n\r\n case \"select\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-select-wrapper\">\r\n {comp.label && <label className=\"gen-ui-select-label\">{comp.label}</label>}\r\n <select name={comp.id} className=\"gen-ui-select\">\r\n {comp.options?.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n );\r\n\r\n case \"button\":\r\n return (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: comp.label,\r\n buttonId: comp.buttonType,\r\n formData: formValues\r\n });\r\n }}\r\n key={comp.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {comp.label}\r\n </button>\r\n );\r\n\r\n case \"card\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-card\">\r\n {comp.label && <h2 className=\"gen-ui-card-title\">{comp.label}</h2>}\r\n {comp.value && <p className=\"gen-ui-card-content\">{comp.value}</p>}\r\n </div>\r\n );\r\n\r\n case \"list\":\r\n return (\r\n <ul key={comp.id} className=\"gen-ui-list\">\r\n {comp.items?.map((item) => (\r\n <li key={item.id} className=\"gen-ui-list-item\">\r\n {item.label ?? String(item.value ?? \"\")}\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <img\r\n key={comp.id}\r\n src={comp.url}\r\n alt={comp.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n );\r\n\r\n case \"link\":\r\n return (\r\n <a\r\n key={comp.id}\r\n href={comp.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {comp.label || comp.url}\r\n </a>\r\n );\r\n\r\n case \"table\":\r\n return (\r\n <div key={comp.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {comp.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {comp.columns.map((col) => (\r\n <th key={col} className=\"gen-ui-table-th\">\r\n {col}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n )}\r\n {comp.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {comp.rows.map((row, ridx) => (\r\n <tr key={ridx}>\r\n {row.map((cell, cidx) => (\r\n <td key={cidx} className=\"gen-ui-table-td\">\r\n {cell}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n )}\r\n </table>\r\n </div>\r\n );\r\n\r\n case \"form\":\r\n return (\r\n <form key={comp.id} className=\"gen-ui-form\">\r\n {comp.items?.map((field) => renderComponent(field))}\r\n </form>\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"generative-ui-container\" ref={containerRef}>\r\n {(uiData.title || uiData.description) && (\r\n <div className=\"generative-ui-header\">\r\n {uiData.title && (\r\n <h1 className=\"generative-ui-title\">{uiData.title}</h1>\r\n )}\r\n {uiData.description && (\r\n <p className=\"generative-ui-description\">{uiData.description}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {uiData.components.map((comp) => renderComponent(comp))}\r\n </div>\r\n );\r\n};\r\n\r\n","import { Message } from \"../../types/chatbot\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface IMessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: IMessageBubbleProps) => {\r\n console.log(\"MESSAGE\", message);\r\n\r\n const isUser = message.role === \"user\";\r\n const approval = message.role === \"approval\"\r\n\r\n if (approval) {\r\n return <></>\r\n }\r\n\r\n return (\r\n <div className={`message-container ${isUser ? \"user\" : \"assistant\"}`}>\r\n <div className={`message-bubble ${isUser ? \"user\" : \"assistant\"}`}>\r\n {isUser ? (\r\n message.text && (\r\n <div className=\"markdown-content\">{message.text}</div>\r\n )\r\n ) : (\r\n <>\r\n {message.text && (\r\n <div className=\"markdown-content\">\r\n <ReactMarkdown remarkPlugins={[remarkGfm]}>\r\n {message.text}\r\n </ReactMarkdown>\r\n </div>\r\n )}\r\n {message.ui && (\r\n <GenericUIRenderer\r\n uiData={message.ui}\r\n onInteraction={(event) => {\r\n console.log(\"event\", event);\r\n if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n\r\n } else {\r\n onAction(event.action, true);\r\n\r\n }\r\n\r\n }}\r\n />\r\n )}\r\n\r\n </>\r\n )}\r\n </div>\r\n\r\n <div className={`message-time ${isUser ? \"user\" : \"assistant\"}`}>\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","import { useEffect, useState } from \"react\";\r\n\r\nexport const TypingDots = () => {\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 (\r\n <div className=\"message-container assistant\">\r\n <div className=\"message-bubble assistant\">\r\n <div className=\"message-typing-indicator\">\r\n <span>{dots}</span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};","export const extractUIJsonFromText = (text: string): { cleanedText: string; uiData: any | null } => {\r\n const regex = /```ui-component([\\s\\S]*?)```/g;\r\n let cleaned = text;\r\n let match: RegExpExecArray | null;\r\n let uiData: any = null;\r\n\r\n while ((match = regex.exec(text)) !== null) {\r\n const block = match[1].trim();\r\n try {\r\n const parsed = JSON.parse(block);\r\n\r\n if (parsed && parsed.components && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map((comp: any, index: number) => {\r\n if (!comp.id || typeof comp.id !== \"string\" || !comp.id.trim()) {\r\n comp.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (comp.type === \"button\") {\r\n if (!comp.buttonType) {\r\n comp.buttonType = \"click\";\r\n }\r\n }\r\n\r\n if (comp.type === \"input\") {\r\n if (!comp.fieldType) {\r\n comp.fieldType = \"text\";\r\n }\r\n }\r\n\r\n if (comp.type === \"select\") {\r\n if (comp.options && Array.isArray(comp.options)) {\r\n const firstOption = comp.options[0];\r\n if (typeof firstOption === \"object\" && firstOption !== null) {\r\n if (\"label\" in firstOption || \"value\" in firstOption) {\r\n comp.options = comp.options.map((opt: any) =>\r\n opt.label || opt.value || String(opt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (comp.type === \"table\") {\r\n if (comp.columns && Array.isArray(comp.columns)) {\r\n const firstCol = comp.columns[0];\r\n if (typeof firstCol === \"object\" && firstCol !== null) {\r\n comp.columns = comp.columns.map((col: any) =>\r\n col.label || col.id || String(col)\r\n );\r\n }\r\n }\r\n\r\n if (comp.rows && Array.isArray(comp.rows)) {\r\n const firstRow = comp.rows[0];\r\n if (typeof firstRow === \"object\" && !Array.isArray(firstRow)) {\r\n comp.rows = comp.rows.map((row: any) => {\r\n if (Array.isArray(row)) return row;\r\n return Object.values(row).map((val: any) => {\r\n if (typeof val === \"object\" && val !== null) {\r\n if (val.type === \"image\" && val.src) return val.src;\r\n if (val.value !== undefined) return String(val.value);\r\n }\r\n return String(val || \"\");\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (comp.type === \"form\" && comp.items && Array.isArray(comp.items)) {\r\n comp.items = comp.items.map((field: any, fieldIndex: number) => {\r\n if (!field.id || !field.id.trim()) {\r\n field.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n if (field.optional !== undefined) {\r\n field.requiredField = !field.optional;\r\n delete field.optional;\r\n }\r\n\r\n if (field.required !== undefined) {\r\n field.requiredField = field.required;\r\n delete field.required;\r\n }\r\n\r\n if (field.type === \"input\" && !field.fieldType) {\r\n field.fieldType = \"text\";\r\n }\r\n\r\n if (field.type === \"select\" && field.options && Array.isArray(field.options)) {\r\n const firstOpt = field.options[0];\r\n if (typeof firstOpt === \"object\" && firstOpt !== null) {\r\n field.options = field.options.map((opt: any) =>\r\n opt.label || opt.value || String(opt)\r\n );\r\n }\r\n }\r\n\r\n return field;\r\n });\r\n }\r\n\r\n if (comp.type === \"list\" && comp.items && Array.isArray(comp.items)) {\r\n comp.items = comp.items.map((item: any, itemIndex: number) => {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n value: item,\r\n label: item\r\n };\r\n }\r\n if (!item.id || !item.id.trim()) {\r\n item.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return item;\r\n });\r\n }\r\n\r\n return comp;\r\n });\r\n\r\n uiData = parsed;\r\n }\r\n\r\n cleaned = cleaned.replace(match[0], \"\").trim();\r\n\r\n break;\r\n } catch (e) {\r\n console.error(\"Invalid ui-component JSON:\", e, block);\r\n }\r\n }\r\n\r\n return {\r\n cleanedText: cleaned,\r\n uiData: uiData\r\n };\r\n};\r\n\r\n","\"use client\";\r\nimport { AizekChatBotProps, ChatWidgetApiResponse, HeaderValidationResult, Message } from \"../../types/chatbot\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { getActiveSessionId, getOrCreateDeviceId, MAX_SESSIONS, purgeExpiredLocalSessions, readStoredSessions, setActiveSessionId, touchSession, upsertSessionsFromServer, validateHeaders, writeStoredSessions } from \"../../utils/global\";\r\nimport { HeaderAlert } from \"../header-alert\";\r\nimport { ChatInput } from \"../chat-input\";\r\nimport { MessageBubble } from \"../message-bubble\";\r\nimport { TypingDots } from \"../typing-dots\";\r\nimport { extractUIJsonFromText } from \"../../utils/chatbot\";\r\nimport { BaseResponse } from \"../../types/global\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\nimport \"../../styles/index.scss\";\r\n\r\n\r\nexport const AizekChatBot: React.FC<AizekChatBotProps> = ({ clientId, headers, onMounted, onReady, onOpen, onClose, onMessage, onToolCall, onDisconnect }) => {\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const [config, setConfig] = useState<ChatWidgetApiResponse>();\r\n const [messages, setMessages] = useState<Message[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isConfigLoading, setIsConfigLoading] = useState(true);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [headerValidation, setHeaderValidation] = useState<HeaderValidationResult | null>(null);\r\n const [showAlert, setShowAlert] = useState(true);\r\n\r\n const [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSessionId, setActiveSessionIdState] = useState<string | null>(null);\r\n const [activeTab, setActiveTab] = useState<\"home\" | \"messages\" | \"info\">(\"home\");\r\n const [messageView, setMessageView] = useState<\"list\" | \"detail\">(\"list\");\r\n const [sessionTitleById, setSessionTitleById] = useState<Record<string, string>>({});\r\n\r\n const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\n // const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\n const createNewSession = async () => {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n if (sessions.length >= MAX_SESSIONS) {\r\n throw new Error(`You can open up to ${MAX_SESSIONS} sessions.`);\r\n }\r\n\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data: BaseResponse<any> = await res.json();\r\n if (!data.success) throw new Error(data.message || \"session create failed\");\r\n\r\n const sid: string = data.data.sessionId;\r\n const updatedSessions: string[] = data.data.sessions ?? [sid];\r\n\r\n upsertSessionsFromServer(updatedSessions, setSessions);\r\n setActiveSessionIdState(sid);\r\n setActiveSessionId(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n touchSession(sid);\r\n\r\n setMessages([]);\r\n return sid;\r\n };\r\n\r\n const loadConfig = async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n\r\n const localActive = getActiveSessionId();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data: BaseResponse<any> = await response.json();\r\n if (!data.success) {\r\n setIsOpen(false);\r\n return;\r\n }\r\n\r\n setIsOpen(!!data.data.widget_config.initial_open);\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n const merged = upsertSessionsFromServer(serverSessions, setSessions);\r\n\r\n if (merged.length === 0) {\r\n const newSid = await createNewSession();\r\n setActiveSessionIdState(newSid);\r\n setActiveSessionId(newSid);\r\n return;\r\n }\r\n\r\n const mergedIds = merged.map((s) => s.sessionId);\r\n const nextActive =\r\n (localActive && mergedIds.includes(localActive) ? localActive : null) ?? mergedIds[0] ?? null;\r\n\r\n setActiveSessionIdState(nextActive);\r\n setActiveSessionId(nextActive);\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(headers, data.data.auth_config, {\r\n allowExtra: false,\r\n caseSensitive: true,\r\n });\r\n setHeaderValidation(validationResult);\r\n }\r\n\r\n onReady?.({ config: { ...data.data } });\r\n } catch (error) {\r\n console.error(\"Failed to load chat widget config:\", error);\r\n } finally {\r\n setIsConfigLoading(false);\r\n }\r\n };\r\n\r\n const getHistoryMessageBySessionId = async (sid: string) => {\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const data = await response.json();\r\n if (!data.success) {\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n }\r\n\r\n const historyMessages: Message[] = [];\r\n\r\n if (data.data?.messages && Array.isArray(data.data.messages)) {\r\n for (const msg of data.data.messages) {\r\n let textContent = \"\";\r\n let uiData = null;\r\n\r\n if (typeof msg.content === \"string\") {\r\n textContent = msg.content;\r\n }\r\n else if (Array.isArray(msg.content)) {\r\n const textParts: string[] = [];\r\n\r\n for (const item of msg.content) {\r\n if (item.type === \"text\" && item.text) {\r\n textParts.push(item.text);\r\n }\r\n }\r\n\r\n textContent = textParts.join(\"\\n\");\r\n }\r\n\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n textContent = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n if (textContent.trim() || uiData) {\r\n historyMessages.push({\r\n text: textContent.trim() || undefined,\r\n ui: uiData,\r\n role: msg.role === \"user\" ? \"user\" : msg.role === \"assistant\" ? \"assistant\" : \"user\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n return historyMessages;\r\n } catch (error) {\r\n console.error(\"Error fetching message history:\", error);\r\n return [];\r\n }\r\n };\r\n\r\n\r\n useEffect(() => {\r\n onMounted?.();\r\n loadConfig();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const t = setInterval(() => {\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n }, 1000);\r\n\r\n return () => clearInterval(t);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (typeof config?.widget_config.initial_open === \"boolean\") {\r\n const open = config.widget_config.initial_open;\r\n setIsOpen(open);\r\n if (open) onOpen?.();\r\n else onClose?.();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSessionId && !isConfigLoading) {\r\n getHistoryMessageBySessionId(activeSessionId).then((historyMessages) => {\r\n setMessages(historyMessages);\r\n }).catch((error) => {\r\n console.error(\"Failed to load message history:\", error);\r\n });\r\n } else if (!activeSessionId) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSessionId, isConfigLoading]);\r\n\r\n useEffect(() => {\r\n if (!sessions.length) return;\r\n\r\n const missing = sessions.filter((sid) => !sessionTitleById[sid]);\r\n if (!missing.length) return;\r\n\r\n let cancelled = false;\r\n\r\n (async () => {\r\n // fetch sequentially to avoid burst; widget remains responsive\r\n for (const sid of missing) {\r\n if (cancelled) return;\r\n const title = await fetchLastMessageTitle(sid);\r\n if (cancelled) return;\r\n if (!title) continue;\r\n setSessionTitleById((prev) => (prev[sid] ? prev : { ...prev, [sid]: title }));\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [sessions]);\r\n\r\n const addMessage = (payload: Omit<Message, \"timestamp\" | \"id\">) => {\r\n const newMessage: Message = {\r\n text: payload.text,\r\n ui: payload.ui,\r\n role: payload.role,\r\n timestamp: new Date(),\r\n };\r\n\r\n onMessage?.(newMessage);\r\n setMessages((prev) => [...prev, newMessage]);\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n return newMessage;\r\n };\r\n\r\n const sendMessage = async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n { text: message, ui: undefined, role: approval ? \"approval\" : \"user\", timestamp: new Date() },\r\n ]);\r\n\r\n setIsLoading(true);\r\n\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n\r\n purgeExpiredLocalSessions(setActiveSessionIdState);\r\n\r\n let sid = activeSessionId;\r\n if (!sid) sid = await createNewSession();\r\n\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ message }),\r\n });\r\n\r\n // session expired olabilir -> 401 gelirse yeni session açıp retry\r\n if (response.status === 401) {\r\n // localde bu session’ı düşür\r\n const local = readStoredSessions().filter((s) => s.sessionId !== sid);\r\n writeStoredSessions(local);\r\n setSessions(local.map((x) => x.sessionId));\r\n setActiveSessionId(null);\r\n setActiveSessionIdState(null);\r\n\r\n const newSid = await createNewSession();\r\n\r\n const retry = await fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": newSid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ message }),\r\n });\r\n\r\n if (!retry.ok) throw new Error(`HTTP error ${retry.status}`);\r\n\r\n const retryJson = await retry.json();\r\n const text = JSON.stringify(retryJson.data);\r\n const { cleanedText, uiData } = extractUIJsonFromText(text);\r\n addMessage({ text: cleanedText, ui: uiData, role: \"assistant\" });\r\n\r\n touchSession(newSid);\r\n return;\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error ${response.status}`);\r\n }\r\n\r\n if (!response.body) {\r\n throw new Error(\"Streaming desteklenmiyor (response.body yok)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n const chunks = buffer.split(\"\\n\\n\");\r\n buffer = chunks.pop() ?? \"\";\r\n\r\n for (const rawChunk of chunks) {\r\n const line = rawChunk.split(\"\\n\").find((l) => l.startsWith(\"data:\"));\r\n\r\n if (!line) continue;\r\n\r\n const jsonStr = line.replace(/^data:\\s*/, \"\").trim();\r\n if (!jsonStr) continue;\r\n\r\n const event = JSON.parse(jsonStr) as {\r\n type: string;\r\n content?: string;\r\n };\r\n\r\n if (event.type === \"assistant_text\" && event.content) {\r\n const { cleanedText, uiData } = extractUIJsonFromText(event.content);\r\n addMessage({\r\n text: cleanedText,\r\n ui: uiData,\r\n role: \"assistant\",\r\n });\r\n }\r\n\r\n if (event.type === \"assistant_tool_result\" && event.content) {\r\n const toolInfoParsed = JSON.parse(event.content)\r\n\r\n onToolCall?.(toolInfoParsed);\r\n\r\n }\r\n\r\n if (event.type === \"error\" && event.content) {\r\n const { cleanedText, uiData } = extractUIJsonFromText(event.content);\r\n addMessage({\r\n text: cleanedText,\r\n ui: uiData,\r\n role: \"assistant\",\r\n });\r\n }\r\n }\r\n }\r\n touchSession(sid);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n addMessage({ text: \"Sorry, something went wrong. Please try again.\", role: \"assistant\" });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const disconnectActiveSession = async () => {\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n const sid = activeSessionId;\r\n if (!sid) return;\r\n\r\n await fetch(`${PROXY_BASE_URL}/aizek-disconnect?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n body: JSON.stringify({ sessionId: sid }),\r\n });\r\n\r\n const nextStored = readStoredSessions().filter((s) => s.sessionId !== sid);\r\n writeStoredSessions(nextStored);\r\n\r\n const nextSessions = nextStored.map((x) => x.sessionId);\r\n setSessions(nextSessions);\r\n\r\n const nextActive = nextSessions[0] ?? null;\r\n setActiveSessionIdState(nextActive);\r\n setActiveSessionId(nextActive);\r\n\r\n setMessages([]);\r\n onDisconnect?.();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n setActiveSessionIdState(sid);\r\n setActiveSessionId(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n\r\n const getSessionTitle = (sid: string) => {\r\n if (sessionTitleById[sid]) return sessionTitleById[sid];\r\n return \"New conversation\";\r\n };\r\n\r\n const fetchLastMessageTitle = async (sid: string) => {\r\n try {\r\n const deviceId = getOrCreateDeviceId();\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-last-message`, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-session-id\": sid,\r\n \"x-alternate\": JSON.stringify(headers),\r\n },\r\n });\r\n\r\n const json = await res.json();\r\n if (!json?.success) return null;\r\n\r\n const last = json?.data?.lastMessage;\r\n if (!last) return null;\r\n\r\n let textContent = \"\";\r\n if (typeof last.content === \"string\") {\r\n textContent = last.content;\r\n } else if (Array.isArray(last.content)) {\r\n const parts: string[] = [];\r\n for (const item of last.content) {\r\n if (item?.type === \"text\" && typeof item.text === \"string\") parts.push(item.text);\r\n }\r\n textContent = parts.join(\"\\n\");\r\n }\r\n\r\n if (!textContent.trim()) return null;\r\n\r\n // strip ui-component blocks while keeping readable text\r\n const extracted = extractUIJsonFromText(textContent);\r\n const cleaned = (extracted.cleanedText || \"\").trim();\r\n const firstLine = (cleaned.split(\"\\n\").find((l: string) => l.trim()) || \"\").trim();\r\n const title = firstLine || cleaned;\r\n if (!title) return null;\r\n\r\n const compact = title.length > 46 ? `${title.slice(0, 46).trim()}…` : title;\r\n return compact;\r\n } catch (e) {\r\n console.error(\"Failed to fetch last message title:\", e);\r\n return null;\r\n }\r\n };\r\n\r\n const toggleChat = () => {\r\n const newIsOpen = !isOpen;\r\n setIsOpen(newIsOpen);\r\n\r\n if (newIsOpen) onOpen?.();\r\n else onClose?.();\r\n };\r\n\r\n const clean = sanitizeHtml(config?.widget_config.welcome_message ?? \"\", {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: {\r\n a: [\"href\", \"target\", \"rel\"]\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {isConfigLoading ? (\r\n <button\r\n className=\"floating-button bottom-right button-sizes medium loading-state\"\r\n style={{ background: \"#4f46e5\" }}\r\n aria-label=\"Loading\"\r\n >\r\n <div className=\"loading-spinner\" />\r\n </button>\r\n ) : (\r\n <>\r\n {isOpen && <div className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`} onClick={toggleChat} />}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{ width: config?.widget_config.chat_width, height: config?.widget_config.chat_height }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div className=\"header\" style={{ background: config?.widget_config.header_background }}>\r\n <div className=\"logo-container\">\r\n {config?.widget_config.company_logo ? (\r\n config?.widget_config.company_logo.startsWith(\"http\") ||\r\n config?.widget_config.company_logo.startsWith(\"data:\") ? (\r\n <img src={config?.widget_config.company_logo} alt=\"Company Logo\" className=\"logo-image\" />\r\n ) : (\r\n <span className=\"logo-text\">{config?.widget_config.company_logo}</span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">{config?.widget_config.company_name}</h3>\r\n <p className=\"status-text\">{isLoading ? \"Typing...\" : \"Online\"}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{config?.widget_config.company_name}</h3>\r\n <p className=\"panel-subtitle\">\r\n Ask anything. We keep your history and respond instantly.\r\n </p>\r\n <div className=\"home-actions\">\r\n <button\r\n className=\"primary-button\"\r\n onClick={async () => {\r\n try {\r\n await createNewSession();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }}\r\n disabled={isLoading || sessions.length >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button\r\n className=\"ghost-button\"\r\n onClick={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <div className=\"conversation-list\">\r\n <div className=\"list-header\">\r\n <div>\r\n <p className=\"eyebrow\">Conversations</p>\r\n <h4 className=\"panel-title\">Inbox</h4>\r\n </div>\r\n <button\r\n className=\"session-new-button\"\r\n onClick={async () => {\r\n try {\r\n await createNewSession();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }}\r\n disabled={sessions.length >= MAX_SESSIONS}\r\n >\r\n <span>+ New</span>\r\n </button>\r\n </div>\r\n\r\n {sessions.length === 0 ? (\r\n <div className=\"empty-list\">\r\n <div className=\"empty-state-icon\">💬</div>\r\n <h4 className=\"empty-state-title\">No conversations yet</h4>\r\n <p className=\"empty-state-description\">\r\n Start a new conversation to see it appear here.\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"conversation-items\">\r\n {sessions.map((sid) => (\r\n <button\r\n key={sid}\r\n className={`conversation-item ${sid === activeSessionId ? \"active\" : \"\"}`}\r\n onClick={() => handleSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionTitle(sid)}</p>\r\n <p className=\"conversation-sub\">Session ID: {sid.slice(0, 8)}...</p>\r\n </div>\r\n <span className=\"conversation-pill\">Open</span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"conversation-detail\">\r\n <div className=\"detail-header\">\r\n <div className=\"detail-header-left\">\r\n <button className=\"icon-button\" onClick={() => setMessageView(\"list\")} aria-label=\"Back\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M15 18l-6-6 6-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div className=\"detail-header-center\">\r\n <div className=\"detail-avatar\" aria-hidden=\"true\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 3c-4.418 0-8 3.134-8 7 0 2.382 1.362 4.486 3.5 5.737V21l4.07-2.13c.14.008.283.013.43.013 4.418 0 8-3.134 8-7s-3.582-7-8-7z\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <div className=\"detail-title\">\r\n <div className=\"detail-title-row\">\r\n <strong className=\"detail-title-text\">\r\n {activeSessionId ? getSessionTitle(activeSessionId) : \"Chat\"}\r\n </strong>\r\n <span className={`status-dot ${isLoading ? \"typing\" : \"online\"}`} aria-hidden=\"true\" />\r\n </div>\r\n <p className=\"detail-subtitle\">{isLoading ? \"Yazıyor…\" : \"Online\"}</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button\r\n className=\"icon-button\"\r\n onClick={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n aria-label=\"Bilgi\"\r\n >\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 17v-6\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M12 8h.01\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n className=\"icon-button danger\"\r\n onClick={disconnectActiveSession}\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M3 6h18\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n />\r\n <path\r\n d=\"M8 6V4h8v2\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6l1 16h10l1-16\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert headerValidation={headerValidation} setShowAlert={setShowAlert} showAlert={showAlert} />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: clean }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble key={index} message={message} onAction={sendMessage} />\r\n ))}\r\n\r\n {config?.widget_config.show_typing_indicator && isLoading && <TypingDots />}\r\n </>\r\n )}\r\n\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n handleSendMessage={sendMessage}\r\n isLoading={isLoading}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <div className=\"info-panel\">\r\n <p className=\"eyebrow\">Info</p>\r\n <h4 className=\"panel-title\">Widget Details</h4>\r\n <ul className=\"info-list\">\r\n <li>\r\n <span>Company</span>\r\n <strong>{config?.widget_config.company_name}</strong>\r\n </li>\r\n <li>\r\n <span>Status</span>\r\n <strong>{isLoading ? \"Typing...\" : \"Online\"}</strong>\r\n </li>\r\n <li>\r\n <span>Conversations</span>\r\n <strong>{sessions.length}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n <button\r\n className={`nav-button ${activeTab === \"home\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"home\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Home\r\n </button>\r\n <button\r\n className={`nav-button ${activeTab === \"messages\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Messages\r\n </button>\r\n <button\r\n className={`nav-button ${activeTab === \"info\" ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n Info\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={toggleChat}\r\n className={`floating-button ${config?.widget_config.button_position} button-sizes ${config?.widget_config.button_size} ${isOpen ? \"is-open\" : \"\"\r\n }`}\r\n style={{ background: config?.widget_config.button_background }}\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 );\r\n};\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aizek-chatbot",
3
- "version": "1.0.28",
3
+ "version": "1.0.30",
4
4
  "description": "React + TS component library (no Tailwind)",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.cjs",