aizek-chatbot 1.0.32 → 1.0.34
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 +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -13,7 +13,7 @@ var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
|
|
|
13
13
|
var sanitizeHtml__default = /*#__PURE__*/_interopDefault(sanitizeHtml);
|
|
14
14
|
|
|
15
15
|
// src/constants/index.ts
|
|
16
|
-
var PROXY_BASE_URL = "
|
|
16
|
+
var PROXY_BASE_URL = "https://proxy.aizek.ai/api";
|
|
17
17
|
var DEVICE_STORAGE_KEY = "aizek_device_id_v1";
|
|
18
18
|
var ACTIVE_SESSION_STORAGE_KEY = "aizek_active_session_v1";
|
|
19
19
|
var MAX_SESSIONS = 3;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/index.ts","../src/utils/device.ts","../src/utils/headers.ts","../src/utils/message.ts","../src/services/chat-api.ts","../src/hooks/use-chat-session.ts","../src/components/aizek-chat/icons/index.tsx","../src/components/aizek-chat/panels/HomePanel.tsx","../src/components/aizek-chat/panels/ConversationListPanel.tsx","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/atoms/GenUIText.tsx","../src/components/generative-ui/atoms/GenUIInput.tsx","../src/components/generative-ui/atoms/GenUISelect.tsx","../src/components/generative-ui/atoms/GenUIButton.tsx","../src/components/generative-ui/atoms/GenUICard.tsx","../src/components/generative-ui/atoms/GenUIList.tsx","../src/components/generative-ui/atoms/GenUIImage.tsx","../src/components/generative-ui/atoms/GenUILink.tsx","../src/components/generative-ui/atoms/GenUITable.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/components/aizek-chat/panels/ConversationDetailPanel.tsx","../src/components/aizek-chat/panels/InfoPanel.tsx","../src/components/aizek-chat/index.tsx"],"names":["useState","useRef","useCallback","useEffect","jsx","jsxs","Fragment","ReactMarkdown","remarkGfm","sanitizeHtml"],"mappings":"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","file":"index.cjs","sourcesContent":["\r\n// export const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\nexport const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\nexport const DEVICE_STORAGE_KEY = \"aizek_device_id_v1\";\r\n\r\nexport const ACTIVE_SESSION_STORAGE_KEY = \"aizek_active_session_v1\";\r\n\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const SESSION_TITLE_MAX_LENGTH = 46;\r\n","import {\r\n DEVICE_STORAGE_KEY,\r\n ACTIVE_SESSION_STORAGE_KEY,\r\n} from \"../constants\";\r\n\r\n\r\nexport function getOrCreateDeviceId(): string {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_STORAGE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_STORAGE_KEY, id);\r\n return id;\r\n}\r\n\r\n\r\nexport function getActiveSessionId(): string | null {\r\n if (typeof window === \"undefined\") return null;\r\n return localStorage.getItem(ACTIVE_SESSION_STORAGE_KEY);\r\n}\r\n\r\n\r\nexport function setActiveSessionId(id: string | null): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_STORAGE_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_STORAGE_KEY, id);\r\n}\r\n","import { AuthConfig, HeadersType } from \"../types/http\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\n\r\n\r\nexport function buildRequestHeaders(\r\n deviceId: string,\r\n alternateHeaders?: HeadersType,\r\n sessionId?: string,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(alternateHeaders),\r\n };\r\n if (sessionId) headers[\"x-session-id\"] = sessionId;\r\n return headers;\r\n}\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): HeaderValidationResult {\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:\r\n \"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 const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\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 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 hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\r\n}\r\n","import { RawMessage, RawMessageContent } from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport {\r\n ExtractedUIResult,\r\n UIComponent,\r\n UIData,\r\n} from \"../types/generative-ui\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Raw content → plain text */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/**\r\n * Extracts a single text string from raw message content,\r\n * which may be a plain string or an array of content parts.\r\n */\r\nexport function extractTextFromContent(\r\n content: string | RawMessageContent[],\r\n): string {\r\n if (typeof content === \"string\") return content;\r\n\r\n if (Array.isArray(content)) {\r\n return content\r\n .filter((item) => item.type === \"text\" && typeof item.text === \"string\")\r\n .map((item) => item.text!)\r\n .join(\"\\n\");\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction normalizeComponent(\r\n component: UIComponent,\r\n index: number,\r\n): UIComponent {\r\n const normalized = { ...component };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (normalized.type === \"button\" && !normalized.buttonType) {\r\n normalized.buttonType = \"click\";\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n if (normalized.type === \"table\") {\r\n normalized.columns = normalizeTableColumns(normalized.columns);\r\n normalized.rows = normalizeTableRows(normalized.rows);\r\n }\r\n\r\n if (normalized.type === \"form\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeFormField);\r\n }\r\n\r\n if (normalized.type === \"list\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeListItem);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeStringArray(items: unknown[]): string[] {\r\n return items.map((item) =>\r\n typeof item === \"object\" && item !== null\r\n ? (item as Record<string, string>).label ??\r\n (item as Record<string, string>).value ??\r\n String(item)\r\n : String(item),\r\n );\r\n}\r\n\r\nfunction normalizeTableColumns(columns?: unknown[]): string[] | undefined {\r\n if (!Array.isArray(columns)) return columns as string[] | undefined;\r\n return columns.map((col) =>\r\n typeof col === \"object\" && col !== null\r\n ? (col as Record<string, string>).label ??\r\n (col as Record<string, string>).id ??\r\n String(col)\r\n : String(col),\r\n );\r\n}\r\n\r\nfunction normalizeTableRows(rows?: unknown[]): string[][] | undefined {\r\n if (!Array.isArray(rows)) return rows as string[][] | undefined;\r\n return rows.map((row) => {\r\n if (Array.isArray(row)) {\r\n return row.map((cell) => String(cell ?? \"\"));\r\n }\r\n // Row is an object – extract values\r\n return Object.values(row as Record<string, unknown>).map((val) => {\r\n if (\r\n typeof val === \"object\" &&\r\n val !== null &&\r\n (val as Record<string, string>).type === \"image\"\r\n ) {\r\n return (val as Record<string, string>).src;\r\n }\r\n const record = val as Record<string, unknown> | null;\r\n return String(record?.value ?? val ?? \"\");\r\n });\r\n });\r\n}\r\n\r\nfunction normalizeFormField(\r\n field: UIComponent,\r\n fieldIndex: number,\r\n): UIComponent {\r\n const normalized = { ...field };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n const raw = field as unknown as Record<string, unknown>;\r\n if (\"optional\" in raw) {\r\n normalized.requiredField = !raw.optional;\r\n }\r\n if (\"required\" in raw) {\r\n normalized.requiredField = !!raw.required;\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeListItem(item: unknown, itemIndex: number): UIComponent {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n label: item,\r\n value: item,\r\n };\r\n }\r\n\r\n const comp = item as UIComponent;\r\n if (!comp.id?.trim()) {\r\n comp.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return comp;\r\n}\r\n\r\nexport function extractUIJsonFromText(text: string): ExtractedUIResult {\r\n const UI_COMPONENT_REGEX = /```ui-component\\s*([\\s\\S]*?)```/g;\r\n\r\n const matches = Array.from(text.matchAll(UI_COMPONENT_REGEX));\r\n if (matches.length === 0) {\r\n return { cleanedText: text.trim(), uiData: null };\r\n }\r\n\r\n let cleanedText = text;\r\n let mergedUIData: UIData | null = null;\r\n\r\n for (const match of matches) {\r\n const fullBlock = match[0];\r\n const jsonBlock = match[1]?.trim();\r\n\r\n cleanedText = cleanedText.replace(fullBlock, \"\").trim();\r\n\r\n try {\r\n const parsed = JSON.parse(jsonBlock) as Partial<UIData>;\r\n\r\n if (parsed && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map(normalizeComponent);\r\n\r\n if (!mergedUIData) {\r\n mergedUIData = parsed as UIData;\r\n } else {\r\n mergedUIData.components = [\r\n ...mergedUIData.components,\r\n ...parsed.components,\r\n ];\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Invalid ui-component JSON:\", err, jsonBlock);\r\n }\r\n }\r\n\r\n cleanedText = cleanedText.replace(/\\n{3,}/g, \"\\n\\n\").trim();\r\n\r\n return { cleanedText, uiData: mergedUIData };\r\n}\r\n\r\n\r\nexport function parseRawMessages(rawMessages: RawMessage[]): Message[] {\r\n const result: Message[] = [];\r\n\r\n for (const msg of rawMessages) {\r\n const textContent = extractTextFromContent(msg.content);\r\n let cleanText = textContent;\r\n let uiData = null;\r\n\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n cleanText = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n if (cleanText.trim() || uiData) {\r\n result.push({\r\n text: cleanText.trim() || undefined,\r\n ui: uiData ?? undefined,\r\n role: msg.role === \"user\" ? \"user\" : \"assistant\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n","import { BaseResponse, HeadersType } from \"../types/http\";\r\nimport {\r\n ConnectResponseData,\r\n NewSessionResponseData,\r\n} from \"../types/widget-config\";\r\nimport {\r\n MessageHistoryResponseData,\r\n LastMessageResponseData,\r\n} from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport { PROXY_BASE_URL, SESSION_TITLE_MAX_LENGTH } from \"../constants\";\r\nimport { getOrCreateDeviceId } from \"../utils/device\";\r\nimport { buildRequestHeaders } from \"../utils/headers\";\r\nimport {\r\n extractTextFromContent,\r\n parseRawMessages,\r\n extractUIJsonFromText,\r\n} from \"../utils/message\";\r\n\r\nexport async function fetchWidgetConfig(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<ConnectResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function createSession(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<NewSessionResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function sendChatMessage(\r\n clientId: string,\r\n sessionId: string,\r\n message: string,\r\n headers?: HeadersType,\r\n): Promise<Response> {\r\n const deviceId = getOrCreateDeviceId();\r\n return fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n body: JSON.stringify({ message }),\r\n });\r\n}\r\n\r\nexport async function fetchMessageHistory(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<Message[]> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const data: BaseResponse<MessageHistoryResponseData> = await response.json();\r\n if (!data.success)\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n\r\n return parseRawMessages(data.data?.messages ?? []);\r\n}\r\n\r\nexport async function fetchSessionTitle(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<string | null> {\r\n const deviceId = getOrCreateDeviceId();\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-last-message`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const json: BaseResponse<LastMessageResponseData> = 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 const textContent = extractTextFromContent(last.content);\r\n if (!textContent.trim()) return null;\r\n\r\n const { cleanedText } = extractUIJsonFromText(textContent);\r\n const firstLine = (\r\n cleanedText.split(\"\\n\").find((l: string) => l.trim()) || \"\"\r\n ).trim();\r\n const title = firstLine || cleanedText;\r\n if (!title) return null;\r\n\r\n return title.length > SESSION_TITLE_MAX_LENGTH\r\n ? `${title.slice(0, SESSION_TITLE_MAX_LENGTH).trim()}…`\r\n : title;\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { ChatWidgetApiResponse } from \"../types/widget-config\";\r\nimport { HeadersType } from \"../types/http\";\r\nimport { StreamEvent, ToolCallPayload } from \"../types/streaming\";\r\nimport { Message } from \"../types/chat\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\nimport { MAX_SESSIONS } from \"../constants\";\r\nimport { getActiveSessionId, setActiveSessionId } from \"../utils/device\";\r\nimport { validateHeaders } from \"../utils/headers\";\r\nimport {\r\n fetchWidgetConfig,\r\n createSession,\r\n sendChatMessage,\r\n fetchMessageHistory,\r\n fetchSessionTitle,\r\n} from \"../services/chat-api\";\r\n\r\ninterface UseChatSessionOptions {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\ninterface UseChatSessionReturn {\r\n config: ChatWidgetApiResponse | undefined;\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConfigLoading: boolean;\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n headerValidation: HeaderValidationResult | null;\r\n sessionTitleById: Record<string, string>;\r\n createNewSession: () => Promise<string>;\r\n sendMessage: (message: string, approval?: boolean) => Promise<void>;\r\n selectSession: (sid: string) => void;\r\n getSessionTitle: (sid: string) => string;\r\n}\r\n\r\nexport function useChatSession({\r\n clientId,\r\n headers,\r\n onReady,\r\n onToolCall,\r\n}: UseChatSessionOptions): UseChatSessionReturn {\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 [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSession, setActiveSession] = useState<string | null>(null);\r\n const [headerValidation, setHeaderValidation] =\r\n useState<HeaderValidationResult | null>(null);\r\n const [sessionTitleById, setSessionTitleById] = useState<\r\n Record<string, string>\r\n >({});\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const loadConfig = useCallback(async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const localActive = getActiveSessionId();\r\n\r\n const data = await fetchWidgetConfig(clientId, headers);\r\n if (!data.success) return;\r\n\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n setSessions(serverSessions);\r\n\r\n if (serverSessions.length === 0) {\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n } else {\r\n const nextActive =\r\n (localActive && serverSessions.includes(localActive)\r\n ? localActive\r\n : null) ??\r\n serverSessions[0] ??\r\n null;\r\n setActiveSession(nextActive);\r\n setActiveSessionId(nextActive);\r\n }\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(\r\n headers,\r\n data.data.auth_config,\r\n { allowExtra: false, 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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId]);\r\n\r\n const createNewSession = useCallback(async (): Promise<string> => {\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 data = await createSession(clientId, headers);\r\n if (!data.success) throw new Error(data.message || \"Session create failed\");\r\n\r\n const sid = data.data.sessionId;\r\n const updatedSessions = data.data.sessions ?? [sid];\r\n\r\n setSessions(updatedSessions);\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n setMessages([]);\r\n\r\n return sid;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId, headers, sessions.length]);\r\n\r\n const handleStreamResponse = useCallback(\r\n async (response: Response, onFinish?: () => void) => {\r\n if (!response.body) {\r\n throw new Error(\"Streaming not supported (no response body)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let text = \"\";\r\n let buffer = \"\";\r\n\r\n try {\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\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\r\n .split(\"\\n\")\r\n .find((l) => l.startsWith(\"data:\"));\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 try {\r\n const event = JSON.parse(jsonStr) as StreamEvent;\r\n\r\n if (event.type === \"response.output_text.delta\" && event.delta) {\r\n setIsLoading(false);\r\n text += event.delta;\r\n\r\n setMessages((prev) => {\r\n const lastMsg = prev[prev.length - 1];\r\n if (lastMsg?.role === \"assistant\") {\r\n return [...prev.slice(0, -1), { ...lastMsg, text }];\r\n }\r\n return [\r\n ...prev,\r\n { text, role: \"assistant\", timestamp: new Date() },\r\n ];\r\n });\r\n }\r\n\r\n if (\r\n event.type === \"response.output_item.done\" &&\r\n event.item.type === \"mcp_call\"\r\n ) {\r\n onToolCall?.({\r\n name: event.item.name,\r\n args: JSON.parse(event.item.arguments),\r\n result: JSON.parse(event.item.output),\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"Error parsing stream event\", e);\r\n }\r\n }\r\n }\r\n } finally {\r\n onFinish?.();\r\n }\r\n },\r\n [onToolCall],\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n setIsLoading(true);\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n {\r\n text: message,\r\n ui: undefined,\r\n role: approval ? \"approval\" : \"user\",\r\n timestamp: new Date(),\r\n },\r\n ]);\r\n\r\n try {\r\n let sid = activeSession;\r\n if (!sid) sid = await createNewSession();\r\n\r\n let response = await sendChatMessage(clientId, sid, message, headers);\r\n\r\n if (response.status === 401) {\r\n console.log(\"Session expired, renewing...\");\r\n const filtered = sessions.filter((s) => s !== sid);\r\n setSessions(filtered);\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n\r\n const newSid = await createNewSession();\r\n response = await sendChatMessage(clientId, newSid, message, headers);\r\n }\r\n\r\n if (!response.ok) throw new Error(`HTTP error ${response.status}`);\r\n\r\n await handleStreamResponse(response);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n const errorMessage: Message = {\r\n text: \"Sorry, something went wrong. Please try again.\",\r\n role: \"assistant\",\r\n timestamp: new Date(),\r\n };\r\n\r\n if (last?.role === \"assistant\" && !last.text) {\r\n return [...prev.slice(0, -1), errorMessage];\r\n }\r\n return [...prev, errorMessage];\r\n });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [\r\n activeSession,\r\n clientId,\r\n createNewSession,\r\n handleStreamResponse,\r\n headers,\r\n isLoading,\r\n sessions,\r\n ],\r\n );\r\n\r\n const selectSession = useCallback((sid: string) => {\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n }, []);\r\n\r\n const getSessionTitle = useCallback(\r\n (sid: string) => sessionTitleById[sid] ?? \"New conversation\",\r\n [sessionTitleById],\r\n );\r\n\r\n useEffect(() => {\r\n loadConfig();\r\n }, [loadConfig]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSession && !isConfigLoading) {\r\n fetchMessageHistory(activeSession, headers)\r\n .then(setMessages)\r\n .catch((error) =>\r\n console.error(\"Failed to load message history:\", error),\r\n );\r\n } else if (!activeSession) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSession, 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 for (const sid of missing) {\r\n if (cancelled) return;\r\n const title = await fetchSessionTitle(sid, headers);\r\n if (cancelled || !title) continue;\r\n setSessionTitleById((prev) =>\r\n prev[sid] ? prev : { ...prev, [sid]: title },\r\n );\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sessions]);\r\n\r\n return {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId: activeSession,\r\n headerValidation,\r\n sessionTitleById,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n };\r\n}\r\n","\r\nexport const IconClose = () => (\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\r\nexport const IconChat = () => (\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\r\nexport const IconBack = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconBubble = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path 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\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconInfo = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 17v-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M12 8h.01\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\r\n </svg>\r\n);\r\n\r\nexport const IconTrash = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M8 6V4h8v2\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n <path d=\"M6 6l1 16h10l1-16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface HomePanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n onNewSession: () => void;\r\n onViewConversations: () => void;\r\n}\r\n\r\nexport const HomePanel: React.FC<HomePanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n onNewSession,\r\n onViewConversations,\r\n}) => (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{companyName}</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={onNewSession}\r\n disabled={isLoading || sessionsCount >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button className=\"ghost-button\" onClick={onViewConversations}>\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface ConversationListPanelProps {\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n getSessionTitle: (sid: string) => string;\r\n onNewSession: () => void;\r\n onSelectSession: (sid: string) => void;\r\n}\r\n\r\nexport const ConversationListPanel: React.FC<ConversationListPanelProps> = ({\r\n sessions,\r\n activeSessionId,\r\n getSessionTitle,\r\n onNewSession,\r\n onSelectSession,\r\n}) => (\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={onNewSession}\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={() => onSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionTitle(sid)}</p>\r\n <p className=\"conversation-sub\">\r\n Session ID: {sid.slice(0, 8)}...\r\n </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","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/validation\";\r\n\r\ninterface HeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport const HeaderAlert = ({\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n}: HeaderAlertProps) => {\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 renderAlertIcon = () => {\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{renderAlertIcon()}</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>•</span>\r\n <code>{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>Boş Değerli Header'lar:</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>•</span>\r\n <code>{key}</code>\r\n <span>(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>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>•</span>\r\n <code>{key}</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};","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 ChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n}\r\n\r\nexport const ChatInput = ({\r\n isLoading,\r\n placeholder,\r\n onSendMessage,\r\n}: ChatInputProps) => {\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 onSendMessage(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 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 from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITextProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIText: React.FC<GenUITextProps> = ({ component }) => (\r\n <p key={component.id} className=\"gen-ui-text\">\r\n {component.value ?? component.label}\r\n </p>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIInputProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIInput: React.FC<GenUIInputProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-input-wrapper\">\r\n {component.label && <label className=\"gen-ui-input-label\">{component.label}</label>}\r\n {component.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={component.id}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={component.id}\r\n type={component.fieldType || \"text\"}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUISelectProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUISelect: React.FC<GenUISelectProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-select-wrapper\">\r\n {component.label && <label className=\"gen-ui-select-label\">{component.label}</label>}\r\n <select name={component.id} className=\"gen-ui-select\">\r\n {component.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","import React from \"react\";\r\nimport { FormValues, UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIButtonProps {\r\n component: UIComponent;\r\n onInteraction: (event: { action: string; buttonId?: \"click\" | \"submit\"; formData: FormValues }) => void;\r\n collectFormValues: () => FormValues;\r\n}\r\n\r\nexport const GenUIButton: React.FC<GenUIButtonProps> = ({\r\n component,\r\n onInteraction,\r\n collectFormValues,\r\n}) => (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: component.label ?? \"\",\r\n buttonId: component.buttonType,\r\n formData: formValues,\r\n });\r\n }}\r\n key={component.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {component.label}\r\n </button>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUICardProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUICard: React.FC<GenUICardProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-card\">\r\n {component.label && <h2 className=\"gen-ui-card-title\">{component.label}</h2>}\r\n {component.value && <p className=\"gen-ui-card-content\">{component.value}</p>}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIListProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIList: React.FC<GenUIListProps> = ({ component }) => (\r\n <ul key={component.id} className=\"gen-ui-list\">\r\n {component.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","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIImageProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIImage: React.FC<GenUIImageProps> = ({ component }) => (\r\n <img\r\n key={component.id}\r\n src={component.url}\r\n alt={component.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUILinkProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUILink: React.FC<GenUILinkProps> = ({ component }) => (\r\n <a\r\n key={component.id}\r\n href={component.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {component.label || component.url}\r\n </a>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITableProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUITable: React.FC<GenUITableProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {component.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {component.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 {component.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {component.rows.map((row, rowIndex) => (\r\n <tr key={rowIndex}>\r\n {row.map((cell, cellIndex) => (\r\n <td key={cellIndex} 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","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData, UIInteractionEvent, FormValues } from \"../../types/generative-ui\";\r\nimport {\r\n GenUIText,\r\n GenUIInput,\r\n GenUISelect,\r\n GenUIButton,\r\n GenUICard,\r\n GenUIList,\r\n GenUIImage,\r\n GenUILink,\r\n GenUITable,\r\n} from \"./atoms\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Props */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface GenericUIRendererProps {\r\n uiData: UIData;\r\n onInteraction: (event: UIInteractionEvent) => void;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Component */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({\r\n uiData,\r\n onInteraction,\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData?.components) return null;\r\n\r\n /** Collects current form field values from the rendered DOM. */\r\n const collectFormValues = (): FormValues => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: FormValues = {};\r\n const inputs = containerRef.current.querySelectorAll<\r\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\r\n >(\"input, textarea, select\");\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute(\"name\");\r\n if (!name) return;\r\n\r\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\r\n formData[name] = element.checked;\r\n } else if (\r\n element instanceof HTMLInputElement &&\r\n element.type === \"radio\"\r\n ) {\r\n if (element.checked) formData[name] = element.value;\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n /** Delegates rendering to the correct atom component. */\r\n const renderComponent = (component: UIComponent): React.ReactNode => {\r\n switch (component.type) {\r\n case \"text\":\r\n return <GenUIText key={component.id} component={component} />;\r\n case \"input\":\r\n return <GenUIInput key={component.id} component={component} />;\r\n case \"select\":\r\n return <GenUISelect key={component.id} component={component} />;\r\n case \"button\":\r\n return (\r\n <GenUIButton\r\n key={component.id}\r\n component={component}\r\n onInteraction={onInteraction}\r\n collectFormValues={collectFormValues}\r\n />\r\n );\r\n case \"card\":\r\n return <GenUICard key={component.id} component={component} />;\r\n case \"list\":\r\n return <GenUIList key={component.id} component={component} />;\r\n case \"image\":\r\n return <GenUIImage key={component.id} component={component} />;\r\n case \"link\":\r\n return <GenUILink key={component.id} component={component} />;\r\n case \"table\":\r\n return <GenUITable key={component.id} component={component} />;\r\n case \"form\":\r\n return (\r\n <form key={component.id} className=\"gen-ui-form\">\r\n {component.items?.map((field) => renderComponent(field))}\r\n </form>\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","import { Message } from \"../../types/chat\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: MessageBubbleProps) => {\r\n const isUser = message.role === \"user\";\r\n\r\n if (message.role === \"approval\") return null;\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 && <div className=\"markdown-content\">{message.text}</div>\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 if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n } else {\r\n onAction(event.action, true);\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};","import React from \"react\";\r\nimport { Message } from \"../../../types/chat\";\r\nimport { HeaderValidationResult } from \"../../../types/validation\";\r\nimport { ChatWidgetApiResponse } from \"../../../types/widget-config\";\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 { IconBack, IconBubble, IconInfo, IconTrash } from \"../icons\";\r\n\r\ninterface ConversationDetailPanelProps {\r\n activeSessionId: string | null;\r\n isLoading: boolean;\r\n messages: Message[];\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: React.Dispatch<React.SetStateAction<boolean>>;\r\n sanitizedWelcome: string;\r\n messagesEndRef: React.RefObject<HTMLDivElement | null>;\r\n config: ChatWidgetApiResponse | undefined;\r\n getSessionTitle: (sid: string) => string;\r\n onBack: () => void;\r\n onInfo: () => void;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n placeholder: string;\r\n}\r\n\r\nexport const ConversationDetailPanel: React.FC<\r\n ConversationDetailPanelProps\r\n> = ({\r\n activeSessionId,\r\n isLoading,\r\n messages,\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n sanitizedWelcome,\r\n messagesEndRef,\r\n config,\r\n getSessionTitle,\r\n onBack,\r\n onInfo,\r\n onSendMessage,\r\n placeholder,\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={onBack} aria-label=\"Back\">\r\n <IconBack />\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 <IconBubble />\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\r\n className={`status-dot ${isLoading ? \"typing\" : \"online\"}`}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n <p className=\"detail-subtitle\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button className=\"icon-button\" onClick={onInfo} aria-label=\"Bilgi\">\r\n <IconInfo />\r\n </button>\r\n <button\r\n className=\"icon-button danger\"\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <IconTrash />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert\r\n headerValidation={headerValidation}\r\n setShowAlert={setShowAlert}\r\n showAlert={showAlert}\r\n />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: sanitizedWelcome }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble\r\n key={index}\r\n message={message}\r\n onAction={onSendMessage}\r\n />\r\n ))}\r\n {config?.widget_config.show_typing_indicator && isLoading && (\r\n <TypingDots />\r\n )}\r\n </>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n onSendMessage={onSendMessage}\r\n isLoading={isLoading}\r\n placeholder={placeholder}\r\n />\r\n </div>\r\n);\r\n","import React from \"react\";\r\n\r\ninterface InfoPanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n}\r\n\r\nexport const InfoPanel: React.FC<InfoPanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n}) => (\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>{companyName}</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>{sessionsCount}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n);\r\n","\"use client\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { ActiveTab, MessageView, Message } from \"../../types/chat\";\r\nimport { useChatSession } from \"../../hooks/use-chat-session\";\r\nimport { IconClose, IconChat } from \"./icons\";\r\nimport {\r\n HomePanel,\r\n ConversationListPanel,\r\n ConversationDetailPanel,\r\n InfoPanel,\r\n} from \"./panels\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\nimport \"../../styles/index.scss\";\r\nimport {\r\n ChatWidgetApiResponse,\r\n HeadersType,\r\n ToolCallPayload,\r\n} from \"../../types\";\r\n\r\ninterface AizekChatBotProps {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onMounted?: () => void;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: Message) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\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 {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId,\r\n headerValidation,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n } = useChatSession({ clientId, headers, onReady, onToolCall, onDisconnect });\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [showAlert, setShowAlert] = useState(true);\r\n const [activeTab, setActiveTab] = useState<ActiveTab>(\"home\");\r\n const [messageView, setMessageView] = useState<MessageView>(\"list\");\r\n\r\n useEffect(() => {\r\n onMounted?.();\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 }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n const toggleChat = () => {\r\n const next = !isOpen;\r\n setIsOpen(next);\r\n next ? onOpen?.() : onClose?.();\r\n };\r\n\r\n const handleCreateSession = async () => {\r\n try {\r\n await createNewSession();\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n selectSession(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n const sanitizedWelcome = sanitizeHtml(\r\n config?.widget_config.welcome_message ?? \"\",\r\n {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: { a: [\"href\", \"target\", \"rel\"] },\r\n },\r\n );\r\n\r\n if (isConfigLoading) {\r\n return (\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\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`}\r\n onClick={toggleChat}\r\n />\r\n )}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{\r\n width: config?.widget_config.chat_width,\r\n height: config?.widget_config.chat_height,\r\n }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div\r\n className=\"header\"\r\n style={{ background: config?.widget_config.header_background }}\r\n >\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\r\n src={config.widget_config.company_logo}\r\n alt=\"Company Logo\"\r\n className=\"logo-image\"\r\n />\r\n ) : (\r\n <span className=\"logo-text\">\r\n {config.widget_config.company_logo}\r\n </span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">\r\n {config?.widget_config.company_name}\r\n </h3>\r\n <p className=\"status-text\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <HomePanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n onNewSession={handleCreateSession}\r\n onViewConversations={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n />\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <ConversationListPanel\r\n sessions={sessions}\r\n activeSessionId={activeSessionId}\r\n getSessionTitle={getSessionTitle}\r\n onNewSession={handleCreateSession}\r\n onSelectSession={handleSelectSession}\r\n />\r\n ) : (\r\n <ConversationDetailPanel\r\n activeSessionId={activeSessionId}\r\n isLoading={isLoading}\r\n messages={messages}\r\n headerValidation={headerValidation}\r\n showAlert={showAlert}\r\n setShowAlert={setShowAlert}\r\n sanitizedWelcome={sanitizedWelcome}\r\n messagesEndRef={messagesEndRef}\r\n config={config}\r\n getSessionTitle={getSessionTitle}\r\n onBack={() => setMessageView(\"list\")}\r\n onInfo={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n onSendMessage={sendMessage}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <InfoPanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n {([\"home\", \"messages\", \"info\"] as ActiveTab[]).map((tab) => (\r\n <button\r\n key={tab}\r\n className={`nav-button ${activeTab === tab ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(tab);\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\r\n </button>\r\n ))}\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 style={{ background: config?.widget_config.button_background }}\r\n >\r\n {isOpen ? <IconClose /> : <IconChat />}\r\n </button>\r\n </>\r\n );\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/index.ts","../src/utils/device.ts","../src/utils/headers.ts","../src/utils/message.ts","../src/services/chat-api.ts","../src/hooks/use-chat-session.ts","../src/components/aizek-chat/icons/index.tsx","../src/components/aizek-chat/panels/HomePanel.tsx","../src/components/aizek-chat/panels/ConversationListPanel.tsx","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/atoms/GenUIText.tsx","../src/components/generative-ui/atoms/GenUIInput.tsx","../src/components/generative-ui/atoms/GenUISelect.tsx","../src/components/generative-ui/atoms/GenUIButton.tsx","../src/components/generative-ui/atoms/GenUICard.tsx","../src/components/generative-ui/atoms/GenUIList.tsx","../src/components/generative-ui/atoms/GenUIImage.tsx","../src/components/generative-ui/atoms/GenUILink.tsx","../src/components/generative-ui/atoms/GenUITable.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/components/aizek-chat/panels/ConversationDetailPanel.tsx","../src/components/aizek-chat/panels/InfoPanel.tsx","../src/components/aizek-chat/index.tsx"],"names":["useState","useRef","useCallback","useEffect","jsx","jsxs","Fragment","ReactMarkdown","remarkGfm","sanitizeHtml"],"mappings":";;;;;;;;;;;;;;;AACO,IAAM,cAAA,GAAiB,4BAAA;AAIvB,IAAM,kBAAA,GAAqB,oBAAA;AAE3B,IAAM,0BAAA,GAA6B,yBAAA;AAEnC,IAAM,YAAA,GAAe,CAAA;AAErB,IAAM,wBAAA,GAA2B,EAAA;;;ACLjC,SAAS,mBAAA,GAA8B;AAC5C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,EAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,kBAAkB,CAAA;AACxD,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,MAAM,EAAA,GAAK,OAAO,UAAA,EAAW;AAC7B,EAAA,YAAA,CAAa,OAAA,CAAQ,oBAAoB,EAAE,CAAA;AAC3C,EAAA,OAAO,EAAA;AACT;AAGO,SAAS,kBAAA,GAAoC;AAClD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,OAAO,YAAA,CAAa,QAAQ,0BAA0B,CAAA;AACxD;AAGO,SAAS,mBAAmB,EAAA,EAAyB;AAC1D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,IAAI,CAAC,EAAA,EAAI,YAAA,CAAa,UAAA,CAAW,0BAA0B,CAAA;AAAA,OACtD,YAAA,CAAa,OAAA,CAAQ,0BAAA,EAA4B,EAAE,CAAA;AAC1D;;;ACtBO,SAAS,mBAAA,CACd,QAAA,EACA,gBAAA,EACA,SAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB,kBAAA;AAAA,IAChB,aAAA,EAAe,QAAA;AAAA,IACf,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,gBAAgB;AAAA,GAChD;AACA,EAAA,IAAI,SAAA,EAAW,OAAA,CAAQ,cAAc,CAAA,GAAI,SAAA;AACzC,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,eAAA,CACd,OAAA,EACA,UAAA,EACA,IAAA,GAA0D,EAAC,EACnC;AACxB,EAAA,IAAI,OAAA,KAAY,CAAC,UAAA,IAAc,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,WAAW,CAAA,CAAA,EAAI;AACpE,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,aAAa,EAAC;AAAA,MACd,WAAW,EAAC;AAAA,MACZ,gBAAgB,EAAC;AAAA,MACjB,OAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,aAAA,GAAgB,KAAA,EAAO,UAAA,GAAa,OAAM,GAAI,IAAA;AACtD,EAAA,MAAM,YAAY,CAAC,CAAA,KAAe,aAAA,GAAgB,CAAA,GAAI,EAAE,WAAA,EAAY;AAEpE,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AAAA,IAC5D,UAAU,CAAC,CAAA;AAAA,IACX,EAAE,IAAA;AAAK,GACR,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AAAA,IAC7D,UAAU,CAAC,CAAA;AAAA,IACX,EAAE,IAAA;AAAK,GACR,CAAA;AAED,EAAA,MAAM,aAAa,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,EAAA,MAAM,WAAW,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,QAAQ,CAAA;AAEpC,EAAA,MAAM,WAAA,GAAc,SAAS,MAAA,CAAO,CAAC,MAAM,CAAC,UAAA,CAAW,QAAA,CAAS,CAAC,CAAC,CAAA;AAClE,EAAA,MAAM,SAAA,GAAY,WAAW,MAAA,CAAO,CAAC,MAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5C,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,GAAG,CAAA,KAAM,GAAA,KAAQ,CAAC,CAAA,GAAI,CAAC,CAAA;AACxD,IAAA,OAAO,CAAC,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,CAAA;AAAA,EAChC,CAAC,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,YAAY,MAAA,KAAW,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,CAAC,UAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,cAAA,IAAkB,CAAC,YAAA,IAAgB,eAAe,MAAA,KAAW,CAAA;AAE7E,EAAA,OAAO,EAAE,OAAA,EAAS,WAAA,EAAa,SAAA,EAAW,cAAA,EAAe;AAC3D;;;AC/CO,SAAS,uBACd,OAAA,EACQ;AACR,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AAExC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,QACJ,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,IAAA,KAAS,UAAU,OAAO,IAAA,CAAK,SAAS,QAAQ,CAAA,CACtE,IAAI,CAAC,IAAA,KAAS,KAAK,IAAK,CAAA,CACxB,KAAK,IAAI,CAAA;AAAA,EACd;AAEA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,kBAAA,CACP,WACA,KAAA,EACa;AACb,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,SAAA,EAAU;AAElC,EAAA,IAAI,CAAC,UAAA,CAAW,EAAA,EAAI,IAAA,EAAK,EAAG;AAC1B,IAAA,UAAA,CAAW,KAAK,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,QAAA,IAAY,CAAC,WAAW,UAAA,EAAY;AAC1D,IAAA,UAAA,CAAW,UAAA,GAAa,OAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,OAAA,IAAW,CAAC,WAAW,SAAA,EAAW;AACxD,IAAA,UAAA,CAAW,SAAA,GAAY,MAAA;AAAA,EACzB;AAEA,EAAA,IAAI,WAAW,IAAA,KAAS,QAAA,IAAY,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AACrE,IAAA,UAAA,CAAW,OAAA,GAAU,oBAAA,CAAqB,UAAA,CAAW,OAAO,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,OAAA,EAAS;AAC/B,IAAA,UAAA,CAAW,OAAA,GAAU,qBAAA,CAAsB,UAAA,CAAW,OAAO,CAAA;AAC7D,IAAA,UAAA,CAAW,IAAA,GAAO,kBAAA,CAAmB,UAAA,CAAW,IAAI,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,WAAW,IAAA,KAAS,MAAA,IAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AACjE,IAAA,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,kBAAkB,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,WAAW,IAAA,KAAS,MAAA,IAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AACjE,IAAA,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,iBAAiB,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,qBAAqB,KAAA,EAA4B;AACxD,EAAA,OAAO,KAAA,CAAM,GAAA;AAAA,IAAI,CAAC,IAAA,KAChB,OAAO,IAAA,KAAS,YAAY,IAAA,KAAS,IAAA,GAChC,IAAA,CAAgC,KAAA,IAChC,KAAgC,KAAA,IACjC,MAAA,CAAO,IAAI,CAAA,GACX,OAAO,IAAI;AAAA,GACjB;AACF;AAEA,SAAS,sBAAsB,OAAA,EAA2C;AACxE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,GAAG,OAAO,OAAA;AACpC,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IAAI,CAAC,GAAA,KAClB,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,IAAA,GAC9B,GAAA,CAA+B,KAAA,IAC/B,IAA+B,EAAA,IAChC,MAAA,CAAO,GAAG,CAAA,GACV,OAAO,GAAG;AAAA,GAChB;AACF;AAEA,SAAS,mBAAmB,IAAA,EAA0C;AACpE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,GAAG,OAAO,IAAA;AACjC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAA,OAAO,IAAI,GAAA,CAAI,CAAC,SAAS,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,OAAO,MAAA,CAAO,GAA8B,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ;AAChE,MAAA,IACE,OAAO,GAAA,KAAQ,QAAA,IACf,QAAQ,IAAA,IACP,GAAA,CAA+B,SAAS,OAAA,EACzC;AACA,QAAA,OAAQ,GAAA,CAA+B,GAAA;AAAA,MACzC;AACA,MAAA,MAAM,MAAA,GAAS,GAAA;AACf,MAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,IAAS,GAAA,IAAO,EAAE,CAAA;AAAA,IAC1C,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEA,SAAS,kBAAA,CACP,OACA,UAAA,EACa;AACb,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,KAAA,EAAM;AAE9B,EAAA,IAAI,CAAC,UAAA,CAAW,EAAA,EAAI,IAAA,EAAK,EAAG;AAC1B,IAAA,UAAA,CAAW,KAAK,CAAA,MAAA,EAAS,UAAU,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI,cAAc,GAAA,EAAK;AACrB,IAAA,UAAA,CAAW,aAAA,GAAgB,CAAC,GAAA,CAAI,QAAA;AAAA,EAClC;AACA,EAAA,IAAI,cAAc,GAAA,EAAK;AACrB,IAAA,UAAA,CAAW,aAAA,GAAgB,CAAC,CAAC,GAAA,CAAI,QAAA;AAAA,EACnC;AAEA,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,OAAA,IAAW,CAAC,WAAW,SAAA,EAAW;AACxD,IAAA,UAAA,CAAW,SAAA,GAAY,MAAA;AAAA,EACzB;AAEA,EAAA,IAAI,WAAW,IAAA,KAAS,QAAA,IAAY,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AACrE,IAAA,UAAA,CAAW,OAAA,GAAU,oBAAA,CAAqB,UAAA,CAAW,OAAO,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,MAAe,SAAA,EAAgC;AACxE,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO;AAAA,MACL,IAAI,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,MACxC,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA;AACb,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,IAAA,EAAK,EAAG;AACpB,IAAA,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,sBAAsB,IAAA,EAAiC;AACrE,EAAA,MAAM,kBAAA,GAAqB,kCAAA;AAE3B,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAC,CAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,WAAA,EAAa,IAAA,CAAK,IAAA,EAAK,EAAG,QAAQ,IAAA,EAAK;AAAA,EAClD;AAEA,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,IAAI,YAAA,GAA8B,IAAA;AAElC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAK;AAEjC,IAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,SAAA,EAAW,EAAE,EAAE,IAAA,EAAK;AAEtD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAEnC,MAAA,IAAI,MAAA,IAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AAC9C,QAAA,MAAA,CAAO,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,kBAAkB,CAAA;AAE5D,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,YAAA,GAAe,MAAA;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,UAAA,GAAa;AAAA,YACxB,GAAG,YAAA,CAAa,UAAA;AAAA,YAChB,GAAG,MAAA,CAAO;AAAA,WACZ;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAAA,EAA8B,GAAA,EAAK,SAAS,CAAA;AAAA,IAC5D;AAAA,EACF;AAEA,EAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,SAAA,EAAW,MAAM,EAAE,IAAA,EAAK;AAE1D,EAAA,OAAO,EAAE,WAAA,EAAa,MAAA,EAAQ,YAAA,EAAa;AAC7C;AAGO,SAAS,iBAAiB,WAAA,EAAsC;AACrE,EAAA,MAAM,SAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,GAAA,CAAI,OAAO,CAAA;AACtD,IAAA,IAAI,SAAA,GAAY,WAAA;AAChB,IAAA,IAAI,MAAA,GAAS,IAAA;AAEb,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,SAAA,GAAY,sBAAsB,WAAW,CAAA;AACnD,MAAA,SAAA,GAAY,SAAA,CAAU,WAAA;AACtB,MAAA,MAAA,GAAS,SAAA,CAAU,MAAA;AAAA,IACrB;AAEA,IAAA,IAAI,SAAA,CAAU,IAAA,EAAK,IAAK,MAAA,EAAQ;AAC9B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,SAAA,CAAU,IAAA,EAAK,IAAK,MAAA;AAAA,QAC1B,IAAI,MAAA,IAAU,MAAA;AAAA,QACd,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,MAAA,GAAS,MAAA,GAAS,WAAA;AAAA,QACrC,SAAA,sBAAe,IAAA;AAAK,OACrB,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC9MA,eAAsB,iBAAA,CACpB,UACA,OAAA,EAC4C;AAC5C,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,MAAM,WAAW,MAAM,KAAA;AAAA,IACrB,CAAA,EAAG,cAAc,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA;AAAA,IACpD;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,mBAAA,CAAoB,QAAA,EAAU,OAAO;AAAA;AAChD,GACF;AACA,EAAA,OAAO,SAAS,IAAA,EAAK;AACvB;AAEA,eAAsB,aAAA,CACpB,UACA,OAAA,EAC+C;AAC/C,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,MAAM,WAAW,MAAM,KAAA;AAAA,IACrB,CAAA,EAAG,cAAc,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAA;AAAA,IACzD;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,mBAAA,CAAoB,QAAA,EAAU,OAAO;AAAA;AAChD,GACF;AACA,EAAA,OAAO,SAAS,IAAA,EAAK;AACvB;AAEA,eAAsB,eAAA,CACpB,QAAA,EACA,SAAA,EACA,OAAA,EACA,OAAA,EACmB;AACnB,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,OAAO,KAAA,CAAM,CAAA,EAAG,cAAc,CAAA,qBAAA,EAAwB,QAAQ,CAAA,CAAA,EAAI;AAAA,IAChE,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,mBAAA,CAAoB,QAAA,EAAU,OAAA,EAAS,SAAS,CAAA;AAAA,IACzD,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAS;AAAA,GACjC,CAAA;AACH;AAEA,eAAsB,mBAAA,CACpB,WACA,OAAA,EACoB;AACpB,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,cAAc,CAAA,eAAA,CAAA,EAAmB;AAAA,IAC/D,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,mBAAA,CAAoB,QAAA,EAAU,OAAA,EAAS,SAAS;AAAA,GAC1D,CAAA;AAED,EAAA,MAAM,IAAA,GAAiD,MAAM,QAAA,CAAS,IAAA,EAAK;AAC3E,EAAA,IAAI,CAAC,IAAA,CAAK,OAAA;AACR,IAAA,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,IAAW,0BAA0B,CAAA;AAE5D,EAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,IAAA,EAAM,QAAA,IAAY,EAAE,CAAA;AACnD;AAEA,eAAsB,iBAAA,CACpB,WACA,OAAA,EACwB;AACxB,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,cAAc,CAAA,mBAAA,CAAA,EAAuB;AAAA,IAC9D,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,mBAAA,CAAoB,QAAA,EAAU,OAAA,EAAS,SAAS;AAAA,GAC1D,CAAA;AAED,EAAA,MAAM,IAAA,GAA8C,MAAM,GAAA,CAAI,IAAA,EAAK;AACnE,EAAA,IAAI,CAAC,IAAA,EAAM,OAAA,EAAS,OAAO,IAAA;AAE3B,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAM,WAAA;AACxB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AACvD,EAAA,IAAI,CAAC,WAAA,CAAY,IAAA,EAAK,EAAG,OAAO,IAAA;AAEhC,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,qBAAA,CAAsB,WAAW,CAAA;AACzD,EAAA,MAAM,SAAA,GAAA,CACJ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAc,CAAA,CAAE,IAAA,EAAM,CAAA,IAAK,IACzD,IAAA,EAAK;AACP,EAAA,MAAM,QAAQ,SAAA,IAAa,WAAA;AAC3B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,wBAAA,GAClB,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,wBAAwB,CAAA,CAAE,IAAA,EAAM,CAAA,MAAA,CAAA,GAClD,KAAA;AACN;;;ACrEO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAgD;AAC9C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAA,EAAgC;AAC5D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAA,CAAoB,EAAE,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAA,CAAmB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAC1CA,eAAwC,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,cAAA,CAE9C,EAAE,CAAA;AAEJ,EAAA,MAAM,cAAA,GAAiBC,aAAuB,IAAI,CAAA;AAElD,EAAA,MAAM,UAAA,GAAaC,kBAAY,YAAY;AACzC,IAAA,IAAI;AACF,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,MAAM,cAAc,kBAAA,EAAmB;AAEvC,MAAA,MAAM,IAAA,GAAO,MAAM,iBAAA,CAAkB,QAAA,EAAU,OAAO,CAAA;AACtD,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAEnB,MAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAEnB,MAAA,MAAM,cAAA,GAA2B,IAAA,CAAK,IAAA,CAAK,QAAA,IAAY,EAAC;AACxD,MAAA,WAAA,CAAY,cAAc,CAAA;AAE1B,MAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,QAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,QAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,MAAM,UAAA,GAAA,CACH,WAAA,IAAe,cAAA,CAAe,QAAA,CAAS,WAAW,IAC/C,WAAA,GACA,IAAA,KACJ,cAAA,CAAe,CAAC,CAAA,IAChB,IAAA;AACF,QAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,gBAAA,GAAmB,eAAA;AAAA,UACvB,OAAA;AAAA,UACA,KAAK,IAAA,CAAK,WAAA;AAAA,UACV,EAAE,UAAA,EAAY,KAAA,EAAO,aAAA,EAAe,IAAA;AAAK,SAC3C;AACA,QAAA,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,MACtC;AAEA,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,EAAE,GAAG,IAAA,CAAK,IAAA,IAAQ,CAAA;AAAA,IACxC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAK,CAAA;AAAA,IAC3D,CAAA,SAAE;AACA,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,IAC1B;AAAA,EAEF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,gBAAA,GAAmBA,kBAAY,YAA6B;AAChE,IAAA,IAAI,QAAA,CAAS,UAAU,YAAA,EAAc;AACnC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,YAAY,CAAA,UAAA,CAAY,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,WAAW,uBAAuB,CAAA;AAE1E,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,SAAA;AACtB,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,IAAA,CAAK,QAAA,IAAY,CAAC,GAAG,CAAA;AAElD,IAAA,WAAA,CAAY,eAAe,CAAA;AAC3B,IAAA,gBAAA,CAAiB,GAAG,CAAA;AACpB,IAAA,kBAAA,CAAmB,GAAG,CAAA;AACtB,IAAA,WAAA,CAAY,EAAE,CAAA;AAEd,IAAA,OAAO,GAAA;AAAA,EAET,GAAG,CAAC,QAAA,EAAU,OAAA,EAAS,QAAA,CAAS,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAM,oBAAA,GAAuBA,iBAAA;AAAA,IAC3B,OAAO,UAAoB,QAAA,KAA0B;AACnD,MAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,QAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,IAAI,MAAA,GAAS,EAAA;AAEb,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,UAAA,IAAI,IAAA,EAAM;AAEV,UAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AAClC,UAAA,MAAA,GAAS,MAAA,CAAO,KAAI,IAAK,EAAA;AAEzB,UAAA,KAAA,MAAW,YAAY,MAAA,EAAQ;AAC7B,YAAA,MAAM,IAAA,GAAO,QAAA,CACV,KAAA,CAAM,IAAI,CAAA,CACV,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA;AACpC,YAAA,IAAI,CAAC,IAAA,EAAM;AAEX,YAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,EAAE,IAAA,EAAK;AACnD,YAAA,IAAI,CAAC,OAAA,EAAS;AAEd,YAAA,IAAI;AACF,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAEhC,cAAA,IAAI,KAAA,CAAM,IAAA,KAAS,4BAAA,IAAgC,KAAA,CAAM,KAAA,EAAO;AAC9D,gBAAA,YAAA,CAAa,KAAK,CAAA;AAClB,gBAAA,IAAA,IAAQ,KAAA,CAAM,KAAA;AAEd,gBAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,kBAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACpC,kBAAA,IAAI,OAAA,EAAS,SAAS,WAAA,EAAa;AACjC,oBAAA,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,CAAA,EAAG,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,kBACpD;AACA,kBAAA,OAAO;AAAA,oBACL,GAAG,IAAA;AAAA,oBACH,EAAE,IAAA,EAAM,IAAA,EAAM,aAAa,SAAA,kBAAW,IAAI,MAAK;AAAE,mBACnD;AAAA,gBACF,CAAC,CAAA;AAAA,cACH;AAEA,cAAA,IACE,MAAM,IAAA,KAAS,2BAAA,IACf,KAAA,CAAM,IAAA,CAAK,SAAS,UAAA,EACpB;AACA,gBAAA,UAAA,GAAa;AAAA,kBACX,IAAA,EAAM,MAAM,IAAA,CAAK,IAAA;AAAA,kBACjB,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,kBACrC,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,MAAM;AAAA,iBACrC,CAAA;AAAA,cACH;AAAA,YACF,SAAS,CAAA,EAAG;AACV,cAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,SAAE;AACA,QAAA,QAAA,IAAW;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,OAAO,SAAiB,QAAA,KAAuB;AAC7C,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAK,IAAK,SAAA,EAAW;AAClC,MAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,MAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,QACpB,GAAG,IAAA;AAAA,QACH;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,EAAA,EAAI,MAAA;AAAA,UACJ,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,UAC9B,SAAA,sBAAe,IAAA;AAAK;AACtB,OACD,CAAA;AAED,MAAA,IAAI;AACF,QAAA,IAAI,GAAA,GAAM,aAAA;AACV,QAAA,IAAI,CAAC,GAAA,EAAK,GAAA,GAAM,MAAM,gBAAA,EAAiB;AAEvC,QAAA,IAAI,WAAW,MAAM,eAAA,CAAgB,QAAA,EAAU,GAAA,EAAK,SAAS,OAAO,CAAA;AAEpE,QAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,UAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,UAAA,MAAM,WAAW,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,GAAG,CAAA;AACjD,UAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,UAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,UAAA,kBAAA,CAAmB,IAAI,CAAA;AAEvB,UAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,EAAiB;AACtC,UAAA,QAAA,GAAW,MAAM,eAAA,CAAgB,QAAA,EAAU,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,QACrE;AAEA,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAEjE,QAAA,MAAM,qBAAqB,QAAQ,CAAA;AAAA,MACrC,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,QAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,UAAA,MAAM,YAAA,GAAwB;AAAA,YAC5B,IAAA,EAAM,gDAAA;AAAA,YACN,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,sBAAe,IAAA;AAAK,WACtB;AAEA,UAAA,IAAI,IAAA,EAAM,IAAA,KAAS,WAAA,IAAe,CAAC,KAAK,IAAA,EAAM;AAC5C,YAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,GAAG,YAAY,CAAA;AAAA,UAC5C;AACA,UAAA,OAAO,CAAC,GAAG,IAAA,EAAM,YAAY,CAAA;AAAA,QAC/B,CAAC,CAAA;AAAA,MACH,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,aAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,oBAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,GAAA,KAAgB;AACjD,IAAA,gBAAA,CAAiB,GAAG,CAAA;AACpB,IAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkBA,iBAAA;AAAA,IACtB,CAAC,GAAA,KAAgB,gBAAA,CAAiB,GAAG,CAAA,IAAK,kBAAA;AAAA,IAC1C,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,UAAA,EAAW;AAAA,EACb,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,EAAS,cAAA,CAAe,EAAE,QAAA,EAAU,UAAU,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,IAAiB,CAAC,eAAA,EAAiB;AACrC,MAAA,mBAAA,CAAoB,aAAA,EAAe,OAAO,CAAA,CACvC,IAAA,CAAK,WAAW,CAAA,CAChB,KAAA;AAAA,QAAM,CAAC,KAAA,KACN,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK;AAAA,OACxD;AAAA,IACJ,CAAA,MAAA,IAAW,CAAC,aAAA,EAAe;AACzB,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB;AAAA,EAEF,CAAA,EAAG,CAAC,aAAA,EAAe,eAAe,CAAC,CAAA;AAEnC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AAEtB,IAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,QAAQ,CAAC,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAC/D,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,CAAC,YAAY;AACX,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,IAAI,SAAA,EAAW;AACf,QAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,GAAA,EAAK,OAAO,CAAA;AAClD,QAAA,IAAI,SAAA,IAAa,CAAC,KAAA,EAAO;AACzB,QAAA,mBAAA;AAAA,UAAoB,CAAC,IAAA,KACnB,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,KAAA;AAAM,SAC7C;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,EAAiB,aAAA;AAAA,IACjB,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;ACxUO,IAAM,YAAY,sBACvBC,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EACnD,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yGAAwG,CAAA,EAClH,CAAA;AAGK,IAAM,WAAW,sBACtBA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EACnD,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sIAAqI,CAAA,EAC/I,CAAA;AAGK,IAAM,QAAA,GAAW,sBACtBA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,yCAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAI,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAC/G,CAAA;AAGK,IAAM,UAAA,GAAa,sBACxBA,cAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QACnD,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,gIAAA,EAAiI,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,cAAA,EAAe,OAAA,EAAQ,CAAA,EACxM,CAAA;AAGK,IAAM,QAAA,GAAW,sBACtBC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,WAAA,EAAY,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,eAAc,OAAA,EAAQ,CAAA;AAAA,kBAChFA,cAAA,CAAC,UAAK,CAAA,EAAE,WAAA,EAAY,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,CAAA;AAAA,kBAClFA,cAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI;AAAA,CAAA,EACtE,CAAA;AAGK,IAAM,SAAA,GAAY,sBACvBC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,SAAA,EAAU,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,eAAc,OAAA,EAAQ,CAAA;AAAA,kBAC9EA,cAAA,CAAC,UAAK,CAAA,EAAE,YAAA,EAAa,QAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,cAAA,EAAe,OAAA,EAAQ,CAAA;AAAA,kBAClFA,cAAA,CAAC,UAAK,CAAA,EAAE,mBAAA,EAAoB,QAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,cAAA,EAAe,OAAA,EAAQ;AAAA,CAAA,EAC3F,CAAA;AC3BK,IAAM,YAAsC,CAAC;AAAA,EAClD,WAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,qBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,kBAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,kBAC9BA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAe,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,kBACzCA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAiB,QAAA,EAAA,2DAAA,EAE9B,CAAA;AAAA,kBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAS,YAAA;AAAA,QACT,QAAA,EAAU,aAAa,aAAA,IAAiB,YAAA;AAAA,QACzC,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,oBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,WAAU,cAAA,EAAe,OAAA,EAAS,qBAAqB,QAAA,EAAA,oBAAA,EAE/D;AAAA,GAAA,EACF;AAAA,CAAA,EACF,CAAA;ACzBK,IAAM,wBAA8D,CAAC;AAAA,EAC1E,QAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,qBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,sBACpCA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAc,QAAA,EAAA,OAAA,EAAK;AAAA,KAAA,EACnC,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oBAAA;AAAA,QACV,OAAA,EAAS,YAAA;AAAA,QACT,QAAA,EAAU,SAAS,MAAA,IAAU,YAAA;AAAA,QAE7B,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AACb,GAAA,EACF,CAAA;AAAA,EAEC,SAAS,MAAA,KAAW,CAAA,mBACnBC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,oBACpCA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAoB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,oBACtDA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,QAAA,EAAA,iDAAA,EAEvC;AAAA,GAAA,EACF,CAAA,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,qBACbC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAW,CAAA,kBAAA,EAAqB,GAAA,KAAQ,eAAA,GAAkB,WAAW,EAAE,CAAA,CAAA;AAAA,MACvE,OAAA,EAAS,MAAM,eAAA,CAAgB,GAAG,CAAA;AAAA,MAElC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,eAAA,CAAgB,GAAG,CAAA,EAAE,CAAA;AAAA,0BACxDC,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EAAmB,QAAA,EAAA;AAAA,YAAA,cAAA;AAAA,YACjB,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,YAAE;AAAA,WAAA,EAC/B;AAAA,SAAA,EACF,CAAA;AAAA,wBACAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA,KAAA;AAAA,IAVnC;AAAA,GAYR,CAAA,EACH;AAAA,CAAA,EAEJ,CAAA;ACnDK,IAAM,cAAc,CAAC;AAAA,EAC1B,gBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAwB;AACtB,EAAA,IAAI,CAAC,gBAAA,IAAoB,CAAC,SAAA,EAAW,OAAO,IAAA;AAE5C,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAa,SAAA,EAAW,cAAA,EAAgB,SAAQ,GAC/D,gBAAA;AAEF,EAAA,IACE,OAAA,IACA,WAAA,CAAY,MAAA,KAAW,CAAA,IACvB,SAAA,CAAU,MAAA,KAAW,CAAA,IACrB,cAAA,CAAe,MAAA,KAAW,CAAA,IAC1B,CAAC,OAAA,EACD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,eAAe,MAAA,GAAS,CAAA;AACpE,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,CAAC,CAAC,OAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,YAAY,OAAA,GAAU,SAAA;AAExC,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,gBACnD,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oGAAmG,CAAA,EAC7G,CAAA;AAAA,IAEJ;AACA,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,gBACnD,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sDAAqD,CAAA,EAC/D,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,EAC1C,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAwB,2BAAgB,EAAE,CAAA;AAAA,oBACzDC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EACX,QAAA,EAAA,SAAA,GAAY,sCAA4B,0BAAA,EAC3C,CAAA;AAAA,sBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,eAAA,EACV,uBAAa,WAAA,GACV,2EAAA,GACA,SAAA,GACE,0DAAA,GACA,mEAAA,EACR,CAAA;AAAA,MAEC,WAAA,CAAY,MAAA,GAAS,CAAA,oBACpBC,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,YAAO,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,wBACzBA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cACX,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACrBC,eAAAA,CAAC,IAAA,EAAA,EAAe,WAAU,iBAAA,EACxB,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BACPA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,EAAI;AAAA,SAAA,EAAA,EAFJ,KAGT,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGD,cAAA,CAAe,MAAA,GAAS,CAAA,oBACvBC,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,YAAO,QAAA,EAAA,mCAAA,EAAuB,CAAA;AAAA,wBAC/BA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cACX,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACxBC,eAAAA,CAAC,IAAA,EAAA,EAAe,WAAU,iBAAA,EACxB,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BACPA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,0BACXA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,8BAAA,EAAkB;AAAA,SAAA,EAAA,EAHjB,KAIT,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGD,SAAA,CAAU,MAAA,GAAS,CAAA,oBAClBC,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,YAAO,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,wBACzBA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cACX,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACnBC,eAAAA,CAAC,IAAA,EAAA,EAAe,WAAU,iBAAA,EACxB,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BACPA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,EAAI;AAAA,SAAA,EAAA,EAFJ,KAGT,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGD,OAAA,oBACCC,eAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,YAAO,QAAA,EAAA,aAAA,EAAM,CAAA;AAAA,wBACdA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACxC;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,QACjC,SAAA,EAAU,oBAAA;AAAA,QACV,YAAA,EAAW,yBAAA;AAAA,QAEX,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,gBACnD,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yGAAwG,CAAA,EAClH;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ,CAAA;AC5HO,IAAM,iBAA2B,MAAM;AAC1C,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAC5C,CAAA;ACOO,IAAM,YAAY,CAAC;AAAA,EACxB,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAsB;AACpB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIJ,eAAS,EAAE,CAAA;AACzC,EAAA,MAAM,WAAA,GAAcC,aAA4B,IAAI,CAAA;AAEpD,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAK,IAAK,CAAC,SAAA,EAAW;AAChC,MAAA,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAC5B,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AAAA,MACrC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAA8C;AACvE,IAAA,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AACzB,IAAA,MAAM,WAAW,CAAA,CAAE,MAAA;AACnB,IAAA,QAAA,CAAS,MAAM,MAAA,GAAS,MAAA;AACxB,IAAA,QAAA,CAAS,MAAM,MAAA,GAAS,IAAA,CAAK,IAAI,QAAA,CAAS,YAAA,EAAc,GAAG,CAAA,GAAI,IAAA;AAAA,EACjE,CAAA;AAEA,EAAA,uBACEI,eAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,WAAU,iBAAA,EACtC,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAW,aAAA;AAAA,QACX,WAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,SAAA,IAAa,CAAC,OAAA,CAAQ,IAAA,EAAK;AAAA,QACrC,SAAA,EAAU,aAAA;AAAA,QAET,QAAA,EAAA,SAAA,mBACCA,cAAAA,CAAC,cAAA,EAAA,EAAe,oBAEhBA,cAAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EACnD,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uCAAA,EAAwC,CAAA,EAClD;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ,CAAA;AC7DO,IAAM,SAAA,GAAsC,CAAC,EAAE,SAAA,uBACpDA,cAAAA,CAAC,GAAA,EAAA,EAAqB,SAAA,EAAU,eAC7B,QAAA,EAAA,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,KAAA,EAAA,EADxB,UAAU,EAElB,CAAA;ACHK,IAAM,UAAA,GAAwC,CAAC,EAAE,SAAA,uBACtDC,eAAAA,CAAC,KAAA,EAAA,EAAuB,SAAA,EAAU,sBAAA,EAC/B,QAAA,EAAA;AAAA,EAAA,SAAA,CAAU,yBAASD,cAAAA,CAAC,WAAM,SAAA,EAAU,oBAAA,EAAsB,oBAAU,KAAA,EAAM,CAAA;AAAA,EAC1E,SAAA,CAAU,SAAA,KAAc,UAAA,mBACvBA,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,MAAM,SAAA,CAAU,EAAA;AAAA,MAChB,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,SAAA,EAAU;AAAA;AAAA,sBAGZA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,MAAM,SAAA,CAAU,EAAA;AAAA,MAChB,IAAA,EAAM,UAAU,SAAA,IAAa,MAAA;AAAA,MAC7B,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,SAAA,EAAU;AAAA;AAAA;AACZ,CAAA,EAAA,EAdM,UAAU,EAgBpB,CAAA;ACjBK,IAAM,WAAA,GAA0C,CAAC,EAAE,SAAA,uBACxDC,eAAAA,CAAC,KAAA,EAAA,EAAuB,SAAA,EAAU,uBAAA,EAC/B,QAAA,EAAA;AAAA,EAAA,SAAA,CAAU,yBAASD,cAAAA,CAAC,WAAM,SAAA,EAAU,qBAAA,EAAuB,oBAAU,KAAA,EAAM,CAAA;AAAA,kBAC5EA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAM,UAAU,EAAA,EAAI,SAAA,EAAU,iBACnC,QAAA,EAAA,SAAA,CAAU,OAAA,EAAS,IAAI,CAAC,GAAA,qBACvBA,cAAAA,CAAC,QAAA,EAAA,EAAiB,OAAO,GAAA,EACtB,QAAA,EAAA,GAAA,EAAA,EADU,GAEb,CACD,CAAA,EACH;AAAA,CAAA,EAAA,EARQ,UAAU,EASpB,CAAA;ACRK,IAAM,cAA0C,CAAC;AAAA,EACtD,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,qBACEA,cAAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,SAAS,MAAM;AACb,MAAA,MAAM,aAAa,iBAAA,EAAkB;AACrC,MAAA,aAAA,CAAc;AAAA,QACZ,MAAA,EAAQ,UAAU,KAAA,IAAS,EAAA;AAAA,QAC3B,UAAU,SAAA,CAAU,UAAA;AAAA,QACpB,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,SAAA,EAAU,eAAA;AAAA,IAET,QAAA,EAAA,SAAA,CAAU;AAAA,GAAA;AAAA,EAHN,SAAA,CAAU;AAIjB,CAAA;ACpBK,IAAM,SAAA,GAAsC,CAAC,EAAE,SAAA,uBACpDC,eAAAA,CAAC,KAAA,EAAA,EAAuB,SAAA,EAAU,aAAA,EAC/B,QAAA,EAAA;AAAA,EAAA,SAAA,CAAU,yBAASD,cAAAA,CAAC,QAAG,SAAA,EAAU,mBAAA,EAAqB,oBAAU,KAAA,EAAM,CAAA;AAAA,EACtE,SAAA,CAAU,yBAASA,cAAAA,CAAC,OAAE,SAAA,EAAU,qBAAA,EAAuB,oBAAU,KAAA,EAAM;AAAA,CAAA,EAAA,EAFhE,UAAU,EAGpB,CAAA;ACJK,IAAM,SAAA,GAAsC,CAAC,EAAE,SAAA,uBACpDA,cAAAA,CAAC,IAAA,EAAA,EAAsB,SAAA,EAAU,aAAA,EAC9B,QAAA,EAAA,SAAA,CAAU,KAAA,EAAO,GAAA,CAAI,CAAC,IAAA,qBACrBA,cAAAA,CAAC,IAAA,EAAA,EAAiB,SAAA,EAAU,kBAAA,EACzB,QAAA,EAAA,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,EAAA,EAD/B,IAAA,CAAK,EAEd,CACD,CAAA,EAAA,EALM,UAAU,EAMnB,CAAA;ACPK,IAAM,UAAA,GAAwC,CAAC,EAAE,SAAA,uBACtDA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IAEC,KAAK,SAAA,CAAU,GAAA;AAAA,IACf,GAAA,EAAK,UAAU,KAAA,IAAS,EAAA;AAAA,IACxB,SAAA,EAAU;AAAA,GAAA;AAAA,EAHL,SAAA,CAAU;AAIjB,CAAA;ACNK,IAAM,SAAA,GAAsC,CAAC,EAAE,SAAA,uBACpDA,cAAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IAEC,MAAM,SAAA,CAAU,GAAA;AAAA,IAChB,SAAA,EAAU,aAAA;AAAA,IAET,QAAA,EAAA,SAAA,CAAU,SAAS,SAAA,CAAU;AAAA,GAAA;AAAA,EAJzB,SAAA,CAAU;AAKjB,CAAA;ACPK,IAAM,UAAA,GAAwC,CAAC,EAAE,SAAA,uBACtDA,cAAAA,CAAC,KAAA,EAAA,EAAuB,SAAA,EAAU,sBAAA,EAChC,QAAA,kBAAAC,eAAAA,CAAC,OAAA,EAAA,EAAM,WAAU,cAAA,EACd,QAAA,EAAA;AAAA,EAAA,SAAA,CAAU,OAAA,oBACTD,cAAAA,CAAC,OAAA,EAAA,EAAM,WAAU,qBAAA,EACf,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,GAAA,qBACtBA,cAAAA,CAAC,IAAA,EAAA,EAAa,SAAA,EAAU,mBACrB,QAAA,EAAA,GAAA,EAAA,EADM,GAET,CACD,CAAA,EACH,CAAA,EACF,CAAA;AAAA,EAED,SAAA,CAAU,IAAA,oBACTA,cAAAA,CAAC,WAAM,SAAA,EAAU,mBAAA,EACd,QAAA,EAAA,SAAA,CAAU,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,QAAA,qBACxBA,cAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,IAAA,EAAM,SAAA,qBACdA,eAAC,IAAA,EAAA,EAAmB,SAAA,EAAU,iBAAA,EAC3B,QAAA,EAAA,IAAA,EAAA,EADM,SAET,CACD,CAAA,EAAA,EALM,QAMT,CACD,CAAA,EACH;AAAA,CAAA,EAEJ,CAAA,EAAA,EA1BQ,UAAU,EA2BpB,CAAA;ACRK,IAAM,oBAAsD,CAAC;AAAA,EAClE,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAeH,aAAuB,IAAI,CAAA;AAEhD,EAAA,IAAI,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,IAAA;AAGhC,EAAA,MAAM,oBAAoB,MAAkB;AAC1C,IAAA,IAAI,CAAC,YAAA,CAAa,OAAA,EAAS,OAAO,EAAC;AAEnC,IAAA,MAAM,WAAuB,EAAC;AAC9B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,gBAAA,CAElC,yBAAyB,CAAA;AAE3B,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC1B,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA;AACxC,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,IAAI,OAAA,YAAmB,gBAAA,IAAoB,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AACtE,QAAA,QAAA,CAAS,IAAI,IAAI,OAAA,CAAQ,OAAA;AAAA,MAC3B,CAAA,MAAA,IACE,OAAA,YAAmB,gBAAA,IACnB,OAAA,CAAQ,SAAS,OAAA,EACjB;AACA,QAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,IAAI,IAAI,OAAA,CAAQ,KAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,IAAI,IAAI,OAAA,CAAQ,KAAA;AAAA,MAC3B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,eAAA,GAAkB,CAAC,SAAA,KAA4C;AACnE,IAAA,QAAQ,UAAU,IAAA;AAAM,MACtB,KAAK,MAAA;AACH,QAAA,uBAAOG,cAAAA,CAAC,SAAA,EAAA,EAA6B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC7D,KAAK,OAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAA8B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC9D,KAAK,QAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,WAAA,EAAA,EAA+B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC/D,KAAK,QAAA;AACH,QAAA,uBACEA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YAEC,SAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAHK,SAAA,CAAU;AAAA,SAIjB;AAAA,MAEJ,KAAK,MAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAA6B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC7D,KAAK,MAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAA6B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC7D,KAAK,OAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAA8B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC9D,KAAK,MAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,SAAA,EAAA,EAA6B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC7D,KAAK,OAAA;AACH,QAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAA8B,SAAA,EAAA,EAAd,UAAU,EAA0B,CAAA;AAAA,MAC9D,KAAK,MAAA;AACH,QAAA,uBACEA,cAAAA,CAAC,MAAA,EAAA,EAAwB,SAAA,EAAU,eAChC,QAAA,EAAA,SAAA,CAAU,KAAA,EAAO,GAAA,CAAI,CAAC,UAAU,eAAA,CAAgB,KAAK,CAAC,CAAA,EAAA,EAD9C,UAAU,EAErB,CAAA;AAAA,MAEJ;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,KAAK,YAAA,EAC1C,QAAA,EAAA;AAAA,IAAA,CAAA,MAAA,CAAO,SAAS,MAAA,CAAO,WAAA,qBACvBA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,yBACND,cAAAA,CAAC,QAAG,SAAA,EAAU,qBAAA,EAAuB,iBAAO,KAAA,EAAM,CAAA;AAAA,MAEnD,MAAA,CAAO,+BACNA,cAAAA,CAAC,OAAE,SAAA,EAAU,2BAAA,EAA6B,iBAAO,WAAA,EAAY;AAAA,KAAA,EAEjE,CAAA;AAAA,IAGD,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC;AAAA,GAAA,EACxD,CAAA;AAEJ,CAAA;AC5GO,IAAM,aAAA,GAAgB,CAAC,EAAE,OAAA,EAAS,UAAS,KAA0B;AAC1E,EAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,KAAS,MAAA;AAEhC,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY,OAAO,IAAA;AAExC,EAAA,uBACEC,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,qBAAqB,MAAA,GAAS,MAAA,GAAS,WAAW,CAAA,CAAA,EAChE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAS,MAAA,GAAS,WAAW,IAC5D,QAAA,EAAA,MAAA,GACC,OAAA,CAAQ,wBAAQA,cAAAA,CAAC,SAAI,SAAA,EAAU,kBAAA,EAAoB,kBAAQ,IAAA,EAAK,CAAA,mBAEhEC,eAAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,IAAA,oBACPF,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACb,QAAA,kBAAAA,cAAAA,CAACG,8BAAA,EAAA,EAAc,eAAe,CAACC,0BAAS,CAAA,EACrC,QAAA,EAAA,OAAA,CAAQ,MACX,CAAA,EACF,CAAA;AAAA,MAED,OAAA,CAAQ,sBACPJ,cAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,QAAQ,OAAA,CAAQ,EAAA;AAAA,UAChB,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,YAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EAAU;AAC/B,cAAA,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,GAAG,IAAI,CAAA;AAAA,YAC/C,CAAA,MAAO;AACL,cAAA,QAAA,CAAS,KAAA,CAAM,QAAQ,IAAI,CAAA;AAAA,YAC7B;AAAA,UACF;AAAA;AAAA;AACF,KAAA,EAEJ,CAAA,EAEJ,CAAA;AAAA,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,aAAA,EAAgB,MAAA,GAAS,MAAA,GAAS,WAAW,CAAA,CAAA,EAC1D,QAAA,EAAA,OAAA,CAAQ,SAAA,CAAU,kBAAA,CAAmB,OAAA,EAAS;AAAA,MAC7C,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;ACnDO,IAAM,aAAa,MAAM;AAC5B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIJ,eAAS,EAAE,CAAA;AAEnC,EAAAG,gBAAU,MAAM;AACZ,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AAC/B,MAAA,OAAA,CAAQ,CAAC,IAAA,KAAS;AACd,QAAA,IAAI,IAAA,KAAS,OAAO,OAAO,EAAA;AAC3B,QAAA,OAAO,IAAA,GAAO,GAAA;AAAA,MAClB,CAAC,CAAA;AAAA,IACL,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACvC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACIC,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACX,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAU,0BAAA,EACX,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EACX,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,EAAK,CAAA,EAChB,CAAA,EACJ,CAAA,EACJ,CAAA;AAER,CAAA;ACEO,IAAM,0BAET,CAAC;AAAA,EACH,eAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,qBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,kBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,kBAAAA,eAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,OAAA,EAAS,QAAQ,YAAA,EAAW,MAAA,EAC1D,0BAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,GACZ,CAAA,EACF,CAAA;AAAA,oBAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EACzC,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,YAAO,SAAA,EAAU,mBAAA,EACf,4BAAkB,eAAA,CAAgB,eAAe,IAAI,MAAA,EACxD,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,WAAA,EAAc,SAAA,GAAY,QAAA,GAAW,QAAQ,CAAA,CAAA;AAAA,cACxD,aAAA,EAAY;AAAA;AAAA;AACd,SAAA,EACF,CAAA;AAAA,wBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,iBAAA,EACV,QAAA,EAAA,SAAA,GAAY,cAAc,QAAA,EAC7B;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAW,OAAA,EAC1D,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EACZ,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oBAAA;AAAA,UACV,UAAU,CAAC,eAAA;AAAA,UACX,YAAA,EAAW,kBAAA;AAAA,UAEX,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAAA,kBAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAEC,QAAA,CAAS,WAAW,CAAA,mBACnBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACb,QAAA,kBAAAA,cAAAA,CAAC,UAAK,uBAAA,EAAyB,EAAE,QAAQ,gBAAA,EAAiB,EAAG,GAC/D,CAAA,mBAEAC,eAAAA,CAAAC,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,qBACtBF,cAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UAEC,OAAA;AAAA,UACA,QAAA,EAAU;AAAA,SAAA;AAAA,QAFL;AAAA,OAIR,CAAA;AAAA,MACA,QAAQ,aAAA,CAAc,qBAAA,IAAyB,SAAA,oBAC9CA,eAAC,UAAA,EAAA,EAAW;AAAA,KAAA,EAEhB,CAAA;AAAA,oBAEFA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,cAAA,EAAgB;AAAA,GAAA,EAC5B,CAAA;AAAA,kBAEAA,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,aAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA;AACF,CAAA,EACF,CAAA;AChHK,IAAM,YAAsC,CAAC;AAAA,EAClD,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,qBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,kBAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,kBAC3BA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAc,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,kBAC1CC,eAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,oBAAAA,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBACbA,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EACvB,CAAA;AAAA,oBACAC,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBACZA,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,SAAA,GAAY,cAAc,QAAA,EAAS;AAAA,KAAA,EAC9C,CAAA;AAAA,oBACAC,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,UAAK,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,sBACnBA,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,aAAA,EAAc;AAAA,KAAA,EACzB;AAAA,GAAA,EACF;AAAA,CAAA,EACF,CAAA;ACCK,IAAM,eAA4C,CAAC;AAAA,EACxD,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,cAAA,GAAiBH,aAAuB,IAAI,CAAA;AAElD,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,GAAI,eAAe,EAAE,QAAA,EAAU,SAAS,OAAA,EAAS,UAAA,EAAY,cAAc,CAAA;AAE3E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAoB,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAsB,MAAM,CAAA;AAElE,EAAAG,gBAAU,MAAM;AACd,IAAA,SAAA,IAAY;AAAA,EACd,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,OAAO,MAAA,EAAQ,aAAA,CAAc,YAAA,KAAiB,SAAA,EAAW;AAC3D,MAAA,MAAM,IAAA,GAAO,OAAO,aAAA,CAAc,YAAA;AAClC,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,IAAI,MAAM,MAAA,IAAS;AAAA,WACd,OAAA,IAAU;AAAA,IACjB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAA,CAAc,YAAY,CAAC,CAAA;AAEvC,EAAAA,gBAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,EAAS,cAAA,CAAe,EAAE,QAAA,EAAU,UAAU,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,OAAO,CAAC,MAAA;AACd,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAA,GAAO,MAAA,OAAa,OAAA,IAAU;AAAA,EAChC,CAAA;AAEA,EAAA,MAAM,sBAAsB,YAAY;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,EAAiB;AACvB,MAAA,YAAA,CAAa,UAAU,CAAA;AACvB,MAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,IACzB,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,GAAA,KAAgB;AAC3C,IAAA,aAAA,CAAc,GAAG,CAAA;AACjB,IAAA,YAAA,CAAa,UAAU,CAAA;AACvB,IAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmBM,6BAAA;AAAA,IACvB,MAAA,EAAQ,cAAc,eAAA,IAAmB,EAAA;AAAA,IACzC;AAAA,MACE,WAAA,EAAa,CAAC,GAAA,EAAK,GAAA,EAAK,MAAM,QAAA,EAAU,GAAA,EAAK,KAAK,IAAI,CAAA;AAAA,MACtD,mBAAmB,EAAE,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAA,EAAU,KAAK,CAAA;AAAE;AACpD,GACF;AAEA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,uBACEL,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gEAAA;AAAA,QACV,KAAA,EAAO,EAAE,UAAA,EAAY,SAAA,EAAU;AAAA,QAC/B,YAAA,EAAW,SAAA;AAAA,QAEX,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB;AAAA;AAAA,KACnC;AAAA,EAEJ;AAEA,EAAA,uBACEC,eAAAA,CAAAC,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,oBACCF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,8BAAA,EAAiC,MAAA,GAAS,SAAA,GAAY,EAAE,CAAA,CAAA;AAAA,QACnE,OAAA,EAAS;AAAA;AAAA,KACX;AAAA,oBAGFA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,kBAAkB,MAAA,EAAQ,aAAA,CAAc,eAAe,CAAA,CAAA,EAAI,MAAA,GAAS,YAAY,EAAE,CAAA,CAAA;AAAA,QAC7F,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,QAAQ,aAAA,CAAc,UAAA;AAAA,UAC7B,MAAA,EAAQ,QAAQ,aAAA,CAAc;AAAA,SAChC;AAAA,QAEA,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,QAAA;AAAA,cACV,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,cAAc,iBAAA,EAAkB;AAAA,cAE7D,QAAA,EAAA;AAAA,gCAAAD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,MAAA,EAAQ,aAAA,CAAc,eACrB,MAAA,CAAO,aAAA,CAAc,aAAa,UAAA,CAAW,MAAM,KACnD,MAAA,CAAO,aAAA,CAAc,aAAa,UAAA,CAAW,OAAO,oBAClDA,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,GAAA,EAAK,OAAO,aAAA,CAAc,YAAA;AAAA,oBAC1B,GAAA,EAAI,cAAA;AAAA,oBACJ,SAAA,EAAU;AAAA;AAAA,iBACZ,mBAEAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aACb,QAAA,EAAA,MAAA,CAAO,aAAA,CAAc,YAAA,EACxB,CAAA,GAGF,WAAA,EAEJ,CAAA;AAAA,gCACAC,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAD,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cAAA,EACX,QAAA,EAAA,MAAA,EAAQ,cAAc,YAAA,EACzB,CAAA;AAAA,kCACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,aAAA,EACV,QAAA,EAAA,SAAA,GAAY,cAAc,QAAA,EAC7B;AAAA,iBAAA,EACF;AAAA;AAAA;AAAA,WACF;AAAA,0BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,KAAc,0BACbD,cAAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAa,MAAA,EAAQ,aAAA,CAAc,YAAA,IAAgB,EAAA;AAAA,gBACnD,SAAA;AAAA,gBACA,eAAe,QAAA,CAAS,MAAA;AAAA,gBACxB,YAAA,EAAc,mBAAA;AAAA,gBACd,qBAAqB,MAAM;AACzB,kBAAA,YAAA,CAAa,UAAU,CAAA;AACvB,kBAAA,cAAA,CAAe,MAAM,CAAA;AAAA,gBACvB;AAAA;AAAA,aACF;AAAA,YAGD,SAAA,KAAc,8BACbA,cAAAA,CAAAE,qBAAA,EACG,QAAA,EAAA,WAAA,KAAgB,yBACfF,cAAAA;AAAA,cAAC,qBAAA;AAAA,cAAA;AAAA,gBACC,QAAA;AAAA,gBACA,eAAA;AAAA,gBACA,eAAA;AAAA,gBACA,YAAA,EAAc,mBAAA;AAAA,gBACd,eAAA,EAAiB;AAAA;AAAA,gCAGnBA,cAAAA;AAAA,cAAC,uBAAA;AAAA,cAAA;AAAA,gBACC,eAAA;AAAA,gBACA,SAAA;AAAA,gBACA,QAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,SAAA;AAAA,gBACA,YAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,cAAA;AAAA,gBACA,MAAA;AAAA,gBACA,eAAA;AAAA,gBACA,MAAA,EAAQ,MAAM,cAAA,CAAe,MAAM,CAAA;AAAA,gBACnC,QAAQ,MAAM;AACZ,kBAAA,YAAA,CAAa,MAAM,CAAA;AACnB,kBAAA,cAAA,CAAe,MAAM,CAAA;AAAA,gBACvB,CAAA;AAAA,gBACA,aAAA,EAAe,WAAA;AAAA,gBACf,WAAA,EAAa,MAAA,EAAQ,aAAA,CAAc,WAAA,IAAe;AAAA;AAAA,aACpD,EAEJ,CAAA;AAAA,YAGD,SAAA,KAAc,0BACbA,cAAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAa,MAAA,EAAQ,aAAA,CAAc,YAAA,IAAgB,EAAA;AAAA,gBACnD,SAAA;AAAA,gBACA,eAAe,QAAA,CAAS;AAAA;AAAA;AAC1B,WAAA,EAEJ,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,CAAC,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAA,CAAkB,GAAA,CAAI,CAAC,wBAClDA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,CAAA,WAAA,EAAc,SAAA,KAAc,GAAA,GAAM,WAAW,EAAE,CAAA,CAAA;AAAA,cAC1D,SAAS,MAAM;AACb,gBAAA,YAAA,CAAa,GAAG,CAAA;AAChB,gBAAA,cAAA,CAAe,MAAM,CAAA;AAAA,cACvB,CAAA;AAAA,cAEC,QAAA,EAAA,GAAA,CAAI,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,GAAA,CAAI,MAAM,CAAC;AAAA,aAAA;AAAA,YAPrC;AAAA,WASR,CAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,oBAEAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,CAAA,gBAAA,EAAmB,MAAA,EAAQ,aAAA,CAAc,eAAe,CAAA,cAAA,EAAiB,MAAA,EAAQ,aAAA,CAAc,WAAW,CAAA,CAAA,EAAI,MAAA,GAAS,SAAA,GAAY,EAAE,CAAA,CAAA;AAAA,QAChJ,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,cAAc,iBAAA,EAAkB;AAAA,QAE5D,mCAASA,cAAAA,CAAC,aAAU,CAAA,mBAAKA,eAAC,QAAA,EAAA,EAAS;AAAA;AAAA;AACtC,GAAA,EACF,CAAA;AAEJ","file":"index.cjs","sourcesContent":["\r\nexport const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\n// export const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\nexport const DEVICE_STORAGE_KEY = \"aizek_device_id_v1\";\r\n\r\nexport const ACTIVE_SESSION_STORAGE_KEY = \"aizek_active_session_v1\";\r\n\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const SESSION_TITLE_MAX_LENGTH = 46;\r\n","import {\r\n DEVICE_STORAGE_KEY,\r\n ACTIVE_SESSION_STORAGE_KEY,\r\n} from \"../constants\";\r\n\r\n\r\nexport function getOrCreateDeviceId(): string {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_STORAGE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_STORAGE_KEY, id);\r\n return id;\r\n}\r\n\r\n\r\nexport function getActiveSessionId(): string | null {\r\n if (typeof window === \"undefined\") return null;\r\n return localStorage.getItem(ACTIVE_SESSION_STORAGE_KEY);\r\n}\r\n\r\n\r\nexport function setActiveSessionId(id: string | null): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_STORAGE_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_STORAGE_KEY, id);\r\n}\r\n","import { AuthConfig, HeadersType } from \"../types/http\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\n\r\n\r\nexport function buildRequestHeaders(\r\n deviceId: string,\r\n alternateHeaders?: HeadersType,\r\n sessionId?: string,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(alternateHeaders),\r\n };\r\n if (sessionId) headers[\"x-session-id\"] = sessionId;\r\n return headers;\r\n}\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): HeaderValidationResult {\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:\r\n \"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 const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\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 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 hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\r\n}\r\n","import { RawMessage, RawMessageContent } from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport {\r\n ExtractedUIResult,\r\n UIComponent,\r\n UIData,\r\n} from \"../types/generative-ui\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Raw content → plain text */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/**\r\n * Extracts a single text string from raw message content,\r\n * which may be a plain string or an array of content parts.\r\n */\r\nexport function extractTextFromContent(\r\n content: string | RawMessageContent[],\r\n): string {\r\n if (typeof content === \"string\") return content;\r\n\r\n if (Array.isArray(content)) {\r\n return content\r\n .filter((item) => item.type === \"text\" && typeof item.text === \"string\")\r\n .map((item) => item.text!)\r\n .join(\"\\n\");\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction normalizeComponent(\r\n component: UIComponent,\r\n index: number,\r\n): UIComponent {\r\n const normalized = { ...component };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (normalized.type === \"button\" && !normalized.buttonType) {\r\n normalized.buttonType = \"click\";\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n if (normalized.type === \"table\") {\r\n normalized.columns = normalizeTableColumns(normalized.columns);\r\n normalized.rows = normalizeTableRows(normalized.rows);\r\n }\r\n\r\n if (normalized.type === \"form\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeFormField);\r\n }\r\n\r\n if (normalized.type === \"list\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeListItem);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeStringArray(items: unknown[]): string[] {\r\n return items.map((item) =>\r\n typeof item === \"object\" && item !== null\r\n ? (item as Record<string, string>).label ??\r\n (item as Record<string, string>).value ??\r\n String(item)\r\n : String(item),\r\n );\r\n}\r\n\r\nfunction normalizeTableColumns(columns?: unknown[]): string[] | undefined {\r\n if (!Array.isArray(columns)) return columns as string[] | undefined;\r\n return columns.map((col) =>\r\n typeof col === \"object\" && col !== null\r\n ? (col as Record<string, string>).label ??\r\n (col as Record<string, string>).id ??\r\n String(col)\r\n : String(col),\r\n );\r\n}\r\n\r\nfunction normalizeTableRows(rows?: unknown[]): string[][] | undefined {\r\n if (!Array.isArray(rows)) return rows as string[][] | undefined;\r\n return rows.map((row) => {\r\n if (Array.isArray(row)) {\r\n return row.map((cell) => String(cell ?? \"\"));\r\n }\r\n // Row is an object – extract values\r\n return Object.values(row as Record<string, unknown>).map((val) => {\r\n if (\r\n typeof val === \"object\" &&\r\n val !== null &&\r\n (val as Record<string, string>).type === \"image\"\r\n ) {\r\n return (val as Record<string, string>).src;\r\n }\r\n const record = val as Record<string, unknown> | null;\r\n return String(record?.value ?? val ?? \"\");\r\n });\r\n });\r\n}\r\n\r\nfunction normalizeFormField(\r\n field: UIComponent,\r\n fieldIndex: number,\r\n): UIComponent {\r\n const normalized = { ...field };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n const raw = field as unknown as Record<string, unknown>;\r\n if (\"optional\" in raw) {\r\n normalized.requiredField = !raw.optional;\r\n }\r\n if (\"required\" in raw) {\r\n normalized.requiredField = !!raw.required;\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeListItem(item: unknown, itemIndex: number): UIComponent {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n label: item,\r\n value: item,\r\n };\r\n }\r\n\r\n const comp = item as UIComponent;\r\n if (!comp.id?.trim()) {\r\n comp.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return comp;\r\n}\r\n\r\nexport function extractUIJsonFromText(text: string): ExtractedUIResult {\r\n const UI_COMPONENT_REGEX = /```ui-component\\s*([\\s\\S]*?)```/g;\r\n\r\n const matches = Array.from(text.matchAll(UI_COMPONENT_REGEX));\r\n if (matches.length === 0) {\r\n return { cleanedText: text.trim(), uiData: null };\r\n }\r\n\r\n let cleanedText = text;\r\n let mergedUIData: UIData | null = null;\r\n\r\n for (const match of matches) {\r\n const fullBlock = match[0];\r\n const jsonBlock = match[1]?.trim();\r\n\r\n cleanedText = cleanedText.replace(fullBlock, \"\").trim();\r\n\r\n try {\r\n const parsed = JSON.parse(jsonBlock) as Partial<UIData>;\r\n\r\n if (parsed && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map(normalizeComponent);\r\n\r\n if (!mergedUIData) {\r\n mergedUIData = parsed as UIData;\r\n } else {\r\n mergedUIData.components = [\r\n ...mergedUIData.components,\r\n ...parsed.components,\r\n ];\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Invalid ui-component JSON:\", err, jsonBlock);\r\n }\r\n }\r\n\r\n cleanedText = cleanedText.replace(/\\n{3,}/g, \"\\n\\n\").trim();\r\n\r\n return { cleanedText, uiData: mergedUIData };\r\n}\r\n\r\n\r\nexport function parseRawMessages(rawMessages: RawMessage[]): Message[] {\r\n const result: Message[] = [];\r\n\r\n for (const msg of rawMessages) {\r\n const textContent = extractTextFromContent(msg.content);\r\n let cleanText = textContent;\r\n let uiData = null;\r\n\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n cleanText = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n if (cleanText.trim() || uiData) {\r\n result.push({\r\n text: cleanText.trim() || undefined,\r\n ui: uiData ?? undefined,\r\n role: msg.role === \"user\" ? \"user\" : \"assistant\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n","import { BaseResponse, HeadersType } from \"../types/http\";\r\nimport {\r\n ConnectResponseData,\r\n NewSessionResponseData,\r\n} from \"../types/widget-config\";\r\nimport {\r\n MessageHistoryResponseData,\r\n LastMessageResponseData,\r\n} from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport { PROXY_BASE_URL, SESSION_TITLE_MAX_LENGTH } from \"../constants\";\r\nimport { getOrCreateDeviceId } from \"../utils/device\";\r\nimport { buildRequestHeaders } from \"../utils/headers\";\r\nimport {\r\n extractTextFromContent,\r\n parseRawMessages,\r\n extractUIJsonFromText,\r\n} from \"../utils/message\";\r\n\r\nexport async function fetchWidgetConfig(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<ConnectResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function createSession(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<NewSessionResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function sendChatMessage(\r\n clientId: string,\r\n sessionId: string,\r\n message: string,\r\n headers?: HeadersType,\r\n): Promise<Response> {\r\n const deviceId = getOrCreateDeviceId();\r\n return fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n body: JSON.stringify({ message }),\r\n });\r\n}\r\n\r\nexport async function fetchMessageHistory(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<Message[]> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const data: BaseResponse<MessageHistoryResponseData> = await response.json();\r\n if (!data.success)\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n\r\n return parseRawMessages(data.data?.messages ?? []);\r\n}\r\n\r\nexport async function fetchSessionTitle(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<string | null> {\r\n const deviceId = getOrCreateDeviceId();\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-last-message`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const json: BaseResponse<LastMessageResponseData> = 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 const textContent = extractTextFromContent(last.content);\r\n if (!textContent.trim()) return null;\r\n\r\n const { cleanedText } = extractUIJsonFromText(textContent);\r\n const firstLine = (\r\n cleanedText.split(\"\\n\").find((l: string) => l.trim()) || \"\"\r\n ).trim();\r\n const title = firstLine || cleanedText;\r\n if (!title) return null;\r\n\r\n return title.length > SESSION_TITLE_MAX_LENGTH\r\n ? `${title.slice(0, SESSION_TITLE_MAX_LENGTH).trim()}…`\r\n : title;\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { ChatWidgetApiResponse } from \"../types/widget-config\";\r\nimport { HeadersType } from \"../types/http\";\r\nimport { StreamEvent, ToolCallPayload } from \"../types/streaming\";\r\nimport { Message } from \"../types/chat\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\nimport { MAX_SESSIONS } from \"../constants\";\r\nimport { getActiveSessionId, setActiveSessionId } from \"../utils/device\";\r\nimport { validateHeaders } from \"../utils/headers\";\r\nimport {\r\n fetchWidgetConfig,\r\n createSession,\r\n sendChatMessage,\r\n fetchMessageHistory,\r\n fetchSessionTitle,\r\n} from \"../services/chat-api\";\r\n\r\ninterface UseChatSessionOptions {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\ninterface UseChatSessionReturn {\r\n config: ChatWidgetApiResponse | undefined;\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConfigLoading: boolean;\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n headerValidation: HeaderValidationResult | null;\r\n sessionTitleById: Record<string, string>;\r\n createNewSession: () => Promise<string>;\r\n sendMessage: (message: string, approval?: boolean) => Promise<void>;\r\n selectSession: (sid: string) => void;\r\n getSessionTitle: (sid: string) => string;\r\n}\r\n\r\nexport function useChatSession({\r\n clientId,\r\n headers,\r\n onReady,\r\n onToolCall,\r\n}: UseChatSessionOptions): UseChatSessionReturn {\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 [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSession, setActiveSession] = useState<string | null>(null);\r\n const [headerValidation, setHeaderValidation] =\r\n useState<HeaderValidationResult | null>(null);\r\n const [sessionTitleById, setSessionTitleById] = useState<\r\n Record<string, string>\r\n >({});\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const loadConfig = useCallback(async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const localActive = getActiveSessionId();\r\n\r\n const data = await fetchWidgetConfig(clientId, headers);\r\n if (!data.success) return;\r\n\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n setSessions(serverSessions);\r\n\r\n if (serverSessions.length === 0) {\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n } else {\r\n const nextActive =\r\n (localActive && serverSessions.includes(localActive)\r\n ? localActive\r\n : null) ??\r\n serverSessions[0] ??\r\n null;\r\n setActiveSession(nextActive);\r\n setActiveSessionId(nextActive);\r\n }\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(\r\n headers,\r\n data.data.auth_config,\r\n { allowExtra: false, 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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId]);\r\n\r\n const createNewSession = useCallback(async (): Promise<string> => {\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 data = await createSession(clientId, headers);\r\n if (!data.success) throw new Error(data.message || \"Session create failed\");\r\n\r\n const sid = data.data.sessionId;\r\n const updatedSessions = data.data.sessions ?? [sid];\r\n\r\n setSessions(updatedSessions);\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n setMessages([]);\r\n\r\n return sid;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId, headers, sessions.length]);\r\n\r\n const handleStreamResponse = useCallback(\r\n async (response: Response, onFinish?: () => void) => {\r\n if (!response.body) {\r\n throw new Error(\"Streaming not supported (no response body)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let text = \"\";\r\n let buffer = \"\";\r\n\r\n try {\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\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\r\n .split(\"\\n\")\r\n .find((l) => l.startsWith(\"data:\"));\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 try {\r\n const event = JSON.parse(jsonStr) as StreamEvent;\r\n\r\n if (event.type === \"response.output_text.delta\" && event.delta) {\r\n setIsLoading(false);\r\n text += event.delta;\r\n\r\n setMessages((prev) => {\r\n const lastMsg = prev[prev.length - 1];\r\n if (lastMsg?.role === \"assistant\") {\r\n return [...prev.slice(0, -1), { ...lastMsg, text }];\r\n }\r\n return [\r\n ...prev,\r\n { text, role: \"assistant\", timestamp: new Date() },\r\n ];\r\n });\r\n }\r\n\r\n if (\r\n event.type === \"response.output_item.done\" &&\r\n event.item.type === \"mcp_call\"\r\n ) {\r\n onToolCall?.({\r\n name: event.item.name,\r\n args: JSON.parse(event.item.arguments),\r\n result: JSON.parse(event.item.output),\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"Error parsing stream event\", e);\r\n }\r\n }\r\n }\r\n } finally {\r\n onFinish?.();\r\n }\r\n },\r\n [onToolCall],\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n setIsLoading(true);\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n {\r\n text: message,\r\n ui: undefined,\r\n role: approval ? \"approval\" : \"user\",\r\n timestamp: new Date(),\r\n },\r\n ]);\r\n\r\n try {\r\n let sid = activeSession;\r\n if (!sid) sid = await createNewSession();\r\n\r\n let response = await sendChatMessage(clientId, sid, message, headers);\r\n\r\n if (response.status === 401) {\r\n console.log(\"Session expired, renewing...\");\r\n const filtered = sessions.filter((s) => s !== sid);\r\n setSessions(filtered);\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n\r\n const newSid = await createNewSession();\r\n response = await sendChatMessage(clientId, newSid, message, headers);\r\n }\r\n\r\n if (!response.ok) throw new Error(`HTTP error ${response.status}`);\r\n\r\n await handleStreamResponse(response);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n const errorMessage: Message = {\r\n text: \"Sorry, something went wrong. Please try again.\",\r\n role: \"assistant\",\r\n timestamp: new Date(),\r\n };\r\n\r\n if (last?.role === \"assistant\" && !last.text) {\r\n return [...prev.slice(0, -1), errorMessage];\r\n }\r\n return [...prev, errorMessage];\r\n });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [\r\n activeSession,\r\n clientId,\r\n createNewSession,\r\n handleStreamResponse,\r\n headers,\r\n isLoading,\r\n sessions,\r\n ],\r\n );\r\n\r\n const selectSession = useCallback((sid: string) => {\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n }, []);\r\n\r\n const getSessionTitle = useCallback(\r\n (sid: string) => sessionTitleById[sid] ?? \"New conversation\",\r\n [sessionTitleById],\r\n );\r\n\r\n useEffect(() => {\r\n loadConfig();\r\n }, [loadConfig]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSession && !isConfigLoading) {\r\n fetchMessageHistory(activeSession, headers)\r\n .then(setMessages)\r\n .catch((error) =>\r\n console.error(\"Failed to load message history:\", error),\r\n );\r\n } else if (!activeSession) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSession, 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 for (const sid of missing) {\r\n if (cancelled) return;\r\n const title = await fetchSessionTitle(sid, headers);\r\n if (cancelled || !title) continue;\r\n setSessionTitleById((prev) =>\r\n prev[sid] ? prev : { ...prev, [sid]: title },\r\n );\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sessions]);\r\n\r\n return {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId: activeSession,\r\n headerValidation,\r\n sessionTitleById,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n };\r\n}\r\n","\r\nexport const IconClose = () => (\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\r\nexport const IconChat = () => (\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\r\nexport const IconBack = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconBubble = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path 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\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconInfo = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 17v-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M12 8h.01\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\r\n </svg>\r\n);\r\n\r\nexport const IconTrash = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M8 6V4h8v2\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n <path d=\"M6 6l1 16h10l1-16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface HomePanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n onNewSession: () => void;\r\n onViewConversations: () => void;\r\n}\r\n\r\nexport const HomePanel: React.FC<HomePanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n onNewSession,\r\n onViewConversations,\r\n}) => (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{companyName}</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={onNewSession}\r\n disabled={isLoading || sessionsCount >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button className=\"ghost-button\" onClick={onViewConversations}>\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface ConversationListPanelProps {\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n getSessionTitle: (sid: string) => string;\r\n onNewSession: () => void;\r\n onSelectSession: (sid: string) => void;\r\n}\r\n\r\nexport const ConversationListPanel: React.FC<ConversationListPanelProps> = ({\r\n sessions,\r\n activeSessionId,\r\n getSessionTitle,\r\n onNewSession,\r\n onSelectSession,\r\n}) => (\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={onNewSession}\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={() => onSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionTitle(sid)}</p>\r\n <p className=\"conversation-sub\">\r\n Session ID: {sid.slice(0, 8)}...\r\n </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","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/validation\";\r\n\r\ninterface HeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport const HeaderAlert = ({\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n}: HeaderAlertProps) => {\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 renderAlertIcon = () => {\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{renderAlertIcon()}</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>•</span>\r\n <code>{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>Boş Değerli Header'lar:</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>•</span>\r\n <code>{key}</code>\r\n <span>(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>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>•</span>\r\n <code>{key}</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};","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 ChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n}\r\n\r\nexport const ChatInput = ({\r\n isLoading,\r\n placeholder,\r\n onSendMessage,\r\n}: ChatInputProps) => {\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 onSendMessage(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 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 from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITextProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIText: React.FC<GenUITextProps> = ({ component }) => (\r\n <p key={component.id} className=\"gen-ui-text\">\r\n {component.value ?? component.label}\r\n </p>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIInputProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIInput: React.FC<GenUIInputProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-input-wrapper\">\r\n {component.label && <label className=\"gen-ui-input-label\">{component.label}</label>}\r\n {component.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={component.id}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={component.id}\r\n type={component.fieldType || \"text\"}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUISelectProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUISelect: React.FC<GenUISelectProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-select-wrapper\">\r\n {component.label && <label className=\"gen-ui-select-label\">{component.label}</label>}\r\n <select name={component.id} className=\"gen-ui-select\">\r\n {component.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","import React from \"react\";\r\nimport { FormValues, UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIButtonProps {\r\n component: UIComponent;\r\n onInteraction: (event: { action: string; buttonId?: \"click\" | \"submit\"; formData: FormValues }) => void;\r\n collectFormValues: () => FormValues;\r\n}\r\n\r\nexport const GenUIButton: React.FC<GenUIButtonProps> = ({\r\n component,\r\n onInteraction,\r\n collectFormValues,\r\n}) => (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: component.label ?? \"\",\r\n buttonId: component.buttonType,\r\n formData: formValues,\r\n });\r\n }}\r\n key={component.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {component.label}\r\n </button>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUICardProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUICard: React.FC<GenUICardProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-card\">\r\n {component.label && <h2 className=\"gen-ui-card-title\">{component.label}</h2>}\r\n {component.value && <p className=\"gen-ui-card-content\">{component.value}</p>}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIListProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIList: React.FC<GenUIListProps> = ({ component }) => (\r\n <ul key={component.id} className=\"gen-ui-list\">\r\n {component.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","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIImageProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIImage: React.FC<GenUIImageProps> = ({ component }) => (\r\n <img\r\n key={component.id}\r\n src={component.url}\r\n alt={component.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUILinkProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUILink: React.FC<GenUILinkProps> = ({ component }) => (\r\n <a\r\n key={component.id}\r\n href={component.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {component.label || component.url}\r\n </a>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITableProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUITable: React.FC<GenUITableProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {component.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {component.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 {component.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {component.rows.map((row, rowIndex) => (\r\n <tr key={rowIndex}>\r\n {row.map((cell, cellIndex) => (\r\n <td key={cellIndex} 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","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData, UIInteractionEvent, FormValues } from \"../../types/generative-ui\";\r\nimport {\r\n GenUIText,\r\n GenUIInput,\r\n GenUISelect,\r\n GenUIButton,\r\n GenUICard,\r\n GenUIList,\r\n GenUIImage,\r\n GenUILink,\r\n GenUITable,\r\n} from \"./atoms\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Props */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface GenericUIRendererProps {\r\n uiData: UIData;\r\n onInteraction: (event: UIInteractionEvent) => void;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Component */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({\r\n uiData,\r\n onInteraction,\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData?.components) return null;\r\n\r\n /** Collects current form field values from the rendered DOM. */\r\n const collectFormValues = (): FormValues => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: FormValues = {};\r\n const inputs = containerRef.current.querySelectorAll<\r\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\r\n >(\"input, textarea, select\");\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute(\"name\");\r\n if (!name) return;\r\n\r\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\r\n formData[name] = element.checked;\r\n } else if (\r\n element instanceof HTMLInputElement &&\r\n element.type === \"radio\"\r\n ) {\r\n if (element.checked) formData[name] = element.value;\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n /** Delegates rendering to the correct atom component. */\r\n const renderComponent = (component: UIComponent): React.ReactNode => {\r\n switch (component.type) {\r\n case \"text\":\r\n return <GenUIText key={component.id} component={component} />;\r\n case \"input\":\r\n return <GenUIInput key={component.id} component={component} />;\r\n case \"select\":\r\n return <GenUISelect key={component.id} component={component} />;\r\n case \"button\":\r\n return (\r\n <GenUIButton\r\n key={component.id}\r\n component={component}\r\n onInteraction={onInteraction}\r\n collectFormValues={collectFormValues}\r\n />\r\n );\r\n case \"card\":\r\n return <GenUICard key={component.id} component={component} />;\r\n case \"list\":\r\n return <GenUIList key={component.id} component={component} />;\r\n case \"image\":\r\n return <GenUIImage key={component.id} component={component} />;\r\n case \"link\":\r\n return <GenUILink key={component.id} component={component} />;\r\n case \"table\":\r\n return <GenUITable key={component.id} component={component} />;\r\n case \"form\":\r\n return (\r\n <form key={component.id} className=\"gen-ui-form\">\r\n {component.items?.map((field) => renderComponent(field))}\r\n </form>\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","import { Message } from \"../../types/chat\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: MessageBubbleProps) => {\r\n const isUser = message.role === \"user\";\r\n\r\n if (message.role === \"approval\") return null;\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 && <div className=\"markdown-content\">{message.text}</div>\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 if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n } else {\r\n onAction(event.action, true);\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};","import React from \"react\";\r\nimport { Message } from \"../../../types/chat\";\r\nimport { HeaderValidationResult } from \"../../../types/validation\";\r\nimport { ChatWidgetApiResponse } from \"../../../types/widget-config\";\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 { IconBack, IconBubble, IconInfo, IconTrash } from \"../icons\";\r\n\r\ninterface ConversationDetailPanelProps {\r\n activeSessionId: string | null;\r\n isLoading: boolean;\r\n messages: Message[];\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: React.Dispatch<React.SetStateAction<boolean>>;\r\n sanitizedWelcome: string;\r\n messagesEndRef: React.RefObject<HTMLDivElement | null>;\r\n config: ChatWidgetApiResponse | undefined;\r\n getSessionTitle: (sid: string) => string;\r\n onBack: () => void;\r\n onInfo: () => void;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n placeholder: string;\r\n}\r\n\r\nexport const ConversationDetailPanel: React.FC<\r\n ConversationDetailPanelProps\r\n> = ({\r\n activeSessionId,\r\n isLoading,\r\n messages,\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n sanitizedWelcome,\r\n messagesEndRef,\r\n config,\r\n getSessionTitle,\r\n onBack,\r\n onInfo,\r\n onSendMessage,\r\n placeholder,\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={onBack} aria-label=\"Back\">\r\n <IconBack />\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 <IconBubble />\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\r\n className={`status-dot ${isLoading ? \"typing\" : \"online\"}`}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n <p className=\"detail-subtitle\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button className=\"icon-button\" onClick={onInfo} aria-label=\"Bilgi\">\r\n <IconInfo />\r\n </button>\r\n <button\r\n className=\"icon-button danger\"\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <IconTrash />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert\r\n headerValidation={headerValidation}\r\n setShowAlert={setShowAlert}\r\n showAlert={showAlert}\r\n />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: sanitizedWelcome }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble\r\n key={index}\r\n message={message}\r\n onAction={onSendMessage}\r\n />\r\n ))}\r\n {config?.widget_config.show_typing_indicator && isLoading && (\r\n <TypingDots />\r\n )}\r\n </>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n onSendMessage={onSendMessage}\r\n isLoading={isLoading}\r\n placeholder={placeholder}\r\n />\r\n </div>\r\n);\r\n","import React from \"react\";\r\n\r\ninterface InfoPanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n}\r\n\r\nexport const InfoPanel: React.FC<InfoPanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n}) => (\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>{companyName}</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>{sessionsCount}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n);\r\n","\"use client\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { ActiveTab, MessageView, Message } from \"../../types/chat\";\r\nimport { useChatSession } from \"../../hooks/use-chat-session\";\r\nimport { IconClose, IconChat } from \"./icons\";\r\nimport {\r\n HomePanel,\r\n ConversationListPanel,\r\n ConversationDetailPanel,\r\n InfoPanel,\r\n} from \"./panels\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\nimport \"../../styles/index.scss\";\r\nimport {\r\n ChatWidgetApiResponse,\r\n HeadersType,\r\n ToolCallPayload,\r\n} from \"../../types\";\r\n\r\ninterface AizekChatBotProps {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onMounted?: () => void;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: Message) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\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 {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId,\r\n headerValidation,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n } = useChatSession({ clientId, headers, onReady, onToolCall, onDisconnect });\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [showAlert, setShowAlert] = useState(true);\r\n const [activeTab, setActiveTab] = useState<ActiveTab>(\"home\");\r\n const [messageView, setMessageView] = useState<MessageView>(\"list\");\r\n\r\n useEffect(() => {\r\n onMounted?.();\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 }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n const toggleChat = () => {\r\n const next = !isOpen;\r\n setIsOpen(next);\r\n next ? onOpen?.() : onClose?.();\r\n };\r\n\r\n const handleCreateSession = async () => {\r\n try {\r\n await createNewSession();\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n selectSession(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n const sanitizedWelcome = sanitizeHtml(\r\n config?.widget_config.welcome_message ?? \"\",\r\n {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: { a: [\"href\", \"target\", \"rel\"] },\r\n },\r\n );\r\n\r\n if (isConfigLoading) {\r\n return (\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\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`}\r\n onClick={toggleChat}\r\n />\r\n )}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{\r\n width: config?.widget_config.chat_width,\r\n height: config?.widget_config.chat_height,\r\n }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div\r\n className=\"header\"\r\n style={{ background: config?.widget_config.header_background }}\r\n >\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\r\n src={config.widget_config.company_logo}\r\n alt=\"Company Logo\"\r\n className=\"logo-image\"\r\n />\r\n ) : (\r\n <span className=\"logo-text\">\r\n {config.widget_config.company_logo}\r\n </span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">\r\n {config?.widget_config.company_name}\r\n </h3>\r\n <p className=\"status-text\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <HomePanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n onNewSession={handleCreateSession}\r\n onViewConversations={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n />\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <ConversationListPanel\r\n sessions={sessions}\r\n activeSessionId={activeSessionId}\r\n getSessionTitle={getSessionTitle}\r\n onNewSession={handleCreateSession}\r\n onSelectSession={handleSelectSession}\r\n />\r\n ) : (\r\n <ConversationDetailPanel\r\n activeSessionId={activeSessionId}\r\n isLoading={isLoading}\r\n messages={messages}\r\n headerValidation={headerValidation}\r\n showAlert={showAlert}\r\n setShowAlert={setShowAlert}\r\n sanitizedWelcome={sanitizedWelcome}\r\n messagesEndRef={messagesEndRef}\r\n config={config}\r\n getSessionTitle={getSessionTitle}\r\n onBack={() => setMessageView(\"list\")}\r\n onInfo={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n onSendMessage={sendMessage}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <InfoPanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n {([\"home\", \"messages\", \"info\"] as ActiveTab[]).map((tab) => (\r\n <button\r\n key={tab}\r\n className={`nav-button ${activeTab === tab ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(tab);\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\r\n </button>\r\n ))}\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 style={{ background: config?.widget_config.button_background }}\r\n >\r\n {isOpen ? <IconClose /> : <IconChat />}\r\n </button>\r\n </>\r\n );\r\n};\r\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import remarkGfm from 'remark-gfm';
|
|
|
5
5
|
import sanitizeHtml from 'sanitize-html';
|
|
6
6
|
|
|
7
7
|
// src/constants/index.ts
|
|
8
|
-
var PROXY_BASE_URL = "
|
|
8
|
+
var PROXY_BASE_URL = "https://proxy.aizek.ai/api";
|
|
9
9
|
var DEVICE_STORAGE_KEY = "aizek_device_id_v1";
|
|
10
10
|
var ACTIVE_SESSION_STORAGE_KEY = "aizek_active_session_v1";
|
|
11
11
|
var MAX_SESSIONS = 3;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/index.ts","../src/utils/device.ts","../src/utils/headers.ts","../src/utils/message.ts","../src/services/chat-api.ts","../src/hooks/use-chat-session.ts","../src/components/aizek-chat/icons/index.tsx","../src/components/aizek-chat/panels/HomePanel.tsx","../src/components/aizek-chat/panels/ConversationListPanel.tsx","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/atoms/GenUIText.tsx","../src/components/generative-ui/atoms/GenUIInput.tsx","../src/components/generative-ui/atoms/GenUISelect.tsx","../src/components/generative-ui/atoms/GenUIButton.tsx","../src/components/generative-ui/atoms/GenUICard.tsx","../src/components/generative-ui/atoms/GenUIList.tsx","../src/components/generative-ui/atoms/GenUIImage.tsx","../src/components/generative-ui/atoms/GenUILink.tsx","../src/components/generative-ui/atoms/GenUITable.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/components/aizek-chat/panels/ConversationDetailPanel.tsx","../src/components/aizek-chat/panels/InfoPanel.tsx","../src/components/aizek-chat/index.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect","Fragment"],"mappings":"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","file":"index.mjs","sourcesContent":["\r\n// export const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\nexport const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\nexport const DEVICE_STORAGE_KEY = \"aizek_device_id_v1\";\r\n\r\nexport const ACTIVE_SESSION_STORAGE_KEY = \"aizek_active_session_v1\";\r\n\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const SESSION_TITLE_MAX_LENGTH = 46;\r\n","import {\r\n DEVICE_STORAGE_KEY,\r\n ACTIVE_SESSION_STORAGE_KEY,\r\n} from \"../constants\";\r\n\r\n\r\nexport function getOrCreateDeviceId(): string {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_STORAGE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_STORAGE_KEY, id);\r\n return id;\r\n}\r\n\r\n\r\nexport function getActiveSessionId(): string | null {\r\n if (typeof window === \"undefined\") return null;\r\n return localStorage.getItem(ACTIVE_SESSION_STORAGE_KEY);\r\n}\r\n\r\n\r\nexport function setActiveSessionId(id: string | null): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_STORAGE_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_STORAGE_KEY, id);\r\n}\r\n","import { AuthConfig, HeadersType } from \"../types/http\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\n\r\n\r\nexport function buildRequestHeaders(\r\n deviceId: string,\r\n alternateHeaders?: HeadersType,\r\n sessionId?: string,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(alternateHeaders),\r\n };\r\n if (sessionId) headers[\"x-session-id\"] = sessionId;\r\n return headers;\r\n}\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): HeaderValidationResult {\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:\r\n \"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 const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\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 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 hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\r\n}\r\n","import { RawMessage, RawMessageContent } from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport {\r\n ExtractedUIResult,\r\n UIComponent,\r\n UIData,\r\n} from \"../types/generative-ui\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Raw content → plain text */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/**\r\n * Extracts a single text string from raw message content,\r\n * which may be a plain string or an array of content parts.\r\n */\r\nexport function extractTextFromContent(\r\n content: string | RawMessageContent[],\r\n): string {\r\n if (typeof content === \"string\") return content;\r\n\r\n if (Array.isArray(content)) {\r\n return content\r\n .filter((item) => item.type === \"text\" && typeof item.text === \"string\")\r\n .map((item) => item.text!)\r\n .join(\"\\n\");\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction normalizeComponent(\r\n component: UIComponent,\r\n index: number,\r\n): UIComponent {\r\n const normalized = { ...component };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (normalized.type === \"button\" && !normalized.buttonType) {\r\n normalized.buttonType = \"click\";\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n if (normalized.type === \"table\") {\r\n normalized.columns = normalizeTableColumns(normalized.columns);\r\n normalized.rows = normalizeTableRows(normalized.rows);\r\n }\r\n\r\n if (normalized.type === \"form\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeFormField);\r\n }\r\n\r\n if (normalized.type === \"list\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeListItem);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeStringArray(items: unknown[]): string[] {\r\n return items.map((item) =>\r\n typeof item === \"object\" && item !== null\r\n ? (item as Record<string, string>).label ??\r\n (item as Record<string, string>).value ??\r\n String(item)\r\n : String(item),\r\n );\r\n}\r\n\r\nfunction normalizeTableColumns(columns?: unknown[]): string[] | undefined {\r\n if (!Array.isArray(columns)) return columns as string[] | undefined;\r\n return columns.map((col) =>\r\n typeof col === \"object\" && col !== null\r\n ? (col as Record<string, string>).label ??\r\n (col as Record<string, string>).id ??\r\n String(col)\r\n : String(col),\r\n );\r\n}\r\n\r\nfunction normalizeTableRows(rows?: unknown[]): string[][] | undefined {\r\n if (!Array.isArray(rows)) return rows as string[][] | undefined;\r\n return rows.map((row) => {\r\n if (Array.isArray(row)) {\r\n return row.map((cell) => String(cell ?? \"\"));\r\n }\r\n // Row is an object – extract values\r\n return Object.values(row as Record<string, unknown>).map((val) => {\r\n if (\r\n typeof val === \"object\" &&\r\n val !== null &&\r\n (val as Record<string, string>).type === \"image\"\r\n ) {\r\n return (val as Record<string, string>).src;\r\n }\r\n const record = val as Record<string, unknown> | null;\r\n return String(record?.value ?? val ?? \"\");\r\n });\r\n });\r\n}\r\n\r\nfunction normalizeFormField(\r\n field: UIComponent,\r\n fieldIndex: number,\r\n): UIComponent {\r\n const normalized = { ...field };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n const raw = field as unknown as Record<string, unknown>;\r\n if (\"optional\" in raw) {\r\n normalized.requiredField = !raw.optional;\r\n }\r\n if (\"required\" in raw) {\r\n normalized.requiredField = !!raw.required;\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeListItem(item: unknown, itemIndex: number): UIComponent {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n label: item,\r\n value: item,\r\n };\r\n }\r\n\r\n const comp = item as UIComponent;\r\n if (!comp.id?.trim()) {\r\n comp.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return comp;\r\n}\r\n\r\nexport function extractUIJsonFromText(text: string): ExtractedUIResult {\r\n const UI_COMPONENT_REGEX = /```ui-component\\s*([\\s\\S]*?)```/g;\r\n\r\n const matches = Array.from(text.matchAll(UI_COMPONENT_REGEX));\r\n if (matches.length === 0) {\r\n return { cleanedText: text.trim(), uiData: null };\r\n }\r\n\r\n let cleanedText = text;\r\n let mergedUIData: UIData | null = null;\r\n\r\n for (const match of matches) {\r\n const fullBlock = match[0];\r\n const jsonBlock = match[1]?.trim();\r\n\r\n cleanedText = cleanedText.replace(fullBlock, \"\").trim();\r\n\r\n try {\r\n const parsed = JSON.parse(jsonBlock) as Partial<UIData>;\r\n\r\n if (parsed && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map(normalizeComponent);\r\n\r\n if (!mergedUIData) {\r\n mergedUIData = parsed as UIData;\r\n } else {\r\n mergedUIData.components = [\r\n ...mergedUIData.components,\r\n ...parsed.components,\r\n ];\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Invalid ui-component JSON:\", err, jsonBlock);\r\n }\r\n }\r\n\r\n cleanedText = cleanedText.replace(/\\n{3,}/g, \"\\n\\n\").trim();\r\n\r\n return { cleanedText, uiData: mergedUIData };\r\n}\r\n\r\n\r\nexport function parseRawMessages(rawMessages: RawMessage[]): Message[] {\r\n const result: Message[] = [];\r\n\r\n for (const msg of rawMessages) {\r\n const textContent = extractTextFromContent(msg.content);\r\n let cleanText = textContent;\r\n let uiData = null;\r\n\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n cleanText = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n if (cleanText.trim() || uiData) {\r\n result.push({\r\n text: cleanText.trim() || undefined,\r\n ui: uiData ?? undefined,\r\n role: msg.role === \"user\" ? \"user\" : \"assistant\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n","import { BaseResponse, HeadersType } from \"../types/http\";\r\nimport {\r\n ConnectResponseData,\r\n NewSessionResponseData,\r\n} from \"../types/widget-config\";\r\nimport {\r\n MessageHistoryResponseData,\r\n LastMessageResponseData,\r\n} from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport { PROXY_BASE_URL, SESSION_TITLE_MAX_LENGTH } from \"../constants\";\r\nimport { getOrCreateDeviceId } from \"../utils/device\";\r\nimport { buildRequestHeaders } from \"../utils/headers\";\r\nimport {\r\n extractTextFromContent,\r\n parseRawMessages,\r\n extractUIJsonFromText,\r\n} from \"../utils/message\";\r\n\r\nexport async function fetchWidgetConfig(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<ConnectResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function createSession(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<NewSessionResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function sendChatMessage(\r\n clientId: string,\r\n sessionId: string,\r\n message: string,\r\n headers?: HeadersType,\r\n): Promise<Response> {\r\n const deviceId = getOrCreateDeviceId();\r\n return fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n body: JSON.stringify({ message }),\r\n });\r\n}\r\n\r\nexport async function fetchMessageHistory(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<Message[]> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const data: BaseResponse<MessageHistoryResponseData> = await response.json();\r\n if (!data.success)\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n\r\n return parseRawMessages(data.data?.messages ?? []);\r\n}\r\n\r\nexport async function fetchSessionTitle(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<string | null> {\r\n const deviceId = getOrCreateDeviceId();\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-last-message`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const json: BaseResponse<LastMessageResponseData> = 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 const textContent = extractTextFromContent(last.content);\r\n if (!textContent.trim()) return null;\r\n\r\n const { cleanedText } = extractUIJsonFromText(textContent);\r\n const firstLine = (\r\n cleanedText.split(\"\\n\").find((l: string) => l.trim()) || \"\"\r\n ).trim();\r\n const title = firstLine || cleanedText;\r\n if (!title) return null;\r\n\r\n return title.length > SESSION_TITLE_MAX_LENGTH\r\n ? `${title.slice(0, SESSION_TITLE_MAX_LENGTH).trim()}…`\r\n : title;\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { ChatWidgetApiResponse } from \"../types/widget-config\";\r\nimport { HeadersType } from \"../types/http\";\r\nimport { StreamEvent, ToolCallPayload } from \"../types/streaming\";\r\nimport { Message } from \"../types/chat\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\nimport { MAX_SESSIONS } from \"../constants\";\r\nimport { getActiveSessionId, setActiveSessionId } from \"../utils/device\";\r\nimport { validateHeaders } from \"../utils/headers\";\r\nimport {\r\n fetchWidgetConfig,\r\n createSession,\r\n sendChatMessage,\r\n fetchMessageHistory,\r\n fetchSessionTitle,\r\n} from \"../services/chat-api\";\r\n\r\ninterface UseChatSessionOptions {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\ninterface UseChatSessionReturn {\r\n config: ChatWidgetApiResponse | undefined;\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConfigLoading: boolean;\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n headerValidation: HeaderValidationResult | null;\r\n sessionTitleById: Record<string, string>;\r\n createNewSession: () => Promise<string>;\r\n sendMessage: (message: string, approval?: boolean) => Promise<void>;\r\n selectSession: (sid: string) => void;\r\n getSessionTitle: (sid: string) => string;\r\n}\r\n\r\nexport function useChatSession({\r\n clientId,\r\n headers,\r\n onReady,\r\n onToolCall,\r\n}: UseChatSessionOptions): UseChatSessionReturn {\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 [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSession, setActiveSession] = useState<string | null>(null);\r\n const [headerValidation, setHeaderValidation] =\r\n useState<HeaderValidationResult | null>(null);\r\n const [sessionTitleById, setSessionTitleById] = useState<\r\n Record<string, string>\r\n >({});\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const loadConfig = useCallback(async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const localActive = getActiveSessionId();\r\n\r\n const data = await fetchWidgetConfig(clientId, headers);\r\n if (!data.success) return;\r\n\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n setSessions(serverSessions);\r\n\r\n if (serverSessions.length === 0) {\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n } else {\r\n const nextActive =\r\n (localActive && serverSessions.includes(localActive)\r\n ? localActive\r\n : null) ??\r\n serverSessions[0] ??\r\n null;\r\n setActiveSession(nextActive);\r\n setActiveSessionId(nextActive);\r\n }\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(\r\n headers,\r\n data.data.auth_config,\r\n { allowExtra: false, 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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId]);\r\n\r\n const createNewSession = useCallback(async (): Promise<string> => {\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 data = await createSession(clientId, headers);\r\n if (!data.success) throw new Error(data.message || \"Session create failed\");\r\n\r\n const sid = data.data.sessionId;\r\n const updatedSessions = data.data.sessions ?? [sid];\r\n\r\n setSessions(updatedSessions);\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n setMessages([]);\r\n\r\n return sid;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId, headers, sessions.length]);\r\n\r\n const handleStreamResponse = useCallback(\r\n async (response: Response, onFinish?: () => void) => {\r\n if (!response.body) {\r\n throw new Error(\"Streaming not supported (no response body)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let text = \"\";\r\n let buffer = \"\";\r\n\r\n try {\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\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\r\n .split(\"\\n\")\r\n .find((l) => l.startsWith(\"data:\"));\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 try {\r\n const event = JSON.parse(jsonStr) as StreamEvent;\r\n\r\n if (event.type === \"response.output_text.delta\" && event.delta) {\r\n setIsLoading(false);\r\n text += event.delta;\r\n\r\n setMessages((prev) => {\r\n const lastMsg = prev[prev.length - 1];\r\n if (lastMsg?.role === \"assistant\") {\r\n return [...prev.slice(0, -1), { ...lastMsg, text }];\r\n }\r\n return [\r\n ...prev,\r\n { text, role: \"assistant\", timestamp: new Date() },\r\n ];\r\n });\r\n }\r\n\r\n if (\r\n event.type === \"response.output_item.done\" &&\r\n event.item.type === \"mcp_call\"\r\n ) {\r\n onToolCall?.({\r\n name: event.item.name,\r\n args: JSON.parse(event.item.arguments),\r\n result: JSON.parse(event.item.output),\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"Error parsing stream event\", e);\r\n }\r\n }\r\n }\r\n } finally {\r\n onFinish?.();\r\n }\r\n },\r\n [onToolCall],\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n setIsLoading(true);\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n {\r\n text: message,\r\n ui: undefined,\r\n role: approval ? \"approval\" : \"user\",\r\n timestamp: new Date(),\r\n },\r\n ]);\r\n\r\n try {\r\n let sid = activeSession;\r\n if (!sid) sid = await createNewSession();\r\n\r\n let response = await sendChatMessage(clientId, sid, message, headers);\r\n\r\n if (response.status === 401) {\r\n console.log(\"Session expired, renewing...\");\r\n const filtered = sessions.filter((s) => s !== sid);\r\n setSessions(filtered);\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n\r\n const newSid = await createNewSession();\r\n response = await sendChatMessage(clientId, newSid, message, headers);\r\n }\r\n\r\n if (!response.ok) throw new Error(`HTTP error ${response.status}`);\r\n\r\n await handleStreamResponse(response);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n const errorMessage: Message = {\r\n text: \"Sorry, something went wrong. Please try again.\",\r\n role: \"assistant\",\r\n timestamp: new Date(),\r\n };\r\n\r\n if (last?.role === \"assistant\" && !last.text) {\r\n return [...prev.slice(0, -1), errorMessage];\r\n }\r\n return [...prev, errorMessage];\r\n });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [\r\n activeSession,\r\n clientId,\r\n createNewSession,\r\n handleStreamResponse,\r\n headers,\r\n isLoading,\r\n sessions,\r\n ],\r\n );\r\n\r\n const selectSession = useCallback((sid: string) => {\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n }, []);\r\n\r\n const getSessionTitle = useCallback(\r\n (sid: string) => sessionTitleById[sid] ?? \"New conversation\",\r\n [sessionTitleById],\r\n );\r\n\r\n useEffect(() => {\r\n loadConfig();\r\n }, [loadConfig]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSession && !isConfigLoading) {\r\n fetchMessageHistory(activeSession, headers)\r\n .then(setMessages)\r\n .catch((error) =>\r\n console.error(\"Failed to load message history:\", error),\r\n );\r\n } else if (!activeSession) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSession, 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 for (const sid of missing) {\r\n if (cancelled) return;\r\n const title = await fetchSessionTitle(sid, headers);\r\n if (cancelled || !title) continue;\r\n setSessionTitleById((prev) =>\r\n prev[sid] ? prev : { ...prev, [sid]: title },\r\n );\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sessions]);\r\n\r\n return {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId: activeSession,\r\n headerValidation,\r\n sessionTitleById,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n };\r\n}\r\n","\r\nexport const IconClose = () => (\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\r\nexport const IconChat = () => (\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\r\nexport const IconBack = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconBubble = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path 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\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconInfo = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 17v-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M12 8h.01\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\r\n </svg>\r\n);\r\n\r\nexport const IconTrash = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M8 6V4h8v2\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n <path d=\"M6 6l1 16h10l1-16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface HomePanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n onNewSession: () => void;\r\n onViewConversations: () => void;\r\n}\r\n\r\nexport const HomePanel: React.FC<HomePanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n onNewSession,\r\n onViewConversations,\r\n}) => (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{companyName}</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={onNewSession}\r\n disabled={isLoading || sessionsCount >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button className=\"ghost-button\" onClick={onViewConversations}>\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface ConversationListPanelProps {\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n getSessionTitle: (sid: string) => string;\r\n onNewSession: () => void;\r\n onSelectSession: (sid: string) => void;\r\n}\r\n\r\nexport const ConversationListPanel: React.FC<ConversationListPanelProps> = ({\r\n sessions,\r\n activeSessionId,\r\n getSessionTitle,\r\n onNewSession,\r\n onSelectSession,\r\n}) => (\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={onNewSession}\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={() => onSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionTitle(sid)}</p>\r\n <p className=\"conversation-sub\">\r\n Session ID: {sid.slice(0, 8)}...\r\n </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","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/validation\";\r\n\r\ninterface HeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport const HeaderAlert = ({\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n}: HeaderAlertProps) => {\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 renderAlertIcon = () => {\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{renderAlertIcon()}</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>•</span>\r\n <code>{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>Boş Değerli Header'lar:</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>•</span>\r\n <code>{key}</code>\r\n <span>(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>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>•</span>\r\n <code>{key}</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};","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 ChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n}\r\n\r\nexport const ChatInput = ({\r\n isLoading,\r\n placeholder,\r\n onSendMessage,\r\n}: ChatInputProps) => {\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 onSendMessage(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 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 from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITextProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIText: React.FC<GenUITextProps> = ({ component }) => (\r\n <p key={component.id} className=\"gen-ui-text\">\r\n {component.value ?? component.label}\r\n </p>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIInputProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIInput: React.FC<GenUIInputProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-input-wrapper\">\r\n {component.label && <label className=\"gen-ui-input-label\">{component.label}</label>}\r\n {component.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={component.id}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={component.id}\r\n type={component.fieldType || \"text\"}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUISelectProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUISelect: React.FC<GenUISelectProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-select-wrapper\">\r\n {component.label && <label className=\"gen-ui-select-label\">{component.label}</label>}\r\n <select name={component.id} className=\"gen-ui-select\">\r\n {component.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","import React from \"react\";\r\nimport { FormValues, UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIButtonProps {\r\n component: UIComponent;\r\n onInteraction: (event: { action: string; buttonId?: \"click\" | \"submit\"; formData: FormValues }) => void;\r\n collectFormValues: () => FormValues;\r\n}\r\n\r\nexport const GenUIButton: React.FC<GenUIButtonProps> = ({\r\n component,\r\n onInteraction,\r\n collectFormValues,\r\n}) => (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: component.label ?? \"\",\r\n buttonId: component.buttonType,\r\n formData: formValues,\r\n });\r\n }}\r\n key={component.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {component.label}\r\n </button>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUICardProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUICard: React.FC<GenUICardProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-card\">\r\n {component.label && <h2 className=\"gen-ui-card-title\">{component.label}</h2>}\r\n {component.value && <p className=\"gen-ui-card-content\">{component.value}</p>}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIListProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIList: React.FC<GenUIListProps> = ({ component }) => (\r\n <ul key={component.id} className=\"gen-ui-list\">\r\n {component.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","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIImageProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIImage: React.FC<GenUIImageProps> = ({ component }) => (\r\n <img\r\n key={component.id}\r\n src={component.url}\r\n alt={component.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUILinkProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUILink: React.FC<GenUILinkProps> = ({ component }) => (\r\n <a\r\n key={component.id}\r\n href={component.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {component.label || component.url}\r\n </a>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITableProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUITable: React.FC<GenUITableProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {component.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {component.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 {component.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {component.rows.map((row, rowIndex) => (\r\n <tr key={rowIndex}>\r\n {row.map((cell, cellIndex) => (\r\n <td key={cellIndex} 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","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData, UIInteractionEvent, FormValues } from \"../../types/generative-ui\";\r\nimport {\r\n GenUIText,\r\n GenUIInput,\r\n GenUISelect,\r\n GenUIButton,\r\n GenUICard,\r\n GenUIList,\r\n GenUIImage,\r\n GenUILink,\r\n GenUITable,\r\n} from \"./atoms\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Props */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface GenericUIRendererProps {\r\n uiData: UIData;\r\n onInteraction: (event: UIInteractionEvent) => void;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Component */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({\r\n uiData,\r\n onInteraction,\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData?.components) return null;\r\n\r\n /** Collects current form field values from the rendered DOM. */\r\n const collectFormValues = (): FormValues => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: FormValues = {};\r\n const inputs = containerRef.current.querySelectorAll<\r\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\r\n >(\"input, textarea, select\");\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute(\"name\");\r\n if (!name) return;\r\n\r\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\r\n formData[name] = element.checked;\r\n } else if (\r\n element instanceof HTMLInputElement &&\r\n element.type === \"radio\"\r\n ) {\r\n if (element.checked) formData[name] = element.value;\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n /** Delegates rendering to the correct atom component. */\r\n const renderComponent = (component: UIComponent): React.ReactNode => {\r\n switch (component.type) {\r\n case \"text\":\r\n return <GenUIText key={component.id} component={component} />;\r\n case \"input\":\r\n return <GenUIInput key={component.id} component={component} />;\r\n case \"select\":\r\n return <GenUISelect key={component.id} component={component} />;\r\n case \"button\":\r\n return (\r\n <GenUIButton\r\n key={component.id}\r\n component={component}\r\n onInteraction={onInteraction}\r\n collectFormValues={collectFormValues}\r\n />\r\n );\r\n case \"card\":\r\n return <GenUICard key={component.id} component={component} />;\r\n case \"list\":\r\n return <GenUIList key={component.id} component={component} />;\r\n case \"image\":\r\n return <GenUIImage key={component.id} component={component} />;\r\n case \"link\":\r\n return <GenUILink key={component.id} component={component} />;\r\n case \"table\":\r\n return <GenUITable key={component.id} component={component} />;\r\n case \"form\":\r\n return (\r\n <form key={component.id} className=\"gen-ui-form\">\r\n {component.items?.map((field) => renderComponent(field))}\r\n </form>\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","import { Message } from \"../../types/chat\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: MessageBubbleProps) => {\r\n const isUser = message.role === \"user\";\r\n\r\n if (message.role === \"approval\") return null;\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 && <div className=\"markdown-content\">{message.text}</div>\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 if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n } else {\r\n onAction(event.action, true);\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};","import React from \"react\";\r\nimport { Message } from \"../../../types/chat\";\r\nimport { HeaderValidationResult } from \"../../../types/validation\";\r\nimport { ChatWidgetApiResponse } from \"../../../types/widget-config\";\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 { IconBack, IconBubble, IconInfo, IconTrash } from \"../icons\";\r\n\r\ninterface ConversationDetailPanelProps {\r\n activeSessionId: string | null;\r\n isLoading: boolean;\r\n messages: Message[];\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: React.Dispatch<React.SetStateAction<boolean>>;\r\n sanitizedWelcome: string;\r\n messagesEndRef: React.RefObject<HTMLDivElement | null>;\r\n config: ChatWidgetApiResponse | undefined;\r\n getSessionTitle: (sid: string) => string;\r\n onBack: () => void;\r\n onInfo: () => void;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n placeholder: string;\r\n}\r\n\r\nexport const ConversationDetailPanel: React.FC<\r\n ConversationDetailPanelProps\r\n> = ({\r\n activeSessionId,\r\n isLoading,\r\n messages,\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n sanitizedWelcome,\r\n messagesEndRef,\r\n config,\r\n getSessionTitle,\r\n onBack,\r\n onInfo,\r\n onSendMessage,\r\n placeholder,\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={onBack} aria-label=\"Back\">\r\n <IconBack />\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 <IconBubble />\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\r\n className={`status-dot ${isLoading ? \"typing\" : \"online\"}`}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n <p className=\"detail-subtitle\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button className=\"icon-button\" onClick={onInfo} aria-label=\"Bilgi\">\r\n <IconInfo />\r\n </button>\r\n <button\r\n className=\"icon-button danger\"\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <IconTrash />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert\r\n headerValidation={headerValidation}\r\n setShowAlert={setShowAlert}\r\n showAlert={showAlert}\r\n />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: sanitizedWelcome }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble\r\n key={index}\r\n message={message}\r\n onAction={onSendMessage}\r\n />\r\n ))}\r\n {config?.widget_config.show_typing_indicator && isLoading && (\r\n <TypingDots />\r\n )}\r\n </>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n onSendMessage={onSendMessage}\r\n isLoading={isLoading}\r\n placeholder={placeholder}\r\n />\r\n </div>\r\n);\r\n","import React from \"react\";\r\n\r\ninterface InfoPanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n}\r\n\r\nexport const InfoPanel: React.FC<InfoPanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n}) => (\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>{companyName}</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>{sessionsCount}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n);\r\n","\"use client\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { ActiveTab, MessageView, Message } from \"../../types/chat\";\r\nimport { useChatSession } from \"../../hooks/use-chat-session\";\r\nimport { IconClose, IconChat } from \"./icons\";\r\nimport {\r\n HomePanel,\r\n ConversationListPanel,\r\n ConversationDetailPanel,\r\n InfoPanel,\r\n} from \"./panels\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\nimport \"../../styles/index.scss\";\r\nimport {\r\n ChatWidgetApiResponse,\r\n HeadersType,\r\n ToolCallPayload,\r\n} from \"../../types\";\r\n\r\ninterface AizekChatBotProps {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onMounted?: () => void;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: Message) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\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 {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId,\r\n headerValidation,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n } = useChatSession({ clientId, headers, onReady, onToolCall, onDisconnect });\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [showAlert, setShowAlert] = useState(true);\r\n const [activeTab, setActiveTab] = useState<ActiveTab>(\"home\");\r\n const [messageView, setMessageView] = useState<MessageView>(\"list\");\r\n\r\n useEffect(() => {\r\n onMounted?.();\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 }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n const toggleChat = () => {\r\n const next = !isOpen;\r\n setIsOpen(next);\r\n next ? onOpen?.() : onClose?.();\r\n };\r\n\r\n const handleCreateSession = async () => {\r\n try {\r\n await createNewSession();\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n selectSession(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n const sanitizedWelcome = sanitizeHtml(\r\n config?.widget_config.welcome_message ?? \"\",\r\n {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: { a: [\"href\", \"target\", \"rel\"] },\r\n },\r\n );\r\n\r\n if (isConfigLoading) {\r\n return (\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\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`}\r\n onClick={toggleChat}\r\n />\r\n )}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{\r\n width: config?.widget_config.chat_width,\r\n height: config?.widget_config.chat_height,\r\n }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div\r\n className=\"header\"\r\n style={{ background: config?.widget_config.header_background }}\r\n >\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\r\n src={config.widget_config.company_logo}\r\n alt=\"Company Logo\"\r\n className=\"logo-image\"\r\n />\r\n ) : (\r\n <span className=\"logo-text\">\r\n {config.widget_config.company_logo}\r\n </span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">\r\n {config?.widget_config.company_name}\r\n </h3>\r\n <p className=\"status-text\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <HomePanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n onNewSession={handleCreateSession}\r\n onViewConversations={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n />\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <ConversationListPanel\r\n sessions={sessions}\r\n activeSessionId={activeSessionId}\r\n getSessionTitle={getSessionTitle}\r\n onNewSession={handleCreateSession}\r\n onSelectSession={handleSelectSession}\r\n />\r\n ) : (\r\n <ConversationDetailPanel\r\n activeSessionId={activeSessionId}\r\n isLoading={isLoading}\r\n messages={messages}\r\n headerValidation={headerValidation}\r\n showAlert={showAlert}\r\n setShowAlert={setShowAlert}\r\n sanitizedWelcome={sanitizedWelcome}\r\n messagesEndRef={messagesEndRef}\r\n config={config}\r\n getSessionTitle={getSessionTitle}\r\n onBack={() => setMessageView(\"list\")}\r\n onInfo={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n onSendMessage={sendMessage}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <InfoPanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n {([\"home\", \"messages\", \"info\"] as ActiveTab[]).map((tab) => (\r\n <button\r\n key={tab}\r\n className={`nav-button ${activeTab === tab ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(tab);\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\r\n </button>\r\n ))}\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 style={{ background: config?.widget_config.button_background }}\r\n >\r\n {isOpen ? <IconClose /> : <IconChat />}\r\n </button>\r\n </>\r\n );\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/index.ts","../src/utils/device.ts","../src/utils/headers.ts","../src/utils/message.ts","../src/services/chat-api.ts","../src/hooks/use-chat-session.ts","../src/components/aizek-chat/icons/index.tsx","../src/components/aizek-chat/panels/HomePanel.tsx","../src/components/aizek-chat/panels/ConversationListPanel.tsx","../src/components/header-alert/index.tsx","../src/components/loading-spinner/index.tsx","../src/components/chat-input/index.tsx","../src/components/generative-ui/atoms/GenUIText.tsx","../src/components/generative-ui/atoms/GenUIInput.tsx","../src/components/generative-ui/atoms/GenUISelect.tsx","../src/components/generative-ui/atoms/GenUIButton.tsx","../src/components/generative-ui/atoms/GenUICard.tsx","../src/components/generative-ui/atoms/GenUIList.tsx","../src/components/generative-ui/atoms/GenUIImage.tsx","../src/components/generative-ui/atoms/GenUILink.tsx","../src/components/generative-ui/atoms/GenUITable.tsx","../src/components/generative-ui/index.tsx","../src/components/message-bubble/index.tsx","../src/components/typing-dots/index.tsx","../src/components/aizek-chat/panels/ConversationDetailPanel.tsx","../src/components/aizek-chat/panels/InfoPanel.tsx","../src/components/aizek-chat/index.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect","Fragment"],"mappings":"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","file":"index.mjs","sourcesContent":["\r\nexport const PROXY_BASE_URL = \"https://proxy.aizek.ai/api\";\r\n// export const PROXY_BASE_URL = \"http://localhost:3001/api\";\r\n\r\n\r\nexport const DEVICE_STORAGE_KEY = \"aizek_device_id_v1\";\r\n\r\nexport const ACTIVE_SESSION_STORAGE_KEY = \"aizek_active_session_v1\";\r\n\r\nexport const MAX_SESSIONS = 3;\r\n\r\nexport const SESSION_TITLE_MAX_LENGTH = 46;\r\n","import {\r\n DEVICE_STORAGE_KEY,\r\n ACTIVE_SESSION_STORAGE_KEY,\r\n} from \"../constants\";\r\n\r\n\r\nexport function getOrCreateDeviceId(): string {\r\n if (typeof window === \"undefined\") return \"\";\r\n const existing = localStorage.getItem(DEVICE_STORAGE_KEY);\r\n if (existing) return existing;\r\n const id = crypto.randomUUID();\r\n localStorage.setItem(DEVICE_STORAGE_KEY, id);\r\n return id;\r\n}\r\n\r\n\r\nexport function getActiveSessionId(): string | null {\r\n if (typeof window === \"undefined\") return null;\r\n return localStorage.getItem(ACTIVE_SESSION_STORAGE_KEY);\r\n}\r\n\r\n\r\nexport function setActiveSessionId(id: string | null): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!id) localStorage.removeItem(ACTIVE_SESSION_STORAGE_KEY);\r\n else localStorage.setItem(ACTIVE_SESSION_STORAGE_KEY, id);\r\n}\r\n","import { AuthConfig, HeadersType } from \"../types/http\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\n\r\n\r\nexport function buildRequestHeaders(\r\n deviceId: string,\r\n alternateHeaders?: HeadersType,\r\n sessionId?: string,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"x-device-id\": deviceId,\r\n \"x-alternate\": JSON.stringify(alternateHeaders),\r\n };\r\n if (sessionId) headers[\"x-session-id\"] = sessionId;\r\n return headers;\r\n}\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): HeaderValidationResult {\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:\r\n \"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 const normalize = (s: string) => (caseSensitive ? s : s.toLowerCase());\r\n\r\n const headerEntries = Object.entries(headers).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n const authEntries = Object.entries(authConfig).map(([k, v]) => [\r\n normalize(k),\r\n v.trim(),\r\n ]);\r\n\r\n const headerKeys = headerEntries.map(([k]) => k);\r\n const authKeys = authEntries.map(([k]) => k);\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 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 hasAllRequired = missingKeys.length === 0;\r\n const hasExtraKeys = extraKeys.length > 0 && !allowExtra;\r\n const isValid = hasAllRequired && !hasExtraKeys && emptyValueKeys.length === 0;\r\n\r\n return { isValid, missingKeys, extraKeys, emptyValueKeys };\r\n}\r\n","import { RawMessage, RawMessageContent } from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport {\r\n ExtractedUIResult,\r\n UIComponent,\r\n UIData,\r\n} from \"../types/generative-ui\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Raw content → plain text */\r\n/* ------------------------------------------------------------------ */\r\n\r\n/**\r\n * Extracts a single text string from raw message content,\r\n * which may be a plain string or an array of content parts.\r\n */\r\nexport function extractTextFromContent(\r\n content: string | RawMessageContent[],\r\n): string {\r\n if (typeof content === \"string\") return content;\r\n\r\n if (Array.isArray(content)) {\r\n return content\r\n .filter((item) => item.type === \"text\" && typeof item.text === \"string\")\r\n .map((item) => item.text!)\r\n .join(\"\\n\");\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction normalizeComponent(\r\n component: UIComponent,\r\n index: number,\r\n): UIComponent {\r\n const normalized = { ...component };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `ui-comp-${index}-${Date.now()}`;\r\n }\r\n\r\n if (normalized.type === \"button\" && !normalized.buttonType) {\r\n normalized.buttonType = \"click\";\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n if (normalized.type === \"table\") {\r\n normalized.columns = normalizeTableColumns(normalized.columns);\r\n normalized.rows = normalizeTableRows(normalized.rows);\r\n }\r\n\r\n if (normalized.type === \"form\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeFormField);\r\n }\r\n\r\n if (normalized.type === \"list\" && Array.isArray(normalized.items)) {\r\n normalized.items = normalized.items.map(normalizeListItem);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeStringArray(items: unknown[]): string[] {\r\n return items.map((item) =>\r\n typeof item === \"object\" && item !== null\r\n ? (item as Record<string, string>).label ??\r\n (item as Record<string, string>).value ??\r\n String(item)\r\n : String(item),\r\n );\r\n}\r\n\r\nfunction normalizeTableColumns(columns?: unknown[]): string[] | undefined {\r\n if (!Array.isArray(columns)) return columns as string[] | undefined;\r\n return columns.map((col) =>\r\n typeof col === \"object\" && col !== null\r\n ? (col as Record<string, string>).label ??\r\n (col as Record<string, string>).id ??\r\n String(col)\r\n : String(col),\r\n );\r\n}\r\n\r\nfunction normalizeTableRows(rows?: unknown[]): string[][] | undefined {\r\n if (!Array.isArray(rows)) return rows as string[][] | undefined;\r\n return rows.map((row) => {\r\n if (Array.isArray(row)) {\r\n return row.map((cell) => String(cell ?? \"\"));\r\n }\r\n // Row is an object – extract values\r\n return Object.values(row as Record<string, unknown>).map((val) => {\r\n if (\r\n typeof val === \"object\" &&\r\n val !== null &&\r\n (val as Record<string, string>).type === \"image\"\r\n ) {\r\n return (val as Record<string, string>).src;\r\n }\r\n const record = val as Record<string, unknown> | null;\r\n return String(record?.value ?? val ?? \"\");\r\n });\r\n });\r\n}\r\n\r\nfunction normalizeFormField(\r\n field: UIComponent,\r\n fieldIndex: number,\r\n): UIComponent {\r\n const normalized = { ...field };\r\n\r\n if (!normalized.id?.trim()) {\r\n normalized.id = `field-${fieldIndex}-${Date.now()}`;\r\n }\r\n\r\n const raw = field as unknown as Record<string, unknown>;\r\n if (\"optional\" in raw) {\r\n normalized.requiredField = !raw.optional;\r\n }\r\n if (\"required\" in raw) {\r\n normalized.requiredField = !!raw.required;\r\n }\r\n\r\n if (normalized.type === \"input\" && !normalized.fieldType) {\r\n normalized.fieldType = \"text\";\r\n }\r\n\r\n if (normalized.type === \"select\" && Array.isArray(normalized.options)) {\r\n normalized.options = normalizeStringArray(normalized.options);\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeListItem(item: unknown, itemIndex: number): UIComponent {\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `list-item-${itemIndex}-${Date.now()}`,\r\n type: \"text\",\r\n label: item,\r\n value: item,\r\n };\r\n }\r\n\r\n const comp = item as UIComponent;\r\n if (!comp.id?.trim()) {\r\n comp.id = `list-item-${itemIndex}-${Date.now()}`;\r\n }\r\n return comp;\r\n}\r\n\r\nexport function extractUIJsonFromText(text: string): ExtractedUIResult {\r\n const UI_COMPONENT_REGEX = /```ui-component\\s*([\\s\\S]*?)```/g;\r\n\r\n const matches = Array.from(text.matchAll(UI_COMPONENT_REGEX));\r\n if (matches.length === 0) {\r\n return { cleanedText: text.trim(), uiData: null };\r\n }\r\n\r\n let cleanedText = text;\r\n let mergedUIData: UIData | null = null;\r\n\r\n for (const match of matches) {\r\n const fullBlock = match[0];\r\n const jsonBlock = match[1]?.trim();\r\n\r\n cleanedText = cleanedText.replace(fullBlock, \"\").trim();\r\n\r\n try {\r\n const parsed = JSON.parse(jsonBlock) as Partial<UIData>;\r\n\r\n if (parsed && Array.isArray(parsed.components)) {\r\n parsed.components = parsed.components.map(normalizeComponent);\r\n\r\n if (!mergedUIData) {\r\n mergedUIData = parsed as UIData;\r\n } else {\r\n mergedUIData.components = [\r\n ...mergedUIData.components,\r\n ...parsed.components,\r\n ];\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Invalid ui-component JSON:\", err, jsonBlock);\r\n }\r\n }\r\n\r\n cleanedText = cleanedText.replace(/\\n{3,}/g, \"\\n\\n\").trim();\r\n\r\n return { cleanedText, uiData: mergedUIData };\r\n}\r\n\r\n\r\nexport function parseRawMessages(rawMessages: RawMessage[]): Message[] {\r\n const result: Message[] = [];\r\n\r\n for (const msg of rawMessages) {\r\n const textContent = extractTextFromContent(msg.content);\r\n let cleanText = textContent;\r\n let uiData = null;\r\n\r\n if (textContent) {\r\n const extracted = extractUIJsonFromText(textContent);\r\n cleanText = extracted.cleanedText;\r\n uiData = extracted.uiData;\r\n }\r\n\r\n if (cleanText.trim() || uiData) {\r\n result.push({\r\n text: cleanText.trim() || undefined,\r\n ui: uiData ?? undefined,\r\n role: msg.role === \"user\" ? \"user\" : \"assistant\",\r\n timestamp: new Date(),\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n","import { BaseResponse, HeadersType } from \"../types/http\";\r\nimport {\r\n ConnectResponseData,\r\n NewSessionResponseData,\r\n} from \"../types/widget-config\";\r\nimport {\r\n MessageHistoryResponseData,\r\n LastMessageResponseData,\r\n} from \"../types/raw-data\";\r\nimport { Message } from \"../types/chat\";\r\nimport { PROXY_BASE_URL, SESSION_TITLE_MAX_LENGTH } from \"../constants\";\r\nimport { getOrCreateDeviceId } from \"../utils/device\";\r\nimport { buildRequestHeaders } from \"../utils/headers\";\r\nimport {\r\n extractTextFromContent,\r\n parseRawMessages,\r\n extractUIJsonFromText,\r\n} from \"../utils/message\";\r\n\r\nexport async function fetchWidgetConfig(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<ConnectResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-connect?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function createSession(\r\n clientId: string,\r\n headers?: HeadersType,\r\n): Promise<BaseResponse<NewSessionResponseData>> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(\r\n `${PROXY_BASE_URL}/aizek-sessions/new?clientId=${clientId}`,\r\n {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers),\r\n },\r\n );\r\n return response.json();\r\n}\r\n\r\nexport async function sendChatMessage(\r\n clientId: string,\r\n sessionId: string,\r\n message: string,\r\n headers?: HeadersType,\r\n): Promise<Response> {\r\n const deviceId = getOrCreateDeviceId();\r\n return fetch(`${PROXY_BASE_URL}/aizek-chat?clientId=${clientId}`, {\r\n method: \"POST\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n body: JSON.stringify({ message }),\r\n });\r\n}\r\n\r\nexport async function fetchMessageHistory(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<Message[]> {\r\n const deviceId = getOrCreateDeviceId();\r\n const response = await fetch(`${PROXY_BASE_URL}/aizek-messages`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const data: BaseResponse<MessageHistoryResponseData> = await response.json();\r\n if (!data.success)\r\n throw new Error(data.message || \"Failed to fetch messages\");\r\n\r\n return parseRawMessages(data.data?.messages ?? []);\r\n}\r\n\r\nexport async function fetchSessionTitle(\r\n sessionId: string,\r\n headers?: HeadersType,\r\n): Promise<string | null> {\r\n const deviceId = getOrCreateDeviceId();\r\n const res = await fetch(`${PROXY_BASE_URL}/aizek-last-message`, {\r\n method: \"GET\",\r\n headers: buildRequestHeaders(deviceId, headers, sessionId),\r\n });\r\n\r\n const json: BaseResponse<LastMessageResponseData> = 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 const textContent = extractTextFromContent(last.content);\r\n if (!textContent.trim()) return null;\r\n\r\n const { cleanedText } = extractUIJsonFromText(textContent);\r\n const firstLine = (\r\n cleanedText.split(\"\\n\").find((l: string) => l.trim()) || \"\"\r\n ).trim();\r\n const title = firstLine || cleanedText;\r\n if (!title) return null;\r\n\r\n return title.length > SESSION_TITLE_MAX_LENGTH\r\n ? `${title.slice(0, SESSION_TITLE_MAX_LENGTH).trim()}…`\r\n : title;\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { ChatWidgetApiResponse } from \"../types/widget-config\";\r\nimport { HeadersType } from \"../types/http\";\r\nimport { StreamEvent, ToolCallPayload } from \"../types/streaming\";\r\nimport { Message } from \"../types/chat\";\r\nimport { HeaderValidationResult } from \"../types/validation\";\r\nimport { MAX_SESSIONS } from \"../constants\";\r\nimport { getActiveSessionId, setActiveSessionId } from \"../utils/device\";\r\nimport { validateHeaders } from \"../utils/headers\";\r\nimport {\r\n fetchWidgetConfig,\r\n createSession,\r\n sendChatMessage,\r\n fetchMessageHistory,\r\n fetchSessionTitle,\r\n} from \"../services/chat-api\";\r\n\r\ninterface UseChatSessionOptions {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\ninterface UseChatSessionReturn {\r\n config: ChatWidgetApiResponse | undefined;\r\n messages: Message[];\r\n isLoading: boolean;\r\n isConfigLoading: boolean;\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n headerValidation: HeaderValidationResult | null;\r\n sessionTitleById: Record<string, string>;\r\n createNewSession: () => Promise<string>;\r\n sendMessage: (message: string, approval?: boolean) => Promise<void>;\r\n selectSession: (sid: string) => void;\r\n getSessionTitle: (sid: string) => string;\r\n}\r\n\r\nexport function useChatSession({\r\n clientId,\r\n headers,\r\n onReady,\r\n onToolCall,\r\n}: UseChatSessionOptions): UseChatSessionReturn {\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 [sessions, setSessions] = useState<string[]>([]);\r\n const [activeSession, setActiveSession] = useState<string | null>(null);\r\n const [headerValidation, setHeaderValidation] =\r\n useState<HeaderValidationResult | null>(null);\r\n const [sessionTitleById, setSessionTitleById] = useState<\r\n Record<string, string>\r\n >({});\r\n\r\n const messagesEndRef = useRef<HTMLDivElement>(null);\r\n\r\n const loadConfig = useCallback(async () => {\r\n try {\r\n setIsConfigLoading(true);\r\n const localActive = getActiveSessionId();\r\n\r\n const data = await fetchWidgetConfig(clientId, headers);\r\n if (!data.success) return;\r\n\r\n setConfig(data.data);\r\n\r\n const serverSessions: string[] = data.data.sessions ?? [];\r\n setSessions(serverSessions);\r\n\r\n if (serverSessions.length === 0) {\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n } else {\r\n const nextActive =\r\n (localActive && serverSessions.includes(localActive)\r\n ? localActive\r\n : null) ??\r\n serverSessions[0] ??\r\n null;\r\n setActiveSession(nextActive);\r\n setActiveSessionId(nextActive);\r\n }\r\n\r\n if (headers) {\r\n const validationResult = validateHeaders(\r\n headers,\r\n data.data.auth_config,\r\n { allowExtra: false, 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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId]);\r\n\r\n const createNewSession = useCallback(async (): Promise<string> => {\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 data = await createSession(clientId, headers);\r\n if (!data.success) throw new Error(data.message || \"Session create failed\");\r\n\r\n const sid = data.data.sessionId;\r\n const updatedSessions = data.data.sessions ?? [sid];\r\n\r\n setSessions(updatedSessions);\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n setMessages([]);\r\n\r\n return sid;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clientId, headers, sessions.length]);\r\n\r\n const handleStreamResponse = useCallback(\r\n async (response: Response, onFinish?: () => void) => {\r\n if (!response.body) {\r\n throw new Error(\"Streaming not supported (no response body)\");\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let text = \"\";\r\n let buffer = \"\";\r\n\r\n try {\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\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\r\n .split(\"\\n\")\r\n .find((l) => l.startsWith(\"data:\"));\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 try {\r\n const event = JSON.parse(jsonStr) as StreamEvent;\r\n\r\n if (event.type === \"response.output_text.delta\" && event.delta) {\r\n setIsLoading(false);\r\n text += event.delta;\r\n\r\n setMessages((prev) => {\r\n const lastMsg = prev[prev.length - 1];\r\n if (lastMsg?.role === \"assistant\") {\r\n return [...prev.slice(0, -1), { ...lastMsg, text }];\r\n }\r\n return [\r\n ...prev,\r\n { text, role: \"assistant\", timestamp: new Date() },\r\n ];\r\n });\r\n }\r\n\r\n if (\r\n event.type === \"response.output_item.done\" &&\r\n event.item.type === \"mcp_call\"\r\n ) {\r\n onToolCall?.({\r\n name: event.item.name,\r\n args: JSON.parse(event.item.arguments),\r\n result: JSON.parse(event.item.output),\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"Error parsing stream event\", e);\r\n }\r\n }\r\n }\r\n } finally {\r\n onFinish?.();\r\n }\r\n },\r\n [onToolCall],\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (message: string, approval?: boolean) => {\r\n if (!message.trim() || isLoading) return;\r\n setIsLoading(true);\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n {\r\n text: message,\r\n ui: undefined,\r\n role: approval ? \"approval\" : \"user\",\r\n timestamp: new Date(),\r\n },\r\n ]);\r\n\r\n try {\r\n let sid = activeSession;\r\n if (!sid) sid = await createNewSession();\r\n\r\n let response = await sendChatMessage(clientId, sid, message, headers);\r\n\r\n if (response.status === 401) {\r\n console.log(\"Session expired, renewing...\");\r\n const filtered = sessions.filter((s) => s !== sid);\r\n setSessions(filtered);\r\n setActiveSession(null);\r\n setActiveSessionId(null);\r\n\r\n const newSid = await createNewSession();\r\n response = await sendChatMessage(clientId, newSid, message, headers);\r\n }\r\n\r\n if (!response.ok) throw new Error(`HTTP error ${response.status}`);\r\n\r\n await handleStreamResponse(response);\r\n } catch (error) {\r\n console.error(\"Error sending message:\", error);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n const errorMessage: Message = {\r\n text: \"Sorry, something went wrong. Please try again.\",\r\n role: \"assistant\",\r\n timestamp: new Date(),\r\n };\r\n\r\n if (last?.role === \"assistant\" && !last.text) {\r\n return [...prev.slice(0, -1), errorMessage];\r\n }\r\n return [...prev, errorMessage];\r\n });\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [\r\n activeSession,\r\n clientId,\r\n createNewSession,\r\n handleStreamResponse,\r\n headers,\r\n isLoading,\r\n sessions,\r\n ],\r\n );\r\n\r\n const selectSession = useCallback((sid: string) => {\r\n setActiveSession(sid);\r\n setActiveSessionId(sid);\r\n }, []);\r\n\r\n const getSessionTitle = useCallback(\r\n (sid: string) => sessionTitleById[sid] ?? \"New conversation\",\r\n [sessionTitleById],\r\n );\r\n\r\n useEffect(() => {\r\n loadConfig();\r\n }, [loadConfig]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (activeSession && !isConfigLoading) {\r\n fetchMessageHistory(activeSession, headers)\r\n .then(setMessages)\r\n .catch((error) =>\r\n console.error(\"Failed to load message history:\", error),\r\n );\r\n } else if (!activeSession) {\r\n setMessages([]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeSession, 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 for (const sid of missing) {\r\n if (cancelled) return;\r\n const title = await fetchSessionTitle(sid, headers);\r\n if (cancelled || !title) continue;\r\n setSessionTitleById((prev) =>\r\n prev[sid] ? prev : { ...prev, [sid]: title },\r\n );\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sessions]);\r\n\r\n return {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId: activeSession,\r\n headerValidation,\r\n sessionTitleById,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n };\r\n}\r\n","\r\nexport const IconClose = () => (\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\r\nexport const IconChat = () => (\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\r\nexport const IconBack = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconBubble = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path 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\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\nexport const IconInfo = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 17v-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M12 8h.01\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\r\n </svg>\r\n);\r\n\r\nexport const IconTrash = () => (\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"M8 6V4h8v2\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n <path d=\"M6 6l1 16h10l1-16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface HomePanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n onNewSession: () => void;\r\n onViewConversations: () => void;\r\n}\r\n\r\nexport const HomePanel: React.FC<HomePanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n onNewSession,\r\n onViewConversations,\r\n}) => (\r\n <div className=\"home-panel\">\r\n <p className=\"eyebrow\">Welcome</p>\r\n <h3 className=\"panel-title\">{companyName}</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={onNewSession}\r\n disabled={isLoading || sessionsCount >= MAX_SESSIONS}\r\n >\r\n Start a new conversation\r\n </button>\r\n <button className=\"ghost-button\" onClick={onViewConversations}>\r\n View conversations\r\n </button>\r\n </div>\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { MAX_SESSIONS } from \"../../../constants\";\r\n\r\ninterface ConversationListPanelProps {\r\n sessions: string[];\r\n activeSessionId: string | null;\r\n getSessionTitle: (sid: string) => string;\r\n onNewSession: () => void;\r\n onSelectSession: (sid: string) => void;\r\n}\r\n\r\nexport const ConversationListPanel: React.FC<ConversationListPanelProps> = ({\r\n sessions,\r\n activeSessionId,\r\n getSessionTitle,\r\n onNewSession,\r\n onSelectSession,\r\n}) => (\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={onNewSession}\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={() => onSelectSession(sid)}\r\n >\r\n <div className=\"conversation-meta\">\r\n <p className=\"conversation-title\">{getSessionTitle(sid)}</p>\r\n <p className=\"conversation-sub\">\r\n Session ID: {sid.slice(0, 8)}...\r\n </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","import { Dispatch, SetStateAction } from \"react\";\r\nimport { HeaderValidationResult } from \"../../types/validation\";\r\n\r\ninterface HeaderAlertProps {\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport const HeaderAlert = ({\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n}: HeaderAlertProps) => {\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 renderAlertIcon = () => {\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 <div className={`alert-container ${alertType}`}>\r\n <div className=\"alert-icon-container\">{renderAlertIcon()}</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>•</span>\r\n <code>{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>Boş Değerli Header'lar:</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>•</span>\r\n <code>{key}</code>\r\n <span>(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>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>•</span>\r\n <code>{key}</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};","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 ChatInputProps {\r\n isLoading: boolean;\r\n placeholder: string;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n}\r\n\r\nexport const ChatInput = ({\r\n isLoading,\r\n placeholder,\r\n onSendMessage,\r\n}: ChatInputProps) => {\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 onSendMessage(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 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 from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITextProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIText: React.FC<GenUITextProps> = ({ component }) => (\r\n <p key={component.id} className=\"gen-ui-text\">\r\n {component.value ?? component.label}\r\n </p>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIInputProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIInput: React.FC<GenUIInputProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-input-wrapper\">\r\n {component.label && <label className=\"gen-ui-input-label\">{component.label}</label>}\r\n {component.fieldType === \"textarea\" ? (\r\n <textarea\r\n name={component.id}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-textarea\"\r\n />\r\n ) : (\r\n <input\r\n name={component.id}\r\n type={component.fieldType || \"text\"}\r\n placeholder={component.placeholder}\r\n className=\"gen-ui-input\"\r\n />\r\n )}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUISelectProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUISelect: React.FC<GenUISelectProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-select-wrapper\">\r\n {component.label && <label className=\"gen-ui-select-label\">{component.label}</label>}\r\n <select name={component.id} className=\"gen-ui-select\">\r\n {component.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","import React from \"react\";\r\nimport { FormValues, UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIButtonProps {\r\n component: UIComponent;\r\n onInteraction: (event: { action: string; buttonId?: \"click\" | \"submit\"; formData: FormValues }) => void;\r\n collectFormValues: () => FormValues;\r\n}\r\n\r\nexport const GenUIButton: React.FC<GenUIButtonProps> = ({\r\n component,\r\n onInteraction,\r\n collectFormValues,\r\n}) => (\r\n <button\r\n onClick={() => {\r\n const formValues = collectFormValues();\r\n onInteraction({\r\n action: component.label ?? \"\",\r\n buttonId: component.buttonType,\r\n formData: formValues,\r\n });\r\n }}\r\n key={component.id}\r\n className=\"gen-ui-button\"\r\n >\r\n {component.label}\r\n </button>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUICardProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUICard: React.FC<GenUICardProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-card\">\r\n {component.label && <h2 className=\"gen-ui-card-title\">{component.label}</h2>}\r\n {component.value && <p className=\"gen-ui-card-content\">{component.value}</p>}\r\n </div>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIListProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIList: React.FC<GenUIListProps> = ({ component }) => (\r\n <ul key={component.id} className=\"gen-ui-list\">\r\n {component.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","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUIImageProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUIImage: React.FC<GenUIImageProps> = ({ component }) => (\r\n <img\r\n key={component.id}\r\n src={component.url}\r\n alt={component.label || \"\"}\r\n className=\"gen-ui-image\"\r\n />\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUILinkProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUILink: React.FC<GenUILinkProps> = ({ component }) => (\r\n <a\r\n key={component.id}\r\n href={component.url}\r\n className=\"gen-ui-link\"\r\n >\r\n {component.label || component.url}\r\n </a>\r\n);\r\n","import React from \"react\";\r\nimport { UIComponent } from \"../../../types/generative-ui\";\r\n\r\ninterface GenUITableProps {\r\n component: UIComponent;\r\n}\r\n\r\nexport const GenUITable: React.FC<GenUITableProps> = ({ component }) => (\r\n <div key={component.id} className=\"gen-ui-table-wrapper\">\r\n <table className=\"gen-ui-table\">\r\n {component.columns && (\r\n <thead className=\"gen-ui-table-header\">\r\n <tr>\r\n {component.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 {component.rows && (\r\n <tbody className=\"gen-ui-table-body\">\r\n {component.rows.map((row, rowIndex) => (\r\n <tr key={rowIndex}>\r\n {row.map((cell, cellIndex) => (\r\n <td key={cellIndex} 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","import React, { useRef } from \"react\";\r\nimport { UIComponent, UIData, UIInteractionEvent, FormValues } from \"../../types/generative-ui\";\r\nimport {\r\n GenUIText,\r\n GenUIInput,\r\n GenUISelect,\r\n GenUIButton,\r\n GenUICard,\r\n GenUIList,\r\n GenUIImage,\r\n GenUILink,\r\n GenUITable,\r\n} from \"./atoms\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Props */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface GenericUIRendererProps {\r\n uiData: UIData;\r\n onInteraction: (event: UIInteractionEvent) => void;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Component */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport const GenericUIRenderer: React.FC<GenericUIRendererProps> = ({\r\n uiData,\r\n onInteraction,\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n if (!uiData?.components) return null;\r\n\r\n /** Collects current form field values from the rendered DOM. */\r\n const collectFormValues = (): FormValues => {\r\n if (!containerRef.current) return {};\r\n\r\n const formData: FormValues = {};\r\n const inputs = containerRef.current.querySelectorAll<\r\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\r\n >(\"input, textarea, select\");\r\n\r\n inputs.forEach((element) => {\r\n const name = element.getAttribute(\"name\");\r\n if (!name) return;\r\n\r\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\r\n formData[name] = element.checked;\r\n } else if (\r\n element instanceof HTMLInputElement &&\r\n element.type === \"radio\"\r\n ) {\r\n if (element.checked) formData[name] = element.value;\r\n } else {\r\n formData[name] = element.value;\r\n }\r\n });\r\n\r\n return formData;\r\n };\r\n\r\n /** Delegates rendering to the correct atom component. */\r\n const renderComponent = (component: UIComponent): React.ReactNode => {\r\n switch (component.type) {\r\n case \"text\":\r\n return <GenUIText key={component.id} component={component} />;\r\n case \"input\":\r\n return <GenUIInput key={component.id} component={component} />;\r\n case \"select\":\r\n return <GenUISelect key={component.id} component={component} />;\r\n case \"button\":\r\n return (\r\n <GenUIButton\r\n key={component.id}\r\n component={component}\r\n onInteraction={onInteraction}\r\n collectFormValues={collectFormValues}\r\n />\r\n );\r\n case \"card\":\r\n return <GenUICard key={component.id} component={component} />;\r\n case \"list\":\r\n return <GenUIList key={component.id} component={component} />;\r\n case \"image\":\r\n return <GenUIImage key={component.id} component={component} />;\r\n case \"link\":\r\n return <GenUILink key={component.id} component={component} />;\r\n case \"table\":\r\n return <GenUITable key={component.id} component={component} />;\r\n case \"form\":\r\n return (\r\n <form key={component.id} className=\"gen-ui-form\">\r\n {component.items?.map((field) => renderComponent(field))}\r\n </form>\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","import { Message } from \"../../types/chat\";\r\nimport { GenericUIRenderer } from \"../generative-ui\";\r\nimport ReactMarkdown from \"react-markdown\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n onAction: (msg: string, approval: boolean) => void;\r\n}\r\n\r\nexport const MessageBubble = ({ message, onAction }: MessageBubbleProps) => {\r\n const isUser = message.role === \"user\";\r\n\r\n if (message.role === \"approval\") return null;\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 && <div className=\"markdown-content\">{message.text}</div>\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 if (event.buttonId === \"submit\") {\r\n onAction(JSON.stringify(event.formData), true);\r\n } else {\r\n onAction(event.action, true);\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};","import React from \"react\";\r\nimport { Message } from \"../../../types/chat\";\r\nimport { HeaderValidationResult } from \"../../../types/validation\";\r\nimport { ChatWidgetApiResponse } from \"../../../types/widget-config\";\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 { IconBack, IconBubble, IconInfo, IconTrash } from \"../icons\";\r\n\r\ninterface ConversationDetailPanelProps {\r\n activeSessionId: string | null;\r\n isLoading: boolean;\r\n messages: Message[];\r\n headerValidation: HeaderValidationResult | null;\r\n showAlert: boolean;\r\n setShowAlert: React.Dispatch<React.SetStateAction<boolean>>;\r\n sanitizedWelcome: string;\r\n messagesEndRef: React.RefObject<HTMLDivElement | null>;\r\n config: ChatWidgetApiResponse | undefined;\r\n getSessionTitle: (sid: string) => string;\r\n onBack: () => void;\r\n onInfo: () => void;\r\n onSendMessage: (message: string, approval?: boolean) => void;\r\n placeholder: string;\r\n}\r\n\r\nexport const ConversationDetailPanel: React.FC<\r\n ConversationDetailPanelProps\r\n> = ({\r\n activeSessionId,\r\n isLoading,\r\n messages,\r\n headerValidation,\r\n showAlert,\r\n setShowAlert,\r\n sanitizedWelcome,\r\n messagesEndRef,\r\n config,\r\n getSessionTitle,\r\n onBack,\r\n onInfo,\r\n onSendMessage,\r\n placeholder,\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={onBack} aria-label=\"Back\">\r\n <IconBack />\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 <IconBubble />\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\r\n className={`status-dot ${isLoading ? \"typing\" : \"online\"}`}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n <p className=\"detail-subtitle\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"detail-header-right\">\r\n <button className=\"icon-button\" onClick={onInfo} aria-label=\"Bilgi\">\r\n <IconInfo />\r\n </button>\r\n <button\r\n className=\"icon-button danger\"\r\n disabled={!activeSessionId}\r\n aria-label=\"End conversation\"\r\n >\r\n <IconTrash />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"messages-container\">\r\n <HeaderAlert\r\n headerValidation={headerValidation}\r\n setShowAlert={setShowAlert}\r\n showAlert={showAlert}\r\n />\r\n\r\n {messages.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span dangerouslySetInnerHTML={{ __html: sanitizedWelcome }} />\r\n </div>\r\n ) : (\r\n <>\r\n {messages.map((message, index) => (\r\n <MessageBubble\r\n key={index}\r\n message={message}\r\n onAction={onSendMessage}\r\n />\r\n ))}\r\n {config?.widget_config.show_typing_indicator && isLoading && (\r\n <TypingDots />\r\n )}\r\n </>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n <ChatInput\r\n onSendMessage={onSendMessage}\r\n isLoading={isLoading}\r\n placeholder={placeholder}\r\n />\r\n </div>\r\n);\r\n","import React from \"react\";\r\n\r\ninterface InfoPanelProps {\r\n companyName: string;\r\n isLoading: boolean;\r\n sessionsCount: number;\r\n}\r\n\r\nexport const InfoPanel: React.FC<InfoPanelProps> = ({\r\n companyName,\r\n isLoading,\r\n sessionsCount,\r\n}) => (\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>{companyName}</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>{sessionsCount}</strong>\r\n </li>\r\n </ul>\r\n </div>\r\n);\r\n","\"use client\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { ActiveTab, MessageView, Message } from \"../../types/chat\";\r\nimport { useChatSession } from \"../../hooks/use-chat-session\";\r\nimport { IconClose, IconChat } from \"./icons\";\r\nimport {\r\n HomePanel,\r\n ConversationListPanel,\r\n ConversationDetailPanel,\r\n InfoPanel,\r\n} from \"./panels\";\r\nimport sanitizeHtml from \"sanitize-html\";\r\nimport \"../../styles/index.scss\";\r\nimport {\r\n ChatWidgetApiResponse,\r\n HeadersType,\r\n ToolCallPayload,\r\n} from \"../../types\";\r\n\r\ninterface AizekChatBotProps {\r\n clientId: string;\r\n headers?: HeadersType;\r\n onMounted?: () => void;\r\n onReady?: (data: { config: ChatWidgetApiResponse }) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: Message) => void;\r\n onToolCall?: (tool: ToolCallPayload) => void;\r\n onDisconnect?: () => void;\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 {\r\n config,\r\n messages,\r\n isLoading,\r\n isConfigLoading,\r\n sessions,\r\n activeSessionId,\r\n headerValidation,\r\n createNewSession,\r\n sendMessage,\r\n selectSession,\r\n getSessionTitle,\r\n } = useChatSession({ clientId, headers, onReady, onToolCall, onDisconnect });\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [showAlert, setShowAlert] = useState(true);\r\n const [activeTab, setActiveTab] = useState<ActiveTab>(\"home\");\r\n const [messageView, setMessageView] = useState<MessageView>(\"list\");\r\n\r\n useEffect(() => {\r\n onMounted?.();\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 }, [config?.widget_config.initial_open]);\r\n\r\n useEffect(() => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [messages]);\r\n\r\n const toggleChat = () => {\r\n const next = !isOpen;\r\n setIsOpen(next);\r\n next ? onOpen?.() : onClose?.();\r\n };\r\n\r\n const handleCreateSession = async () => {\r\n try {\r\n await createNewSession();\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n const handleSelectSession = (sid: string) => {\r\n selectSession(sid);\r\n setActiveTab(\"messages\");\r\n setMessageView(\"detail\");\r\n };\r\n\r\n const sanitizedWelcome = sanitizeHtml(\r\n config?.widget_config.welcome_message ?? \"\",\r\n {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\", \"p\", \"br\"],\r\n allowedAttributes: { a: [\"href\", \"target\", \"rel\"] },\r\n },\r\n );\r\n\r\n if (isConfigLoading) {\r\n return (\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\r\n return (\r\n <>\r\n {isOpen && (\r\n <div\r\n className={`overlay floating-chat-overlay ${isOpen ? \"is-open\" : \"\"}`}\r\n onClick={toggleChat}\r\n />\r\n )}\r\n\r\n <div\r\n className={`chat-container ${config?.widget_config.button_position} ${isOpen ? \"is-open\" : \"\"}`}\r\n style={{\r\n width: config?.widget_config.chat_width,\r\n height: config?.widget_config.chat_height,\r\n }}\r\n >\r\n <div className=\"chatbot-container\">\r\n <div\r\n className=\"header\"\r\n style={{ background: config?.widget_config.header_background }}\r\n >\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\r\n src={config.widget_config.company_logo}\r\n alt=\"Company Logo\"\r\n className=\"logo-image\"\r\n />\r\n ) : (\r\n <span className=\"logo-text\">\r\n {config.widget_config.company_logo}\r\n </span>\r\n )\r\n ) : (\r\n \"🤖\"\r\n )}\r\n </div>\r\n <div>\r\n <h3 className=\"company-name\">\r\n {config?.widget_config.company_name}\r\n </h3>\r\n <p className=\"status-text\">\r\n {isLoading ? \"Typing...\" : \"Online\"}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"chat-content\">\r\n {activeTab === \"home\" && (\r\n <HomePanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n onNewSession={handleCreateSession}\r\n onViewConversations={() => {\r\n setActiveTab(\"messages\");\r\n setMessageView(\"list\");\r\n }}\r\n />\r\n )}\r\n\r\n {activeTab === \"messages\" && (\r\n <>\r\n {messageView === \"list\" ? (\r\n <ConversationListPanel\r\n sessions={sessions}\r\n activeSessionId={activeSessionId}\r\n getSessionTitle={getSessionTitle}\r\n onNewSession={handleCreateSession}\r\n onSelectSession={handleSelectSession}\r\n />\r\n ) : (\r\n <ConversationDetailPanel\r\n activeSessionId={activeSessionId}\r\n isLoading={isLoading}\r\n messages={messages}\r\n headerValidation={headerValidation}\r\n showAlert={showAlert}\r\n setShowAlert={setShowAlert}\r\n sanitizedWelcome={sanitizedWelcome}\r\n messagesEndRef={messagesEndRef}\r\n config={config}\r\n getSessionTitle={getSessionTitle}\r\n onBack={() => setMessageView(\"list\")}\r\n onInfo={() => {\r\n setActiveTab(\"info\");\r\n setMessageView(\"list\");\r\n }}\r\n onSendMessage={sendMessage}\r\n placeholder={config?.widget_config.placeholder ?? \"\"}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {activeTab === \"info\" && (\r\n <InfoPanel\r\n companyName={config?.widget_config.company_name ?? \"\"}\r\n isLoading={isLoading}\r\n sessionsCount={sessions.length}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"bottom-nav\">\r\n {([\"home\", \"messages\", \"info\"] as ActiveTab[]).map((tab) => (\r\n <button\r\n key={tab}\r\n className={`nav-button ${activeTab === tab ? \"active\" : \"\"}`}\r\n onClick={() => {\r\n setActiveTab(tab);\r\n setMessageView(\"list\");\r\n }}\r\n >\r\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\r\n </button>\r\n ))}\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 style={{ background: config?.widget_config.button_background }}\r\n >\r\n {isOpen ? <IconClose /> : <IconChat />}\r\n </button>\r\n </>\r\n );\r\n};\r\n"]}
|