{"version":3,"file":"nabeh-chat-widget-angular.mjs","sources":["../../../projects/chat-widget/src/lib/config.token.ts","../../../projects/chat-widget/src/lib/chat-widget.service.ts","../../../projects/chat-widget/src/lib/defaults.ts","../../../projects/chat-widget/src/lib/utils.ts","../../../projects/chat-widget/src/lib/config.ts","../../../projects/chat-widget/src/lib/knowledge-graph-renderer.ts","../../../projects/chat-widget/src/lib/chat-widget.component.ts","../../../projects/chat-widget/src/lib/chat-widget.component.html","../../../projects/chat-widget/src/lib/chat-widget.module.ts","../../../projects/chat-widget/src/public-api.ts","../../../projects/chat-widget/src/nabeh-chat-widget-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ChatWidgetConfig } from './types';\n\nexport const CHAT_WIDGET_CONFIG = new InjectionToken<ChatWidgetConfig>('CHAT_WIDGET_CONFIG');\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { CHAT_WIDGET_CONFIG } from './config.token';\nimport {\n  ChatWidgetConfig,\n  SendMessageResponse,\n  ChatHistoryMessage,\n  ChatListItem,\n  KnowledgeGraphResponse,\n  RagCitation,\n  StreamMessageChunk,\n  StreamMessageHandlers\n} from './types';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChatWidgetService {\n  \n  constructor(\n    private http: HttpClient,\n    @Optional() @Inject(CHAT_WIDGET_CONFIG) private config: ChatWidgetConfig\n  ) {}\n\n  setConfig(config: ChatWidgetConfig) {\n    this.config = { ...this.config, ...config };\n  }\n\n  private async getHeaders(): Promise<HttpHeaders> {\n    let token: string | null = null;\n    if (this.config?.getAccessToken) {\n      token = await this.config.getAccessToken();\n    }\n    \n    let headers = new HttpHeaders({\n      'Content-Type': 'application/json',\n      'Accept': 'application/json'\n    });\n\n    if (token) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n    \n    if (this.config?.customHeaders) {\n      Object.entries(this.config.customHeaders).forEach(([key, val]) => {\n        headers = headers.set(key, val);\n      });\n    }\n\n    return headers;\n  }\n\n  private joinUrl(base: string, path: string): string {\n    return base.replace(/\\/+$/, '') + '/' + path.replace(/^\\/+/, '');\n  }\n\n  private resolveOnce<T>(observable: Observable<T>): Promise<T> {\n    return observable.toPromise() as Promise<T>;\n  }\n\n  private resolveEndpoint(path: string, chatId?: string): string {\n    const resolvedPath = path\n      .replace(/\\{chatId\\}/g, encodeURIComponent(chatId ?? ''))\n      .replace(/:chatId\\b/g, encodeURIComponent(chatId ?? ''));\n\n    if (/^https?:\\/\\//i.test(resolvedPath)) {\n      return resolvedPath;\n    }\n\n    return this.joinUrl(this.config.apiBaseUrl, resolvedPath);\n  }\n\n  resolveDocumentUrl(filename: string, pageNumber?: number | null): string {\n    const docsEndpoint = this.config?.endpoints?.docs ?? '/my-chats/docs/:filename';\n    const encodedFilename = encodeURIComponent(filename);\n    const path = docsEndpoint\n      .replace(/\\{filename\\}/g, encodedFilename)\n      .replace(/:filename\\b/g, encodedFilename);\n    const url = this.resolveEndpoint(path);\n\n    return pageNumber || pageNumber === 0 ? `${url}#page=${pageNumber}` : url;\n  }\n\n  async loadKnowledgeGraph(\n    docUuid: string,\n    options?: { maxNodes?: number; maxEdges?: number }\n  ): Promise<KnowledgeGraphResponse> {\n    if (!this.config?.endpoints?.knowledgeGraph) {\n      throw new Error('Knowledge graph endpoint is not configured.');\n    }\n\n    const headers = await this.getHeaders();\n    const maxNodes = options?.maxNodes ?? this.config.knowledgeGraph?.maxNodes ?? 500;\n    const maxEdges = options?.maxEdges ?? this.config.knowledgeGraph?.maxEdges ?? 1000;\n    const endpoint = this.config.endpoints.knowledgeGraph\n      .replace(/\\{docUuid\\}/g, encodeURIComponent(docUuid))\n      .replace(/:docUuid\\b/g, encodeURIComponent(docUuid));\n    const url = new URL(this.resolveEndpoint(endpoint));\n\n    url.searchParams.set('max_nodes', String(maxNodes));\n    url.searchParams.set('max_edges', String(maxEdges));\n\n    const response = await this.resolveOnce(this.http.get<any>(url.toString(), { headers }));\n    return this.normalizeKnowledgeGraphResponse(response, docUuid);\n  }\n\n  private appendChatIdQuery(url: string, chatId: string): string {\n    const separator = url.includes('?') ? '&' : '?';\n    return `${url}${separator}chat_id=${encodeURIComponent(chatId)}`;\n  }\n\n  async createChat(chatId: string, title?: string): Promise<void> {\n    const endpoint = this.config?.endpoints?.createChat ?? this.config?.endpoints?.listChats;\n    if (!endpoint) return;\n\n    const headers = await this.getHeaders();\n    const url = this.joinUrl(this.config.apiBaseUrl, endpoint);\n\n    try {\n      await this.resolveOnce(this.http.post(url, {\n        chatId,\n        chat_id: chatId,\n        ...(title ? { title } : {})\n      }, { headers }));\n    } catch (e) {\n      console.error('Failed to create chat', e);\n    }\n  }\n\n  async updateChat(chatId: string, payload: { title?: string; pinned?: boolean }): Promise<ChatListItem | null> {\n    if (!this.config?.endpoints?.updateChat) return null;\n    const headers = await this.getHeaders();\n    const url = this.resolveEndpoint(this.config.endpoints.updateChat, chatId);\n\n    try {\n      const item = await this.resolveOnce(this.http.put<any>(url, payload, { headers }));\n      return {\n        chatId: item?.chatId ?? item?.chat_id ?? chatId,\n        title: item?.title ?? payload.title ?? chatId,\n        pinned: item?.pinned ?? false,\n        createdAt: item?.createdAt ?? item?.created_at,\n        updatedAt: item?.updatedAt ?? item?.updated_at\n      };\n    } catch (e) {\n      console.error('Failed to update chat', e);\n      throw e;\n    }\n  }\n\n  async deleteChat(chatId: string): Promise<void> {\n    if (!this.config?.endpoints?.deleteChat) return;\n    const headers = await this.getHeaders();\n    const url = this.resolveEndpoint(this.config.endpoints.deleteChat, chatId);\n\n    try {\n      await this.resolveOnce(this.http.post(url, {}, { headers, responseType: 'text' }));\n    } catch (e) {\n      console.error('Failed to delete chat', e);\n      throw e;\n    }\n  }\n\n  async loadChats(): Promise<ChatListItem[]> {\n    if (!this.config?.endpoints?.listChats) return [];\n    const headers = await this.getHeaders();\n    const url = this.joinUrl(this.config.apiBaseUrl, this.config.endpoints.listChats);\n    \n    try {\n      const data = await this.resolveOnce(this.http.post<any>(url, {}, { headers }));\n      const chatItems = Array.isArray(data) ? data : (data?.chats ?? data?.data ?? data?.items ?? []);\n      \n      return chatItems.map((item: any) => {\n        if (!item || typeof item !== 'object') return null;\n        const chatId = item.chatId ?? item.chat_id ?? item.id;\n        const title = item.title ?? item.name ?? chatId;\n        if (!chatId || !title) return null;\n        return {\n          chatId,\n          title,\n          pinned: item.pinned ?? false,\n          createdAt: item.createdAt ?? item.created_at,\n          updatedAt: item.updatedAt ?? item.updated_at\n        } as ChatListItem;\n      }).filter(Boolean);\n    } catch (e) {\n      console.error('Failed to load chats', e);\n      return [];\n    }\n  }\n\n  async loadHistory(chatId: string): Promise<ChatHistoryMessage[]> {\n    if (!this.config?.endpoints?.history) return [];\n    const headers = await this.getHeaders();\n    \n    let url = this.config.endpoints.history;\n    if (/(\\{chatId\\}|:chatId\\b)/.test(url)) {\n      url = this.resolveEndpoint(url, chatId);\n    } else {\n      url = this.appendChatIdQuery(this.joinUrl(this.config.apiBaseUrl, url), chatId);\n    }\n    \n    try {\n      const data = await this.resolveOnce(this.http.post<any>(url, {}, { headers }));\n      return this.normalizeHistoryMessages(data);\n    } catch (e) {\n      console.error('Failed to load history', e);\n      return [];\n    }\n  }\n\n  async sendMessage(chatId: string, message: string): Promise<SendMessageResponse | null> {\n    if (!this.config?.endpoints?.ask) return null;\n    const headers = await this.getHeaders();\n    const url = this.resolveEndpoint(this.config.endpoints.ask, chatId);\n    \n    const body = {\n      message,\n      query: message,\n      chat_id: chatId,\n      chatId,\n      knowledgeNames: this.config.rag?.knowledgeNames || [],\n      knowledge_names: this.config.rag?.knowledgeNames || [],\n      enableReferences: this.config.rag?.enableReferences ?? true,\n      enable_references: this.config.rag?.enableReferences ?? true\n    };\n    \n    try {\n      const rawText = await this.resolveOnce(this.http.post(url, body, {\n        headers,\n        responseType: 'text'\n      }));\n\n      return this.parseMessageResponse(rawText, chatId);\n    } catch (e) {\n      console.error('Failed to send message', e);\n      throw e;\n    }\n  }\n\n  async submitFeedback(chatId: string, message: ChatHistoryMessage, isLike: boolean): Promise<void> {\n    if (!this.config?.endpoints?.feedback) return;\n    if (!message.messageId) {\n      throw new Error('Feedback requires assistant message_id.');\n    }\n    const headers = await this.getHeaders();\n    const url = this.resolveEndpoint(this.config.endpoints.feedback, chatId);\n\n    await this.resolveOnce(this.http.post(url, {\n      message_id: message.messageId,\n      isLike\n    }, { headers }));\n  }\n\n  async streamMessage(chatId: string, message: string, handlers: StreamMessageHandlers): Promise<void> {\n    if (!this.config?.endpoints?.askStream) {\n      throw new Error('Streaming endpoint is not configured.');\n    }\n\n    const httpHeaders = await this.getHeaders();\n    const fetchHeaders: Record<string, string> = {};\n    httpHeaders.keys().forEach(k => {\n      const v = httpHeaders.get(k);\n      if (v !== null) {\n        fetchHeaders[k] = v;\n      }\n    });\n\n    const url = this.resolveEndpoint(this.config.endpoints.askStream, chatId);\n    const body: Record<string, unknown> = {\n      message,\n      query: message,\n      chat_id: chatId,\n      enable_think: this.config.rag?.enableThink ?? false,\n      // chatId,\n      // knowledgeNames: this.config.rag?.knowledgeNames || [],\n      // enableReferences: this.config.rag?.enableReferences ?? true,\n      // enableThink: this.config.rag?.enableThink ?? false\n    };\n\n    // Include sourceUuid if configured (needed for smart-docs style queries)\n    // if (this.config.rag?.sourceUuid) {\n    //   body['sourceUuid'] = this.config.rag.sourceUuid;\n    //   body['source_uuid'] = this.config.rag.sourceUuid;\n    // }\n\n    console.log('Calling stream endpoint:', url);\n    console.log('Stream request body:', JSON.stringify(body));\n    console.log('Stream request headers:', JSON.stringify(fetchHeaders));\n    \n    let response: Response;\n    try {\n      console.log(\"calling ask stream\");\n      \n      response = await fetch(url, {\n        method: 'POST',\n        headers: fetchHeaders,\n        body: JSON.stringify(body),\n        signal: handlers.signal\n      });\n    } catch (fetchError) {\n      console.error('Fetch failed (network error):', fetchError);\n      throw fetchError;\n    }\n\n    if (!response.ok) {\n      const errText = await response.text().catch(() => '');\n      console.error(`Streaming request failed with status ${response.status}: ${errText}`);\n      throw new Error(`Streaming request failed with status ${response.status}.`);\n    }\n\n    if (!response.body) {\n      throw new Error('Streaming response body is empty.');\n    }\n\n    const reader = response.body.getReader();\n    const decoder = new TextDecoder('utf-8');\n    let buffer = '';\n    try {\n      while (true) {\n        const { value, done } = await reader.read();\n        if (done) break;\n        buffer += decoder.decode(value, { stream: true });\n        buffer = this.consumeStreamBuffer(buffer, handlers);\n      }\n      buffer += decoder.decode();\n      buffer = this.consumeStreamBuffer(buffer, handlers);\n      if (buffer.trim()) {\n        throw new Error('Streaming response ended with an incomplete JSON object.');\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n\n  private parseMessageResponse(rawText: string, chatId: string): SendMessageResponse {\n    let data: any;\n\n    try {\n      data = JSON.parse(rawText);\n    } catch {\n      return {\n        chatId,\n        answer: rawText,\n        suggestions: [],\n        citations: []\n      };\n    }\n\n    if (Array.isArray(data)) {\n      return this.parseArrayMessageResponse(data, chatId);\n    }\n\n    const content = data?.content;\n    const answer = data?.answer || (typeof content === 'string' ? content : '');\n\n    return {\n      chatId: data?.chatId ?? data?.chat_id ?? chatId,\n      answer,\n      suggestions: data?.suggestions ?? [],\n      citations: this.normalizeCitations(data?.citations ?? this.citationsFromContent(content))\n    };\n  }\n\n  private parseArrayMessageResponse(data: any[], chatId: string): SendMessageResponse {\n    const answerItem = data.find((item: any) => item?.type === 'answer');\n\n    if (answerItem) {\n      const refItem = data.find((item: any) => item?.type === 'references');\n      return {\n        chatId,\n        answer: typeof answerItem.content === 'string' ? answerItem.content : '',\n        suggestions: [],\n        citations: this.normalizeCitations(refItem?.content?.citations)\n      };\n    }\n\n    const firstAnswer = data[0] ?? {};\n    return {\n      chatId: firstAnswer.chatId ?? firstAnswer.chat_id ?? chatId,\n      answer: firstAnswer.answer || '',\n      suggestions: firstAnswer.suggestions || [],\n      citations: this.normalizeCitations(firstAnswer.citations ?? this.citationsFromContent(firstAnswer.content))\n    };\n  }\n\n  private normalizeHistoryMessages(data: any): ChatHistoryMessage[] {\n    if (!data) return [];\n\n    if (Array.isArray(data)) {\n      return data.flatMap(item => this.normalizeHistoryMessages(item));\n    }\n\n    if (typeof data !== 'object') return [];\n\n    const knownContainer = data.history ?? data.messages ?? data.data ?? data.items;\n    if (knownContainer) {\n      return this.normalizeHistoryMessages(knownContainer);\n    }\n\n    if (data.question && data.answer) {\n      return [\n        { role: 'user', text: String(data.question) },\n        { role: 'assistant', text: String(data.answer), citations: this.normalizeCitations(data.citations) }\n      ];\n    }\n\n    const roleValue = data.role ?? data.type ?? data.sender ?? data.author;\n    const textValue = data.text ?? data.message ?? data.content ?? data.answer;\n\n    if (typeof textValue === 'string') {\n      const role = this.normalizeHistoryRole(roleValue);\n      return [{\n        role,\n        messageId: data.id ?? data.messageId ?? data.message_id ?? null,\n        text: textValue,\n        citations: this.normalizeCitations(data.citations),\n        isLike: typeof data.isLike === 'boolean' ? data.isLike : undefined\n      }];\n    }\n\n    return Object.values(data)\n      .filter(value => Array.isArray(value))\n      .flatMap(value => this.normalizeHistoryMessages(value));\n  }\n\n  private normalizeHistoryRole(roleValue: any): 'user' | 'assistant' {\n    const role = String(roleValue ?? '').toLowerCase();\n    return ['human', 'user', 'customer', 'client'].includes(role) ? 'user' : 'assistant';\n  }\n\n  private citationsFromContent(content: any): any[] {\n    if (!content?.source_documents?.length) return [];\n\n    return content.source_documents.map((sourceDocument: string, index: number) => ({\n      documentName: content.document_names?.[index] ?? sourceDocument,\n      documentUuid: content.document_uuids?.[index] ?? content.source_uuids?.[index] ?? null,\n      score: content.scores?.[index] ?? null,\n      pageNumber: content.page_numbers?.[index] ?? null,\n      sheetName: content.sheet_names?.[index] ?? null,\n      rowNumber: content.row_numbers?.[index] ?? null\n    }));\n  }\n\n  private consumeStreamBuffer(buffer: string, handlers: StreamMessageHandlers): string {\n    const result = this.extractJsonObjects(buffer);\n\n    for (const rawObject of result.objects) {\n      const chunk = JSON.parse(rawObject) as StreamMessageChunk;\n      handlers.onChunk?.(chunk);\n\n      if (chunk.type === 'answer' && typeof chunk.content === 'string') {\n        handlers.onAnswer(chunk.content);\n      } else if (chunk.type === 'references') {\n        const citations = this.normalizeCitations((chunk.content as any)?.citations);\n        handlers.onReferences?.(citations);\n      }\n    }\n\n    return result.remaining;\n  }\n\n  private extractJsonObjects(buffer: string): { objects: string[]; remaining: string } {\n    const objects: string[] = [];\n    let depth = 0;\n    let start = -1;\n    let inString = false;\n    let escaped = false;\n    let lastConsumedIndex = 0;\n\n    for (let index = 0; index < buffer.length; index++) {\n      const char = buffer[index];\n\n      if (inString) {\n        if (escaped) {\n          escaped = false;\n        } else if (char === '\\\\') {\n          escaped = true;\n        } else if (char === '\"') {\n          inString = false;\n        }\n        continue;\n      }\n\n      if (char === '\"') {\n        inString = true;\n        continue;\n      }\n\n      if (char === '{') {\n        if (depth === 0) start = index;\n        depth++;\n      } else if (char === '}') {\n        depth--;\n        if (depth === 0 && start >= 0) {\n          objects.push(buffer.slice(start, index + 1));\n          lastConsumedIndex = index + 1;\n          start = -1;\n        }\n      }\n    }\n\n    return {\n      objects,\n      remaining: buffer.slice(lastConsumedIndex)\n    };\n  }\n\n  private normalizeCitations(citations: any): RagCitation[] {\n    if (!Array.isArray(citations)) return [];\n\n    return citations.map((citation: any) => {\n      const documentName = citation?.document_name ?? null;\n      const documentUuid =\n        citation?.documentUuid ??\n        citation?.document_uuid ??\n        citation?.sourceUuid ??\n        citation?.source_uuid ??\n        citation?.documentId ??\n        citation?.document_id ??\n        citation?.uuid ??\n        null;\n\n      return {\n        ...citation,\n        documentUuid,\n        documentName,\n        pageNumber: citation?.pageNumber ?? citation?.page_number ?? citation?.page ?? null,\n        sheetName: citation?.sheetName ?? citation?.sheet_name ?? null,\n        rowNumber: citation?.rowNumber ?? citation?.row_number ?? null,\n        score: citation?.score ?? null,\n        text: citation?.text ?? null\n      };\n    });\n  }\n\n  private normalizeKnowledgeGraphResponse(data: any, docUuid: string): KnowledgeGraphResponse {\n    const rawNodes = Array.isArray(data?.nodes) ? data.nodes : [];\n    const rawEdges = Array.isArray(data?.edges) ? data.edges : [];\n\n    const nodes = rawNodes.map((node: any, index: number) => {\n      const nodeId = String(\n        node?.id ??\n        node?.node_id ??\n        node?.uuid ??\n        node?.name ??\n        node?.label ??\n        `node-${index}`\n      );\n      const label = String(node?.label ?? node?.name ?? nodeId);\n\n      return {\n        id: nodeId,\n        label,\n        type: node?.type ?? node?.entity_type ?? node?.category ?? null,\n        description: typeof node?.description === 'string' ? node.description : null,\n        sourceCount: this.toNullableNumber(node?.source_count ?? node?.sourceCount),\n        degree: this.toNullableNumber(node?.degree),\n        weight: this.toNullableNumber(node?.weight),\n        color: typeof node?.color === 'string' ? node.color : null,\n        size: this.toNullableNumber(node?.size),\n        metadata: node && typeof node === 'object' ? node : null\n      };\n    });\n\n    const edges = rawEdges.map((edge: any, index: number) => {\n      const source = this.extractEdgeNodeId(edge?.source, `source-${index}`);\n      const target = this.extractEdgeNodeId(edge?.target, `target-${index}`);\n      const label = edge?.label ?? edge?.relation ?? edge?.predicate ?? edge?.type ?? null;\n\n      return {\n        id: String(edge?.id ?? `${source}-${target}-${index}`),\n        source,\n        target,\n        label: label ? String(label) : null,\n        weight: this.toNullableNumber(edge?.weight ?? edge?.score),\n        color: typeof edge?.color === 'string' ? edge.color : null,\n        metadata: edge && typeof edge === 'object' ? edge : null\n      };\n    });\n\n    return {\n      kgStatus: data?.kg_status ?? data?.kgStatus ?? 'not_yet_started',\n      nodes,\n      edges,\n      nodeCount: Number(data?.node_count ?? data?.nodeCount ?? nodes.length),\n      edgeCount: Number(data?.edge_count ?? data?.edgeCount ?? edges.length),\n      isTruncated: Boolean(data?.is_truncated ?? data?.isTruncated),\n      sourceDocumentUuid: String(data?.doc_uuid ?? data?.document_uuid ?? docUuid),\n      raw: data\n    };\n  }\n\n  private extractEdgeNodeId(value: any, fallback: string): string {\n    if (typeof value === 'string' || typeof value === 'number') {\n      return String(value);\n    }\n\n    if (value && typeof value === 'object') {\n      return String(value.id ?? value.node_id ?? value.uuid ?? value.name ?? fallback);\n    }\n\n    return fallback;\n  }\n\n  private toNullableNumber(value: any): number | null {\n    return typeof value === 'number' && Number.isFinite(value) ? value : null;\n  }\n}\n","import type { ChatWidgetTheme, ResolvedChatWidgetConfig } from \"./types\";\n\nexport const defaultNestChatEndpoints = {\n  ask: \"/my-chats/:chatId/messages\",\n  askStream: \"/my-chats/:chatId/messages/stream\",\n  history: \"/my-chats/:chatId/messages/history\",\n  listChats: \"/my-chats/list\",\n  createChat: \"/my-chats\",\n  updateChat: \"/my-chats/:chatId\",\n  deleteChat: \"/my-chats/:chatId/delete\",\n  feedback: \"/my-chats/:chatId/feedback\",\n  docs: \"/my-chats/docs/:filename\",\n  knowledgeGraph: \"/my-chats/knowledge-graph/:docUuid\"\n};\n\nexport const defaultTheme: ChatWidgetTheme = {\n  accent: \"#0f766e\",\n  accentSoft: \"#ecfeff\",\n  panelBackground: \"#ffffff\",\n  surfaceBackground: \"#f8fafc\",\n  text: \"#1f2937\",\n  mutedText: \"#64748b\",\n  borderColor: \"#dbe4ee\",\n  shadow: \"0 24px 64px rgba(15, 23, 42, 0.20)\",\n  zIndex: 2147483000,\n  fontFamily:\n    \"\\\"Segoe UI\\\", -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif\"\n};\n\nexport const defaultConfigValues: Omit<\n  ResolvedChatWidgetConfig,\n  \"apiBaseUrl\" | \"mount\"\n> = {\n  displayMode: \"widget\",\n  endpoints: defaultNestChatEndpoints,\n  position: \"bottom-right\",\n  title: \"Knowledge Assistant\",\n  subtitle: \"Answers are generated based on your access permissions\",\n  welcomeMessage: \"How can I assist you today?\",\n  inputPlaceholder: \"Ask Your Knowledge Assistant\",\n  launcherAriaLabel: \"Open chat assistant\",\n  closeAriaLabel: \"Close chat assistant\",\n  initialSuggestions: [\n    \"Which indicators reflect the achievements of Vision KSA goals?\",\n    \"Case studies of real estate initiatives for economic growth\",\n    \"Study of UX for the ministry external portal\"\n  ],\n  sourceApp: \"knowledge-platform\",\n  locale: \"en\",\n  customHeaders: {},\n  assistantPageUrl: \"/knowledge-assistant\",\n  embedded: {\n    showHeader: false\n  },\n  rag: {\n    knowledgeNames: [],\n    enableReferences: true,\n    enableThink: false,\n    useStreaming: true,\n    loadHistoryOnOpen: false\n  },\n  knowledgeGraph: {\n    enabled: false,\n    maxNodes: 500,\n    maxEdges: 1000,\n    defaultViewMode: \"2d\",\n    title: \"Knowledge Graph\"\n  },\n  theme: defaultTheme,\n  getAccessToken: undefined,\n  onOpen: undefined,\n  onClose: undefined,\n  onError: undefined,\n  onOpenAssistantPage: undefined,\n  assistantAvatarUrl: \"\"\n};\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function mergeDeep<T extends Record<string, unknown>>(\n  target: T,\n  source: Partial<T>\n): T {\n  const output = { ...target };\n\n  for (const key of Object.keys(source) as Array<keyof T>) {\n    const sourceValue = source[key];\n    const targetValue = output[key];\n\n    if (isRecord(targetValue) && isRecord(sourceValue)) {\n      output[key] = mergeDeep(\n        targetValue as Record<string, unknown>,\n        sourceValue as Partial<Record<string, unknown>>\n      ) as T[keyof T];\n      continue;\n    }\n\n    if (sourceValue !== undefined) {\n      output[key] = sourceValue as T[keyof T];\n    }\n  }\n\n  return output;\n}\n\nexport function normalizeError(error: unknown): Error {\n  if (error instanceof Error) {\n    return error;\n  }\n\n  if (typeof error === \"string\") {\n    return new Error(error);\n  }\n\n  return new Error(\"Unexpected widget error\");\n}\n\nexport function joinUrl(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/$/, \"\")}/${path.replace(/^\\//, \"\")}`;\n}\n","import { defaultConfigValues, defaultTheme } from \"./defaults\";\nimport { mergeDeep } from \"./utils\";\nimport type { ChatWidgetConfig, ResolvedChatWidgetConfig } from \"./types\";\n\nexport function resolveConfig(config: ChatWidgetConfig): ResolvedChatWidgetConfig {\n  if (!config.apiBaseUrl?.trim()) {\n    throw new Error(\"Chat widget config requires a non-empty apiBaseUrl.\");\n  }\n\n  const mount = config.mount ?? document.body;\n  const theme = mergeDeep(defaultTheme, config.theme ?? {});\n  const endpoints = {\n    ...defaultConfigValues.endpoints,\n    ...(config.endpoints ?? {})\n  };\n\n  if (!endpoints.ask?.trim()) {\n    throw new Error(\"Chat widget config requires endpoints.ask to be provided.\");\n  }\n\n  return {\n    apiBaseUrl: config.apiBaseUrl,\n    endpoints,\n    mount,\n    assistantAvatarUrl:config.assistantAvatarUrl??defaultConfigValues.assistantAvatarUrl,\n    displayMode: config.displayMode ?? defaultConfigValues.displayMode,\n    position: config.position ?? defaultConfigValues.position,\n    title: config.title ?? defaultConfigValues.title,\n    subtitle: config.subtitle ?? defaultConfigValues.subtitle,\n    welcomeMessage: config.welcomeMessage ?? defaultConfigValues.welcomeMessage,\n    inputPlaceholder:\n      config.inputPlaceholder ?? defaultConfigValues.inputPlaceholder,\n    launcherAriaLabel:\n      config.launcherAriaLabel ?? defaultConfigValues.launcherAriaLabel,\n    closeAriaLabel: config.closeAriaLabel ?? defaultConfigValues.closeAriaLabel,\n    initialSuggestions:\n      config.initialSuggestions ?? defaultConfigValues.initialSuggestions,\n    sourceApp: config.sourceApp ?? defaultConfigValues.sourceApp,\n    locale: config.locale ?? defaultConfigValues.locale,\n    customHeaders: config.customHeaders ?? defaultConfigValues.customHeaders,\n    embedded: {\n      ...defaultConfigValues.embedded,\n      ...(config.embedded ?? {})\n    },\n    rag: {\n      ...defaultConfigValues.rag,\n      ...(config.rag ?? {})\n    },\n    knowledgeGraph: {\n      ...defaultConfigValues.knowledgeGraph,\n      ...(config.knowledgeGraph ?? {})\n    },\n    assistantPageUrl: config.assistantPageUrl ?? defaultConfigValues.assistantPageUrl,\n    theme,\n    getAccessToken: config.getAccessToken,\n    userInfo: config.userInfo,\n    onOpen: config.onOpen,\n    onClose: config.onClose,\n    onError: config.onError,\n    onOpenAssistantPage: config.onOpenAssistantPage,\n    onCitationClick: config.onCitationClick\n  };\n}\n","import type ForceGraph2DInstance from \"force-graph\";\nimport type { ForceGraph3DInstance } from \"3d-force-graph\";\nimport type {\n  KnowledgeGraphEdge,\n  KnowledgeGraphNode,\n  KnowledgeGraphResponse,\n  KnowledgeGraphViewMode\n} from \"./types\";\n\ntype ForceGraphDataset = {\n  nodes: Array<KnowledgeGraphNode & { val: number; color: string }>;\n  links: Array<KnowledgeGraphEdge & { color: string; width: number }>;\n};\n\ntype GraphRenderTheme = {\n  background: string;\n  dark: boolean;\n};\n\nconst GRAPH_COLORS = [\n  \"#0f766e\",\n  \"#0ea5e9\",\n  \"#f59e0b\",\n  \"#ef4444\",\n  \"#8b5cf6\",\n  \"#10b981\",\n  \"#f97316\",\n  \"#06b6d4\"\n];\n\nexport class KnowledgeGraphRenderer {\n  private graph2d?: ForceGraph2DInstance<any, any>;\n  private graph3d?: ForceGraph3DInstance<any, any>;\n  private hasFitted2d = false;\n  private hasFitted3d = false;\n  private currentData?: ForceGraphDataset;\n  private selectedNodeId: string | null = null;\n  private hoveredNodeId: string | null = null;\n  private highlightedNodeIds = new Set<string>();\n  private highlightedLinkIds = new Set<string>();\n  private selectionListener?: (node: KnowledgeGraphNode | null) => void;\n  private theme: GraphRenderTheme = { background: \"#f8fafc\", dark: false };\n\n  setSelectionListener(listener: (node: KnowledgeGraphNode | null) => void) {\n    this.selectionListener = listener;\n  }\n\n  async render(\n    mode: KnowledgeGraphViewMode,\n    container: HTMLElement,\n    graph: KnowledgeGraphResponse,\n    theme: GraphRenderTheme\n  ): Promise<void> {\n    const data = this.normalizeGraphData(graph);\n    this.currentData = data;\n    this.theme = theme;\n\n    if (mode === \"2d\") {\n      this.destroy3d();\n      await this.render2d(container, data);\n      return;\n    }\n\n    this.destroy2d();\n    await this.render3d(container, data);\n  }\n\n  resize(mode: KnowledgeGraphViewMode, container: HTMLElement) {\n    const width = Math.max(container.clientWidth, 320);\n    const height = Math.max(container.clientHeight, 320);\n\n    if (mode === \"2d\" && this.graph2d) {\n      this.graph2d.width(width).height(height);\n    }\n\n    if (mode === \"3d\" && this.graph3d) {\n      this.graph3d.width(width).height(height);\n    }\n  }\n\n  destroy() {\n    this.destroy2d();\n    this.destroy3d();\n    this.hoveredNodeId = null;\n    this.clearSelection();\n    this.currentData = undefined;\n  }\n\n  resetSelection() {\n    this.clearSelection();\n    this.refresh();\n  }\n\n  private async render2d(container: HTMLElement, data: ForceGraphDataset) {\n    const width = Math.max(container.clientWidth, 320);\n    const height = Math.max(container.clientHeight, 320);\n    const module = await import(\"force-graph\");\n    const ForceGraph = module.default;\n\n    if (!this.graph2d) {\n      container.innerHTML = \"\";\n      this.graph2d = new ForceGraph(container);\n    }\n\n    this.graph2d\n      .width(width)\n      .height(height)\n      .backgroundColor(this.theme.background)\n      .autoPauseRedraw(true)\n      .nodeId(\"id\")\n      .nodeLabel((node: KnowledgeGraphNode) => this.nodeTooltip(node))\n      .nodeColor((node: KnowledgeGraphNode & { color: string }) => this.getNodeColor(node))\n      .nodeVal((node: KnowledgeGraphNode & { val: number }) => this.getNodeValue(node))\n      .linkSource(\"source\")\n      .linkTarget(\"target\")\n      .linkLabel((link: KnowledgeGraphEdge) => this.edgeTooltip(link))\n      .linkColor((link: KnowledgeGraphEdge & { color: string }) => this.getLinkColor(link))\n      .linkWidth((link: KnowledgeGraphEdge & { width: number }) => this.getLinkWidth(link))\n      .linkDirectionalArrowLength(0)\n      .linkDirectionalArrowRelPos(1)\n      .linkDirectionalParticles(0)\n      .showPointerCursor(true)\n      .onNodeClick((node: KnowledgeGraphNode) => {\n        this.toggleSelection(node.id);\n      })\n      .onNodeHover((node: KnowledgeGraphNode | null) => {\n        this.applyHover(node?.id ?? null);\n      })\n      .onBackgroundClick(() => {\n        this.clearSelection();\n        this.refresh();\n      })\n      .graphData(data)\n      .warmupTicks(25)\n      .cooldownTicks(160)\n      .d3VelocityDecay(0.25)\n      .onEngineStop(() => {\n        if (this.graph2d && !this.hasFitted2d) {\n          this.hasFitted2d = true;\n          this.graph2d.zoomToFit(250, 64);\n        }\n      });\n\n    if (!this.hasFitted2d) {\n      window.setTimeout(() => {\n        if (this.graph2d && !this.hasFitted2d) {\n          this.hasFitted2d = true;\n          this.graph2d.zoomToFit(250, 64);\n        }\n      }, 220);\n    }\n  }\n\n  private async render3d(container: HTMLElement, data: ForceGraphDataset) {\n    const width = Math.max(container.clientWidth, 320);\n    const height = Math.max(container.clientHeight, 320);\n    const module = await import(\"3d-force-graph\");\n    const ForceGraph3D = module.default;\n\n    if (!this.graph3d) {\n      container.innerHTML = \"\";\n      this.graph3d = new ForceGraph3D(container, { controlType: \"orbit\" });\n    }\n\n    this.graph3d\n      .width(width)\n      .height(height)\n      .backgroundColor(this.theme.background)\n      .showNavInfo(false)\n      .enableNavigationControls(true)\n      .enablePointerInteraction(true)\n      .nodeId(\"id\")\n      .nodeLabel((node: KnowledgeGraphNode) => this.nodeTooltip(node))\n      .nodeColor((node: KnowledgeGraphNode & { color: string }) => this.getNodeColor(node))\n      .nodeVal((node: KnowledgeGraphNode & { val: number }) => this.getNodeValue(node))\n      .linkSource(\"source\")\n      .linkTarget(\"target\")\n      .linkLabel((link: KnowledgeGraphEdge) => this.edgeTooltip(link))\n      .linkColor((link: KnowledgeGraphEdge & { color: string }) => this.getLinkColor(link))\n      .linkWidth((link: KnowledgeGraphEdge & { width: number }) => this.getLinkWidth(link))\n      .linkDirectionalArrowLength(0)\n      .linkDirectionalArrowRelPos(1)\n      .linkDirectionalParticles(0)\n      .showPointerCursor(true)\n      .onNodeClick((node: KnowledgeGraphNode) => {\n        this.toggleSelection(node.id);\n      })\n      .onNodeHover((node: KnowledgeGraphNode | null) => {\n        this.applyHover(node?.id ?? null);\n      })\n      .onBackgroundClick(() => {\n        this.clearSelection();\n        this.refresh();\n      })\n      .graphData(data)\n      .warmupTicks(40)\n      .cooldownTicks(180)\n      .d3VelocityDecay(0.25);\n\n    if (!this.hasFitted3d) {\n      this.hasFitted3d = true;\n      window.setTimeout(() => {\n        this.graph3d?.zoomToFit(400, 72);\n      }, 180);\n    }\n  }\n\n  private destroy2d() {\n    this.graph2d?._destructor();\n    this.graph2d = undefined;\n    this.hasFitted2d = false;\n  }\n\n  private destroy3d() {\n    this.graph3d?._destructor();\n    this.graph3d = undefined;\n    this.hasFitted3d = false;\n  }\n\n  private toggleSelection(nodeId: string) {\n    if (this.selectedNodeId === nodeId) {\n      this.clearSelection();\n    } else {\n      this.applySelection(nodeId);\n    }\n\n    this.refresh();\n  }\n\n  private applySelection(nodeId: string) {\n    this.selectedNodeId = nodeId;\n    this.buildHighlights(this.hoveredNodeId ?? nodeId);\n\n    this.selectionListener?.(\n      this.currentData?.nodes.find(node => node.id === nodeId) ?? null\n    );\n  }\n\n  private clearSelection() {\n    this.selectedNodeId = null;\n    this.buildHighlights(this.hoveredNodeId);\n    this.selectionListener?.(null);\n  }\n\n  private applyHover(nodeId: string | null) {\n    if (this.hoveredNodeId === nodeId) return;\n\n    this.hoveredNodeId = nodeId;\n    this.buildHighlights(nodeId ?? this.selectedNodeId);\n    this.refresh();\n  }\n\n  private buildHighlights(nodeId: string | null) {\n    this.highlightedNodeIds.clear();\n    this.highlightedLinkIds.clear();\n    if (!nodeId) return;\n\n    this.highlightedNodeIds.add(nodeId);\n    for (const link of this.currentData?.links ?? []) {\n      const sourceId = this.resolveEndpointLabel(link.source);\n      const targetId = this.resolveEndpointLabel(link.target);\n\n      if (sourceId === nodeId || targetId === nodeId) {\n        this.highlightedLinkIds.add(link.id);\n        this.highlightedNodeIds.add(sourceId);\n        this.highlightedNodeIds.add(targetId);\n      }\n    }\n  }\n\n  private refresh() {\n    if (!this.currentData) return;\n\n    // Reapply visual accessors without replacing graphData or reheating the simulation.\n    this.graph2d\n      ?.nodeColor((node: KnowledgeGraphNode & { color: string }) => this.getNodeColor(node))\n      .linkColor((link: KnowledgeGraphEdge & { color: string }) => this.getLinkColor(link))\n      .linkWidth((link: KnowledgeGraphEdge & { width: number }) => this.getLinkWidth(link));\n\n    this.graph3d\n      ?.nodeColor((node: KnowledgeGraphNode & { color: string }) => this.getNodeColor(node))\n      .linkColor((link: KnowledgeGraphEdge & { color: string }) => this.getLinkColor(link))\n      .linkWidth((link: KnowledgeGraphEdge & { width: number }) => this.getLinkWidth(link));\n  }\n\n  private normalizeGraphData(graph: KnowledgeGraphResponse): ForceGraphDataset {\n    const nodes = graph.nodes.map((node, index) => {\n      const color = node.color || this.colorForType(node.type, index);\n      const degree = Math.max(node.degree ?? 0, 1);\n\n      return {\n        ...node,\n        color,\n        val: Math.min(Math.max(degree * 1.5, 4), 20)\n      };\n    });\n\n    const links = graph.edges.map((edge, index) => ({\n      ...edge,\n      color: edge.color || \"rgba(15, 118, 110, 0.34)\",\n      width: Math.min(Math.max(edge.weight ?? 1, 1), 4)\n    }));\n\n    return { nodes, links };\n  }\n\n  private getNodeColor(node: KnowledgeGraphNode & { color: string }): string {\n    if (!this.hoveredNodeId && !this.selectedNodeId) return node.color;\n    if (this.highlightedNodeIds.has(node.id)) return \"#f97316\";\n    return this.theme.dark\n      ? \"rgba(71, 85, 105, 0.32)\"\n      : \"rgba(148, 163, 184, 0.35)\";\n  }\n\n  private getNodeValue(node: KnowledgeGraphNode & { val: number }): number {\n    const activeNodeId = this.hoveredNodeId ?? this.selectedNodeId;\n    if (!activeNodeId) return node.val;\n    if (node.id === activeNodeId) return node.val * 1.45;\n    if (this.highlightedNodeIds.has(node.id)) return node.val * 1.2;\n    return Math.max(node.val * 0.7, 3);\n  }\n\n  private getLinkColor(link: KnowledgeGraphEdge & { color: string }): string {\n    if (!this.hoveredNodeId && !this.selectedNodeId) return link.color;\n    return this.highlightedLinkIds.has(link.id)\n      ? \"#f97316\"\n      : this.theme.dark\n        ? \"rgba(71, 85, 105, 0.12)\"\n        : \"rgba(203, 213, 225, 0.16)\";\n  }\n\n  private getLinkWidth(link: KnowledgeGraphEdge & { width: number }): number {\n    if (!this.hoveredNodeId && !this.selectedNodeId) return link.width;\n    return this.highlightedLinkIds.has(link.id)\n      ? Math.max(link.width * 2, 2)\n      : Math.max(link.width * 0.5, 0.4);\n  }\n\n  private colorForType(type: string | null | undefined, index: number): string {\n    const seed = type\n      ? type.split(\"\").reduce((sum, char) => sum + char.charCodeAt(0), 0)\n      : index;\n    return GRAPH_COLORS[seed % GRAPH_COLORS.length];\n  }\n\n  private nodeTooltip(node: KnowledgeGraphNode): string {\n    const label = this.escapeHtml(node.label || node.id);\n    const type = node.type ? this.escapeHtml(node.type) : \"entity\";\n    const degree = typeof node.degree === \"number\" ? node.degree : null;\n    const sourceCount = typeof node.sourceCount === \"number\" ? node.sourceCount : null;\n    const description = this.truncateDescription(node.description);\n\n    const rows = [\n      `<strong>${label}</strong>`,\n      `Type: ${type}`,\n      degree !== null ? `Connections: ${degree}` : \"\",\n      sourceCount !== null ? `Sources: ${sourceCount}` : \"\",\n      description ? `Summary: ${this.escapeHtml(description)}` : \"\"\n    ];\n\n    return rows.filter(Boolean).join(\"<br>\");\n  }\n\n  private edgeTooltip(edge: KnowledgeGraphEdge): string {\n    const label = this.escapeHtml(edge.label || \"relationship\");\n    const source = this.escapeHtml(this.resolveEndpointLabel(edge.source));\n    const target = this.escapeHtml(this.resolveEndpointLabel(edge.target));\n    const weight =\n      typeof edge.weight === \"number\" ? `Weight: ${edge.weight}` : \"\";\n\n    return [\n      `<strong>${label}</strong>`,\n      `${source} -> ${target}`,\n      weight\n    ].filter(Boolean).join(\"<br>\");\n  }\n\n  private truncateDescription(description: string | null | undefined): string {\n    if (!description) return \"\";\n\n    const normalized = description\n      .split(\"<SEP>\")\n      .map(part => part.trim())\n      .filter(Boolean)[0] ?? description.trim();\n\n    return normalized.length > 180\n      ? `${normalized.slice(0, 177)}...`\n      : normalized;\n  }\n\n  private resolveEndpointLabel(value: unknown): string {\n    if (typeof value === \"string\" || typeof value === \"number\") {\n      return String(value);\n    }\n\n    if (value && typeof value === \"object\") {\n      const candidate = value as Record<string, unknown>;\n      const resolved =\n        candidate[\"label\"] ??\n        candidate[\"id\"] ??\n        candidate[\"name\"] ??\n        \"\";\n\n      return typeof resolved === \"string\" || typeof resolved === \"number\"\n        ? String(resolved)\n        : \"\";\n    }\n\n    return \"\";\n  }\n\n  private escapeHtml(value: unknown): string {\n    return String(value ?? \"\")\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#039;\");\n  }\n}\n","import { ChangeDetectorRef, Component, ElementRef, Inject, Input, OnChanges, OnDestroy, OnInit, Optional, SimpleChanges, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { CHAT_WIDGET_CONFIG } from './config.token';\nimport {\n  ChatHistoryMessage,\n  ChatListItem,\n  ChatWidgetConfig,\n  CitationClickEvent,\n  KnowledgeGraphResponse,\n  KnowledgeGraphViewMode,\n  RagCitation,\n  ResolvedChatWidgetConfig\n} from './types';\nimport { resolveConfig } from './config';\nimport { defaultConfigValues } from './defaults';\n\nimport { ChatWidgetService } from './chat-widget.service';\nimport { KnowledgeGraphRenderer } from './knowledge-graph-renderer';\n\n@Component({\n  selector: 'chat-widget',\n  templateUrl: './chat-widget.component.html',\n  styleUrls: ['./chat-widget.component.css']\n})\nexport class ChatWidgetComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() config!: ChatWidgetConfig;\n  @ViewChild('chatScroll') private chatScroll?: ElementRef<HTMLElement>;\n  @ViewChild('graph2dContainer') private graph2dContainer?: ElementRef<HTMLElement>;\n  @ViewChild('graph3dContainer') private graph3dContainer?: ElementRef<HTMLElement>;\n  \n  resolvedConfig!: ResolvedChatWidgetConfig;\n  \n  isOpen = false;\n  isDropdownOpen = false;\n  sourcePanelOpen = false;\n  knowledgeGraphOpen = false;\n  myChatsOpen = false;\n  isStreaming = false;\n  isGraphLoading = false;\n  mobileSidebarOpen = false;\n  activeChatMenuId: string | null = null;\n  renameDialogOpen = false;\n  renameChatId: string | null = null;\n  renameTitle = '';\n  selectedCitation: RagCitation | null = null;\n  documentPreviewOpen = false;\n  knowledgeGraphData: KnowledgeGraphResponse | null = null;\n  knowledgeGraphError = '';\n  graphViewMode: KnowledgeGraphViewMode = '2d';\n  graphNodeLimit = 500;\n  graphEdgeLimit = 1000;\n  selectedGraphNode: KnowledgeGraphResponse['nodes'][number] | null = null;\n  private activeKnowledgeGraphDocumentUuid: string | null = null;\n  private activeStreamAbort?: AbortController;\n  private readonly graphRenderer = new KnowledgeGraphRenderer();\n  private readonly handleWindowResize = () => this.resizeKnowledgeGraph();\n  \n  chats: ChatListItem[] = [];\n  pinnedChats: ChatListItem[] = [];\n  messages: ChatHistoryMessage[] = [];\n  currentChatId: string | null = null;\n  isLoading = false;\n  resolvedUserInfo: any = null;\n  \n  inputText = '';\n  chatSearch = '';\n  widgetStyleVars: Record<string, string | number> = {};\n  private initialized = false;\n  \n  constructor(\n    @Optional() @Inject(CHAT_WIDGET_CONFIG) private rootConfig: ChatWidgetConfig,\n    private chatService: ChatWidgetService,\n    private cdr: ChangeDetectorRef,\n    private sanitizer: DomSanitizer\n  ) {}\n  \n  async ngOnInit() {\n    this.initialized = true;\n    this.graphRenderer.setSelectionListener((node) => {\n      this.selectedGraphNode = node;\n      this.syncView();\n    });\n    window.addEventListener('resize', this.handleWindowResize);\n    await this.applyResolvedConfig(true);\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleWindowResize);\n    this.graphRenderer.destroy();\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (!this.initialized || !changes['config']) return;\n    await this.applyResolvedConfig(false);\n  }\n\n  private async applyResolvedConfig(loadData: boolean) {\n    const mergedConfig = { ...(this.rootConfig || {}), ...(this.config || {}) };\n    this.resolvedConfig = resolveConfig(mergedConfig);\n    this.widgetStyleVars = this.buildThemeStyleVars();\n    this.graphViewMode = this.resolvedConfig.knowledgeGraph.defaultViewMode ?? '2d';\n    this.graphNodeLimit = this.clampGraphNodes(this.resolvedConfig.knowledgeGraph.maxNodes ?? 500);\n    this.graphEdgeLimit = this.clampGraphEdges(this.resolvedConfig.knowledgeGraph.maxEdges ?? 1000);\n    \n    if (this.resolvedConfig.userInfo) {\n      try {\n        this.resolvedUserInfo = await this.resolvedConfig.userInfo();\n        this.syncView();\n      } catch (e) {\n        console.error('Failed to resolve user info', e);\n      }\n    }\n    \n    this.chatService.setConfig(this.resolvedConfig);\n    \n    if (loadData && this.resolvedConfig.displayMode === 'embedded') {\n      await this.loadInitialData();\n    }\n  }\n\n  get direction(): 'ltr' | 'rtl' {\n    return this.isRtl ? 'rtl' : 'ltr';\n  }\n\n  get isRtl(): boolean {\n    const locale = this.config?.locale ?? this.rootConfig?.locale ?? document.documentElement.lang ?? this.resolvedConfig?.locale ?? '';\n    const direction = document.documentElement.dir || document.body?.dir || '';\n    return /^(ar|he|fa|ur)(-|$)/i.test(locale) || direction.toLowerCase() === 'rtl';\n  }\n\n  get userAvatarUrl(): string {\n    return this.resolvedUserInfo?.avatar || '';\n  }\n\n  get hasUserAvatar(): boolean {\n    return Boolean(this.userAvatarUrl);\n  }\n\n  get userInitials(): string {\n    const firstName = (this.resolvedUserInfo?.firstName || '').trim();\n    const lastName = (this.resolvedUserInfo?.lastName || '').trim();\n    const fallbackParts = this.welcomeName.split(/\\s+/).filter(Boolean);\n    const firstInitial = firstName[0] || fallbackParts[0]?.[0] || 'U';\n    const lastInitial = lastName[0] || fallbackParts[fallbackParts.length - 1]?.[0] || '';\n    const initials = `${firstInitial}${lastInitial && lastInitial !== firstInitial ? lastInitial : ''}`;\n    return initials.slice(0, 2).toUpperCase();\n  }\n\n  async loadInitialData() {\n    this.isLoading = true;\n    try {\n      const allChats = await this.chatService.loadChats();\n      this.chats = allChats.filter(c => !c.pinned);\n      this.pinnedChats = allChats.filter(c => c.pinned);\n      this.syncView();\n      \n      if (allChats.length > 0 && this.resolvedConfig.rag?.loadHistoryOnOpen) {\n        await this.selectChat(allChats[0].chatId);\n      }\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n\n  get visibleChats(): ChatListItem[] {\n    return this.filterChats(this.chats);\n  }\n\n  get visiblePinnedChats(): ChatListItem[] {\n    return this.filterChats(this.pinnedChats);\n  }\n\n  get assistantCitations(): RagCitation[] {\n    const assistantMessages = this.messages.filter(message => message.role === 'assistant' && message.citations?.length);\n    return assistantMessages[assistantMessages.length - 1]?.citations ?? [];\n  }\n\n  get hasMessages(): boolean {\n    return this.messages.length > 0;\n  }\n\n  get canSend(): boolean {\n    return Boolean(this.inputText.trim()) && !this.isLoading;\n  }\n\n  get shouldStreamResponses(): boolean {\n    return Boolean(this.resolvedConfig.endpoints.askStream);\n  }\n\n  get hasKnowledgeGraphFeature(): boolean {\n    return Boolean(\n      this.resolvedConfig?.knowledgeGraph?.enabled &&\n      this.resolvedConfig?.endpoints?.knowledgeGraph\n    );\n  }\n\n  get knowledgeGraphTitle(): string {\n    return this.resolvedConfig.knowledgeGraph.title || 'Knowledge Graph';\n  }\n\n  get graphHasRenderableData(): boolean {\n    return Boolean(\n      this.knowledgeGraphData &&\n      this.knowledgeGraphData.kgStatus === 'ready' &&\n      this.knowledgeGraphData.nodes.length\n    );\n  }\n\n  get topKnowledgeGraphNodes() {\n    return [...(this.knowledgeGraphData?.nodes ?? [])]\n      .sort((left, right) => (right.degree ?? 0) - (left.degree ?? 0))\n      .slice(0, 6);\n  }\n\n  get welcomeName(): string {\n    const firstName = this.resolvedUserInfo?.firstName;\n    const lastName = this.resolvedUserInfo?.lastName;\n    return [firstName, lastName].filter(Boolean).join(' ') || 'Aziz Khalidy';\n  }\n\n  get welcomeMessage(): string {\n    if (this.resolvedConfig.welcomeMessage !== defaultConfigValues.welcomeMessage) {\n      return this.resolvedConfig.welcomeMessage;\n    }\n    if (this.isRtl) {\n      return `مرحباً ${this.welcomeName}، يمكنني مساعدتك في العثور على معلومات من نظام إدارة المعرفة. كيف يمكنني مساعدتك؟`;\n    }\n    return `Welcome ${this.welcomeName}, I can help you find information from knowledge Management System. How can I assist you?`;\n  }\n\n  get inputPlaceholderText(): string {\n    if (!this.isRtl || this.resolvedConfig.inputPlaceholder !== defaultConfigValues.inputPlaceholder) {\n      return this.resolvedConfig.inputPlaceholder;\n    }\n    return 'اسأل مساعد المعرفة';\n  }\n\n  get subtitleText(): string {\n    if (!this.isRtl || this.resolvedConfig.subtitle !== defaultConfigValues.subtitle) {\n      return this.resolvedConfig.subtitle;\n    }\n    return 'يتم إنشاء الإجابات بناءً على صلاحيات الوصول';\n  }\n\n  get launcherAriaLabelText(): string {\n    if (!this.isRtl || this.resolvedConfig.launcherAriaLabel !== defaultConfigValues.launcherAriaLabel) {\n      return this.resolvedConfig.launcherAriaLabel;\n    }\n    return 'فتح مساعد المحادثة';\n  }\n\n  get closeAriaLabelText(): string {\n    if (!this.isRtl || this.resolvedConfig.closeAriaLabel !== defaultConfigValues.closeAriaLabel) {\n      return this.resolvedConfig.closeAriaLabel;\n    }\n    return 'إغلاق مساعد المحادثة';\n  }\n\n  get initialSuggestionsText(): string[] {\n    if (!this.isRtl || this.resolvedConfig.initialSuggestions !== defaultConfigValues.initialSuggestions) {\n      return this.resolvedConfig.initialSuggestions;\n    }\n    return [\n      'ما هي المؤشرات التي تعكس إنجازات رؤية المملكة؟',\n      'دراسات حالة لمبادرات عقارية للنمو الاقتصادي',\n      'دراسة تجربة المستخدم للبوابة الخارجية للوزارة'\n    ];\n  }\n\n  label(key: 'newChat' | 'myChats' | 'openAssistant' | 'sourcesUsed' | 'showAll' | 'stopResponse' | 'editChatName' | 'cancel' | 'save' | 'allSources' | 'documentsReferenced' | 'requestError' | 'emptyResponse' | 'knowledgeGraph' | 'graph2d' | 'graph3d' | 'graphLoading' | 'graphRefresh' | 'graphClose' | 'graphNodes' | 'graphEdges' | 'graphStatus' | 'graphNotReady' | 'graphNoData' | 'graphApply' | 'graphFocus' | 'graphResetFocus' | 'graphDescription' | 'graphType' | 'graphSources' | 'graphConnections' | 'searchChat' | 'recentActivity' | 'pinnedCollections' | 'searching'): string {\n    const ar: Record<string, string> = {\n      newChat: 'محادثة جديدة',\n      myChats: 'محادثاتي',\n      openAssistant: 'فتح مساعد المعرفة',\n      sourcesUsed: 'المصادر المستخدمة',\n      showAll: 'عرض الكل',\n      stopResponse: 'إيقاف الإجابة',\n      editChatName: 'تعديل اسم المحادثة',\n      cancel: 'إلغاء',\n      save: 'حفظ',\n      allSources: 'كل المصادر المستخدمة',\n      documentsReferenced: 'مستندات تمت الإشارة إليها',\n      requestError: 'عذراً، حدث خطأ. يرجى المحاولة مرة أخرى.',\n      emptyResponse: 'عذراً، لم أتمكن من إنشاء إجابة. يرجى المحاولة مرة أخرى.',\n      knowledgeGraph: 'الرسم البياني المعرفي',\n      graph2d: 'ثنائي الأبعاد',\n      graph3d: 'ثلاثي الأبعاد',\n      graphLoading: 'جار تحميل الرسم البياني...',\n      graphRefresh: 'تحديث',\n      graphClose: 'إغلاق',\n      graphNodes: 'العقد',\n      graphEdges: 'العلاقات',\n      graphStatus: 'الحالة',\n      graphNotReady: 'لم يصبح الرسم البياني جاهزاً بعد.',\n      graphNoData: 'لا توجد بيانات رسم بياني متاحة لهذا المستند.',\n      graphApply: 'تطبيق',\n      graphFocus: 'العنصر المحدد',\n      graphResetFocus: 'إعادة التعيين',\n      graphDescription: 'الوصف',\n      graphType: 'النوع',\n      graphSources: 'المصادر',\n      graphConnections: 'الاتصالات',\n      searchChat: 'البحث في المحادثات',\n      recentActivity: 'النشاط الأخير',\n      pinnedCollections: 'المجموعات المثبتة',\n      searching: 'جاري البحث...'\n    };\n    const en: Record<string, string> = {\n      newChat: 'New Chat',\n      myChats: 'My Chats',\n      openAssistant: 'Open Knowledge Assistant',\n      sourcesUsed: 'Sources Used',\n      showAll: 'Show All',\n      stopResponse: 'Stop response',\n      editChatName: 'Edit Chat Name',\n      cancel: 'Cancel',\n      save: 'Save',\n      allSources: 'All Sources Used',\n      documentsReferenced: 'documents are referenced',\n      requestError: 'Sorry, I encountered an error. Please try again.',\n      emptyResponse: 'Sorry, I could not generate a response. Please try again.',\n      knowledgeGraph: 'Knowledge Graph',\n      graph2d: '2D',\n      graph3d: '3D',\n      graphLoading: 'Loading graph...',\n      graphRefresh: 'Refresh',\n      graphClose: 'Close',\n      graphNodes: 'Nodes',\n      graphEdges: 'Edges',\n      graphStatus: 'Status',\n      graphNotReady: 'The graph is not ready yet for this document.',\n      graphNoData: 'No graph data is available for this document.',\n      graphApply: 'Apply',\n      graphFocus: 'Selected node',\n      graphResetFocus: 'Reset focus',\n      graphDescription: 'Description',\n      graphType: 'Type',\n      graphSources: 'Sources',\n      graphConnections: 'Connections',\n      searchChat: 'Search Chat',\n      recentActivity: 'Recent Activity',\n      pinnedCollections: 'Pinned Collections',\n      searching: 'Searching...'\n    };\n    return (this.isRtl ? ar : en)[key as string] ?? key;\n  }\n\n  async openKnowledgeGraph(documentUuid?: string) {\n    if (!this.hasKnowledgeGraphFeature || this.isGraphLoading) return;\n\n    const resolvedDocumentUuid = documentUuid?.trim() || this.getKnowledgeGraphDocumentUuid();\n    if (!resolvedDocumentUuid) return;\n\n    if (this.activeKnowledgeGraphDocumentUuid !== resolvedDocumentUuid) {\n      this.knowledgeGraphData = null;\n    }\n    this.activeKnowledgeGraphDocumentUuid = resolvedDocumentUuid;\n    this.knowledgeGraphOpen = true;\n    this.knowledgeGraphError = '';\n    this.syncView();\n    await this.loadKnowledgeGraph();\n  }\n\n  closeKnowledgeGraph() {\n    this.knowledgeGraphOpen = false;\n    this.graphRenderer.destroy();\n    this.selectedGraphNode = null;\n    this.activeKnowledgeGraphDocumentUuid = null;\n    this.syncView();\n  }\n\n  async setKnowledgeGraphView(mode: KnowledgeGraphViewMode) {\n    if (this.graphViewMode === mode) return;\n    this.graphViewMode = mode;\n    this.syncView();\n    await this.renderKnowledgeGraph();\n  }\n\n  async refreshKnowledgeGraph() {\n    if (!this.knowledgeGraphOpen) {\n      await this.openKnowledgeGraph();\n      return;\n    }\n\n    await this.loadKnowledgeGraph();\n  }\n\n  async applyGraphLimits() {\n    this.graphNodeLimit = this.clampGraphNodes(this.graphNodeLimit);\n    this.graphEdgeLimit = this.clampGraphEdges(this.graphEdgeLimit);\n    await this.loadKnowledgeGraph();\n  }\n\n  resetGraphSelection() {\n    this.graphRenderer.resetSelection();\n  }\n\n  selectedGraphDescription(): string {\n    const description = this.selectedGraphNode?.description;\n    if (!description) return '';\n\n    return description\n      .split('<SEP>')\n      .map(part => part.trim())\n      .filter(Boolean)[0] ?? description;\n  }\n\n  async selectChat(chatId: string) {\n    this.currentChatId = chatId;\n    this.messages = [];\n    this.isDropdownOpen = false;\n    this.myChatsOpen = false;\n    this.mobileSidebarOpen = false;\n    this.activeChatMenuId = null;\n    this.isLoading = true;\n    this.syncView();\n    try {\n      this.messages = await this.chatService.loadHistory(chatId);\n      this.sourcePanelOpen = Boolean(this.assistantCitations.length);\n      this.syncView();\n      this.scrollMessagesToBottom();\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n\n  startNewChat() {\n    this.cancelStreaming();\n    this.currentChatId = null;\n    this.messages = [];\n    this.inputText = '';\n    this.isDropdownOpen = false;\n    this.sourcePanelOpen = false;\n    this.myChatsOpen = false;\n    this.mobileSidebarOpen = false;\n    this.activeChatMenuId = null;\n    this.syncView();\n  }\n\n  toggleWidget() {\n    this.isOpen = !this.isOpen;\n    this.isDropdownOpen = false;\n    this.myChatsOpen = false;\n    if (this.isOpen) {\n      this.resolvedConfig.onOpen?.();\n    } else {\n      this.resolvedConfig.onClose?.();\n    }\n  }\n  \n  toggleDropdown() {\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n\n  openMyChats() {\n    this.isDropdownOpen = false;\n    this.myChatsOpen = true;\n    if (!this.chats.length && !this.pinnedChats.length) {\n      this.loadInitialData();\n    }\n  }\n\n  toggleMobileSidebar() {\n    this.mobileSidebarOpen = !this.mobileSidebarOpen;\n  }\n\n  toggleChatMenu(chatId: string, event: MouseEvent) {\n    event.stopPropagation();\n    this.activeChatMenuId = this.activeChatMenuId === chatId ? null : chatId;\n  }\n\n  openRenameDialog(chat: ChatListItem, event?: MouseEvent) {\n    event?.stopPropagation();\n    this.renameChatId = chat.chatId;\n    this.renameTitle = chat.title;\n    this.renameDialogOpen = true;\n    this.activeChatMenuId = null;\n    this.syncView();\n  }\n\n  closeRenameDialog() {\n    this.renameDialogOpen = false;\n    this.renameChatId = null;\n    this.renameTitle = '';\n  }\n\n  async submitRename() {\n    const title = this.renameTitle.trim();\n    if (!this.renameChatId || !title || this.isLoading) return;\n\n    this.isLoading = true;\n    try {\n      const updatedChat = await this.chatService.updateChat(this.renameChatId, { title });\n      this.applyChatUpdate(updatedChat ?? { chatId: this.renameChatId, title });\n      this.closeRenameDialog();\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n\n  async togglePinChat(chat: ChatListItem, event?: MouseEvent) {\n    event?.stopPropagation();\n    this.activeChatMenuId = null;\n    this.isLoading = true;\n\n    try {\n      const updatedChat = await this.chatService.updateChat(chat.chatId, {\n        title: chat.title,\n        pinned: !chat.pinned\n      });\n      this.applyChatUpdate(updatedChat ?? { ...chat, pinned: !chat.pinned });\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n\n  async deleteChat(chat: ChatListItem, event?: MouseEvent) {\n    event?.stopPropagation();\n    this.activeChatMenuId = null;\n    this.isLoading = true;\n\n    try {\n      await this.chatService.deleteChat(chat.chatId);\n      this.chats = this.chats.filter(item => item.chatId !== chat.chatId);\n      this.pinnedChats = this.pinnedChats.filter(item => item.chatId !== chat.chatId);\n\n      if (this.currentChatId === chat.chatId) {\n        this.currentChatId = null;\n        this.messages = [];\n        this.sourcePanelOpen = false;;\n      }\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n  \n  openAssistantPage() {\n    this.isDropdownOpen = false;\n    if (this.resolvedConfig.onOpenAssistantPage) {\n      this.resolvedConfig.onOpenAssistantPage();\n      return;\n    }\n\n    if (this.resolvedConfig.assistantPageUrl) {\n      window.location.href = this.resolvedConfig.assistantPageUrl;\n    }\n  }\n\n  setInput(text: string) {\n    this.inputText = text;\n    this.sendMessage();\n  }\n\n  async sendMessage() {\n    if (!this.canSend) return;\n    \n    const userMessage = this.inputText.trim();\n    this.inputText = '';\n    \n    const userChatMessage: ChatHistoryMessage = { role: 'user', text: userMessage };\n    this.messages.push(userChatMessage);\n    this.isLoading = true;\n    this.syncView();\n    this.scrollMessagesToBottom();\n    \n    try {\n      let chatId = this.currentChatId;\n      if (!chatId) {\n        chatId = this.resolvedConfig.rag?.chatIdFactory?.() || crypto.randomUUID?.() || Date.now().toString(); \n        this.currentChatId = chatId;\n        await this.chatService.createChat(chatId, userMessage.slice(0, 80));\n      }\n\n      /*       if (!this.shouldStreamResponses) {\n        const assistantMessage: ChatHistoryMessage = {\n          role: 'assistant',\n          text: '',\n          citations: []\n        };\n        this.messages.push(assistantMessage);\n        \n        const fallbackResponse = await this.chatService.sendMessage(chatId, userMessage);\n        if (fallbackResponse) {\n          assistantMessage.text = fallbackResponse.answer || this.label('emptyResponse');\n          assistantMessage.citations = fallbackResponse.citations;\n          this.syncView();\n        } else {\n          assistantMessage.text = this.label('emptyResponse');\n        }\n        await this.refreshChats();\n        return;\n      } */\nconsole.log(\"calling this endpoint\");\n\n      await this.streamAssistantResponse(chatId, userMessage, userChatMessage);\n    } catch (e) {\n      if (e instanceof DOMException && e.name === 'AbortError') {\n        return;\n      }\n      console.error(e);\n      if (e instanceof Error) {\n        this.resolvedConfig.onError?.(e);\n      }\n      this.messages.push({ role: 'assistant', text: this.label('requestError') });\n    } finally {\n      this.isLoading = false;\n      this.syncView();\n    }\n  }\n\n  toggleSourcesPanel() {\n    this.sourcePanelOpen = !this.sourcePanelOpen;\n  }\n\n  cancelStreaming() {\n    this.activeStreamAbort?.abort();\n    this.activeStreamAbort = undefined;\n    this.isStreaming = false;\n  }\n\n  citationTitle(citation: RagCitation): string {\n    return citation.documentName || 'Vision Realization Annual Report 2024';\n  }\n\n  citationScore(citation: RagCitation): string {\n    if (typeof citation.score !== 'number') return '';\n    const score = citation.score <= 1 ? citation.score * 100 : citation.score;\n    const label = score >= 70 ? 'High' : score >= 45 ? 'Medium' : 'Low';\n    return `${label} ${Math.round(score)}%`;\n  }\n\n  citationSnippet(citation: RagCitation): string {\n    const text = citation.text || '';\n    const parts = text.split('|').map(part => part.trim()).filter(Boolean);\n    return parts.length > 1 ? parts.slice(1).join(' | ') : text || 'Here is the relevant text the answer was based on.';\n  }\n\n  async openCitationPreview(citation: RagCitation) {\n    if (this.resolvedConfig.onCitationClick) {\n      try {\n        await this.resolvedConfig.onCitationClick(this.toCitationClickEvent(citation));\n      } catch (error) {\n        const citationError = error instanceof Error\n          ? error\n          : new Error('Citation navigation failed.');\n        this.resolvedConfig.onError?.(citationError);\n        console.error('Citation navigation failed', citationError);\n      }\n      return;\n    }\n    this.selectedCitation = citation;\n    this.documentPreviewOpen = true;\n    this.syncView();\n  }\n\n  citationDocumentUuid(citation: RagCitation): string | null {\n    return citation.documentUuid?.trim() || null;\n  }\n\n  canOpenCitationKnowledgeGraph(citation: RagCitation): boolean {\n    return this.hasKnowledgeGraphFeature && Boolean(this.citationDocumentUuid(citation));\n  }\n\n  async openCitationKnowledgeGraph(citation: RagCitation, event: Event) {\n    event.stopPropagation();\n    const documentUuid = this.citationDocumentUuid(citation);\n    if (!documentUuid) return;\n\n    await this.openKnowledgeGraph(documentUuid);\n  }\n\n  private toCitationClickEvent(citation: RagCitation): CitationClickEvent {\n    return {\n      ...citation,\n      documentId: citation.documentUuid ?? citation.documentName ?? citation.id ?? '',\n      pageNumber: citation.pageNumber ?? 1,\n      text: citation.text ?? ''\n    };\n  }\n\n  async submitMessageFeedback(message: ChatHistoryMessage, isLike: boolean) {\n    if (!this.currentChatId || message.role !== 'assistant') return;\n    if (!message.messageId) {\n      this.resolvedConfig.onError?.(new Error('Feedback requires assistant message_id from the stream metadata.'));\n      return;\n    }\n    const previous = message.isLike;\n    message.isLike = isLike;\n    this.syncView();\n\n    try {\n      await this.chatService.submitFeedback(this.currentChatId, message, isLike);\n    } catch (error) {\n      message.isLike = previous;\n      this.syncView();\n      if (error instanceof Error) this.resolvedConfig.onError?.(error);\n    }\n  }\n\n  closeCitationPreview() {\n    this.documentPreviewOpen = false;\n    this.selectedCitation = null;\n  }\n\n  selectedCitationTitle(): string {\n    return this.selectedCitation ? this.citationTitle(this.selectedCitation) : 'Document';\n  }\n\n  selectedCitationUrl(): string {\n    if (!this.selectedCitation) return '';\n    const filename = this.selectedCitation.documentName || '';\n    return filename ? this.chatService.resolveDocumentUrl(filename, this.selectedCitation.pageNumber) : '';\n  }\n\n  selectedCitationSafeUrl(): SafeResourceUrl | null {\n    const url = this.selectedCitationUrl();\n    return url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null;\n  }\n\n  selectedCitationPage(): number | null {\n    return this.selectedCitation?.pageNumber ?? null;\n  }\n\n  renderMarkdown(text: string): string {\n    const escaped = this.escapeHtml(text);\n    const withInline = this.applyInlineMarkdown(escaped);\n\n    return withInline\n      .split(/\\n{2,}/)\n      .map(block => this.renderMarkdownBlock(block))\n      .join('');\n  }\n\n  private renderMarkdownBlock(block: string): string {\n    const lines = block.split('\\n').filter(line => line.trim().length > 0);\n    if (!lines.length) return '';\n\n    const tableStartIndex = this.findMarkdownTableStart(lines);\n    if (tableStartIndex >= 0) {\n      const tableResult = this.renderMarkdownTableAt(lines, tableStartIndex);\n      if (tableResult) {\n        const before = this.renderPlainMarkdownLines(lines.slice(0, tableStartIndex));\n        const after = this.renderMarkdownBlock(lines.slice(tableResult.nextIndex).join('\\n'));\n        return `${before}${tableResult.html}${after}`;\n      }\n    }\n\n    const headingLineIndex = lines.findIndex(line => /^(#{1,6})\\s+/.test(line.trim()));\n    if (headingLineIndex > 0) {\n      const before = this.renderPlainMarkdownLines(lines.slice(0, headingLineIndex));\n      const after = this.renderMarkdownBlock(lines.slice(headingLineIndex).join('\\n'));\n      return `${before}${after}`;\n    }\n\n    return this.renderPlainMarkdownLines(lines);\n  }\n\n  private renderPlainMarkdownLines(lines: string[]): string {\n    if (!lines.length) return '';\n\n    const headingMatch = lines[0].match(/^(#{1,6})\\s+(.+)$/);\n    if (headingMatch) {\n      const level = Math.min(headingMatch[1].length + 1, 6);\n      return `<h${level}>${headingMatch[2]}</h${level}>${this.renderMarkdownBlock(lines.slice(1).join('\\n'))}`;\n    }\n\n    const isList = lines.every(line => /^\\s*(?:[-*]|\\d+\\.)\\s+/.test(line));\n    if (isList) {\n      const items = lines\n        .map(line => line.replace(/^\\s*(?:[-*]|\\d+\\.)\\s+/, ''))\n        .map(line => `<li>${line}</li>`)\n        .join('');\n      return `<ol>${items}</ol>`;\n    }\n\n    return `<p>${lines.join('<br>')}</p>`;\n  }\n\n  private findMarkdownTableStart(lines: string[]): number {\n    return lines.findIndex((line, index) => {\n      if (!line.includes('|')) return false;\n      if (lines[index + 1] && this.isMarkdownTableDivider(lines[index + 1])) return true;\n\n      const currentCells = this.splitMarkdownTableRow(line);\n      const nextCells = lines[index + 1]?.includes('|')\n        ? this.splitMarkdownTableRow(lines[index + 1])\n        : [];\n\n      return currentCells.length >= 2 && nextCells.length >= 2;\n    });\n  }\n\n  private renderMarkdownTableAt(lines: string[], startIndex: number): { html: string; nextIndex: number } | null {\n    if (lines.length - startIndex < 2) return null;\n\n    const headerCells = this.splitMarkdownTableRow(lines[startIndex]);\n    const hasDivider = Boolean(lines[startIndex + 1] && this.isMarkdownTableDivider(lines[startIndex + 1]));\n    const bodyStartIndex = hasDivider ? startIndex + 2 : startIndex + 1;\n    const bodyLines: string[] = [];\n\n    for (let index = bodyStartIndex; index < lines.length; index++) {\n      if (!lines[index].includes('|') || this.splitMarkdownTableRow(lines[index]).length < 2) {\n        break;\n      }\n      bodyLines.push(lines[index]);\n    }\n\n    const bodyRows = lines\n      .slice(bodyStartIndex, bodyStartIndex + bodyLines.length)\n      .map(line => this.normalizeTableRow(this.splitMarkdownTableRow(line), headerCells.length));\n\n    if (!headerCells.length || !bodyRows.length) return null;\n\n    const head = headerCells.map(cell => `<th>${cell}</th>`).join('');\n    const body = bodyRows\n      .map(row => `<tr>${row.map(cell => `<td>${cell}</td>`).join('')}</tr>`)\n      .join('');\n\n    return {\n      html: `<div class=\"kp-markdown-table-wrap\"><table><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table></div>`,\n      nextIndex: bodyStartIndex + bodyLines.length\n    };\n  }\n\n  private isMarkdownTableDivider(line: string): boolean {\n    return /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(line);\n  }\n\n  private splitMarkdownTableRow(line: string): string[] {\n    return line\n      .trim()\n      .replace(/^\\|/, '')\n      .replace(/\\|$/, '')\n      .split('|')\n      .map(cell => cell.trim());\n  }\n\n  private normalizeTableRow(row: string[], columnCount: number): string[] {\n    if (row.length === columnCount) return row;\n    if (row.length > columnCount) {\n      return [...row.slice(0, columnCount - 1), row.slice(columnCount - 1).join(' | ')];\n    }\n    return [...row, ...Array.from({ length: columnCount - row.length }, () => '')];\n  }\n\n  private applyInlineMarkdown(value: string): string {\n    return value\n      .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n      .replace(/(^|[\\s\\u0600-\\u06ff])\\*(?!\\s)([^*\\n]+?\\S)\\*(?=$|[\\s:،؛,.)])/g, '$1<strong>$2</strong>')\n      .replace(/\\[(\\d+)\\]/g, '<sup>[$1]</sup>');\n  }\n\n  private async refreshChats() {\n    const allChats = await this.chatService.loadChats();\n    this.chats = allChats.filter(c => !c.pinned);\n    this.pinnedChats = allChats.filter(c => c.pinned);\n    this.syncView();\n  }\n\n  private async streamAssistantResponse(chatId: string, userMessage: string, userChatMessage: ChatHistoryMessage) {\n    const assistantMessage: ChatHistoryMessage = {\n      role: 'assistant',\n      text: '',\n      citations: []\n    };\n    this.messages.push(assistantMessage);\n    this.isStreaming = true;\n    this.activeStreamAbort = new AbortController();\n    this.syncView();\n    this.scrollMessagesToBottom();\n\n    try {\n      await this.chatService.streamMessage(chatId, userMessage, {\n        signal: this.activeStreamAbort.signal,\n        onAnswer: (content) => {\n          assistantMessage.text += content;\n          this.syncView();\n          this.scrollMessagesToBottom();\n        },\n        onReferences: (citations) => {\n          assistantMessage.citations = citations;\n          this.sourcePanelOpen = citations.length > 0;\n          this.syncView();\n        },\n        onChunk: (chunk) => {\n          const assistantMessageId = this.extractStreamMessageId(chunk, 'assistant');\n          const userMessageId = this.extractStreamMessageId(chunk, 'user');\n          if (assistantMessageId) {\n            assistantMessage.messageId = assistantMessageId;\n          }\n          if (userMessageId) {\n            userChatMessage.messageId = userMessageId;\n          }\n        }\n      });\n\n      if (!assistantMessage.text.trim()) {\n        assistantMessage.text = this.label('emptyResponse');\n      }\n      await this.refreshChats();\n    } catch (error) {\n      if (!assistantMessage.text.trim() && !assistantMessage.citations?.length) {\n        this.messages = this.messages.filter(message => message !== assistantMessage);\n      }\n      throw error;\n    } finally {\n      this.isStreaming = false;\n      this.activeStreamAbort = undefined;\n      this.syncView();\n    }\n  }\n\n  private extractStreamMessageId(chunk: unknown, role: 'assistant' | 'user'): string | null {\n    if (!chunk || typeof chunk !== 'object') return null;\n    const data = chunk as Record<string, unknown>;\n    const content = data['content'] && typeof data['content'] === 'object'\n      ? data['content'] as Record<string, unknown>\n      : {};\n    const candidates = role === 'assistant'\n      ? [\n          data['assistant_message_id'],\n          data['assistantMessageId'],\n          data['message_id'],\n          data['messageId'],\n          content['assistant_message_id'],\n          content['message_id']\n        ]\n      : [\n          data['user_message_id'],\n          data['userMessageId'],\n          content['user_message_id'],\n          content['userMessageId']\n        ];\n\n    const value = candidates.find(candidate => typeof candidate === 'string' && candidate.trim());\n    return typeof value === 'string' ? value : null;\n  }\n\n  private filterChats(chats: ChatListItem[]): ChatListItem[] {\n    const term = this.chatSearch.trim().toLowerCase();\n    if (!term) return chats;\n    return chats.filter(chat => chat.title.toLowerCase().includes(term));\n  }\n\n  private applyChatUpdate(updatedChat: ChatListItem) {\n    const existing =\n      this.chats.find(chat => chat.chatId === updatedChat.chatId) ??\n      this.pinnedChats.find(chat => chat.chatId === updatedChat.chatId);\n    const mergedChat = { ...existing, ...updatedChat } as ChatListItem;\n\n    this.chats = this.chats.filter(chat => chat.chatId !== mergedChat.chatId);\n    this.pinnedChats = this.pinnedChats.filter(chat => chat.chatId !== mergedChat.chatId);\n\n    if (mergedChat.pinned) {\n      this.pinnedChats = [mergedChat, ...this.pinnedChats];\n    } else {\n      this.chats = [mergedChat, ...this.chats];\n    }\n  }\n\n  private escapeHtml(value: string): string {\n    return value\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  private buildThemeStyleVars(): Record<string, string | number> {\n    const theme = this.resolvedConfig.theme;\n    const isDark = this.isDarkTheme(theme.panelBackground);\n    return {\n      '--kp-ink': theme.text,\n      '--kp-deep': theme.accent,\n      '--kp-teal': theme.accent,\n      '--kp-teal-soft': theme.accentSoft,\n      '--kp-border': theme.borderColor,\n      '--kp-muted': theme.mutedText,\n      '--kp-page': theme.surfaceBackground,\n      '--kp-panel': theme.panelBackground,\n      '--kp-card': theme.panelBackground,\n      '--kp-disabled': isDark ? '#1e293b' : '#e9f2f7',\n      '--kp-user': theme.accentSoft,\n      '--kp-shadow': theme.shadow,\n      '--kp-graph-backdrop': isDark ? 'rgba(2, 6, 23, 0.78)' : 'rgba(15, 23, 42, 0.42)',\n      '--kp-graph-surface': isDark ? '#111827' : '#ffffff',\n      '--kp-graph-sidebar': isDark ? '#0f172a' : '#f5fafc',\n      '--kp-graph-card': isDark ? '#1e293b' : '#ffffff',\n      '--kp-graph-canvas': isDark ? '#0b1120' : '#f8fafc',\n      'font-family': theme.fontFamily,\n      'z-index': theme.zIndex\n    };\n  }\n\n  private isDarkTheme(color: string): boolean {\n    const hex = color.trim().replace('#', '');\n    if (!/^[0-9a-f]{6}$/i.test(hex)) return false;\n    const red = parseInt(hex.slice(0, 2), 16);\n    const green = parseInt(hex.slice(2, 4), 16);\n    const blue = parseInt(hex.slice(4, 6), 16);\n    return (red * 299 + green * 587 + blue * 114) / 1000 < 128;\n  }\n\n  private syncView() {\n    this.cdr.detectChanges();\n  }\n\n  private scrollMessagesToBottom() {\n    setTimeout(() => {\n      const scrollEl = this.chatScroll?.nativeElement;\n      if (!scrollEl) return;\n      scrollEl.scrollTop = scrollEl.scrollHeight;\n    });\n  }\n\n  private getKnowledgeGraphDocumentUuid(): string | null {\n    if (this.activeKnowledgeGraphDocumentUuid) {\n      return this.activeKnowledgeGraphDocumentUuid;\n    }\n\n    const explicit = this.resolvedConfig?.knowledgeGraph?.documentUuid?.trim();\n    if (explicit) return explicit;\n\n    const factoryValue = this.resolvedConfig?.knowledgeGraph?.documentUuidFactory?.();\n    if (typeof factoryValue === 'string' && factoryValue.trim()) {\n      return factoryValue.trim();\n    }\n\n    return this.resolvedConfig?.rag?.sourceUuid?.trim() || null;\n  }\n\n  private async loadKnowledgeGraph() {\n    const documentUuid = this.getKnowledgeGraphDocumentUuid();\n    if (!documentUuid) return;\n\n    this.isGraphLoading = true;\n    this.knowledgeGraphError = '';\n    this.selectedGraphNode = null;\n    this.syncView();\n\n    try {\n      this.knowledgeGraphData = await this.chatService.loadKnowledgeGraph(documentUuid, {\n        maxNodes: this.graphNodeLimit,\n        maxEdges: this.graphEdgeLimit\n      });\n    } catch (error) {\n      this.knowledgeGraphError = error instanceof Error ? error.message : 'Failed to load knowledge graph.';\n      if (error instanceof Error) {\n        this.resolvedConfig.onError?.(error);\n      }\n    } finally {\n      this.isGraphLoading = false;\n      this.syncView();\n    }\n\n    // The canvas is created by *ngIf only after loading ends.\n    await this.renderKnowledgeGraph();\n  }\n\n  private async renderKnowledgeGraph() {\n    if (!this.knowledgeGraphOpen || !this.graphHasRenderableData) return;\n\n    const container = await this.waitForGraphContainer();\n\n    if (!container || !this.knowledgeGraphData) return;\n\n    await this.graphRenderer.render(this.graphViewMode, container, this.knowledgeGraphData, {\n      background: this.isDarkTheme(this.resolvedConfig.theme.panelBackground)\n        ? '#0b1120'\n        : '#f8fafc',\n      dark: this.isDarkTheme(this.resolvedConfig.theme.panelBackground)\n    });\n    this.resizeKnowledgeGraph();\n  }\n\n  private resizeKnowledgeGraph() {\n    if (!this.knowledgeGraphOpen) return;\n\n    const container = this.graphViewMode === '2d'\n      ? this.graph2dContainer?.nativeElement\n      : this.graph3dContainer?.nativeElement;\n\n    if (!container) return;\n    this.graphRenderer.resize(this.graphViewMode, container);\n  }\n\n  private async waitForGraphContainer(): Promise<HTMLElement | undefined> {\n    for (let attempt = 0; attempt < 8; attempt++) {\n      await new Promise(resolve => setTimeout(resolve, attempt === 0 ? 0 : 40));\n      this.syncView();\n\n      const container = this.graphViewMode === '2d'\n        ? this.graph2dContainer?.nativeElement\n        : this.graph3dContainer?.nativeElement;\n\n      if (container && container.clientWidth > 0 && container.clientHeight > 0) {\n        return container;\n      }\n    }\n\n    return this.graphViewMode === '2d'\n      ? this.graph2dContainer?.nativeElement\n      : this.graph3dContainer?.nativeElement;\n  }\n\n  private clampGraphNodes(value: number): number {\n    return Math.min(Math.max(Number(value) || 500, 1), 500);\n  }\n\n  private clampGraphEdges(value: number): number {\n    return Math.min(Math.max(Number(value) || 1000, 1), 1000);\n  }\n}\n","<div\n  *ngIf=\"resolvedConfig.displayMode === 'widget'\"\n  class=\"kp-widget-shell\"\n  [class.kp-widget-open]=\"isOpen\"\n  [class.kp-rtl]=\"isRtl\"\n  [attr.dir]=\"direction\"\n  [ngStyle]=\"widgetStyleVars\"\n>\n  <section class=\"kp-widget-panel\" [attr.aria-hidden]=\"!isOpen\">\n    <header class=\"kp-widget-header\">\n      <div class=\"kp-menu-wrap\">\n        <button type=\"button\" class=\"kp-icon-button kp-edit-button\" (click)=\"startNewChat()\" aria-label=\"New chat\">\n          <lucide-icon name=\"edit\" [size]=\"22\"></lucide-icon>\n        </button>\n        <button type=\"button\" class=\"kp-icon-button kp-menu-button\" (click)=\"toggleDropdown()\" aria-label=\"Open chat menu\">\n          <lucide-icon name=\"chevron-down\" [size]=\"16\"></lucide-icon>\n        </button>\n\n        <div *ngIf=\"isDropdownOpen\" class=\"kp-action-menu\">\n          <button type=\"button\" (click)=\"startNewChat()\">{{ label('newChat') }}</button>\n          <button type=\"button\" (click)=\"openMyChats()\">{{ label('myChats') }}</button>\n          <button type=\"button\" (click)=\"openAssistantPage()\">{{ label('openAssistant') }}</button>\n        </div>\n      </div>\n\n      <button type=\"button\" class=\"kp-icon-button\" (click)=\"toggleWidget()\" [attr.aria-label]=\"closeAriaLabelText\">\n        <lucide-icon name=\"x\" [size]=\"22\"></lucide-icon>\n      </button>\n    </header>\n\n    <div class=\"kp-widget-body\">\n      <div *ngIf=\"myChatsOpen\" class=\"kp-widget-chat-list\">\n        <label class=\"kp-search\">\n          <input type=\"text\" [(ngModel)]=\"chatSearch\" [placeholder]=\"label('searchChat')\" />\n          <lucide-icon name=\"search\" [size]=\"20\"></lucide-icon>\n        </label>\n\n        <section class=\"kp-chat-list-section\">\n          <h3>{{ label('recentActivity') }}</h3>\n          <div\n            *ngFor=\"let chat of visibleChats\"\n            class=\"kp-chat-list-item\"\n            [class.kp-selected]=\"chat.chatId === currentChatId\"\n            [class.kp-menu-open]=\"activeChatMenuId === chat.chatId\"\n          >\n            <button type=\"button\" class=\"kp-chat-title-button\" (click)=\"selectChat(chat.chatId)\">\n              <span>{{ chat.title }}</span>\n            </button>\n            <button type=\"button\" class=\"kp-chat-menu-button\" (click)=\"toggleChatMenu(chat.chatId, $event)\" aria-label=\"Chat actions\">\n              ...\n            </button>\n            <div *ngIf=\"activeChatMenuId === chat.chatId\" class=\"kp-chat-actions\">\n              <button type=\"button\" (click)=\"openRenameDialog(chat, $event)\">Edit</button>\n              <button type=\"button\" (click)=\"togglePinChat(chat, $event)\">{{ chat.pinned ? 'Unpin Chat' : 'Pin Chat' }}</button>\n              <button type=\"button\" (click)=\"deleteChat(chat, $event)\">Delete</button>\n            </div>\n          </div>\n          <p *ngIf=\"!visibleChats.length\" class=\"kp-empty-list\">No recent chats yet.</p>\n        </section>\n\n        <section class=\"kp-chat-list-section\">\n          <h3>{{ label('pinnedCollections') }}</h3>\n          <div\n            *ngFor=\"let chat of visiblePinnedChats\"\n            class=\"kp-chat-list-item\"\n            [class.kp-selected]=\"chat.chatId === currentChatId\"\n            [class.kp-menu-open]=\"activeChatMenuId === chat.chatId\"\n          >\n            <button type=\"button\" class=\"kp-chat-title-button\" (click)=\"selectChat(chat.chatId)\">\n              <span>{{ chat.title }}</span>\n            </button>\n            <button type=\"button\" class=\"kp-chat-menu-button\" (click)=\"toggleChatMenu(chat.chatId, $event)\" aria-label=\"Chat actions\">\n              ...\n            </button>\n            <div *ngIf=\"activeChatMenuId === chat.chatId\" class=\"kp-chat-actions\">\n              <button type=\"button\" (click)=\"openRenameDialog(chat, $event)\">Edit</button>\n              <button type=\"button\" (click)=\"togglePinChat(chat, $event)\">{{ chat.pinned ? 'Unpin Chat' : 'Pin Chat' }}</button>\n              <button type=\"button\" (click)=\"deleteChat(chat, $event)\">Delete</button>\n            </div>\n          </div>\n          <p *ngIf=\"!visiblePinnedChats.length\" class=\"kp-empty-list\">No pinned chats yet.</p>\n        </section>\n      </div>\n\n      <div *ngIf=\"!hasMessages && !myChatsOpen\" class=\"kp-hero\">\n        <span class=\"kp-sparkle kp-sparkle-small\">✦</span>\n        <h2>{{ welcomeMessage }}</h2>\n      </div>\n\n      <div #chatScroll *ngIf=\"hasMessages && !myChatsOpen\" class=\"kp-widget-messages\">\n        <ng-container *ngFor=\"let msg of messages\">\n          <div *ngIf=\"msg.role === 'user'\" class=\"kp-message-row kp-message-user\">\n            <div class=\"kp-user-bubble\">{{ msg.text }}</div>\n            <img *ngIf=\"hasUserAvatar; else widgetUserInitials\" class=\"kp-user-avatar kp-widget-user-avatar\" [src]=\"userAvatarUrl\" alt=\"User\" />\n            <ng-template #widgetUserInitials>\n              <div class=\"kp-user-avatar kp-widget-user-avatar kp-user-initials\" aria-label=\"User initials\">{{ userInitials }}</div>\n            </ng-template>\n          </div>\n\n          <div *ngIf=\"msg.role === 'assistant'\" class=\"kp-message-row kp-message-assistant\">\n            <div class=\"kp-assistant-avatar\">✦</div>\n            <div class=\"kp-widget-assistant-content\">\n              <div class=\"kp-assistant-bubble\">\n                <div *ngIf=\"!msg.text && isStreaming\" class=\"kp-searching\">\n                  <div class=\"kp-sparkles-group\">\n                    <span class=\"kp-sparkle kp-sparkle-1\">✦</span>\n                    <span class=\"kp-sparkle kp-sparkle-2\">✦</span>\n                  </div>\n                  <span class=\"kp-searching-label\">\n                    <span class=\"kp-sparkle kp-sparkle-3\">✦</span> {{ label('searching') }}\n                  </span>\n                </div>\n                <div *ngIf=\"msg.text\" class=\"kp-markdown\" [innerHTML]=\"renderMarkdown(msg.text)\"></div>\n                <div *ngIf=\"msg.citations?.length\" class=\"kp-widget-inline-sources\">\n                  <h3>{{ label('sourcesUsed') }}</h3>\n                  <div class=\"kp-widget-source-list\">\n                    <div *ngFor=\"let citation of msg.citations\" class=\"kp-citation-action\">\n                      <button type=\"button\" class=\"kp-citation-main\" (click)=\"openCitationPreview(citation)\">\n                        <span class=\"kp-source-mark\">✺</span>\n                        <span>{{ citationTitle(citation) }}</span>\n                      </button>\n                      <button\n                        *ngIf=\"canOpenCitationKnowledgeGraph(citation)\"\n                        type=\"button\"\n                        class=\"kp-citation-graph\"\n                        (click)=\"openCitationKnowledgeGraph(citation, $event)\"\n                        [attr.aria-label]=\"'View knowledge graph for ' + citationTitle(citation)\"\n                        title=\"View knowledge graph\"\n                      >\n                        <lucide-icon name=\"network\" [size]=\"17\"></lucide-icon>\n                      </button>\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"kp-feedback-row kp-widget-feedback-row\">\n                <lucide-icon name=\"copy\" [size]=\"16\"></lucide-icon>\n                <button type=\"button\" [class.kp-active]=\"msg.isLike === true\" (click)=\"submitMessageFeedback(msg, true)\" aria-label=\"Like response\">\n                  <lucide-icon name=\"thumbs-up\" [size]=\"16\"></lucide-icon>\n                </button>\n                <button type=\"button\" [class.kp-active]=\"msg.isLike === false\" (click)=\"submitMessageFeedback(msg, false)\" aria-label=\"Dislike response\">\n                  <lucide-icon name=\"thumbs-down\" [size]=\"16\"></lucide-icon>\n                </button>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n\n      <div *ngIf=\"!hasMessages && !myChatsOpen\" class=\"kp-suggestions\">\n        <button *ngFor=\"let suggestion of initialSuggestionsText\" type=\"button\" (click)=\"setInput(suggestion)\">\n          {{ suggestion }}\n        </button>\n      </div>\n    </div>\n\n    <footer class=\"kp-composer-wrap\">\n      <div class=\"kp-composer\">\n        <input\n          type=\"text\"\n          [(ngModel)]=\"inputText\"\n          (keyup.enter)=\"sendMessage()\"\n          [placeholder]=\"inputPlaceholderText\"\n        />\n        <button type=\"button\" class=\"kp-send-button\" [class.kp-ready]=\"canSend\" (click)=\"sendMessage()\" [disabled]=\"!canSend\" aria-label=\"Send message\">\n          <lucide-icon name=\"arrow-right\" [size]=\"20\"></lucide-icon>\n        </button>\n      </div>\n      <p>{{ subtitleText }}</p>\n    </footer>\n  </section>\n\n  <button *ngIf=\"!isOpen\" type=\"button\" class=\"kp-launcher\" (click)=\"toggleWidget()\" [attr.aria-label]=\"launcherAriaLabelText\">\n    <span class=\"kp-launcher-sparkle\">✦</span>\n  </button>\n</div>\n\n<div\n  *ngIf=\"resolvedConfig.displayMode === 'embedded'\"\n  class=\"kp-assistant-page\"\n  [class.kp-document-mode]=\"documentPreviewOpen\"\n  [class.kp-rtl]=\"isRtl\"\n  [attr.dir]=\"direction\"\n  [ngStyle]=\"widgetStyleVars\"\n>\n  <div *ngIf=\"documentPreviewOpen\" class=\"kp-document-preview\">\n    <nav class=\"kp-document-breadcrumb\" aria-label=\"Breadcrumb\">\n      <button type=\"button\" (click)=\"closeCitationPreview()\">Home</button>\n      <span>/</span>\n      <button type=\"button\" (click)=\"closeCitationPreview()\">Knowledge Assistant</button>\n      <span>/</span>\n      <strong>Knowledge</strong>\n    </nav>\n\n    <section class=\"kp-document-preview-card\">\n      <aside class=\"kp-document-meta\">\n        <div class=\"kp-document-icon\">Document</div>\n        <h2>{{ selectedCitationTitle() }}</h2>\n        <p>Internal resource</p>\n        <dl>\n          <div>\n            <dt>Page</dt>\n            <dd>{{ selectedCitationPage() || 'Not specified' }}</dd>\n          </div>\n          <div>\n            <dt>Source</dt>\n            <dd>{{ selectedCitation?.documentName || 'Document' }}</dd>\n          </div>\n        </dl>\n        <div class=\"kp-document-snippet\">\n          <h3>Referenced Text</h3>\n          <p>{{ selectedCitation ? citationSnippet(selectedCitation) : '' }}</p>\n        </div>\n      </aside>\n      <main class=\"kp-document-viewer\">\n        <header>\n          <h2>Document Preview</h2>\n          <button type=\"button\" class=\"kp-icon-button\" (click)=\"closeCitationPreview()\" aria-label=\"Close document preview\">\n            <lucide-icon name=\"x\" [size]=\"18\"></lucide-icon>\n          </button>\n        </header>\n        <iframe *ngIf=\"selectedCitationSafeUrl()\" [src]=\"selectedCitationSafeUrl()\" title=\"Document preview\"></iframe>\n        <div *ngIf=\"!selectedCitationSafeUrl()\" class=\"kp-document-empty\">Document URL is not available for this citation.</div>\n      </main>\n    </section>\n  </div>\n\n  <div *ngIf=\"!documentPreviewOpen\" class=\"kp-mobile-bar\">\n    <button type=\"button\" class=\"kp-mobile-breadcrumb\" (click)=\"toggleMobileSidebar()\">\n      <lucide-icon name=\"menu\" [size]=\"18\"></lucide-icon>\n      Chats\n    </button>\n    <span>{{ currentChatId ? 'Conversation' : 'Knowledge Assistant' }}</span>\n  </div>\n\n  <button *ngIf=\"mobileSidebarOpen && !documentPreviewOpen\" type=\"button\" class=\"kp-sidebar-backdrop\" (click)=\"toggleMobileSidebar()\" aria-label=\"Close chats\"></button>\n\n  <aside *ngIf=\"!documentPreviewOpen\" class=\"kp-sidebar\" [class.kp-sidebar-open]=\"mobileSidebarOpen\">\n    <div class=\"kp-sidebar-head\">\n      <button type=\"button\" class=\"kp-new-chat\" (click)=\"startNewChat()\">+ {{ label('newChat') }}</button>\n      <button type=\"button\" class=\"kp-icon-button kp-sidebar-close\" (click)=\"toggleMobileSidebar()\" aria-label=\"Close chats\">\n        <lucide-icon name=\"x\" [size]=\"18\"></lucide-icon>\n      </button>\n    </div>\n\n    <label class=\"kp-search\">\n      <input type=\"text\" [(ngModel)]=\"chatSearch\" [placeholder]=\"label('searchChat')\" />\n      <lucide-icon name=\"search\" [size]=\"22\"></lucide-icon>\n    </label>\n\n    <section class=\"kp-chat-list-section\">\n      <h3>{{ label('recentActivity') }}</h3>\n      <div\n        *ngFor=\"let chat of visibleChats\"\n        class=\"kp-chat-list-item\"\n        [class.kp-selected]=\"chat.chatId === currentChatId\"\n      >\n        <button type=\"button\" class=\"kp-chat-title-button\" (click)=\"selectChat(chat.chatId)\">\n          <span>{{ chat.title }}</span>\n        </button>\n        <button type=\"button\" class=\"kp-chat-menu-button\" (click)=\"toggleChatMenu(chat.chatId, $event)\" aria-label=\"Chat actions\">\n          ...\n        </button>\n        <div *ngIf=\"activeChatMenuId === chat.chatId\" class=\"kp-chat-actions\">\n          <button type=\"button\" (click)=\"openRenameDialog(chat, $event)\">Edit</button>\n          <button type=\"button\" (click)=\"togglePinChat(chat, $event)\">{{ chat.pinned ? 'Unpin Chat' : 'Pin Chat' }}</button>\n          <button type=\"button\" (click)=\"deleteChat(chat, $event)\">Delete</button>\n        </div>\n      </div>\n      <p *ngIf=\"!visibleChats.length\" class=\"kp-empty-list\">No recent chats yet.</p>\n    </section>\n\n    <section class=\"kp-chat-list-section\">\n      <h3>{{ label('pinnedCollections') }}</h3>\n      <div\n        *ngFor=\"let chat of visiblePinnedChats\"\n        class=\"kp-chat-list-item\"\n        [class.kp-selected]=\"chat.chatId === currentChatId\"\n      >\n        <button type=\"button\" class=\"kp-chat-title-button\" (click)=\"selectChat(chat.chatId)\">\n          <span>{{ chat.title }}</span>\n        </button>\n        <button type=\"button\" class=\"kp-chat-menu-button\" (click)=\"toggleChatMenu(chat.chatId, $event)\" aria-label=\"Chat actions\">\n          ...\n        </button>\n        <div *ngIf=\"activeChatMenuId === chat.chatId\" class=\"kp-chat-actions\">\n          <button type=\"button\" (click)=\"openRenameDialog(chat, $event)\">Edit</button>\n          <button type=\"button\" (click)=\"togglePinChat(chat, $event)\">{{ chat.pinned ? 'Unpin Chat' : 'Pin Chat' }}</button>\n          <button type=\"button\" (click)=\"deleteChat(chat, $event)\">Delete</button>\n        </div>\n      </div>\n      <p *ngIf=\"!visiblePinnedChats.length\" class=\"kp-empty-list\">No pinned chats yet.</p>\n    </section>\n  </aside>\n\n  <main *ngIf=\"!documentPreviewOpen\" class=\"kp-chat-stage\" [class.kp-with-sources]=\"sourcePanelOpen && assistantCitations.length\">\n    <div #chatScroll class=\"kp-chat-scroll\">\n      <section *ngIf=\"!hasMessages\" class=\"kp-empty-state\">\n        <div class=\"kp-orb\">✦</div>\n        <h1>{{ welcomeMessage }}</h1>\n      </section>\n\n      <ng-container *ngFor=\"let msg of messages\">\n        <div *ngIf=\"msg.role === 'user'\" class=\"kp-page-user-row\">\n          <div class=\"kp-page-user-message\">{{ msg.text }}</div>\n          <img\n            *ngIf=\"hasUserAvatar; else pageUserInitials\"\n            class=\"kp-user-avatar\"\n            [src]=\"userAvatarUrl\"\n            alt=\"User\"\n          />\n          <ng-template #pageUserInitials>\n            <div class=\"kp-user-avatar kp-user-initials\" aria-label=\"User initials\">{{ userInitials }}</div>\n          </ng-template>\n        </div>\n\n        <div *ngIf=\"msg.role === 'assistant'\" class=\"kp-page-assistant-row\">\n          <div class=\"kp-assistant-avatar\">✦</div>\n          <article class=\"kp-answer-card\">\n            <div *ngIf=\"!msg.text && isStreaming\" class=\"kp-searching\">\n              <div class=\"kp-sparkles-group\">\n                <span class=\"kp-sparkle kp-sparkle-1\">✦</span>\n                <span class=\"kp-sparkle kp-sparkle-2\">✦</span>\n              </div>\n              <span class=\"kp-searching-label\">\n                <span class=\"kp-sparkle kp-sparkle-3\">✦</span> {{ label('searching') }}\n              </span>\n            </div>\n            <div *ngIf=\"msg.text\" class=\"kp-markdown\" [innerHTML]=\"renderMarkdown(msg.text)\"></div>\n\n            <div *ngIf=\"msg.citations?.length\" class=\"kp-inline-sources\">\n              <h3>{{ label('sourcesUsed') }}</h3>\n              <div class=\"kp-source-chips\">\n                <div *ngFor=\"let citation of msg.citations | slice:0:2\" class=\"kp-citation-action\">\n                  <button type=\"button\" class=\"kp-citation-main\" (click)=\"openCitationPreview(citation)\">\n                    <span class=\"kp-source-mark\">✺</span>\n                    <span>{{ citationTitle(citation) }}</span>\n                  </button>\n                  <button\n                    *ngIf=\"canOpenCitationKnowledgeGraph(citation)\"\n                    type=\"button\"\n                    class=\"kp-citation-graph\"\n                    (click)=\"openCitationKnowledgeGraph(citation, $event)\"\n                    [attr.aria-label]=\"'View knowledge graph for ' + citationTitle(citation)\"\n                    title=\"View knowledge graph\"\n                  >\n                    <lucide-icon name=\"network\" [size]=\"17\"></lucide-icon>\n                  </button>\n                </div>\n                <button type=\"button\" class=\"kp-show-all\" (click)=\"toggleSourcesPanel()\">\n                  <span class=\"kp-source-stack\">✺ ✺ ✺</span>\n                  {{ label('showAll') }}\n                </button>\n              </div>\n            </div>\n          </article>\n          <div class=\"kp-feedback-row\">\n            <lucide-icon name=\"copy\" [size]=\"18\"></lucide-icon>\n            <button type=\"button\" [class.kp-active]=\"msg.isLike === true\" (click)=\"submitMessageFeedback(msg, true)\" aria-label=\"Like response\">\n              <lucide-icon name=\"thumbs-up\" [size]=\"18\"></lucide-icon>\n            </button>\n            <button type=\"button\" [class.kp-active]=\"msg.isLike === false\" (click)=\"submitMessageFeedback(msg, false)\" aria-label=\"Dislike response\">\n              <lucide-icon name=\"thumbs-down\" [size]=\"18\"></lucide-icon>\n            </button>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n\n    <div *ngIf=\"!hasMessages\" class=\"kp-page-suggestions\">\n      <button *ngFor=\"let suggestion of initialSuggestionsText\" type=\"button\" (click)=\"setInput(suggestion)\">\n        {{ suggestion }}\n      </button>\n    </div>\n\n    <footer class=\"kp-page-composer-wrap\">\n      <div class=\"kp-page-composer\">\n        <textarea\n          rows=\"2\"\n          [(ngModel)]=\"inputText\"\n          (keydown.enter)=\"$event.preventDefault(); sendMessage()\"\n          [placeholder]=\"inputPlaceholderText\"\n        ></textarea>\n        <button type=\"button\" class=\"kp-send-button\" [class.kp-ready]=\"canSend\" (click)=\"sendMessage()\" [disabled]=\"!canSend\" aria-label=\"Send message\">\n          <lucide-icon name=\"arrow-right\" [size]=\"22\"></lucide-icon>\n        </button>\n      </div>\n      <button *ngIf=\"isStreaming\" type=\"button\" class=\"kp-cancel-stream\" (click)=\"cancelStreaming()\">{{ label('stopResponse') }}</button>\n      <p>{{ subtitleText }}</p>\n    </footer>\n  </main>\n\n  <aside *ngIf=\"!documentPreviewOpen && sourcePanelOpen && assistantCitations.length\" class=\"kp-sources-panel\">\n    <header>\n      <div>\n        <h2>{{ label('allSources') }}</h2>\n        <p>{{ assistantCitations.length }} {{ label('documentsReferenced') }}</p>\n      </div>\n      <button type=\"button\" class=\"kp-icon-button\" (click)=\"toggleSourcesPanel()\" aria-label=\"Close sources\">\n        <lucide-icon name=\"x\" [size]=\"18\"></lucide-icon>\n      </button>\n    </header>\n\n    <article *ngFor=\"let citation of assistantCitations\" class=\"kp-source-card\">\n      <div class=\"kp-source-meta\">\n        <strong *ngIf=\"citationScore(citation)\">{{ citationScore(citation) }}</strong>\n        <button\n          *ngIf=\"canOpenCitationKnowledgeGraph(citation); else citationSourceLogo\"\n          type=\"button\"\n          class=\"kp-citation-graph\"\n          (click)=\"openCitationKnowledgeGraph(citation, $event)\"\n          [attr.aria-label]=\"'View knowledge graph for ' + citationTitle(citation)\"\n          title=\"View knowledge graph\"\n        >\n          <lucide-icon name=\"network\" [size]=\"15\"></lucide-icon>\n        </button>\n        <ng-template #citationSourceLogo>\n          <span class=\"kp-source-logo\">✺</span>\n        </ng-template>\n      </div>\n      <button type=\"button\" class=\"kp-source-card-main\" (click)=\"openCitationPreview(citation)\">\n        <h3>{{ citationTitle(citation) }}</h3>\n        <p>{{ citationSnippet(citation) }}</p>\n      </button>\n    </article>\n  </aside>\n\n  <div *ngIf=\"renameDialogOpen\" class=\"kp-dialog-backdrop\">\n    <form class=\"kp-dialog\" (ngSubmit)=\"submitRename()\">\n      <h2>{{ label('editChatName') }}</h2>\n      <input type=\"text\" name=\"renameTitle\" [(ngModel)]=\"renameTitle\" maxlength=\"200\" />\n      <div class=\"kp-dialog-actions\">\n        <button type=\"button\" (click)=\"closeRenameDialog()\">{{ label('cancel') }}</button>\n        <button type=\"submit\" [disabled]=\"!renameTitle.trim() || isLoading\">{{ label('save') }}</button>\n      </div>\n    </form>\n  </div>\n\n  <div *ngIf=\"knowledgeGraphOpen\" class=\"kp-graph-overlay\">\n    <section class=\"kp-graph-dialog\">\n      <header class=\"kp-graph-header\">\n        <div>\n          <h2>{{ knowledgeGraphTitle }}</h2>\n          <p *ngIf=\"knowledgeGraphData\">\n            {{ label('graphStatus') }}: {{ knowledgeGraphData.kgStatus }} ·\n            {{ label('graphNodes') }}: {{ knowledgeGraphData.nodeCount }} ·\n            {{ label('graphEdges') }}: {{ knowledgeGraphData.edgeCount }}\n          </p>\n        </div>\n\n        <div class=\"kp-graph-actions\">\n          <div class=\"kp-graph-limits\">\n            <label>\n              <span>{{ label('graphNodes') }}</span>\n              <input type=\"number\" min=\"1\" max=\"500\" [(ngModel)]=\"graphNodeLimit\" />\n            </label>\n            <label>\n              <span>{{ label('graphEdges') }}</span>\n              <input type=\"number\" min=\"1\" max=\"1000\" [(ngModel)]=\"graphEdgeLimit\" />\n            </label>\n            <button type=\"button\" class=\"kp-graph-secondary\" (click)=\"applyGraphLimits()\">{{ label('graphApply') }}</button>\n          </div>\n          <div class=\"kp-graph-toggle\">\n            <button type=\"button\" [class.kp-active]=\"graphViewMode === '2d'\" (click)=\"setKnowledgeGraphView('2d')\">{{ label('graph2d') }}</button>\n            <button type=\"button\" [class.kp-active]=\"graphViewMode === '3d'\" (click)=\"setKnowledgeGraphView('3d')\">{{ label('graph3d') }}</button>\n          </div>\n          <button type=\"button\" class=\"kp-graph-secondary\" (click)=\"refreshKnowledgeGraph()\">{{ label('graphRefresh') }}</button>\n          <button type=\"button\" class=\"kp-icon-button\" (click)=\"closeKnowledgeGraph()\" [attr.aria-label]=\"label('graphClose')\">\n            <lucide-icon name=\"x\" [size]=\"18\"></lucide-icon>\n          </button>\n        </div>\n      </header>\n\n      <div class=\"kp-graph-body\">\n        <aside class=\"kp-graph-sidebar\">\n          <div class=\"kp-graph-stat\">\n            <span>{{ label('graphStatus') }}</span>\n            <strong>{{ knowledgeGraphData?.kgStatus || 'unknown' }}</strong>\n          </div>\n          <div class=\"kp-graph-stat\">\n            <span>{{ label('graphNodes') }}</span>\n            <strong>{{ knowledgeGraphData?.nodeCount || 0 }}</strong>\n          </div>\n          <div class=\"kp-graph-stat\">\n            <span>{{ label('graphEdges') }}</span>\n            <strong>{{ knowledgeGraphData?.edgeCount || 0 }}</strong>\n          </div>\n          <p *ngIf=\"knowledgeGraphData?.isTruncated\" class=\"kp-graph-note\">\n            Results were truncated to the requested node/edge limits.\n          </p>\n\n          <div *ngIf=\"topKnowledgeGraphNodes.length\" class=\"kp-graph-topology\">\n            <h3>Top entities</h3>\n            <button *ngFor=\"let node of topKnowledgeGraphNodes\" type=\"button\" class=\"kp-graph-node-chip\">\n              <span>{{ node.label }}</span>\n              <strong>{{ node.degree || 0 }}</strong>\n            </button>\n          </div>\n\n          <div *ngIf=\"selectedGraphNode\" class=\"kp-graph-focus-card\">\n            <div class=\"kp-graph-focus-head\">\n              <h3>{{ label('graphFocus') }}</h3>\n              <button type=\"button\" class=\"kp-graph-secondary\" (click)=\"resetGraphSelection()\">{{ label('graphResetFocus') }}</button>\n            </div>\n            <strong>{{ selectedGraphNode.label }}</strong>\n            <p *ngIf=\"selectedGraphNode.description\">\n              <span>{{ label('graphDescription') }}:</span>\n              {{ selectedGraphDescription() }}\n            </p>\n            <p><span>{{ label('graphType') }}:</span> {{ selectedGraphNode.type || 'entity' }}</p>\n            <p><span>{{ label('graphSources') }}:</span> {{ selectedGraphNode.sourceCount || 0 }}</p>\n            <p><span>{{ label('graphConnections') }}:</span> {{ selectedGraphNode.degree || 0 }}</p>\n          </div>\n        </aside>\n\n        <div class=\"kp-graph-canvas-wrap\">\n          <div *ngIf=\"isGraphLoading\" class=\"kp-graph-state\">{{ label('graphLoading') }}</div>\n          <div *ngIf=\"!isGraphLoading && knowledgeGraphError\" class=\"kp-graph-state kp-graph-state-error\">{{ knowledgeGraphError }}</div>\n          <div *ngIf=\"!isGraphLoading && knowledgeGraphData && knowledgeGraphData.kgStatus !== 'ready'\" class=\"kp-graph-state\">{{ label('graphNotReady') }}</div>\n          <div *ngIf=\"!isGraphLoading && knowledgeGraphData && knowledgeGraphData.kgStatus === 'ready' && !knowledgeGraphData.nodes.length\" class=\"kp-graph-state\">{{ label('graphNoData') }}</div>\n\n          <div\n            #graph2dContainer\n            *ngIf=\"graphViewMode === '2d' && graphHasRenderableData && !isGraphLoading\"\n            class=\"kp-graph-canvas\"\n          ></div>\n\n          <div\n            #graph3dContainer\n            *ngIf=\"graphViewMode === '3d' && graphHasRenderableData && !isGraphLoading\"\n            class=\"kp-graph-canvas\"\n          ></div>\n        </div>\n      </div>\n    </section>\n  </div>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\n\nimport { ChatWidgetComponent } from './chat-widget.component';\nimport { CHAT_WIDGET_CONFIG } from './config.token';\nimport { ChatWidgetConfig } from './types';\n\nimport {\n  LucideAngularModule,\n  Star,\n  Edit,\n  Send,\n  Menu,\n  MessageSquarePlus,\n  ChevronRight,\n  CornerDownLeft,\n  Maximize2,\n  Minimize2,\n  Paperclip,\n  ThumbsUp,\n  ThumbsDown,\n  Bot,\n  FileText,\n  Check,\n  ChevronDown,\n  ArrowRight,\n  Plus,\n  Aperture,\n  Copy,\n  Shield,\n  AlertCircle,\n  Network,\n  Search,\n  Sparkles,\n  X\n} from 'lucide-angular';\n\n@NgModule({\n  declarations: [\n    ChatWidgetComponent\n  ],\n  imports: [\n    CommonModule,\n    HttpClientModule,\n    FormsModule,\n    LucideAngularModule.pick({\n        Star,\n        Edit,\n        Send,\n        Menu,\n        MessageSquarePlus,\n        ChevronRight,\n        CornerDownLeft,\n        Maximize2,\n        Minimize2,\n        Paperclip,\n        ThumbsUp,\n        ThumbsDown,\n        Bot,\n        FileText,\n        Check,\n        ChevronDown,\n        ArrowRight,\n        Plus,\n        Aperture,\n        Copy,\n        Shield,\n        AlertCircle,\n        Network,\n        Search,\n        Sparkles,\n        X\n      })\n  ],\n  providers: [],\n  exports: [\n    ChatWidgetComponent\n  ]\n})\nexport class ChatWidgetModule {\n  static forRoot(config: ChatWidgetConfig): ModuleWithProviders<ChatWidgetModule> {\n    return {\n      ngModule: ChatWidgetModule,\n      providers: [\n        {\n          provide: CHAT_WIDGET_CONFIG,\n          useValue: config\n        }\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of chat-widget\n */\n\nexport * from './lib/chat-widget.service';\nexport * from './lib/chat-widget.component';\nexport * from './lib/types';\nexport * from './lib/config.token';\nexport * from './lib/chat-widget.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ChatWidgetService"],"mappings":"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"}