@aakash58/chatbot 1.0.76 β†’ 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -607,7 +607,7 @@ class ThemeService {
607
607
  _activeTheme = signal('light-theme', ...(ngDevMode ? [{ debugName: "_activeTheme" }] : []));
608
608
  activeTheme = this._activeTheme.asReadonly();
609
609
  observer = null;
610
- mediaQueryListener = null;
610
+ // private mediaQueryListener: ((e: MediaQueryListEvent) => void) | null = null;
611
611
  constructor(rendererFactory, overlay) {
612
612
  this.overlay = overlay;
613
613
  this.renderer = rendererFactory.createRenderer(null, null);
@@ -647,12 +647,12 @@ class ThemeService {
647
647
  attributeFilter: ['class', 'data-theme'],
648
648
  });
649
649
  // Also listen to system preference as a fallback or if parent doesn't specify
650
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
651
- this.mediaQueryListener = (e) => {
652
- // Re-run detection which prioritizes parent classes but falls back to system
653
- this.detectAndApplyParentTheme();
654
- };
655
- mediaQuery.addEventListener('change', this.mediaQueryListener);
650
+ // const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
651
+ // this.mediaQueryListener = (e) => {
652
+ // // Re-run detection which prioritizes parent classes but falls back to system
653
+ // this.detectAndApplyParentTheme();
654
+ // };
655
+ // mediaQuery.addEventListener('change', this.mediaQueryListener);
656
656
  }
657
657
  detectAndApplyParentTheme() {
658
658
  const isDark = this.isParentDark();
@@ -667,7 +667,14 @@ class ThemeService {
667
667
  const body = document.body;
668
668
  const html = document.documentElement;
669
669
  // Check for common class names
670
- const darkClasses = ['dark', 'dark-theme', 'dark-mode', 'night-mode'];
670
+ const darkClasses = [
671
+ 'dark',
672
+ 'dark-theme',
673
+ 'dark-mode',
674
+ 'night-mode',
675
+ 'data-bs-theme-light',
676
+ 'data-bs-theme-dark',
677
+ ];
671
678
  const hasDarkClass = (el) => darkClasses.some((c) => el.classList.contains(c));
672
679
  if (hasDarkClass(body) || hasDarkClass(html))
673
680
  return true;
@@ -675,7 +682,8 @@ class ThemeService {
675
682
  if (body.getAttribute('data-theme') === 'dark' || html.getAttribute('data-theme') === 'dark')
676
683
  return true;
677
684
  // Fallback to system preference
678
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
685
+ // return window.matchMedia('(prefers-color-scheme: dark)').matches;
686
+ return false;
679
687
  }
680
688
  applyThemeToGlobal(theme) {
681
689
  // We do NOT touch document.body anymore to avoid conflicts
@@ -691,12 +699,12 @@ class ThemeService {
691
699
  this.observer.disconnect();
692
700
  this.observer = null;
693
701
  }
694
- if (this.mediaQueryListener) {
695
- window
696
- .matchMedia('(prefers-color-scheme: dark)')
697
- .removeEventListener('change', this.mediaQueryListener);
698
- this.mediaQueryListener = null;
699
- }
702
+ // if (this.mediaQueryListener) {
703
+ // window
704
+ // .matchMedia('(prefers-color-scheme: dark)')
705
+ // .removeEventListener('change', this.mediaQueryListener);
706
+ // this.mediaQueryListener = null;
707
+ // }
700
708
  }
701
709
  ngOnDestroy() {
702
710
  this.cleanupObservers();
@@ -1 +1 @@
1
- {"version":3,"file":"aakash58-chatbot.mjs","sources":["../../../projects/doohbot/src/lib/model/doohbot.intents.ts","../../../projects/doohbot/src/lib/model/api-config.model.ts","../../../projects/doohbot/src/lib/core/services/tenant-context.service.ts","../../../projects/doohbot/src/lib/core/services/doohbot-api.service.ts","../../../projects/doohbot/src/lib/components/message-input/messaging.service.ts","../../../projects/doohbot/src/lib/core/services/theme.service.ts","../../../projects/doohbot/src/lib/constant/constant.ts","../../../projects/doohbot/src/lib/inputs/doohbot-input.ts","../../../projects/doohbot/src/lib/helpers/predefined_messages.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.html","../../../projects/doohbot/src/lib/shared/chips/chips.component.ts","../../../projects/doohbot/src/lib/shared/chips/chips.component.html","../../../projects/doohbot/src/lib/components/message-list/message-list.component.ts","../../../projects/doohbot/src/lib/components/message-list/message-list.component.html","../../../projects/doohbot/src/lib/components/message-input/message-input.component.ts","../../../projects/doohbot/src/lib/components/message-input/message-input.component.html","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.html","../../../projects/doohbot/src/lib/directives/draggable/draggable-dialog.directive.ts","../../../projects/doohbot/src/lib/directives/resizable/resizable-dialog.directive.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.html","../../../projects/doohbot/src/lib/core/environments/environment.ts","../../../projects/doohbot/src/lib/core/app-const.ts","../../../projects/doohbot/src/lib/core/services/http.service.ts","../../../projects/doohbot/src/lib/core/services/account.service.ts","../../../projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts","../../../projects/doohbot/src/lib/core/services/auth.service.ts","../../../projects/doohbot/src/lib/doohbot.component.ts","../../../projects/doohbot/src/lib/doohbot.component.html","../../../projects/doohbot/src/lib/model/token.ts","../../../projects/doohbot/src/public-api.ts","../../../projects/doohbot/src/aakash58-chatbot.ts"],"sourcesContent":["import { ChatIntent } from './message';\r\n\r\nexport const CHAT_INTENTS: ChatIntent[] = [\r\n {\r\n patterns: ['hello', 'hi', 'hey', 'greetings', 'good morning', 'good afternoon', 'good evening'],\r\n response: 'πŸ‘‹Hello! How can I help you today?',\r\n },\r\n {\r\n patterns: ['how are you', 'how are you doing'],\r\n response: \"I'm just a bot, but I'm doing great! How about you?\",\r\n },\r\n {\r\n patterns: ['help', 'support', 'problem', 'about', 'issue', 'question', 'assist', 'Contact'],\r\n response: 'Sure! Please tell me your issue, and I will try to assist you.',\r\n },\r\n {\r\n patterns: ['bye', 'goodbye', 'see you', 'thanks', 'thank you', 'bye bye', 'see you later'],\r\n response: 'Goodbye! Have a nice day!',\r\n },\r\n {\r\n patterns: ['news and updates', 'updates', 'news', 'new'],\r\n response: 'Stay tuned for the latest news and updates from our team!',\r\n },\r\n];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { environment } from '../core/environments/environment.prod';\r\n\r\n/**\r\n * Configuration for Doohbot API integration\r\n */\r\nexport interface DoohbotApiConfig {\r\n /**\r\n * Backend API endpoint URL\r\n * Example: 'https://api.example.com/chat'\r\n */\r\n apiUrl: string;\r\n\r\n /**\r\n * Optional API key for authentication\r\n */\r\n apiKey?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 30000 (30 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Enable API mode (true) or use local intent matching (false)\r\n * @default false\r\n */\r\n enableApi?: boolean;\r\n\r\n /**\r\n * Include message history in API requests\r\n * @default false\r\n */\r\n includeHistory?: boolean;\r\n\r\n /**\r\n * Maximum number of history messages to include in requests\r\n * @default 10\r\n */\r\n maxHistoryMessages?: number;\r\n\r\n /**\r\n * Custom headers to include in API requests\r\n */\r\n customHeaders?: Record<string, string>;\r\n\r\n /**\r\n * Enable retry on failure\r\n * @default true\r\n */\r\n enableRetry?: boolean;\r\n\r\n /**\r\n * Number of retry attempts\r\n * @default 2\r\n */\r\n retryAttempts?: number;\r\n\r\n /**\r\n * Delay between retries in milliseconds\r\n * @default 1000\r\n */\r\n retryDelay?: number;\r\n}\r\n\r\n/**\r\n * Injection token for providing Doohbot API configuration\r\n */\r\nexport const DOOHBOT_API_CONFIG = new InjectionToken<DoohbotApiConfig>('DOOHBOT_API_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({\r\n apiUrl: '',\r\n timeout: 30000,\r\n enableApi: false,\r\n includeHistory: false,\r\n maxHistoryMessages: 10,\r\n enableRetry: true,\r\n retryAttempts: 2,\r\n retryDelay: 1000,\r\n }),\r\n});\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface ChatContext {\r\n platformTenant: string;\r\n subTenant: string;\r\n agent: string;\r\n}\r\n\r\nexport interface ContextChangeEvent {\r\n previous: ChatContext | null;\r\n current: ChatContext;\r\n contextKey: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TenantContextService {\r\n // Current context state\r\n private platformTenant = signal<string>('');\r\n private subTenant = signal<string>('');\r\n private agent = signal<string>('');\r\n\r\n // Computed context object\r\n public currentContext = computed<ChatContext>(() => ({\r\n platformTenant: this.platformTenant(),\r\n subTenant: this.subTenant(),\r\n agent: this.agent(),\r\n }));\r\n\r\n // Computed unique context key for storage\r\n public contextKey = computed<string>(() => {\r\n const pt = this.platformTenant() || 'default';\r\n const st = this.subTenant() || 'default';\r\n const ag = this.agent() || 'default';\r\n return `${pt}_${st}_${ag}`;\r\n });\r\n\r\n // Observable for context changes\r\n private contextChangeSubject = new Subject<ContextChangeEvent>();\r\n public contextChange$ = this.contextChangeSubject.asObservable();\r\n\r\n private previousContext: ChatContext | null = null;\r\n\r\n constructor() {\r\n // Effect to emit context changes\r\n effect(() => {\r\n const current = this.currentContext();\r\n const key = this.contextKey();\r\n\r\n // Only emit if context actually changed\r\n if (this.hasContextChanged(current)) {\r\n this.contextChangeSubject.next({\r\n previous: this.previousContext,\r\n current: current,\r\n contextKey: key,\r\n });\r\n this.previousContext = { ...current };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the complete context\r\n */\r\n public setContext(context: Partial<ChatContext>): void {\r\n if (context.platformTenant !== undefined) {\r\n this.platformTenant.set(context.platformTenant);\r\n }\r\n if (context.subTenant !== undefined) {\r\n this.subTenant.set(context.subTenant);\r\n }\r\n if (context.agent !== undefined) {\r\n this.agent.set(context.agent);\r\n }\r\n }\r\n\r\n /**\r\n * Update individual context properties\r\n */\r\n public setPlatformTenant(platformTenant: string): void {\r\n this.platformTenant.set(platformTenant);\r\n }\r\n\r\n public setSubTenant(subTenant: string): void {\r\n this.subTenant.set(subTenant);\r\n }\r\n\r\n public setAgent(agent: string): void {\r\n this.agent.set(agent);\r\n }\r\n\r\n /**\r\n * Get current context values\r\n */\r\n public getPlatformTenant(): string {\r\n return this.platformTenant();\r\n }\r\n\r\n public getSubTenant(): string {\r\n return this.subTenant();\r\n }\r\n\r\n public getAgent(): string {\r\n return this.agent();\r\n }\r\n\r\n public getContextKey(): string {\r\n return this.contextKey();\r\n }\r\n\r\n public getContext(): ChatContext {\r\n return this.currentContext();\r\n }\r\n\r\n /**\r\n * Check if context has changed\r\n */\r\n private hasContextChanged(current: ChatContext): boolean {\r\n if (!this.previousContext) {\r\n // First time initialization - only emit if we have valid values\r\n return current.platformTenant !== '' || current.subTenant !== '' || current.agent !== '';\r\n }\r\n\r\n return (\r\n this.previousContext.platformTenant !== current.platformTenant ||\r\n this.previousContext.subTenant !== current.subTenant ||\r\n this.previousContext.agent !== current.agent\r\n );\r\n }\r\n\r\n /**\r\n * Reset context to default\r\n */\r\n public resetContext(): void {\r\n this.platformTenant.set('');\r\n this.subTenant.set('');\r\n this.agent.set('');\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError, timer } from 'rxjs';\r\nimport { catchError, retry, timeout, map } from 'rxjs/operators';\r\nimport { DOOHBOT_API_CONFIG, DoohbotApiConfig } from '../../model/api-config.model';\r\nimport { ChatApiRequest, ChatApiResponse, ChatApiError } from '../../model/api-request.model';\r\nimport { Message } from '../../model/message';\r\nimport { TenantContextService } from './tenant-context.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatbotApiService {\r\n private http = inject(HttpClient);\r\n private tenantContext = inject(TenantContextService);\r\n private config = inject(DOOHBOT_API_CONFIG);\r\n\r\n /**\r\n * Send a chat message to the API\r\n * @param message User's message text\r\n * @param history Optional message history for context\r\n * @returns Observable of the API response\r\n */\r\n sendMessage(message: string, history?: Message[]): Observable<ChatApiResponse> {\r\n if (!this.config.apiUrl) {\r\n return throwError(\r\n () =>\r\n ({\r\n message: 'API URL not configured',\r\n code: 'CONFIG_ERROR',\r\n }) as ChatApiError,\r\n );\r\n }\r\n\r\n // Build request payload with tenant context\r\n const request = this.buildRequest(message, history);\r\n\r\n // Build headers\r\n const headers = this.buildHeaders();\r\n\r\n // Configure timeout\r\n const timeoutMs = this.config.timeout || 30000;\r\n\r\n // Make HTTP request\r\n return this.http.post<ChatApiResponse>(this.config.apiUrl, request, { headers }).pipe(\r\n timeout(timeoutMs),\r\n this.applyRetryStrategy(),\r\n map((response) => this.validateResponse(response)),\r\n catchError((error) => this.handleError(error)),\r\n );\r\n }\r\n\r\n /**\r\n * Build request payload with current tenant context\r\n */\r\n private buildRequest(message: string, history?: Message[]): ChatApiRequest {\r\n const context = this.tenantContext.getContext();\r\n\r\n const request: ChatApiRequest = {\r\n message,\r\n platformTenant: context.platformTenant,\r\n subTenant: context.subTenant,\r\n agent: context.agent,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n // Include history if enabled and provided\r\n if (this.config.includeHistory && history && history.length > 0) {\r\n const maxMessages = this.config.maxHistoryMessages || 10;\r\n request.history = history.slice(-maxMessages);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Build HTTP headers\r\n */\r\n private buildHeaders(): HttpHeaders {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n\r\n // Add API key if provided\r\n if (this.config.apiKey) {\r\n headers = headers.set('Authorization', `Bearer ${this.config.apiKey}`);\r\n }\r\n\r\n // Add custom headers if provided\r\n if (this.config.customHeaders) {\r\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Apply retry strategy based on configuration\r\n */\r\n private applyRetryStrategy() {\r\n return (source: Observable<ChatApiResponse>) => {\r\n if (!this.config.enableRetry) {\r\n return source;\r\n }\r\n\r\n const retryAttempts = this.config.retryAttempts || 2;\r\n const retryDelay = this.config.retryDelay || 1000;\r\n\r\n return source.pipe(\r\n retry({\r\n count: retryAttempts,\r\n delay: (error, retryCount) => {\r\n // Only retry on network errors or 5xx server errors\r\n if (this.shouldRetry(error)) {\r\n console.warn(`Retrying API request (attempt ${retryCount}/${retryAttempts})...`);\r\n return timer(retryDelay * retryCount);\r\n }\r\n // Don't retry on client errors (4xx)\r\n return throwError(() => error);\r\n },\r\n }),\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Determine if error should trigger a retry\r\n */\r\n private shouldRetry(error: any): boolean {\r\n if (error instanceof HttpErrorResponse) {\r\n // Retry on network errors or 5xx server errors\r\n return error.status === 0 || error.status >= 500;\r\n }\r\n // Retry on timeout errors\r\n if (error.name === 'TimeoutError') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate API response\r\n */\r\n private validateResponse(response: ChatApiResponse): ChatApiResponse {\r\n if (!response || !response.reply) {\r\n throw {\r\n message: 'Invalid API response: missing reply field',\r\n code: 'INVALID_RESPONSE',\r\n } as ChatApiError;\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle API errors\r\n */\r\n private handleError(error: any): Observable<never> {\r\n let apiError: ChatApiError;\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n // HTTP error\r\n apiError = {\r\n message: error.error?.message || error.message || 'API request failed',\r\n code: error.error?.code || 'HTTP_ERROR',\r\n statusCode: error.status,\r\n details: error.error,\r\n };\r\n } else if (error.name === 'TimeoutError') {\r\n // Timeout error\r\n apiError = {\r\n message: 'Request timeout - please try again',\r\n code: 'TIMEOUT',\r\n statusCode: 408,\r\n };\r\n } else {\r\n // Other errors\r\n apiError = {\r\n message: error.message || 'Unknown error occurred',\r\n code: error.code || 'UNKNOWN_ERROR',\r\n details: error,\r\n };\r\n }\r\n\r\n console.error('Chatbot API Error:', apiError);\r\n return throwError(() => apiError);\r\n }\r\n\r\n /**\r\n * Check if API is enabled\r\n */\r\n isApiEnabled(): boolean {\r\n return this.config.enableApi === true && !!this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Get current API configuration\r\n */\r\n getConfig(): DoohbotApiConfig {\r\n return { ...this.config };\r\n }\r\n}\r\n","import { Injectable, signal, inject } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { CHAT_INTENTS } from '../../model/doohbot.intents';\r\nimport { ChatApiError } from '../../model/api-request.model';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChatbotApiService } from '../../core/services/doohbot-api.service';\r\nimport { UserContext } from '../../core/models/user-context.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MessageService {\r\n // Context-aware message storage\r\n private messageStore = new Map<string, Message[]>();\r\n private currentContextKey = signal<string>('default');\r\n\r\n // Public messages signal for current context\r\n public messages = signal<Message[]>([]);\r\n public audioUnlocked = false;\r\n\r\n // Enable/disable localStorage persistence\r\n private enablePersistence = true;\r\n private readonly STORAGE_PREFIX = 'doohbot_messages_';\r\n\r\n // API service (optional)\r\n private apiService = inject(ChatbotApiService, { optional: true });\r\n\r\n // User context for backend proxy mode\r\n private userContext?: UserContext;\r\n\r\n // API state signals\r\n public isLoadingApi = signal<boolean>(false);\r\n public apiError = signal<ChatApiError | null>(null);\r\n\r\n constructor() {\r\n // Load persisted messages on initialization\r\n this.loadPersistedMessages();\r\n }\r\n\r\n /**\r\n * Switch to a new context\r\n */\r\n public switchContext(contextKey: string): void {\r\n // Save current context messages before switching\r\n if (this.currentContextKey()) {\r\n this.saveContextMessages(this.currentContextKey(), this.messages());\r\n }\r\n\r\n // Update context key\r\n this.currentContextKey.set(contextKey);\r\n\r\n // Load messages for new context\r\n const contextMessages = this.messageStore.get(contextKey) || [];\r\n this.messages.set([...contextMessages]);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n public getCurrentContextKey(): string {\r\n return this.currentContextKey();\r\n }\r\n\r\n /**\r\n * Set user context for backend proxy mode\r\n * This allows tracking which user sent each message\r\n */\r\n public setUserContext(context: UserContext): void {\r\n this.userContext = context;\r\n }\r\n\r\n /**\r\n * Get current user context\r\n */\r\n public getUserContext(): UserContext | undefined {\r\n return this.userContext;\r\n }\r\n\r\n /**\r\n * Clear messages for current context\r\n */\r\n clearMessages(): void {\r\n this.messages.set([]);\r\n const contextKey = this.currentContextKey();\r\n this.messageStore.set(contextKey, []);\r\n this.persistMessages(contextKey, []);\r\n }\r\n\r\n /**\r\n * Clear all messages across all contexts\r\n */\r\n clearAllMessages(): void {\r\n this.messages.set([]);\r\n this.messageStore.clear();\r\n if (this.enablePersistence) {\r\n this.clearAllPersistedMessages();\r\n }\r\n }\r\n\r\n /**\r\n * Add message to current context\r\n */\r\n public addMessage(message: Message): void {\r\n const newMessage = { ...message, timestamp: new Date() };\r\n\r\n // Update current messages signal\r\n this.messages.update((msgs) => [...msgs, newMessage]);\r\n\r\n // Update message store for current context\r\n const contextKey = this.currentContextKey();\r\n const contextMessages = this.messageStore.get(contextKey) || [];\r\n const updatedMessages = [...contextMessages, newMessage];\r\n this.saveContextMessages(contextKey, updatedMessages);\r\n\r\n if (message.sender === 'bot') {\r\n this.playBotSound();\r\n }\r\n }\r\n\r\n /**\r\n * Get messages for a specific context\r\n */\r\n public getMessagesForContext(contextKey: string): Message[] {\r\n return this.messageStore.get(contextKey) || [];\r\n }\r\n\r\n /**\r\n * Get all context keys that have messages\r\n */\r\n public getAllContextKeys(): string[] {\r\n return Array.from(this.messageStore.keys());\r\n }\r\n\r\n /**\r\n * Get bot reply - supports both API and local modes\r\n * @param userText User's message\r\n * @returns Promise with bot reply\r\n */\r\n async getBotReply(userText: string): Promise<string> {\r\n // Check if API mode is enabled\r\n if (this.apiService?.isApiEnabled()) {\r\n return this.getBotReplyFromApi(userText);\r\n }\r\n // Fall back to local intent matching\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n /**\r\n * Get bot reply from API\r\n */\r\n private async getBotReplyFromApi(userText: string): Promise<string> {\r\n if (!this.apiService) {\r\n return this.getFallbackReply();\r\n }\r\n\r\n try {\r\n this.isLoadingApi.set(true);\r\n this.apiError.set(null);\r\n\r\n // Get message history if API config includes history\r\n const history = this.apiService.getConfig().includeHistory ? this.messages() : undefined;\r\n\r\n // Call API\r\n const response = await firstValueFrom(this.apiService.sendMessage(userText, history));\r\n\r\n this.isLoadingApi.set(false);\r\n return response.reply;\r\n } catch (error) {\r\n this.isLoadingApi.set(false);\r\n const apiError = error as ChatApiError;\r\n this.apiError.set(apiError);\r\n console.error('API error, falling back to local mode:', apiError);\r\n\r\n // Fallback to local mode on API error\r\n return this.getBotReplyLocal(userText);\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply using local intent matching\r\n */\r\n private getBotReplyLocal(userText: string): string {\r\n const text = userText.toLowerCase();\r\n for (const intent of CHAT_INTENTS) {\r\n if (intent.patterns.some((pattern) => text.includes(pattern))) {\r\n return intent.response;\r\n }\r\n }\r\n return this.getFallbackReply();\r\n }\r\n\r\n getFallbackReply(): string {\r\n return \"I'm sorry πŸ˜”, I didn't understand that.\";\r\n }\r\n\r\n // method that tells you if it's a fallback\r\n isFallbackIntent(userText: string): boolean {\r\n const text = userText.toLowerCase();\r\n return !CHAT_INTENTS.some((intent) =>\r\n intent.patterns.some((pattern) => text.includes(pattern)),\r\n );\r\n }\r\n\r\n public unlockAudio(): void {\r\n if (this.audioUnlocked) return;\r\n const audio = new Audio();\r\n audio.volume = 1.0;\r\n audio\r\n .play()\r\n .then(() => (this.audioUnlocked = true))\r\n .catch(() => {});\r\n }\r\n\r\n public playBotSound(): void {\r\n if (!this.audioUnlocked) return;\r\n try {\r\n const audio = new Audio('assets/bot.mp3');\r\n audio.play();\r\n } catch (error) {\r\n console.error('Error playing bot sound:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Enable or disable localStorage persistence\r\n */\r\n public setPersistence(enabled: boolean): void {\r\n this.enablePersistence = enabled;\r\n }\r\n\r\n /**\r\n * Private: Save context messages to store and persist\r\n */\r\n private saveContextMessages(contextKey: string, messages: Message[]): void {\r\n this.messageStore.set(contextKey, messages);\r\n this.persistMessages(contextKey, messages);\r\n }\r\n\r\n /**\r\n * Private: Persist messages to localStorage\r\n */\r\n private persistMessages(contextKey: string, messages: Message[]): void {\r\n if (!this.enablePersistence) return;\r\n try {\r\n const key = this.STORAGE_PREFIX + contextKey;\r\n localStorage.setItem(key, JSON.stringify(messages));\r\n } catch (error) {\r\n console.error('Error persisting messages:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Private: Load all persisted messages from localStorage\r\n */\r\n private loadPersistedMessages(): void {\r\n if (!this.enablePersistence) return;\r\n try {\r\n const keys = Object.keys(localStorage);\r\n keys.forEach((key) => {\r\n if (key.startsWith(this.STORAGE_PREFIX)) {\r\n const contextKey = key.replace(this.STORAGE_PREFIX, '');\r\n const messagesJson = localStorage.getItem(key);\r\n if (messagesJson) {\r\n const messages = JSON.parse(messagesJson) as Message[];\r\n // Convert timestamp strings back to Date objects\r\n messages.forEach((msg) => {\r\n if (msg.timestamp && typeof msg.timestamp === 'string') {\r\n msg.timestamp = new Date(msg.timestamp);\r\n }\r\n });\r\n this.messageStore.set(contextKey, messages);\r\n }\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Error loading persisted messages:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Private: Clear all persisted messages from localStorage\r\n */\r\n private clearAllPersistedMessages(): void {\r\n try {\r\n const keys = Object.keys(localStorage);\r\n keys.forEach((key) => {\r\n if (key.startsWith(this.STORAGE_PREFIX)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Error clearing persisted messages:', error);\r\n }\r\n }\r\n}\r\n","import { Injectable, OnDestroy, Renderer2, RendererFactory2, signal } from '@angular/core';\r\nimport { OverlayContainer } from '@angular/cdk/overlay';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n private renderer: Renderer2;\r\n private _theme = signal<ThemeMode>('auto');\r\n public theme = this._theme.asReadonly();\r\n\r\n private _activeTheme = signal<'light-theme' | 'dark-theme'>('light-theme');\r\n public activeTheme = this._activeTheme.asReadonly();\r\n\r\n private observer: MutationObserver | null = null;\r\n private mediaQueryListener: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n constructor(\r\n rendererFactory: RendererFactory2,\r\n private overlay: OverlayContainer,\r\n ) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n // Initialize theme from local storage or default to auto\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n this.setTheme(savedTheme || 'auto');\r\n }\r\n\r\n setTheme(mode: ThemeMode): void {\r\n this._theme.set(mode);\r\n localStorage.setItem('theme', mode);\r\n this.updateActiveTheme(mode);\r\n }\r\n\r\n private updateActiveTheme(mode: ThemeMode) {\r\n this.cleanupObservers();\r\n\r\n if (mode === 'auto') {\r\n this.handleAutoTheme();\r\n } else {\r\n const themeToApply = mode === 'dark' ? 'dark-theme' : 'light-theme';\r\n this._activeTheme.set(themeToApply);\r\n this.applyThemeToGlobal(themeToApply);\r\n }\r\n }\r\n\r\n private handleAutoTheme() {\r\n // Initial detection\r\n this.detectAndApplyParentTheme();\r\n\r\n // Watch for changes in parent\r\n this.observer = new MutationObserver(() => {\r\n this.detectAndApplyParentTheme();\r\n });\r\n\r\n this.observer.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n this.observer.observe(document.body, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n\r\n // Also listen to system preference as a fallback or if parent doesn't specify\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n this.mediaQueryListener = (e) => {\r\n // Re-run detection which prioritizes parent classes but falls back to system\r\n this.detectAndApplyParentTheme();\r\n };\r\n mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n\r\n private detectAndApplyParentTheme() {\r\n const isDark = this.isParentDark();\r\n const newTheme = isDark ? 'dark-theme' : 'light-theme';\r\n\r\n // Only update if changed to avoid unnecessary DOM updates\r\n if (this._activeTheme() !== newTheme) {\r\n this._activeTheme.set(newTheme);\r\n this.applyThemeToGlobal(newTheme);\r\n }\r\n }\r\n\r\n private isParentDark(): boolean {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Check for common class names\r\n const darkClasses = ['dark', 'dark-theme', 'dark-mode', 'night-mode'];\r\n const hasDarkClass = (el: HTMLElement) => darkClasses.some((c) => el.classList.contains(c));\r\n\r\n if (hasDarkClass(body) || hasDarkClass(html)) return true;\r\n\r\n // Check for data-theme attribute\r\n if (body.getAttribute('data-theme') === 'dark' || html.getAttribute('data-theme') === 'dark')\r\n return true;\r\n\r\n // Fallback to system preference\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n private applyThemeToGlobal(theme: 'light-theme' | 'dark-theme') {\r\n // We do NOT touch document.body anymore to avoid conflicts\r\n const overlayContainer = this.overlay.getContainerElement();\r\n\r\n // Only apply to overlay container (for menus/dialogs)\r\n // The main chat window handles its own theme via the host binding in doohbot.component.ts\r\n this.renderer.removeClass(overlayContainer, 'light-theme');\r\n this.renderer.removeClass(overlayContainer, 'dark-theme');\r\n this.renderer.addClass(overlayContainer, theme);\r\n }\r\n\r\n private cleanupObservers() {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n if (this.mediaQueryListener) {\r\n window\r\n .matchMedia('(prefers-color-scheme: dark)')\r\n .removeEventListener('change', this.mediaQueryListener);\r\n this.mediaQueryListener = null;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.cleanupObservers();\r\n }\r\n}\r\n","export const appConst = {\r\n //LIVE ASSETS\r\n // APP_LOGO: 'https://iili.io/f3qSQJn.md.png',\r\n // USER_AVATAR: 'https://iili.io/KpEYoCP.png',\r\n // BOT_AVATAR: 'https://iili.io/KpER0Ge.png',\r\n\r\n // ==================\r\n\r\n //png ASSETS\r\n // APP_LOGO: 'assets/logo.svg',\r\n // USER_AVATAR: 'assets/profile.png',\r\n // BOT_AVATAR: 'assets/bot.png',\r\n\r\n // ==================\r\n\r\n // base64_ASSETS\r\n APP_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MCA1MS45MDE0QzgxLjczMTcgNDcuNDIzIDExNS4wMzggNTAuOTI5MiAxNDIuNTkzIDYxLjY0OTRDMTcwLjE0NyA3Mi4zNjk2IDE4OS42OTIgODkuNDI1NSAxOTYuOTI4IDEwOS4wNjRDMjA0LjE2NCAxMjguNzAzIDE5OC40OTggMTQ5LjMxNyAxODEuMTc3IDE2Ni4zNzFDMTYzLjg1NiAxODMuNDI1IDEzNi4yOTggMTk1LjUyMiAxMDQuNTY2IDIwMEw3OC43MTk3IDEyOS44NUM5OC40Mjk4IDEzNC4xNjQgMTEyLjkxNyAxNDcuMTY4IDExMy43NjQgMTYyLjc1NEwxMTMuODUzIDE2NC4zODFMMTEzLjk0IDE2Mi43NTRDMTE0Ljk1NiAxNDQuMDY5IDEzNS41NzYgMTI5LjA5IDE2MS4yOTkgMTI4LjM1M0wxNjMuNTM5IDEyOC4yODhMMTYxLjI5OSAxMjguMjI0QzEzNS41NzYgMTI3LjQ4NiAxMTQuOTU0IDExMi41MDcgMTEzLjk0IDkzLjgyMTNMMTEzLjg1MyA5Mi4xOTQzTDExMy43NjQgOTMuODIxM0MxMTIuOTAzIDEwOS42ODcgOTcuOTA0OSAxMjIuODc4IDc3LjY1MTQgMTI2Ljk1TDc3LjI4MzIgMTI1Ljk1TDUwIDUxLjkwMTRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjM0MV81ODQ0KSIvPgo8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzIzNDFfNTg0NCIgeDE9IjUwIiB5MT0iNTEuMjA4IiB4Mj0iMjAwIiB5Mj0iMTk4Ljc5MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNEY0NkU1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzg4NzhGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=',\r\n USER_AVATAR:\r\n 'data:image/png;base64,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',\r\n BOT_AVATAR:\r\n 'data:image/png;base64,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',\r\n};\r\n","import { appConst } from '../constant/constant';\r\nimport { DOOHBOT_API_URL } from './../model/token';\r\n\r\nexport class DoohbotInput {\r\n username = '';\r\n password = '';\r\n authToken?: string;\r\n\r\n DOOHBOT_API_URL?: string;\r\n skipAuthentication?: boolean;\r\n\r\n // inputs\r\n userAvatarUrl: string = appConst.USER_AVATAR;\r\n\r\n // Application Constants Text\r\n readonly appTitle? = 'DoohBot';\r\n readonly appSubtitle? = 'Welcome to DoohBot';\r\n readonly welcomeDesc? =\r\n 'We provide a powerful live chat platform to help businesses connect with their customers, offer support, and increase sales through real-time conversations.';\r\n readonly chatIcon? = 'chat';\r\n readonly sendIcon? = 'send';\r\n readonly closeIcon? = 'close';\r\n readonly clear? = 'clear_all';\r\n readonly minimizeIcon? = 'remove';\r\n readonly moreIcon? = 'more_vert';\r\n readonly fullscreenIcon? = 'fullscreen';\r\n readonly fullscreenExitIcon? = 'fullscreen_exit';\r\n readonly hintText? = 'Please Enter Here';\r\n readonly errorMessage? = 'The message you submitted was too long.';\r\n\r\n // Application Constants Images\r\n readonly appLogoUrl? = appConst.APP_LOGO;\r\n readonly botAvatarUrl? = appConst.BOT_AVATAR;\r\n}\r\n","export const PredefinedMessages = ['Hello!', 'I need help', 'Contact support', 'News and Updates'];\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chat-button',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-button.component.html',\r\n styleUrls: ['./chat-button.component.scss'],\r\n})\r\nexport class ChatButtonComponent {\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() isChatOpen: boolean = false;\r\n @Input() unreadCount: number = 0;\r\n @Input() chatIcon: string = 'chat';\r\n @Input() appTitle: string = 'Chat';\r\n\r\n @Output() toggle = new EventEmitter<void>();\r\n\r\n get isSidebar(): boolean {\r\n return this.buttonStyle.startsWith('sidebar');\r\n }\r\n\r\n get sidebarPosition(): 'top' | 'center' | 'bottom' {\r\n if (!this.isSidebar) return 'center';\r\n if (this.buttonStyle === 'sidebar') return 'center';\r\n return this.buttonStyle.split('-')[1] as 'top' | 'center' | 'bottom';\r\n }\r\n\r\n onToggle() {\r\n this.toggle.emit();\r\n }\r\n}\r\n","<!-- fab -->\r\n<button class=\"chat-fab\" (click)=\"onToggle()\" *ngIf=\"buttonStyle === 'fab' && !isChatOpen\">\r\n <mat-icon>{{ chatIcon }}</mat-icon>\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n\r\n<!-- sidebar button -->\r\n<button\r\n class=\"chat-sidebar\"\r\n (click)=\"onToggle()\"\r\n *ngIf=\"isSidebar && !isChatOpen\"\r\n [ngClass]=\"sidebarPosition\"\r\n>\r\n <h2 style=\"transform: rotate(-90deg); font-size: 16px\">{{ appTitle }}</h2>\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-chips',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class Chips {\r\n @Input() messages: string[] = []; // messages array\r\n @Input() disabled = false;\r\n @Output() chipClick = new EventEmitter<string>(); // emit clicked chip\r\n\r\n onChipClick(msg: string) {\r\n if (this.disabled) return;\r\n this.chipClick.emit(msg);\r\n }\r\n}\r\n","@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { Message } from '../../model/message';\r\n\r\n@Component({\r\n selector: 'app-message-list',\r\n standalone: true,\r\n imports: [CommonModule, Chips],\r\n templateUrl: './message-list.component.html',\r\n styleUrls: ['./message-list.component.scss'],\r\n})\r\nexport class MessageListComponent implements AfterViewInit, OnDestroy {\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appLogoUrl: string = '';\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n\r\n @ViewChild('chatMessages') private chatMessagesContainer!: ElementRef;\r\n private mutationObserver!: MutationObserver;\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.chatMessagesContainer) return;\r\n\r\n this.mutationObserver = new MutationObserver(() => this.scrollToBottom());\r\n\r\n this.mutationObserver.observe(this.chatMessagesContainer.nativeElement, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(): void {\r\n if (!this.chatMessagesContainer) {\r\n return;\r\n }\r\n const container = this.chatMessagesContainer.nativeElement;\r\n container.scrollTo({\r\n top: container.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n\r\n onPredefinedClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n}\r\n","<div #chatMessages class=\"chat-messages\">\r\n <!-- Welcome Screen -->\r\n <div class=\"welcome-screen\" *ngIf=\"messages.length === 0 && !isBotTyping\">\r\n <img [src]=\"appLogoUrl\" alt=\"Welcome\" class=\"welcome-image\" style=\"border-radius: 24px\" />\r\n <h3>{{ appSubtitle }}</h3>\r\n <p>{{ welcomeDesc }}</p>\r\n\r\n <!-- Predefined messages chips: Only show when authenticated -->\r\n <app-chips\r\n *ngIf=\"isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onPredefinedClick($event)\"\r\n ></app-chips>\r\n </div>\r\n\r\n <!-- Chat Messages -->\r\n <div\r\n *ngFor=\"let message of messages; trackBy: trackByMessageId\"\r\n class=\"message-wrapper\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n <!-- Bot Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'bot'\"\r\n class=\"bot-avatar\"\r\n [src]=\"botAvatarUrl\"\r\n alt=\"Bot Avatar\"\r\n />\r\n\r\n <!-- Message Bubble -->\r\n <div\r\n class=\"message\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n {{ message.text }}\r\n <!-- Show time below message -->\r\n <div *ngIf=\"message.sender === 'bot'\" class=\"message-time\">\r\n {{ message.timestamp | date: 'shortTime' }}\r\n </div>\r\n </div>\r\n\r\n <!-- User Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'user'\"\r\n class=\"user-avatar\"\r\n [src]=\"userAvatarUrl\"\r\n alt=\"User Avatar\"\r\n />\r\n </div>\r\n\r\n <!-- Typing Indicator -->\r\n <div class=\"message-wrapper bot\" *ngIf=\"isBotTyping\">\r\n <img class=\"bot-avatar\" [src]=\"botAvatarUrl\" alt=\"Bot Avatar\" />\r\n <div class=\"message bot\">\r\n <div class=\"typing-indicator\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-message-input',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './message-input.component.html',\r\n styleUrls: ['./message-input.component.scss'],\r\n})\r\nexport class MessageInputComponent {\r\n @Input() isBotTyping: boolean = false;\r\n @Input() hintText: string = 'Type a message...';\r\n @Input() sendIcon: string = 'send';\r\n\r\n @Output() send = new EventEmitter<string>();\r\n\r\n onSend(text: string) {\r\n if (text.trim()) {\r\n this.send.emit(text);\r\n }\r\n }\r\n}\r\n","<!-- Chat Input -->\r\n<div class=\"chat-input\">\r\n <div class=\"input-wrapper\">\r\n <input #messageInput type=\"text\" [disabled]=\"isBotTyping\"\r\n (keydown.enter)=\"onSend(messageInput.value); messageInput.value = ''\" [placeholder]=\"hintText\" />\r\n\r\n <button [disabled]=\"isBotTyping\" (click)=\"onSend(messageInput.value); messageInput.value = ''\">\r\n <mat-icon>{{ sendIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-snackbar',\r\n templateUrl: './snackbar.component.html',\r\n styleUrls: ['./snackbar.component.scss'],\r\n standalone: true,\r\n imports: [MatIconModule],\r\n})\r\nexport class SnackBar implements OnInit, OnDestroy {\r\n @Input() message: string | null = null;\r\n @Input() autoDismiss: boolean = true;\r\n @Input() dismissDelay: number = 5000;\r\n @Input() show: boolean = false;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n public timeoutId: number | null = null;\r\n\r\n ngOnInit() {\r\n if (this.autoDismiss) {\r\n this.timeoutId = setTimeout(() => {\r\n this.close();\r\n }, this.dismissDelay) as any;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimeout();\r\n }\r\n\r\n close() {\r\n this.show = false;\r\n this.message = null;\r\n this.closed.emit();\r\n }\r\n public clearTimeout() {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = null;\r\n }\r\n }\r\n}\r\n","<div class=\"message-error\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">warning</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[draggableDialog]',\r\n standalone: true,\r\n})\r\nexport class DraggableDialogDirective implements OnInit {\r\n private isDragging = false;\r\n private startX = 0;\r\n private startY = 0;\r\n private offsetX = 0;\r\n private offsetY = 0;\r\n\r\n @Input('dragHandle') dragHandleSelector: string | undefined;\r\n @Input() enableDrag = false;\r\n\r\n private dragHandle: HTMLElement | undefined;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableDrag) {\r\n this.el.nativeElement.removeAttribute('draggableDialog');\r\n return;\r\n }\r\n\r\n if (this.dragHandleSelector) {\r\n this.dragHandle = this.el.nativeElement.querySelector(this.dragHandleSelector);\r\n } else {\r\n this.dragHandle = this.el.nativeElement; // fallback\r\n }\r\n if (this.dragHandle) {\r\n this.renderer.setStyle(this.dragHandle, 'cursor', 'move');\r\n }\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n if (!this.dragHandle || event.target !== this.dragHandle) return;\r\n\r\n this.isDragging = true;\r\n this.startX = event.clientX - this.offsetX;\r\n this.startY = event.clientY - this.offsetY;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.offsetX = event.clientX - this.startX;\r\n this.offsetY = event.clientY - this.startY;\r\n\r\n this.renderer.setStyle(\r\n this.el.nativeElement,\r\n 'transform',\r\n `translate(${this.offsetX}px, ${this.offsetY}px)`,\r\n );\r\n }\r\n\r\n @HostListener('document:mouseup', [])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n }\r\n}\r\n","// resizable-dialog.directive.ts\r\nimport {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n Input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[resizableDialog]',\r\n standalone: true,\r\n})\r\nexport class ResizableDialogDirective implements OnInit, OnDestroy {\r\n private resizeHandles: HTMLElement[] = [];\r\n private activeHandle: string | null = null;\r\n private startX = 0;\r\n private startY = 0;\r\n private startWidth = 0;\r\n private startHeight = 0;\r\n private startLeft = 0;\r\n private startTop = 0;\r\n\r\n @Input() enableResize = false;\r\n\r\n // Define resize directions\r\n private directions = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];\r\n\r\n constructor(\r\n private el: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableResize) {\r\n this.el.nativeElement.removeAttribute('resizableDialog');\r\n return;\r\n }\r\n\r\n this.setStyle();\r\n this.createResizeHandles();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeResizeHandles();\r\n }\r\n\r\n private setStyle() {\r\n const element = this.el.nativeElement;\r\n this.renderer.setStyle(element, 'position', 'absolute');\r\n this.renderer.setStyle(element, 'overflow', 'hidden');\r\n this.renderer.setStyle(element, 'boxSizing', 'border-box');\r\n }\r\n\r\n private createResizeHandles() {\r\n this.directions.forEach((dir) => {\r\n const handle = this.renderer.createElement('div');\r\n this.renderer.setAttribute(handle, 'data-dir', dir);\r\n this.renderer.setStyle(handle, 'position', 'absolute');\r\n this.renderer.setStyle(handle, 'background', 'transparent');\r\n this.renderer.setStyle(handle, 'zIndex', '10');\r\n this.renderer.setStyle(handle, 'userSelect', 'none');\r\n\r\n // Set size and position based on direction\r\n if (dir.includes('e') || dir.includes('w')) {\r\n this.renderer.setStyle(handle, 'width', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('e') ? 'e-resize' : 'w-resize');\r\n this.renderer.setStyle(handle, 'top', '0');\r\n this.renderer.setStyle(handle, 'bottom', '0');\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n }\r\n if (dir.includes('n') || dir.includes('s')) {\r\n this.renderer.setStyle(handle, 'height', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('s') ? 's-resize' : 'n-resize');\r\n this.renderer.setStyle(handle, 'left', '0');\r\n this.renderer.setStyle(handle, 'right', '0');\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n }\r\n if (dir === 'ne' || dir === 'nw' || dir === 'se' || dir === 'sw') {\r\n this.renderer.setStyle(handle, 'width', '12px');\r\n this.renderer.setStyle(handle, 'height', '12px');\r\n this.renderer.setStyle(handle, 'borderRadius', '50%');\r\n this.renderer.setStyle(handle, 'cursor', `${dir}-resize`);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n }\r\n\r\n this.renderer.appendChild(this.el.nativeElement, handle);\r\n this.resizeHandles.push(handle);\r\n });\r\n }\r\n\r\n private removeResizeHandles() {\r\n this.resizeHandles.forEach((handle) => {\r\n this.renderer.removeChild(this.el.nativeElement, handle);\r\n });\r\n this.resizeHandles = [];\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n const dir = target.getAttribute('data-dir');\r\n if (!dir) return;\r\n\r\n event.preventDefault();\r\n\r\n this.activeHandle = dir;\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = parseFloat(this.getComputedStyleValue('width'));\r\n this.startHeight = parseFloat(this.getComputedStyleValue('height'));\r\n this.startLeft = parseFloat(this.getComputedStyleValue('left'));\r\n this.startTop = parseFloat(this.getComputedStyleValue('top'));\r\n\r\n // Prevent text selection during resize\r\n document.body.classList.add('no-select');\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.activeHandle) return;\r\n\r\n const dx = event.clientX - this.startX;\r\n const dy = event.clientY - this.startY;\r\n\r\n let newWidth = this.startWidth;\r\n let newHeight = this.startHeight;\r\n let newLeft = this.startLeft;\r\n let newTop = this.startTop;\r\n\r\n const minWidth = 150;\r\n const minHeight = 100;\r\n\r\n // Horizontal resize\r\n if (this.activeHandle.includes('e')) {\r\n newWidth = Math.max(this.startWidth + dx, minWidth);\r\n }\r\n if (this.activeHandle.includes('w')) {\r\n newWidth = Math.max(this.startWidth - dx, minWidth);\r\n newLeft = this.startLeft + (this.startWidth - newWidth);\r\n }\r\n\r\n // Vertical resize\r\n if (this.activeHandle.includes('s')) {\r\n newHeight = Math.max(this.startHeight + dy, minHeight);\r\n }\r\n if (this.activeHandle.includes('n')) {\r\n newHeight = Math.max(this.startHeight - dy, minHeight);\r\n newTop = this.startTop + (this.startHeight - newHeight);\r\n }\r\n\r\n // Apply changes\r\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'left', `${newLeft}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'top', `${newTop}px`);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n if (this.activeHandle) {\r\n this.activeHandle = null;\r\n document.body.classList.remove('no-select');\r\n }\r\n }\r\n\r\n private getComputedStyleValue(property: string): string {\r\n return getComputedStyle(this.el.nativeElement).getPropertyValue(property) || '0';\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, TrackByFunction } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { MessageListComponent } from '../message-list/message-list.component';\r\nimport { MessageInputComponent } from '../message-input/message-input.component';\r\nimport { SnackBar } from '../../shared/snackbar/snackbar.component';\r\nimport { DraggableDialogDirective } from '../../directives/draggable/draggable-dialog.directive';\r\nimport { ResizableDialogDirective } from '../../directives/resizable/resizable-dialog.directive';\r\nimport { Message } from '../../model/message';\r\nimport { ThemeService } from '../../core/services/theme.service';\r\nimport { inject } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n Chips,\r\n MessageListComponent,\r\n MessageInputComponent,\r\n SnackBar,\r\n DraggableDialogDirective,\r\n ResizableDialogDirective,\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n})\r\nexport class ChatWindowComponent {\r\n @Input() isChatOpen: boolean = false;\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() isFullScreen: boolean = false;\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() appTitle: string = '';\r\n @Input() appLogoUrl: string = '';\r\n @Input() moreIcon: string = 'more_vert';\r\n @Input() minimizeIcon: string = 'minimize';\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n @Input() hintText: string = '';\r\n @Input() sendIcon: string = '';\r\n @Input() messageError: string | null = null;\r\n @Input() showSuggestionChips: boolean = false;\r\n\r\n @Output() toggleChat = new EventEmitter<void>();\r\n @Output() toggleFullScreen = new EventEmitter<void>();\r\n @Output() openSettings = new EventEmitter<void>();\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n @Output() send = new EventEmitter<string>();\r\n @Output() clearMessageError = new EventEmitter<void>();\r\n @Output() clearChat = new EventEmitter<void>();\r\n\r\n public themeService = inject(ThemeService);\r\n\r\n onToggleChat() {\r\n this.toggleChat.emit();\r\n }\r\n\r\n onToggleFullScreen() {\r\n this.toggleFullScreen.emit();\r\n }\r\n\r\n onOpenSettings() {\r\n this.openSettings.emit();\r\n }\r\n\r\n onSuggestionClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n\r\n onSend(text: string) {\r\n this.send.emit(text);\r\n }\r\n\r\n onClearMessageError() {\r\n this.clearMessageError.emit();\r\n }\r\n\r\n onClearChat() {\r\n this.clearChat.emit();\r\n }\r\n}\r\n","<div\r\n *ngIf=\"isChatOpen\"\r\n draggableDialog\r\n [enableDrag]=\"enableDrag\"\r\n [dragHandle]=\"'.chat-header'\"\r\n resizableDialog\r\n [enableResize]=\"enableResize\"\r\n class=\"chat-window\"\r\n [class.fullscreen]=\"isFullScreen\"\r\n>\r\n <!-- chat window -->\r\n <div class=\"chat-header\">\r\n <div class=\"chat-title\">\r\n <img class=\"chat-logo\" style=\"border-radius: 14px\" [src]=\"appLogoUrl\" alt=\"Logo\" />\r\n <h2>{{ appTitle }}</h2>\r\n </div>\r\n\r\n <div class=\"chat-header-buttons\">\r\n <!-- settings Button -->\r\n <button class=\"header-button\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <mat-icon>{{ moreIcon }}</mat-icon>\r\n </button>\r\n\r\n <!-- minimize Button -->\r\n <button class=\"header-button\" (click)=\"onToggleChat()\">\r\n <mat-icon>{{ minimizeIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Messages / Welcome Screen -->\r\n <app-message-list\r\n [messages]=\"messages\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [appLogoUrl]=\"appLogoUrl\"\r\n [appSubtitle]=\"appSubtitle\"\r\n [welcomeDesc]=\"welcomeDesc\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [isAuthenticated]=\"isAuthenticated\"\r\n (suggestionClick)=\"onSuggestionClick($event)\"\r\n ></app-message-list>\r\n\r\n <!-- SUGGESTED CHIPS: Show only if last bot message was fallback AND user is authenticated -->\r\n <app-chips\r\n *ngIf=\"showSuggestionChips && isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onSuggestionClick($event)\"\r\n ></app-chips>\r\n\r\n <!-- Inline error message -->\r\n <app-snackbar\r\n *ngIf=\"messageError\"\r\n [message]=\"messageError\"\r\n [show]=\"!messageError\"\r\n (closed)=\"onClearMessageError()\"\r\n ></app-snackbar>\r\n\r\n <!-- Chat Input: Only show when authenticated -->\r\n <app-message-input\r\n *ngIf=\"isAuthenticated\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [hintText]=\"hintText\"\r\n [sendIcon]=\"sendIcon\"\r\n (send)=\"onSend($event)\"\r\n ></app-message-input>\r\n\r\n <!-- footer -->\r\n <div class=\"terms-conditions\">\r\n <a href=\"#\">Terms and Conditions</a>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #settingsMenu=\"matMenu\" class=\"mat-menu-override\">\r\n <!-- Change Theme -->\r\n <div class=\"theme-selector\">\r\n <!-- Auto Theme (inherits from parent app) -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'auto'\"\r\n (click)=\"themeService.setTheme('auto')\"\r\n >\r\n <mat-icon>brightness_auto</mat-icon>\r\n </button>\r\n\r\n <!-- Light Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'light'\"\r\n (click)=\"themeService.setTheme('light')\"\r\n >\r\n <mat-icon>light_mode</mat-icon>\r\n </button>\r\n\r\n <!-- Dark Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'dark'\"\r\n (click)=\"themeService.setTheme('dark')\"\r\n >\r\n <mat-icon>dark_mode</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Full-Screen Button -->\r\n <button mat-menu-item (click)=\"onToggleFullScreen()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>{{ isFullScreen ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n <span> {{ isFullScreen ? 'Minimize' : 'Expand' }}</span>\r\n </button>\r\n\r\n <!-- Clear Chat -->\r\n <button mat-menu-item (click)=\"onClearChat()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>clear_all</mat-icon>\r\n <span>Clear Chat</span>\r\n </button>\r\n</mat-menu>\r\n","// export const environment = {\r\n// staging: false,\r\n// development: false,\r\n// production: true,\r\n// chatApiUrl: 'https://api.production.com',\r\n// apiKey: '',\r\n// };\r\nexport const environment = {\r\n config: 'const/app-const.json',\r\n production: false,\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from './environments/environment';\r\nimport { environment as environmentprod } from './environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConst {\r\n static data: any;\r\n\r\n constructor() {}\r\n\r\n async load(): Promise<any> {\r\n const filePath = `../assets/${environment.production ? environmentprod.config : environment.config}?t=${new Date().getTime()}`;\r\n const response = await fetch(filePath);\r\n\r\n if (response.ok) {\r\n try {\r\n AppConst.data = await response.json();\r\n } catch (error: any) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`Could not find file ${filePath}.\\nMESSAGE: ${error.message}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n\r\n if (AppConst.data && !Object.keys(AppConst.data).length) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`No data found in file ${filePath}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n } else {\r\n console.error('============================ ERROR ============================');\r\n console.error(\r\n `Failed to load file ${filePath}.\\nMESSAGE: Request failed with ${response.status} / ${response.statusText}`,\r\n );\r\n console.error('============================ ERROR ============================');\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, delay, retry, map, catchError, of } from 'rxjs';\r\nimport { AppConst } from '../app-const';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HttpService {\r\n // @BlockUI() blockUI!: NgBlockUI;\r\n\r\n apiUrl: string;\r\n\r\n constructor(private http: HttpClient) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n }\r\n\r\n get(\r\n url: string,\r\n param?: object,\r\n nestedParam = false,\r\n showLoader = false,\r\n refresh = true,\r\n ): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n let params = {};\r\n\r\n if (nestedParam) {\r\n this.buildHttpParams(params, param, '');\r\n } else {\r\n params = param as HttpParams;\r\n }\r\n\r\n return this.http.get(`${this.apiUrl}${url}`, { params: params, withCredentials: true }).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private buildHttpParams(params: any, data: any, currentPath: string) {\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] instanceof Object && !(data[key] instanceof Array)) {\r\n this.buildHttpParams(params, data[key], `${currentPath}${key}.`);\r\n } else {\r\n params[`${currentPath}${key}`] = data[key];\r\n }\r\n });\r\n }\r\n\r\n post(url: string, param?: object, showLoader = false): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n return this.http.post(`${this.apiUrl}${url}`, param as HttpParams).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response: any) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private returnResponse(value: any, showLoader: boolean = true): any {\r\n // if (showLoader && this.blockUI.isActive) {\r\n\r\n // this.blockUI.reset();\r\n\r\n // }\r\n\r\n return value;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport { ApiResponse } from '../models/api-response.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AccountService {\r\n constructor(private http: HttpService) {}\r\n\r\n login(param?: LoginRequest, showLoader = false): Observable<ApiResponse<AuthResult>> {\r\n return this.http.post('Account/Login', param, showLoader);\r\n }\r\n\r\n // refreshLogin(param?: object, showLoader = false): Observable<MvResponse<MvLoginResult>> {\r\n\r\n // return this.http.post('Account/RefreshToken', param, showLoader);\r\n\r\n // }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CryptoHelperService {\r\n private encoder = new TextEncoder();\r\n private decoder = new TextDecoder();\r\n private secretKey = ''; // Will be set by AuthService\r\n\r\n setSecretKey(key: string) {\r\n this.secretKey = key;\r\n }\r\n\r\n private async getKey() {\r\n const salt = this.encoder.encode('fixed_salt'); // Keep constant\r\n const baseKey = await crypto.subtle.importKey(\r\n 'raw',\r\n this.encoder.encode(this.secretKey),\r\n 'PBKDF2',\r\n false,\r\n ['deriveKey'],\r\n );\r\n\r\n return crypto.subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt,\r\n iterations: 100000,\r\n hash: 'SHA-256',\r\n },\r\n baseKey,\r\n { name: 'AES-GCM', length: 256 },\r\n false,\r\n ['encrypt', 'decrypt'],\r\n );\r\n }\r\n\r\n async encrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const key = await this.getKey();\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n\r\n const encrypted = await crypto.subtle.encrypt(\r\n { name: 'AES-GCM', iv },\r\n key,\r\n this.encoder.encode(value),\r\n );\r\n\r\n const merged = new Uint8Array(iv.length + encrypted.byteLength);\r\n merged.set(iv, 0);\r\n merged.set(new Uint8Array(encrypted), iv.length);\r\n\r\n return btoa(String.fromCharCode(...merged));\r\n }\r\n\r\n async decrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const raw = Uint8Array.from(atob(value), (c) => c.charCodeAt(0));\r\n\r\n const iv = raw.slice(0, 12);\r\n const data = raw.slice(12);\r\n\r\n const key = await this.getKey();\r\n\r\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);\r\n\r\n return this.decoder.decode(decrypted);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { AppConst } from '../app-const';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { Router } from '@angular/router';\r\nimport { CryptoHelperService } from '../helpers/crypto-helper.service';\r\n\r\n//!! inherit Window storageEventAdded for duplicate tab detection\r\ndeclare global {\r\n interface Window {\r\n storageEventAdded?: boolean;\r\n tabCLoseEventAdded?: boolean;\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n apiUrl: string;\r\n storageKey: string;\r\n secretKey: string;\r\n companyCode: string;\r\n jwtHelper: JwtHelperService = new JwtHelperService();\r\n\r\n constructor(\r\n private router: Router,\r\n private http: HttpClient,\r\n private cryptoHelper: CryptoHelperService,\r\n // private cacheService: NgxCacheService,\r\n // private snackBar: MatSnackBar,\r\n ) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n this.storageKey = AppConst?.data?.storageKey;\r\n this.secretKey = AppConst?.data?.secretKey;\r\n this.companyCode = AppConst?.data?.companyCode;\r\n this.cryptoHelper.setSecretKey(this.secretKey);\r\n }\r\n\r\n logout(): Observable<boolean> {\r\n const url = `${this.apiUrl}Account/Logout`;\r\n return this.http.post(url, {}).pipe(\r\n map((response: any) => {\r\n if (response && response.success) {\r\n this.clearAuth();\r\n // this.redirectOut();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n // redirectIn() {\r\n // let redirectUrl = this.getCurrentNavigationUrl();\r\n // redirectUrl = redirectUrl || AppConst?.data?.redirectUrl || '/login';\r\n // this.router.navigate([redirectUrl], { replaceUrl: true });\r\n // }\r\n\r\n // redirectOut() {\r\n // this.router.navigate(['/login'], { replaceUrl: true });\r\n // }\r\n\r\n // Utility\r\n setSession(session: AuthResult) {\r\n const user = this.jwtHelper.decodeToken(session.access_token);\r\n this.setLocalStorage('access_token', session.access_token);\r\n this.setLocalStorage('refresh_token', session.refresh_token);\r\n this.setLocalStorage('user_id', Number(user?.user_id));\r\n this.setLocalStorage('username', user?.username);\r\n this.setLocalStorage('roles', Number(user?.roles));\r\n this.setLocalStorage('permissions', Number(user?.permissions));\r\n this.setLocalStorage('company_id', user?.company_id);\r\n this.setLocalStorage('office_id', user?.office_id);\r\n }\r\n\r\n setLocalStorage(key: string, value: any) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n dataJson = Object.assign(dataJson, { [key]: value });\r\n localStorage.setItem(this.storageKey, this.encrypt(JSON.stringify(dataJson)));\r\n } else {\r\n let dataNew = Object.assign({}, { [key]: value });\r\n let dataEnc = this.encrypt(JSON.stringify(dataNew));\r\n localStorage.setItem(this.storageKey, dataEnc);\r\n }\r\n }\r\n\r\n getLocalStorage(key: string) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n return dataJson![key] || null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n let token = this.getLocalStorage('access_token');\r\n if (token && !this.isTokenExpired()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isTokenExpired(): boolean {\r\n let token = (this.getLocalStorage('access_token') ?? '') as string;\r\n if (token) {\r\n return this.jwtHelper.isTokenExpired(token);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n encrypt(value: string): any {\r\n if (value) {\r\n return CryptoJS.AES.encrypt(value, this.secretKey);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n decrypt(value: string) {\r\n if (value) {\r\n let bytes = CryptoJS.AES.decrypt(value, this.secretKey);\r\n let decryptedText = bytes.toString(CryptoJS.enc.Utf8);\r\n return decryptedText;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n clearAuth() {\r\n this.clearSession();\r\n this.clearStorage();\r\n this.clearCache();\r\n }\r\n\r\n clearSession() {\r\n sessionStorage.clear();\r\n }\r\n\r\n clearTabInfo() {\r\n localStorage.removeItem('tabs');\r\n }\r\n\r\n clearStorage() {\r\n localStorage.clear();\r\n }\r\n\r\n clearCache() {\r\n // this.cacheService.clearCache();\r\n }\r\n\r\n getUserId() {\r\n return this.getLocalStorage('user_id') || 0;\r\n }\r\n}\r\n","import {\r\n APP_INITIALIZER,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n signal,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageService } from './components/message-input/messaging.service';\r\nimport { ThemeService } from './core/services/theme.service';\r\nimport { DoohbotInput } from './inputs/doohbot-input';\r\nimport { PredefinedMessages } from './helpers/predefined_messages';\r\nimport { ChatButtonComponent } from './components/chat-button/chat-button.component';\r\nimport { ChatWindowComponent } from './components/chat-window/chat-window.component';\r\nimport { DoohbotApiConfig } from './model/api-config.model';\r\nimport { TenantContextService } from './core/services/tenant-context.service';\r\nimport { AccountService } from './core/services/account.service';\r\nimport { AuthService } from './core/services/auth.service';\r\nimport { LoginRequest } from './core/models/login-request.model';\r\nimport { AppConst } from './core/app-const';\r\nimport { UserContext } from './core/models/user-context.model';\r\n\r\n@Component({\r\n selector: 'app-doohbot',\r\n standalone: true,\r\n imports: [CommonModule, ChatButtonComponent, ChatWindowComponent],\r\n templateUrl: './doohbot.component.html',\r\n styleUrls: ['./doohbot.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n AppConst,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (appConst: AppConst) => () => appConst.load(),\r\n deps: [AppConst],\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class Doohbot extends DoohbotInput implements OnDestroy {\r\n @Input() config: DoohbotInput = new DoohbotInput();\r\n @Input() platformTenant!: string;\r\n @Input() subTenant!: string;\r\n @Input() agent!: string;\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() primaryColor: string | undefined;\r\n @Input() apiConfig?: DoohbotApiConfig;\r\n @Input() userContext?: UserContext; // User context for backend proxy mode\r\n\r\n // @Input() theme: 'light' | 'dark' = 'light';\r\n\r\n isFullScreen = false;\r\n public isChatOpen = signal(false);\r\n public isBotTyping = signal(false);\r\n public isAuthenticated = signal(false);\r\n private messageService = inject(MessageService);\r\n public messages = this.messageService.messages;\r\n private lastReadMessageId = signal<string | null>(null);\r\n public themeService = inject(ThemeService);\r\n private tenantContextService = inject(TenantContextService);\r\n private contextSubscription?: Subscription;\r\n\r\n maxMessageLength = 1000;\r\n messageError = signal<string | null>(null);\r\n dismissTimeout: number | null = null;\r\n\r\n // Predefined messages\r\n public predefinedMessages: string[] = PredefinedMessages;\r\n\r\n trackByMessageId(index: number, item: any): string {\r\n return item.id || index.toString();\r\n }\r\n\r\n @ViewChild(ChatWindowComponent, { read: ElementRef }) chatWindowRef!: ElementRef;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n private accountService: AccountService,\r\n private authService: AuthService,\r\n ) {\r\n super();\r\n effect(() => {\r\n const activeTheme = this.themeService.activeTheme();\r\n const host = this.elementRef.nativeElement;\r\n this.renderer.removeClass(host, 'light-theme');\r\n this.renderer.removeClass(host, 'dark-theme');\r\n this.renderer.addClass(host, activeTheme);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['primaryColor']) {\r\n this.updateCssVariables();\r\n }\r\n\r\n // Handle context changes (platformTenant, subTenant, agent)\r\n const contextChanged = changes['platformTenant'] || changes['subTenant'] || changes['agent'];\r\n\r\n if (contextChanged) {\r\n this.updateContext();\r\n }\r\n\r\n // Handle API config changes\r\n if (changes['apiConfig'] && this.apiConfig) {\r\n this.updateApiConfig();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.updateCssVariables();\r\n this.userAvatarUrl = this.config.userAvatarUrl || '';\r\n\r\n // Initialize context\r\n this.updateContext();\r\n\r\n // Initialize API config if provided\r\n if (this.apiConfig) {\r\n this.updateApiConfig();\r\n }\r\n\r\n // Initialize theme from input\r\n // this.themeService.setTheme(this.theme);\r\n\r\n // Subscribe to context changes\r\n this.contextSubscription = this.tenantContextService.contextChange$.subscribe((event) => {\r\n // Sync message service with new context\r\n this.messageService.switchContext(event.contextKey);\r\n\r\n // Reset last read message when context changes\r\n this.lastReadMessageId.set(null);\r\n\r\n // Optionally close chat on context switch (uncomment if desired)\r\n // this.isChatOpen.set(false);\r\n });\r\n\r\n // TODO: 'Remove later - for mock testing only';\r\n // Set initial authentication status\r\n this.isAuthenticated.set(this.authService.isAuthenticated());\r\n\r\n if (!this.authService.isAuthenticated()) {\r\n this.loginUser();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up subscription\r\n this.contextSubscription?.unsubscribe();\r\n }\r\n\r\n private loginUser() {\r\n // TODO: 'Remove later - for mock testing only';\r\n // Check if authentication should be skipped (for testing without backend)\r\n if (this.config.skipAuthentication) {\r\n console.log(' Authentication skipped - Mock mode enabled');\r\n this.isAuthenticated.set(true);\r\n return;\r\n }\r\n\r\n let param = {\r\n username: this.config.username || AppConst.data?.username,\r\n password: this.config.password || AppConst.data?.password,\r\n } as LoginRequest;\r\n this.accountService.login(param).subscribe({\r\n // TODO: 'Remove later - for mock testing only';\r\n\r\n next: (response) => {\r\n if (response && response.success) {\r\n this.isAuthenticated.set(true);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Login failed:', error);\r\n this.isAuthenticated.set(false);\r\n },\r\n });\r\n }\r\n\r\n private updateCssVariables() {\r\n const host = this.elementRef.nativeElement;\r\n if (this.primaryColor) {\r\n host.style.setProperty('--primary-color', this.primaryColor);\r\n } else {\r\n host.style.removeProperty('--primary-color');\r\n }\r\n }\r\n\r\n /**\r\n * Update context when tenant or agent inputs change\r\n */\r\n private updateContext() {\r\n this.tenantContextService.setContext({\r\n platformTenant: this.platformTenant || '',\r\n subTenant: this.subTenant || '',\r\n agent: this.agent || '',\r\n });\r\n }\r\n\r\n /**\r\n * Update API configuration\r\n */\r\n private updateApiConfig() {\r\n if (!this.apiConfig) return;\r\n\r\n // Merge with default config and update the injection token\r\n const config: DoohbotApiConfig = {\r\n ...this.apiConfig,\r\n };\r\n\r\n // Update the provider (this will be picked up by the API service)\r\n // Note: For dynamic config updates, you may need to use a service\r\n console.log('API Config updated:', config);\r\n }\r\n\r\n toggleChat() {\r\n const currentlyOpen = this.isChatOpen();\r\n this.isChatOpen.update((open) => !open);\r\n\r\n if (!currentlyOpen) {\r\n const messages = this.messages();\r\n if (messages.length > 0) {\r\n const lastMessage = messages[messages.length - 1];\r\n this.lastReadMessageId.set(lastMessage.id ?? null);\r\n }\r\n }\r\n }\r\n\r\n clearChat() {\r\n this.messageService.clearMessages();\r\n }\r\n\r\n public async sendMessage(text: string): Promise<void> {\r\n const trimmedText = text.trim();\r\n this.messageError.set(null);\r\n\r\n if (!trimmedText) return;\r\n\r\n if (trimmedText.length > this.maxMessageLength) {\r\n this.messageError.set(this.errorMessage ?? 'Message too long.');\r\n setTimeout(() => {\r\n this.messageError.set(null);\r\n }, 5000);\r\n return;\r\n }\r\n\r\n this.messageService.addMessage({\r\n sender: 'user',\r\n text: trimmedText,\r\n id: Date.now().toString(),\r\n timestamp: new Date(),\r\n });\r\n this.isBotTyping.set(true);\r\n\r\n // Small delay for better UX\r\n setTimeout(async () => {\r\n try {\r\n const botReply = await this.messageService.getBotReply(trimmedText);\r\n const isFallback = botReply === this.messageService.getFallbackReply();\r\n this.messageService.addMessage({\r\n sender: 'bot',\r\n text: botReply,\r\n id: Date.now().toString(),\r\n showSuggestions: isFallback,\r\n });\r\n } catch (error) {\r\n console.error('Error getting bot reply:', error);\r\n // Add fallback message on error\r\n this.messageService.addMessage({\r\n sender: 'bot',\r\n text: this.messageService.getFallbackReply(),\r\n id: Date.now().toString(),\r\n showSuggestions: true,\r\n });\r\n } finally {\r\n this.isBotTyping.set(false);\r\n }\r\n }, 1000);\r\n }\r\n\r\n public clearMessageError(): void {\r\n this.messageError.set(null);\r\n if (this.dismissTimeout) {\r\n clearTimeout(this.dismissTimeout);\r\n this.dismissTimeout = null;\r\n }\r\n }\r\n\r\n showSuggestionChips = computed(() => {\r\n const msgs = this.messages();\r\n if (msgs.length === 0) return false;\r\n const lastBotMsg = [...msgs].reverse().find((m) => m.sender === 'bot');\r\n return lastBotMsg?.showSuggestions === true;\r\n });\r\n\r\n public markAsReadEffect = effect(\r\n () => {\r\n const isOpen = this.isChatOpen();\r\n const msgs = this.messages();\r\n\r\n if (isOpen && msgs.length > 0) {\r\n const lastMessage = msgs[msgs.length - 1];\r\n if (lastMessage?.id) {\r\n const currentLastRead = this.lastReadMessageId();\r\n if (lastMessage.id !== currentLastRead) {\r\n this.lastReadMessageId.set(lastMessage.id);\r\n }\r\n }\r\n }\r\n },\r\n { allowSignalWrites: true },\r\n );\r\n\r\n unreadCount = computed(() => {\r\n if (this.isChatOpen()) {\r\n return 0;\r\n }\r\n const messages = this.messages();\r\n if (messages.length === 0) return 0;\r\n\r\n const lastReadId = this.lastReadMessageId();\r\n let lastReadIndex = -1;\r\n if (lastReadId !== null) {\r\n lastReadIndex = messages.findIndex((msg) => msg.id === lastReadId);\r\n }\r\n\r\n const unreadBotMessages = messages\r\n .slice(lastReadIndex + 1)\r\n .filter((msg) => msg.sender === 'bot');\r\n\r\n return unreadBotMessages.length;\r\n });\r\n\r\n public preFullscreenState: {\r\n width: string;\r\n height: string;\r\n left: string;\r\n top: string;\r\n } | null = null;\r\n\r\n toggleFullScreen() {\r\n const chatWindowEl = this.chatWindowRef?.nativeElement.querySelector('.chat-window');\r\n if (!chatWindowEl) return;\r\n\r\n if (!this.isFullScreen) {\r\n this.preFullscreenState = {\r\n width: chatWindowEl.style.width,\r\n height: chatWindowEl.style.height,\r\n left: chatWindowEl.style.left,\r\n top: chatWindowEl.style.top,\r\n };\r\n\r\n chatWindowEl.style.width = '';\r\n chatWindowEl.style.height = '';\r\n chatWindowEl.style.left = '';\r\n chatWindowEl.style.top = '';\r\n chatWindowEl.style.transform = '';\r\n\r\n this.isFullScreen = true;\r\n } else {\r\n this.isFullScreen = false;\r\n\r\n if (this.preFullscreenState) {\r\n chatWindowEl.style.width = this.preFullscreenState.width || '400px';\r\n chatWindowEl.style.height = this.preFullscreenState.height || '500px';\r\n chatWindowEl.style.left = this.preFullscreenState.left || 'auto';\r\n chatWindowEl.style.top = this.preFullscreenState.top || 'auto';\r\n chatWindowEl.style.transform = 'none';\r\n }\r\n }\r\n }\r\n}\r\n","<app-chat-button\r\n [buttonStyle]=\"buttonStyle\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [unreadCount]=\"unreadCount()\"\r\n [chatIcon]=\"chatIcon ?? ''\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n (toggle)=\"toggleChat()\"\r\n></app-chat-button>\r\n\r\n<app-chat-window\r\n *ngIf=\"isChatOpen()\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [enableDrag]=\"enableDrag\"\r\n [enableResize]=\"enableResize\"\r\n [isFullScreen]=\"isFullScreen\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [moreIcon]=\"moreIcon ?? ''\"\r\n [minimizeIcon]=\"minimizeIcon ?? ''\"\r\n [messages]=\"messages()\"\r\n [isBotTyping]=\"isBotTyping()\"\r\n [isAuthenticated]=\"isAuthenticated()\"\r\n [appSubtitle]=\"appSubtitle ?? ''\"\r\n [welcomeDesc]=\"welcomeDesc ?? ''\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl ?? ''\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [hintText]=\"hintText ?? ''\"\r\n [sendIcon]=\"sendIcon ?? ''\"\r\n [messageError]=\"messageError()\"\r\n [showSuggestionChips]=\"showSuggestionChips()\"\r\n (toggleChat)=\"toggleChat()\"\r\n (toggleFullScreen)=\"toggleFullScreen()\"\r\n (suggestionClick)=\"sendMessage($event)\"\r\n (send)=\"sendMessage($event)\"\r\n (clearMessageError)=\"clearMessageError()\"\r\n (clearChat)=\"clearChat()\"\r\n></app-chat-window>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const DOOHBOT_API_URL = new InjectionToken<string>('DOOHBOT_API_URL');\r\n","/*\r\n * Public API Surface of chatbot\r\n */\r\n\r\n// Main component\r\nexport * from './lib/doohbot.component';\r\n\r\nexport * from './lib/inputs/doohbot-input';\r\nexport * from './lib/model/api-config.model';\r\nexport * from './lib/core/models/user-context.model';\r\nexport * from './lib/core/services/doohbot-api.service';\r\nexport * from './lib/core/services/auth.service';\r\nexport * from './lib/core/services/account.service';\r\nexport * from './lib/constant/constant';\r\nexport * from './lib/model/token';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","environmentprod","retry","map","catchError","i1.HttpService","i3.CryptoHelperService","i1.AccountService","i2.AuthService","i3"],"mappings":"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"}
1
+ {"version":3,"file":"aakash58-chatbot.mjs","sources":["../../../projects/doohbot/src/lib/model/doohbot.intents.ts","../../../projects/doohbot/src/lib/model/api-config.model.ts","../../../projects/doohbot/src/lib/core/services/tenant-context.service.ts","../../../projects/doohbot/src/lib/core/services/doohbot-api.service.ts","../../../projects/doohbot/src/lib/components/message-input/messaging.service.ts","../../../projects/doohbot/src/lib/core/services/theme.service.ts","../../../projects/doohbot/src/lib/constant/constant.ts","../../../projects/doohbot/src/lib/inputs/doohbot-input.ts","../../../projects/doohbot/src/lib/helpers/predefined_messages.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.html","../../../projects/doohbot/src/lib/shared/chips/chips.component.ts","../../../projects/doohbot/src/lib/shared/chips/chips.component.html","../../../projects/doohbot/src/lib/components/message-list/message-list.component.ts","../../../projects/doohbot/src/lib/components/message-list/message-list.component.html","../../../projects/doohbot/src/lib/components/message-input/message-input.component.ts","../../../projects/doohbot/src/lib/components/message-input/message-input.component.html","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.html","../../../projects/doohbot/src/lib/directives/draggable/draggable-dialog.directive.ts","../../../projects/doohbot/src/lib/directives/resizable/resizable-dialog.directive.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.html","../../../projects/doohbot/src/lib/core/environments/environment.ts","../../../projects/doohbot/src/lib/core/app-const.ts","../../../projects/doohbot/src/lib/core/services/http.service.ts","../../../projects/doohbot/src/lib/core/services/account.service.ts","../../../projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts","../../../projects/doohbot/src/lib/core/services/auth.service.ts","../../../projects/doohbot/src/lib/doohbot.component.ts","../../../projects/doohbot/src/lib/doohbot.component.html","../../../projects/doohbot/src/lib/model/token.ts","../../../projects/doohbot/src/public-api.ts","../../../projects/doohbot/src/aakash58-chatbot.ts"],"sourcesContent":["import { ChatIntent } from './message';\r\n\r\nexport const CHAT_INTENTS: ChatIntent[] = [\r\n {\r\n patterns: ['hello', 'hi', 'hey', 'greetings', 'good morning', 'good afternoon', 'good evening'],\r\n response: 'πŸ‘‹Hello! How can I help you today?',\r\n },\r\n {\r\n patterns: ['how are you', 'how are you doing'],\r\n response: \"I'm just a bot, but I'm doing great! How about you?\",\r\n },\r\n {\r\n patterns: ['help', 'support', 'problem', 'about', 'issue', 'question', 'assist', 'Contact'],\r\n response: 'Sure! Please tell me your issue, and I will try to assist you.',\r\n },\r\n {\r\n patterns: ['bye', 'goodbye', 'see you', 'thanks', 'thank you', 'bye bye', 'see you later'],\r\n response: 'Goodbye! Have a nice day!',\r\n },\r\n {\r\n patterns: ['news and updates', 'updates', 'news', 'new'],\r\n response: 'Stay tuned for the latest news and updates from our team!',\r\n },\r\n];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { environment } from '../core/environments/environment.prod';\r\n\r\n/**\r\n * Configuration for Doohbot API integration\r\n */\r\nexport interface DoohbotApiConfig {\r\n /**\r\n * Backend API endpoint URL\r\n * Example: 'https://api.example.com/chat'\r\n */\r\n apiUrl: string;\r\n\r\n /**\r\n * Optional API key for authentication\r\n */\r\n apiKey?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 30000 (30 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Enable API mode (true) or use local intent matching (false)\r\n * @default false\r\n */\r\n enableApi?: boolean;\r\n\r\n /**\r\n * Include message history in API requests\r\n * @default false\r\n */\r\n includeHistory?: boolean;\r\n\r\n /**\r\n * Maximum number of history messages to include in requests\r\n * @default 10\r\n */\r\n maxHistoryMessages?: number;\r\n\r\n /**\r\n * Custom headers to include in API requests\r\n */\r\n customHeaders?: Record<string, string>;\r\n\r\n /**\r\n * Enable retry on failure\r\n * @default true\r\n */\r\n enableRetry?: boolean;\r\n\r\n /**\r\n * Number of retry attempts\r\n * @default 2\r\n */\r\n retryAttempts?: number;\r\n\r\n /**\r\n * Delay between retries in milliseconds\r\n * @default 1000\r\n */\r\n retryDelay?: number;\r\n}\r\n\r\n/**\r\n * Injection token for providing Doohbot API configuration\r\n */\r\nexport const DOOHBOT_API_CONFIG = new InjectionToken<DoohbotApiConfig>('DOOHBOT_API_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({\r\n apiUrl: '',\r\n timeout: 30000,\r\n enableApi: false,\r\n includeHistory: false,\r\n maxHistoryMessages: 10,\r\n enableRetry: true,\r\n retryAttempts: 2,\r\n retryDelay: 1000,\r\n }),\r\n});\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface ChatContext {\r\n platformTenant: string;\r\n subTenant: string;\r\n agent: string;\r\n}\r\n\r\nexport interface ContextChangeEvent {\r\n previous: ChatContext | null;\r\n current: ChatContext;\r\n contextKey: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TenantContextService {\r\n // Current context state\r\n private platformTenant = signal<string>('');\r\n private subTenant = signal<string>('');\r\n private agent = signal<string>('');\r\n\r\n // Computed context object\r\n public currentContext = computed<ChatContext>(() => ({\r\n platformTenant: this.platformTenant(),\r\n subTenant: this.subTenant(),\r\n agent: this.agent(),\r\n }));\r\n\r\n // Computed unique context key for storage\r\n public contextKey = computed<string>(() => {\r\n const pt = this.platformTenant() || 'default';\r\n const st = this.subTenant() || 'default';\r\n const ag = this.agent() || 'default';\r\n return `${pt}_${st}_${ag}`;\r\n });\r\n\r\n // Observable for context changes\r\n private contextChangeSubject = new Subject<ContextChangeEvent>();\r\n public contextChange$ = this.contextChangeSubject.asObservable();\r\n\r\n private previousContext: ChatContext | null = null;\r\n\r\n constructor() {\r\n // Effect to emit context changes\r\n effect(() => {\r\n const current = this.currentContext();\r\n const key = this.contextKey();\r\n\r\n // Only emit if context actually changed\r\n if (this.hasContextChanged(current)) {\r\n this.contextChangeSubject.next({\r\n previous: this.previousContext,\r\n current: current,\r\n contextKey: key,\r\n });\r\n this.previousContext = { ...current };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the complete context\r\n */\r\n public setContext(context: Partial<ChatContext>): void {\r\n if (context.platformTenant !== undefined) {\r\n this.platformTenant.set(context.platformTenant);\r\n }\r\n if (context.subTenant !== undefined) {\r\n this.subTenant.set(context.subTenant);\r\n }\r\n if (context.agent !== undefined) {\r\n this.agent.set(context.agent);\r\n }\r\n }\r\n\r\n /**\r\n * Update individual context properties\r\n */\r\n public setPlatformTenant(platformTenant: string): void {\r\n this.platformTenant.set(platformTenant);\r\n }\r\n\r\n public setSubTenant(subTenant: string): void {\r\n this.subTenant.set(subTenant);\r\n }\r\n\r\n public setAgent(agent: string): void {\r\n this.agent.set(agent);\r\n }\r\n\r\n /**\r\n * Get current context values\r\n */\r\n public getPlatformTenant(): string {\r\n return this.platformTenant();\r\n }\r\n\r\n public getSubTenant(): string {\r\n return this.subTenant();\r\n }\r\n\r\n public getAgent(): string {\r\n return this.agent();\r\n }\r\n\r\n public getContextKey(): string {\r\n return this.contextKey();\r\n }\r\n\r\n public getContext(): ChatContext {\r\n return this.currentContext();\r\n }\r\n\r\n /**\r\n * Check if context has changed\r\n */\r\n private hasContextChanged(current: ChatContext): boolean {\r\n if (!this.previousContext) {\r\n // First time initialization - only emit if we have valid values\r\n return current.platformTenant !== '' || current.subTenant !== '' || current.agent !== '';\r\n }\r\n\r\n return (\r\n this.previousContext.platformTenant !== current.platformTenant ||\r\n this.previousContext.subTenant !== current.subTenant ||\r\n this.previousContext.agent !== current.agent\r\n );\r\n }\r\n\r\n /**\r\n * Reset context to default\r\n */\r\n public resetContext(): void {\r\n this.platformTenant.set('');\r\n this.subTenant.set('');\r\n this.agent.set('');\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError, timer } from 'rxjs';\r\nimport { catchError, retry, timeout, map } from 'rxjs/operators';\r\nimport { DOOHBOT_API_CONFIG, DoohbotApiConfig } from '../../model/api-config.model';\r\nimport { ChatApiRequest, ChatApiResponse, ChatApiError } from '../../model/api-request.model';\r\nimport { Message } from '../../model/message';\r\nimport { TenantContextService } from './tenant-context.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatbotApiService {\r\n private http = inject(HttpClient);\r\n private tenantContext = inject(TenantContextService);\r\n private config = inject(DOOHBOT_API_CONFIG);\r\n\r\n /**\r\n * Send a chat message to the API\r\n * @param message User's message text\r\n * @param history Optional message history for context\r\n * @returns Observable of the API response\r\n */\r\n sendMessage(message: string, history?: Message[]): Observable<ChatApiResponse> {\r\n if (!this.config.apiUrl) {\r\n return throwError(\r\n () =>\r\n ({\r\n message: 'API URL not configured',\r\n code: 'CONFIG_ERROR',\r\n }) as ChatApiError,\r\n );\r\n }\r\n\r\n // Build request payload with tenant context\r\n const request = this.buildRequest(message, history);\r\n\r\n // Build headers\r\n const headers = this.buildHeaders();\r\n\r\n // Configure timeout\r\n const timeoutMs = this.config.timeout || 30000;\r\n\r\n // Make HTTP request\r\n return this.http.post<ChatApiResponse>(this.config.apiUrl, request, { headers }).pipe(\r\n timeout(timeoutMs),\r\n this.applyRetryStrategy(),\r\n map((response) => this.validateResponse(response)),\r\n catchError((error) => this.handleError(error)),\r\n );\r\n }\r\n\r\n /**\r\n * Build request payload with current tenant context\r\n */\r\n private buildRequest(message: string, history?: Message[]): ChatApiRequest {\r\n const context = this.tenantContext.getContext();\r\n\r\n const request: ChatApiRequest = {\r\n message,\r\n platformTenant: context.platformTenant,\r\n subTenant: context.subTenant,\r\n agent: context.agent,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n // Include history if enabled and provided\r\n if (this.config.includeHistory && history && history.length > 0) {\r\n const maxMessages = this.config.maxHistoryMessages || 10;\r\n request.history = history.slice(-maxMessages);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Build HTTP headers\r\n */\r\n private buildHeaders(): HttpHeaders {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n\r\n // Add API key if provided\r\n if (this.config.apiKey) {\r\n headers = headers.set('Authorization', `Bearer ${this.config.apiKey}`);\r\n }\r\n\r\n // Add custom headers if provided\r\n if (this.config.customHeaders) {\r\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Apply retry strategy based on configuration\r\n */\r\n private applyRetryStrategy() {\r\n return (source: Observable<ChatApiResponse>) => {\r\n if (!this.config.enableRetry) {\r\n return source;\r\n }\r\n\r\n const retryAttempts = this.config.retryAttempts || 2;\r\n const retryDelay = this.config.retryDelay || 1000;\r\n\r\n return source.pipe(\r\n retry({\r\n count: retryAttempts,\r\n delay: (error, retryCount) => {\r\n // Only retry on network errors or 5xx server errors\r\n if (this.shouldRetry(error)) {\r\n console.warn(`Retrying API request (attempt ${retryCount}/${retryAttempts})...`);\r\n return timer(retryDelay * retryCount);\r\n }\r\n // Don't retry on client errors (4xx)\r\n return throwError(() => error);\r\n },\r\n }),\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Determine if error should trigger a retry\r\n */\r\n private shouldRetry(error: any): boolean {\r\n if (error instanceof HttpErrorResponse) {\r\n // Retry on network errors or 5xx server errors\r\n return error.status === 0 || error.status >= 500;\r\n }\r\n // Retry on timeout errors\r\n if (error.name === 'TimeoutError') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate API response\r\n */\r\n private validateResponse(response: ChatApiResponse): ChatApiResponse {\r\n if (!response || !response.reply) {\r\n throw {\r\n message: 'Invalid API response: missing reply field',\r\n code: 'INVALID_RESPONSE',\r\n } as ChatApiError;\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle API errors\r\n */\r\n private handleError(error: any): Observable<never> {\r\n let apiError: ChatApiError;\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n // HTTP error\r\n apiError = {\r\n message: error.error?.message || error.message || 'API request failed',\r\n code: error.error?.code || 'HTTP_ERROR',\r\n statusCode: error.status,\r\n details: error.error,\r\n };\r\n } else if (error.name === 'TimeoutError') {\r\n // Timeout error\r\n apiError = {\r\n message: 'Request timeout - please try again',\r\n code: 'TIMEOUT',\r\n statusCode: 408,\r\n };\r\n } else {\r\n // Other errors\r\n apiError = {\r\n message: error.message || 'Unknown error occurred',\r\n code: error.code || 'UNKNOWN_ERROR',\r\n details: error,\r\n };\r\n }\r\n\r\n console.error('Chatbot API Error:', apiError);\r\n return throwError(() => apiError);\r\n }\r\n\r\n /**\r\n * Check if API is enabled\r\n */\r\n isApiEnabled(): boolean {\r\n return this.config.enableApi === true && !!this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Get current API configuration\r\n */\r\n getConfig(): DoohbotApiConfig {\r\n return { ...this.config };\r\n }\r\n}\r\n","import { Injectable, signal, inject } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { CHAT_INTENTS } from '../../model/doohbot.intents';\r\nimport { ChatApiError } from '../../model/api-request.model';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChatbotApiService } from '../../core/services/doohbot-api.service';\r\nimport { UserContext } from '../../core/models/user-context.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MessageService {\r\n // Context-aware message storage\r\n private messageStore = new Map<string, Message[]>();\r\n private currentContextKey = signal<string>('default');\r\n\r\n // Public messages signal for current context\r\n public messages = signal<Message[]>([]);\r\n public audioUnlocked = false;\r\n\r\n // Enable/disable localStorage persistence\r\n private enablePersistence = true;\r\n private readonly STORAGE_PREFIX = 'doohbot_messages_';\r\n\r\n // API service (optional)\r\n private apiService = inject(ChatbotApiService, { optional: true });\r\n\r\n // User context for backend proxy mode\r\n private userContext?: UserContext;\r\n\r\n // API state signals\r\n public isLoadingApi = signal<boolean>(false);\r\n public apiError = signal<ChatApiError | null>(null);\r\n\r\n constructor() {\r\n // Load persisted messages on initialization\r\n this.loadPersistedMessages();\r\n }\r\n\r\n /**\r\n * Switch to a new context\r\n */\r\n public switchContext(contextKey: string): void {\r\n // Save current context messages before switching\r\n if (this.currentContextKey()) {\r\n this.saveContextMessages(this.currentContextKey(), this.messages());\r\n }\r\n\r\n // Update context key\r\n this.currentContextKey.set(contextKey);\r\n\r\n // Load messages for new context\r\n const contextMessages = this.messageStore.get(contextKey) || [];\r\n this.messages.set([...contextMessages]);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n public getCurrentContextKey(): string {\r\n return this.currentContextKey();\r\n }\r\n\r\n /**\r\n * Set user context for backend proxy mode\r\n * This allows tracking which user sent each message\r\n */\r\n public setUserContext(context: UserContext): void {\r\n this.userContext = context;\r\n }\r\n\r\n /**\r\n * Get current user context\r\n */\r\n public getUserContext(): UserContext | undefined {\r\n return this.userContext;\r\n }\r\n\r\n /**\r\n * Clear messages for current context\r\n */\r\n clearMessages(): void {\r\n this.messages.set([]);\r\n const contextKey = this.currentContextKey();\r\n this.messageStore.set(contextKey, []);\r\n this.persistMessages(contextKey, []);\r\n }\r\n\r\n /**\r\n * Clear all messages across all contexts\r\n */\r\n clearAllMessages(): void {\r\n this.messages.set([]);\r\n this.messageStore.clear();\r\n if (this.enablePersistence) {\r\n this.clearAllPersistedMessages();\r\n }\r\n }\r\n\r\n /**\r\n * Add message to current context\r\n */\r\n public addMessage(message: Message): void {\r\n const newMessage = { ...message, timestamp: new Date() };\r\n\r\n // Update current messages signal\r\n this.messages.update((msgs) => [...msgs, newMessage]);\r\n\r\n // Update message store for current context\r\n const contextKey = this.currentContextKey();\r\n const contextMessages = this.messageStore.get(contextKey) || [];\r\n const updatedMessages = [...contextMessages, newMessage];\r\n this.saveContextMessages(contextKey, updatedMessages);\r\n\r\n if (message.sender === 'bot') {\r\n this.playBotSound();\r\n }\r\n }\r\n\r\n /**\r\n * Get messages for a specific context\r\n */\r\n public getMessagesForContext(contextKey: string): Message[] {\r\n return this.messageStore.get(contextKey) || [];\r\n }\r\n\r\n /**\r\n * Get all context keys that have messages\r\n */\r\n public getAllContextKeys(): string[] {\r\n return Array.from(this.messageStore.keys());\r\n }\r\n\r\n /**\r\n * Get bot reply - supports both API and local modes\r\n * @param userText User's message\r\n * @returns Promise with bot reply\r\n */\r\n async getBotReply(userText: string): Promise<string> {\r\n // Check if API mode is enabled\r\n if (this.apiService?.isApiEnabled()) {\r\n return this.getBotReplyFromApi(userText);\r\n }\r\n // Fall back to local intent matching\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n /**\r\n * Get bot reply from API\r\n */\r\n private async getBotReplyFromApi(userText: string): Promise<string> {\r\n if (!this.apiService) {\r\n return this.getFallbackReply();\r\n }\r\n\r\n try {\r\n this.isLoadingApi.set(true);\r\n this.apiError.set(null);\r\n\r\n // Get message history if API config includes history\r\n const history = this.apiService.getConfig().includeHistory ? this.messages() : undefined;\r\n\r\n // Call API\r\n const response = await firstValueFrom(this.apiService.sendMessage(userText, history));\r\n\r\n this.isLoadingApi.set(false);\r\n return response.reply;\r\n } catch (error) {\r\n this.isLoadingApi.set(false);\r\n const apiError = error as ChatApiError;\r\n this.apiError.set(apiError);\r\n console.error('API error, falling back to local mode:', apiError);\r\n\r\n // Fallback to local mode on API error\r\n return this.getBotReplyLocal(userText);\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply using local intent matching\r\n */\r\n private getBotReplyLocal(userText: string): string {\r\n const text = userText.toLowerCase();\r\n for (const intent of CHAT_INTENTS) {\r\n if (intent.patterns.some((pattern) => text.includes(pattern))) {\r\n return intent.response;\r\n }\r\n }\r\n return this.getFallbackReply();\r\n }\r\n\r\n getFallbackReply(): string {\r\n return \"I'm sorry πŸ˜”, I didn't understand that.\";\r\n }\r\n\r\n // method that tells you if it's a fallback\r\n isFallbackIntent(userText: string): boolean {\r\n const text = userText.toLowerCase();\r\n return !CHAT_INTENTS.some((intent) =>\r\n intent.patterns.some((pattern) => text.includes(pattern)),\r\n );\r\n }\r\n\r\n public unlockAudio(): void {\r\n if (this.audioUnlocked) return;\r\n const audio = new Audio();\r\n audio.volume = 1.0;\r\n audio\r\n .play()\r\n .then(() => (this.audioUnlocked = true))\r\n .catch(() => {});\r\n }\r\n\r\n public playBotSound(): void {\r\n if (!this.audioUnlocked) return;\r\n try {\r\n const audio = new Audio('assets/bot.mp3');\r\n audio.play();\r\n } catch (error) {\r\n console.error('Error playing bot sound:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Enable or disable localStorage persistence\r\n */\r\n public setPersistence(enabled: boolean): void {\r\n this.enablePersistence = enabled;\r\n }\r\n\r\n /**\r\n * Private: Save context messages to store and persist\r\n */\r\n private saveContextMessages(contextKey: string, messages: Message[]): void {\r\n this.messageStore.set(contextKey, messages);\r\n this.persistMessages(contextKey, messages);\r\n }\r\n\r\n /**\r\n * Private: Persist messages to localStorage\r\n */\r\n private persistMessages(contextKey: string, messages: Message[]): void {\r\n if (!this.enablePersistence) return;\r\n try {\r\n const key = this.STORAGE_PREFIX + contextKey;\r\n localStorage.setItem(key, JSON.stringify(messages));\r\n } catch (error) {\r\n console.error('Error persisting messages:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Private: Load all persisted messages from localStorage\r\n */\r\n private loadPersistedMessages(): void {\r\n if (!this.enablePersistence) return;\r\n try {\r\n const keys = Object.keys(localStorage);\r\n keys.forEach((key) => {\r\n if (key.startsWith(this.STORAGE_PREFIX)) {\r\n const contextKey = key.replace(this.STORAGE_PREFIX, '');\r\n const messagesJson = localStorage.getItem(key);\r\n if (messagesJson) {\r\n const messages = JSON.parse(messagesJson) as Message[];\r\n // Convert timestamp strings back to Date objects\r\n messages.forEach((msg) => {\r\n if (msg.timestamp && typeof msg.timestamp === 'string') {\r\n msg.timestamp = new Date(msg.timestamp);\r\n }\r\n });\r\n this.messageStore.set(contextKey, messages);\r\n }\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Error loading persisted messages:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Private: Clear all persisted messages from localStorage\r\n */\r\n private clearAllPersistedMessages(): void {\r\n try {\r\n const keys = Object.keys(localStorage);\r\n keys.forEach((key) => {\r\n if (key.startsWith(this.STORAGE_PREFIX)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Error clearing persisted messages:', error);\r\n }\r\n }\r\n}\r\n","import { Injectable, OnDestroy, Renderer2, RendererFactory2, signal } from '@angular/core';\r\nimport { OverlayContainer } from '@angular/cdk/overlay';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n private renderer: Renderer2;\r\n private _theme = signal<ThemeMode>('auto');\r\n public theme = this._theme.asReadonly();\r\n\r\n private _activeTheme = signal<'light-theme' | 'dark-theme'>('light-theme');\r\n public activeTheme = this._activeTheme.asReadonly();\r\n\r\n private observer: MutationObserver | null = null;\r\n // private mediaQueryListener: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n constructor(\r\n rendererFactory: RendererFactory2,\r\n private overlay: OverlayContainer,\r\n ) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n // Initialize theme from local storage or default to auto\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n this.setTheme(savedTheme || 'auto');\r\n }\r\n\r\n setTheme(mode: ThemeMode): void {\r\n this._theme.set(mode);\r\n localStorage.setItem('theme', mode);\r\n this.updateActiveTheme(mode);\r\n }\r\n\r\n private updateActiveTheme(mode: ThemeMode) {\r\n this.cleanupObservers();\r\n\r\n if (mode === 'auto') {\r\n this.handleAutoTheme();\r\n } else {\r\n const themeToApply = mode === 'dark' ? 'dark-theme' : 'light-theme';\r\n this._activeTheme.set(themeToApply);\r\n this.applyThemeToGlobal(themeToApply);\r\n }\r\n }\r\n\r\n private handleAutoTheme() {\r\n // Initial detection\r\n this.detectAndApplyParentTheme();\r\n\r\n // Watch for changes in parent\r\n this.observer = new MutationObserver(() => {\r\n this.detectAndApplyParentTheme();\r\n });\r\n\r\n this.observer.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n this.observer.observe(document.body, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n\r\n // Also listen to system preference as a fallback or if parent doesn't specify\r\n // const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n // this.mediaQueryListener = (e) => {\r\n // // Re-run detection which prioritizes parent classes but falls back to system\r\n // this.detectAndApplyParentTheme();\r\n // };\r\n // mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n\r\n private detectAndApplyParentTheme() {\r\n const isDark = this.isParentDark();\r\n const newTheme = isDark ? 'dark-theme' : 'light-theme';\r\n\r\n // Only update if changed to avoid unnecessary DOM updates\r\n if (this._activeTheme() !== newTheme) {\r\n this._activeTheme.set(newTheme);\r\n this.applyThemeToGlobal(newTheme);\r\n }\r\n }\r\n\r\n private isParentDark(): boolean {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Check for common class names\r\n const darkClasses = [\r\n 'dark',\r\n 'dark-theme',\r\n 'dark-mode',\r\n 'night-mode',\r\n 'data-bs-theme-light',\r\n 'data-bs-theme-dark',\r\n ];\r\n const hasDarkClass = (el: HTMLElement) => darkClasses.some((c) => el.classList.contains(c));\r\n\r\n if (hasDarkClass(body) || hasDarkClass(html)) return true;\r\n\r\n // Check for data-theme attribute\r\n if (body.getAttribute('data-theme') === 'dark' || html.getAttribute('data-theme') === 'dark')\r\n return true;\r\n\r\n // Fallback to system preference\r\n // return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n return false;\r\n }\r\n\r\n private applyThemeToGlobal(theme: 'light-theme' | 'dark-theme') {\r\n // We do NOT touch document.body anymore to avoid conflicts\r\n const overlayContainer = this.overlay.getContainerElement();\r\n\r\n // Only apply to overlay container (for menus/dialogs)\r\n // The main chat window handles its own theme via the host binding in doohbot.component.ts\r\n this.renderer.removeClass(overlayContainer, 'light-theme');\r\n this.renderer.removeClass(overlayContainer, 'dark-theme');\r\n this.renderer.addClass(overlayContainer, theme);\r\n }\r\n\r\n private cleanupObservers() {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n // if (this.mediaQueryListener) {\r\n // window\r\n // .matchMedia('(prefers-color-scheme: dark)')\r\n // .removeEventListener('change', this.mediaQueryListener);\r\n // this.mediaQueryListener = null;\r\n // }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.cleanupObservers();\r\n }\r\n}\r\n","export const appConst = {\r\n //LIVE ASSETS\r\n // APP_LOGO: 'https://iili.io/f3qSQJn.md.png',\r\n // USER_AVATAR: 'https://iili.io/KpEYoCP.png',\r\n // BOT_AVATAR: 'https://iili.io/KpER0Ge.png',\r\n\r\n // ==================\r\n\r\n //png ASSETS\r\n // APP_LOGO: 'assets/logo.svg',\r\n // USER_AVATAR: 'assets/profile.png',\r\n // BOT_AVATAR: 'assets/bot.png',\r\n\r\n // ==================\r\n\r\n // base64_ASSETS\r\n APP_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjI1MCIgdmlld0JveD0iMCAwIDI1MCAyNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MCA1MS45MDE0QzgxLjczMTcgNDcuNDIzIDExNS4wMzggNTAuOTI5MiAxNDIuNTkzIDYxLjY0OTRDMTcwLjE0NyA3Mi4zNjk2IDE4OS42OTIgODkuNDI1NSAxOTYuOTI4IDEwOS4wNjRDMjA0LjE2NCAxMjguNzAzIDE5OC40OTggMTQ5LjMxNyAxODEuMTc3IDE2Ni4zNzFDMTYzLjg1NiAxODMuNDI1IDEzNi4yOTggMTk1LjUyMiAxMDQuNTY2IDIwMEw3OC43MTk3IDEyOS44NUM5OC40Mjk4IDEzNC4xNjQgMTEyLjkxNyAxNDcuMTY4IDExMy43NjQgMTYyLjc1NEwxMTMuODUzIDE2NC4zODFMMTEzLjk0IDE2Mi43NTRDMTE0Ljk1NiAxNDQuMDY5IDEzNS41NzYgMTI5LjA5IDE2MS4yOTkgMTI4LjM1M0wxNjMuNTM5IDEyOC4yODhMMTYxLjI5OSAxMjguMjI0QzEzNS41NzYgMTI3LjQ4NiAxMTQuOTU0IDExMi41MDcgMTEzLjk0IDkzLjgyMTNMMTEzLjg1MyA5Mi4xOTQzTDExMy43NjQgOTMuODIxM0MxMTIuOTAzIDEwOS42ODcgOTcuOTA0OSAxMjIuODc4IDc3LjY1MTQgMTI2Ljk1TDc3LjI4MzIgMTI1Ljk1TDUwIDUxLjkwMTRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjM0MV81ODQ0KSIvPgo8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzIzNDFfNTg0NCIgeDE9IjUwIiB5MT0iNTEuMjA4IiB4Mj0iMjAwIiB5Mj0iMTk4Ljc5MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNEY0NkU1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzg4NzhGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=',\r\n USER_AVATAR:\r\n 'data:image/png;base64,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',\r\n BOT_AVATAR:\r\n 'data:image/png;base64,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',\r\n};\r\n","import { appConst } from '../constant/constant';\r\nimport { DOOHBOT_API_URL } from './../model/token';\r\n\r\nexport class DoohbotInput {\r\n username = '';\r\n password = '';\r\n authToken?: string;\r\n\r\n DOOHBOT_API_URL?: string;\r\n skipAuthentication?: boolean;\r\n\r\n // inputs\r\n userAvatarUrl: string = appConst.USER_AVATAR;\r\n\r\n // Application Constants Text\r\n readonly appTitle? = 'DoohBot';\r\n readonly appSubtitle? = 'Welcome to DoohBot';\r\n readonly welcomeDesc? =\r\n 'We provide a powerful live chat platform to help businesses connect with their customers, offer support, and increase sales through real-time conversations.';\r\n readonly chatIcon? = 'chat';\r\n readonly sendIcon? = 'send';\r\n readonly closeIcon? = 'close';\r\n readonly clear? = 'clear_all';\r\n readonly minimizeIcon? = 'remove';\r\n readonly moreIcon? = 'more_vert';\r\n readonly fullscreenIcon? = 'fullscreen';\r\n readonly fullscreenExitIcon? = 'fullscreen_exit';\r\n readonly hintText? = 'Please Enter Here';\r\n readonly errorMessage? = 'The message you submitted was too long.';\r\n\r\n // Application Constants Images\r\n readonly appLogoUrl? = appConst.APP_LOGO;\r\n readonly botAvatarUrl? = appConst.BOT_AVATAR;\r\n}\r\n","export const PredefinedMessages = ['Hello!', 'I need help', 'Contact support', 'News and Updates'];\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chat-button',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-button.component.html',\r\n styleUrls: ['./chat-button.component.scss'],\r\n})\r\nexport class ChatButtonComponent {\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() isChatOpen: boolean = false;\r\n @Input() unreadCount: number = 0;\r\n @Input() chatIcon: string = 'chat';\r\n @Input() appTitle: string = 'Chat';\r\n\r\n @Output() toggle = new EventEmitter<void>();\r\n\r\n get isSidebar(): boolean {\r\n return this.buttonStyle.startsWith('sidebar');\r\n }\r\n\r\n get sidebarPosition(): 'top' | 'center' | 'bottom' {\r\n if (!this.isSidebar) return 'center';\r\n if (this.buttonStyle === 'sidebar') return 'center';\r\n return this.buttonStyle.split('-')[1] as 'top' | 'center' | 'bottom';\r\n }\r\n\r\n onToggle() {\r\n this.toggle.emit();\r\n }\r\n}\r\n","<!-- fab -->\r\n<button class=\"chat-fab\" (click)=\"onToggle()\" *ngIf=\"buttonStyle === 'fab' && !isChatOpen\">\r\n <mat-icon>{{ chatIcon }}</mat-icon>\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n\r\n<!-- sidebar button -->\r\n<button\r\n class=\"chat-sidebar\"\r\n (click)=\"onToggle()\"\r\n *ngIf=\"isSidebar && !isChatOpen\"\r\n [ngClass]=\"sidebarPosition\"\r\n>\r\n <h2 style=\"transform: rotate(-90deg); font-size: 16px\">{{ appTitle }}</h2>\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-chips',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class Chips {\r\n @Input() messages: string[] = []; // messages array\r\n @Input() disabled = false;\r\n @Output() chipClick = new EventEmitter<string>(); // emit clicked chip\r\n\r\n onChipClick(msg: string) {\r\n if (this.disabled) return;\r\n this.chipClick.emit(msg);\r\n }\r\n}\r\n","@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { Message } from '../../model/message';\r\n\r\n@Component({\r\n selector: 'app-message-list',\r\n standalone: true,\r\n imports: [CommonModule, Chips],\r\n templateUrl: './message-list.component.html',\r\n styleUrls: ['./message-list.component.scss'],\r\n})\r\nexport class MessageListComponent implements AfterViewInit, OnDestroy {\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appLogoUrl: string = '';\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n\r\n @ViewChild('chatMessages') private chatMessagesContainer!: ElementRef;\r\n private mutationObserver!: MutationObserver;\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.chatMessagesContainer) return;\r\n\r\n this.mutationObserver = new MutationObserver(() => this.scrollToBottom());\r\n\r\n this.mutationObserver.observe(this.chatMessagesContainer.nativeElement, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(): void {\r\n if (!this.chatMessagesContainer) {\r\n return;\r\n }\r\n const container = this.chatMessagesContainer.nativeElement;\r\n container.scrollTo({\r\n top: container.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n\r\n onPredefinedClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n}\r\n","<div #chatMessages class=\"chat-messages\">\r\n <!-- Welcome Screen -->\r\n <div class=\"welcome-screen\" *ngIf=\"messages.length === 0 && !isBotTyping\">\r\n <img [src]=\"appLogoUrl\" alt=\"Welcome\" class=\"welcome-image\" style=\"border-radius: 24px\" />\r\n <h3>{{ appSubtitle }}</h3>\r\n <p>{{ welcomeDesc }}</p>\r\n\r\n <!-- Predefined messages chips: Only show when authenticated -->\r\n <app-chips\r\n *ngIf=\"isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onPredefinedClick($event)\"\r\n ></app-chips>\r\n </div>\r\n\r\n <!-- Chat Messages -->\r\n <div\r\n *ngFor=\"let message of messages; trackBy: trackByMessageId\"\r\n class=\"message-wrapper\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n <!-- Bot Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'bot'\"\r\n class=\"bot-avatar\"\r\n [src]=\"botAvatarUrl\"\r\n alt=\"Bot Avatar\"\r\n />\r\n\r\n <!-- Message Bubble -->\r\n <div\r\n class=\"message\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n {{ message.text }}\r\n <!-- Show time below message -->\r\n <div *ngIf=\"message.sender === 'bot'\" class=\"message-time\">\r\n {{ message.timestamp | date: 'shortTime' }}\r\n </div>\r\n </div>\r\n\r\n <!-- User Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'user'\"\r\n class=\"user-avatar\"\r\n [src]=\"userAvatarUrl\"\r\n alt=\"User Avatar\"\r\n />\r\n </div>\r\n\r\n <!-- Typing Indicator -->\r\n <div class=\"message-wrapper bot\" *ngIf=\"isBotTyping\">\r\n <img class=\"bot-avatar\" [src]=\"botAvatarUrl\" alt=\"Bot Avatar\" />\r\n <div class=\"message bot\">\r\n <div class=\"typing-indicator\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-message-input',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './message-input.component.html',\r\n styleUrls: ['./message-input.component.scss'],\r\n})\r\nexport class MessageInputComponent {\r\n @Input() isBotTyping: boolean = false;\r\n @Input() hintText: string = 'Type a message...';\r\n @Input() sendIcon: string = 'send';\r\n\r\n @Output() send = new EventEmitter<string>();\r\n\r\n onSend(text: string) {\r\n if (text.trim()) {\r\n this.send.emit(text);\r\n }\r\n }\r\n}\r\n","<!-- Chat Input -->\r\n<div class=\"chat-input\">\r\n <div class=\"input-wrapper\">\r\n <input #messageInput type=\"text\" [disabled]=\"isBotTyping\"\r\n (keydown.enter)=\"onSend(messageInput.value); messageInput.value = ''\" [placeholder]=\"hintText\" />\r\n\r\n <button [disabled]=\"isBotTyping\" (click)=\"onSend(messageInput.value); messageInput.value = ''\">\r\n <mat-icon>{{ sendIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-snackbar',\r\n templateUrl: './snackbar.component.html',\r\n styleUrls: ['./snackbar.component.scss'],\r\n standalone: true,\r\n imports: [MatIconModule],\r\n})\r\nexport class SnackBar implements OnInit, OnDestroy {\r\n @Input() message: string | null = null;\r\n @Input() autoDismiss: boolean = true;\r\n @Input() dismissDelay: number = 5000;\r\n @Input() show: boolean = false;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n public timeoutId: number | null = null;\r\n\r\n ngOnInit() {\r\n if (this.autoDismiss) {\r\n this.timeoutId = setTimeout(() => {\r\n this.close();\r\n }, this.dismissDelay) as any;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimeout();\r\n }\r\n\r\n close() {\r\n this.show = false;\r\n this.message = null;\r\n this.closed.emit();\r\n }\r\n public clearTimeout() {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = null;\r\n }\r\n }\r\n}\r\n","<div class=\"message-error\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">warning</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[draggableDialog]',\r\n standalone: true,\r\n})\r\nexport class DraggableDialogDirective implements OnInit {\r\n private isDragging = false;\r\n private startX = 0;\r\n private startY = 0;\r\n private offsetX = 0;\r\n private offsetY = 0;\r\n\r\n @Input('dragHandle') dragHandleSelector: string | undefined;\r\n @Input() enableDrag = false;\r\n\r\n private dragHandle: HTMLElement | undefined;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableDrag) {\r\n this.el.nativeElement.removeAttribute('draggableDialog');\r\n return;\r\n }\r\n\r\n if (this.dragHandleSelector) {\r\n this.dragHandle = this.el.nativeElement.querySelector(this.dragHandleSelector);\r\n } else {\r\n this.dragHandle = this.el.nativeElement; // fallback\r\n }\r\n if (this.dragHandle) {\r\n this.renderer.setStyle(this.dragHandle, 'cursor', 'move');\r\n }\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n if (!this.dragHandle || event.target !== this.dragHandle) return;\r\n\r\n this.isDragging = true;\r\n this.startX = event.clientX - this.offsetX;\r\n this.startY = event.clientY - this.offsetY;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.offsetX = event.clientX - this.startX;\r\n this.offsetY = event.clientY - this.startY;\r\n\r\n this.renderer.setStyle(\r\n this.el.nativeElement,\r\n 'transform',\r\n `translate(${this.offsetX}px, ${this.offsetY}px)`,\r\n );\r\n }\r\n\r\n @HostListener('document:mouseup', [])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n }\r\n}\r\n","// resizable-dialog.directive.ts\r\nimport {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n Input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[resizableDialog]',\r\n standalone: true,\r\n})\r\nexport class ResizableDialogDirective implements OnInit, OnDestroy {\r\n private resizeHandles: HTMLElement[] = [];\r\n private activeHandle: string | null = null;\r\n private startX = 0;\r\n private startY = 0;\r\n private startWidth = 0;\r\n private startHeight = 0;\r\n private startLeft = 0;\r\n private startTop = 0;\r\n\r\n @Input() enableResize = false;\r\n\r\n // Define resize directions\r\n private directions = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];\r\n\r\n constructor(\r\n private el: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableResize) {\r\n this.el.nativeElement.removeAttribute('resizableDialog');\r\n return;\r\n }\r\n\r\n this.setStyle();\r\n this.createResizeHandles();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeResizeHandles();\r\n }\r\n\r\n private setStyle() {\r\n const element = this.el.nativeElement;\r\n this.renderer.setStyle(element, 'position', 'absolute');\r\n this.renderer.setStyle(element, 'overflow', 'hidden');\r\n this.renderer.setStyle(element, 'boxSizing', 'border-box');\r\n }\r\n\r\n private createResizeHandles() {\r\n this.directions.forEach((dir) => {\r\n const handle = this.renderer.createElement('div');\r\n this.renderer.setAttribute(handle, 'data-dir', dir);\r\n this.renderer.setStyle(handle, 'position', 'absolute');\r\n this.renderer.setStyle(handle, 'background', 'transparent');\r\n this.renderer.setStyle(handle, 'zIndex', '10');\r\n this.renderer.setStyle(handle, 'userSelect', 'none');\r\n\r\n // Set size and position based on direction\r\n if (dir.includes('e') || dir.includes('w')) {\r\n this.renderer.setStyle(handle, 'width', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('e') ? 'e-resize' : 'w-resize');\r\n this.renderer.setStyle(handle, 'top', '0');\r\n this.renderer.setStyle(handle, 'bottom', '0');\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n }\r\n if (dir.includes('n') || dir.includes('s')) {\r\n this.renderer.setStyle(handle, 'height', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('s') ? 's-resize' : 'n-resize');\r\n this.renderer.setStyle(handle, 'left', '0');\r\n this.renderer.setStyle(handle, 'right', '0');\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n }\r\n if (dir === 'ne' || dir === 'nw' || dir === 'se' || dir === 'sw') {\r\n this.renderer.setStyle(handle, 'width', '12px');\r\n this.renderer.setStyle(handle, 'height', '12px');\r\n this.renderer.setStyle(handle, 'borderRadius', '50%');\r\n this.renderer.setStyle(handle, 'cursor', `${dir}-resize`);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n }\r\n\r\n this.renderer.appendChild(this.el.nativeElement, handle);\r\n this.resizeHandles.push(handle);\r\n });\r\n }\r\n\r\n private removeResizeHandles() {\r\n this.resizeHandles.forEach((handle) => {\r\n this.renderer.removeChild(this.el.nativeElement, handle);\r\n });\r\n this.resizeHandles = [];\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n const dir = target.getAttribute('data-dir');\r\n if (!dir) return;\r\n\r\n event.preventDefault();\r\n\r\n this.activeHandle = dir;\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = parseFloat(this.getComputedStyleValue('width'));\r\n this.startHeight = parseFloat(this.getComputedStyleValue('height'));\r\n this.startLeft = parseFloat(this.getComputedStyleValue('left'));\r\n this.startTop = parseFloat(this.getComputedStyleValue('top'));\r\n\r\n // Prevent text selection during resize\r\n document.body.classList.add('no-select');\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.activeHandle) return;\r\n\r\n const dx = event.clientX - this.startX;\r\n const dy = event.clientY - this.startY;\r\n\r\n let newWidth = this.startWidth;\r\n let newHeight = this.startHeight;\r\n let newLeft = this.startLeft;\r\n let newTop = this.startTop;\r\n\r\n const minWidth = 150;\r\n const minHeight = 100;\r\n\r\n // Horizontal resize\r\n if (this.activeHandle.includes('e')) {\r\n newWidth = Math.max(this.startWidth + dx, minWidth);\r\n }\r\n if (this.activeHandle.includes('w')) {\r\n newWidth = Math.max(this.startWidth - dx, minWidth);\r\n newLeft = this.startLeft + (this.startWidth - newWidth);\r\n }\r\n\r\n // Vertical resize\r\n if (this.activeHandle.includes('s')) {\r\n newHeight = Math.max(this.startHeight + dy, minHeight);\r\n }\r\n if (this.activeHandle.includes('n')) {\r\n newHeight = Math.max(this.startHeight - dy, minHeight);\r\n newTop = this.startTop + (this.startHeight - newHeight);\r\n }\r\n\r\n // Apply changes\r\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'left', `${newLeft}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'top', `${newTop}px`);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n if (this.activeHandle) {\r\n this.activeHandle = null;\r\n document.body.classList.remove('no-select');\r\n }\r\n }\r\n\r\n private getComputedStyleValue(property: string): string {\r\n return getComputedStyle(this.el.nativeElement).getPropertyValue(property) || '0';\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, TrackByFunction } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { MessageListComponent } from '../message-list/message-list.component';\r\nimport { MessageInputComponent } from '../message-input/message-input.component';\r\nimport { SnackBar } from '../../shared/snackbar/snackbar.component';\r\nimport { DraggableDialogDirective } from '../../directives/draggable/draggable-dialog.directive';\r\nimport { ResizableDialogDirective } from '../../directives/resizable/resizable-dialog.directive';\r\nimport { Message } from '../../model/message';\r\nimport { ThemeService } from '../../core/services/theme.service';\r\nimport { inject } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n Chips,\r\n MessageListComponent,\r\n MessageInputComponent,\r\n SnackBar,\r\n DraggableDialogDirective,\r\n ResizableDialogDirective,\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n})\r\nexport class ChatWindowComponent {\r\n @Input() isChatOpen: boolean = false;\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() isFullScreen: boolean = false;\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() appTitle: string = '';\r\n @Input() appLogoUrl: string = '';\r\n @Input() moreIcon: string = 'more_vert';\r\n @Input() minimizeIcon: string = 'minimize';\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n @Input() hintText: string = '';\r\n @Input() sendIcon: string = '';\r\n @Input() messageError: string | null = null;\r\n @Input() showSuggestionChips: boolean = false;\r\n\r\n @Output() toggleChat = new EventEmitter<void>();\r\n @Output() toggleFullScreen = new EventEmitter<void>();\r\n @Output() openSettings = new EventEmitter<void>();\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n @Output() send = new EventEmitter<string>();\r\n @Output() clearMessageError = new EventEmitter<void>();\r\n @Output() clearChat = new EventEmitter<void>();\r\n\r\n public themeService = inject(ThemeService);\r\n\r\n onToggleChat() {\r\n this.toggleChat.emit();\r\n }\r\n\r\n onToggleFullScreen() {\r\n this.toggleFullScreen.emit();\r\n }\r\n\r\n onOpenSettings() {\r\n this.openSettings.emit();\r\n }\r\n\r\n onSuggestionClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n\r\n onSend(text: string) {\r\n this.send.emit(text);\r\n }\r\n\r\n onClearMessageError() {\r\n this.clearMessageError.emit();\r\n }\r\n\r\n onClearChat() {\r\n this.clearChat.emit();\r\n }\r\n}\r\n","<div\r\n *ngIf=\"isChatOpen\"\r\n draggableDialog\r\n [enableDrag]=\"enableDrag\"\r\n [dragHandle]=\"'.chat-header'\"\r\n resizableDialog\r\n [enableResize]=\"enableResize\"\r\n class=\"chat-window\"\r\n [class.fullscreen]=\"isFullScreen\"\r\n>\r\n <!-- chat window -->\r\n <div class=\"chat-header\">\r\n <div class=\"chat-title\">\r\n <img class=\"chat-logo\" style=\"border-radius: 14px\" [src]=\"appLogoUrl\" alt=\"Logo\" />\r\n <h2>{{ appTitle }}</h2>\r\n </div>\r\n\r\n <div class=\"chat-header-buttons\">\r\n <!-- settings Button -->\r\n <button class=\"header-button\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <mat-icon>{{ moreIcon }}</mat-icon>\r\n </button>\r\n\r\n <!-- minimize Button -->\r\n <button class=\"header-button\" (click)=\"onToggleChat()\">\r\n <mat-icon>{{ minimizeIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Messages / Welcome Screen -->\r\n <app-message-list\r\n [messages]=\"messages\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [appLogoUrl]=\"appLogoUrl\"\r\n [appSubtitle]=\"appSubtitle\"\r\n [welcomeDesc]=\"welcomeDesc\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [isAuthenticated]=\"isAuthenticated\"\r\n (suggestionClick)=\"onSuggestionClick($event)\"\r\n ></app-message-list>\r\n\r\n <!-- SUGGESTED CHIPS: Show only if last bot message was fallback AND user is authenticated -->\r\n <app-chips\r\n *ngIf=\"showSuggestionChips && isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onSuggestionClick($event)\"\r\n ></app-chips>\r\n\r\n <!-- Inline error message -->\r\n <app-snackbar\r\n *ngIf=\"messageError\"\r\n [message]=\"messageError\"\r\n [show]=\"!messageError\"\r\n (closed)=\"onClearMessageError()\"\r\n ></app-snackbar>\r\n\r\n <!-- Chat Input: Only show when authenticated -->\r\n <app-message-input\r\n *ngIf=\"isAuthenticated\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [hintText]=\"hintText\"\r\n [sendIcon]=\"sendIcon\"\r\n (send)=\"onSend($event)\"\r\n ></app-message-input>\r\n\r\n <!-- footer -->\r\n <div class=\"terms-conditions\">\r\n <a href=\"#\">Terms and Conditions</a>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #settingsMenu=\"matMenu\" class=\"mat-menu-override\">\r\n <!-- Change Theme -->\r\n <div class=\"theme-selector\">\r\n <!-- Auto Theme (inherits from parent app) -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'auto'\"\r\n (click)=\"themeService.setTheme('auto')\"\r\n >\r\n <mat-icon>brightness_auto</mat-icon>\r\n </button>\r\n\r\n <!-- Light Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'light'\"\r\n (click)=\"themeService.setTheme('light')\"\r\n >\r\n <mat-icon>light_mode</mat-icon>\r\n </button>\r\n\r\n <!-- Dark Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'dark'\"\r\n (click)=\"themeService.setTheme('dark')\"\r\n >\r\n <mat-icon>dark_mode</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Full-Screen Button -->\r\n <button mat-menu-item (click)=\"onToggleFullScreen()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>{{ isFullScreen ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n <span> {{ isFullScreen ? 'Minimize' : 'Expand' }}</span>\r\n </button>\r\n\r\n <!-- Clear Chat -->\r\n <button mat-menu-item (click)=\"onClearChat()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>clear_all</mat-icon>\r\n <span>Clear Chat</span>\r\n </button>\r\n</mat-menu>\r\n","// export const environment = {\r\n// staging: false,\r\n// development: false,\r\n// production: true,\r\n// chatApiUrl: 'https://api.production.com',\r\n// apiKey: '',\r\n// };\r\nexport const environment = {\r\n config: 'const/app-const.json',\r\n production: false,\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from './environments/environment';\r\nimport { environment as environmentprod } from './environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConst {\r\n static data: any;\r\n\r\n constructor() {}\r\n\r\n async load(): Promise<any> {\r\n const filePath = `../assets/${environment.production ? environmentprod.config : environment.config}?t=${new Date().getTime()}`;\r\n const response = await fetch(filePath);\r\n\r\n if (response.ok) {\r\n try {\r\n AppConst.data = await response.json();\r\n } catch (error: any) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`Could not find file ${filePath}.\\nMESSAGE: ${error.message}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n\r\n if (AppConst.data && !Object.keys(AppConst.data).length) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`No data found in file ${filePath}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n } else {\r\n console.error('============================ ERROR ============================');\r\n console.error(\r\n `Failed to load file ${filePath}.\\nMESSAGE: Request failed with ${response.status} / ${response.statusText}`,\r\n );\r\n console.error('============================ ERROR ============================');\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, delay, retry, map, catchError, of } from 'rxjs';\r\nimport { AppConst } from '../app-const';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HttpService {\r\n // @BlockUI() blockUI!: NgBlockUI;\r\n\r\n apiUrl: string;\r\n\r\n constructor(private http: HttpClient) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n }\r\n\r\n get(\r\n url: string,\r\n param?: object,\r\n nestedParam = false,\r\n showLoader = false,\r\n refresh = true,\r\n ): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n let params = {};\r\n\r\n if (nestedParam) {\r\n this.buildHttpParams(params, param, '');\r\n } else {\r\n params = param as HttpParams;\r\n }\r\n\r\n return this.http.get(`${this.apiUrl}${url}`, { params: params, withCredentials: true }).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private buildHttpParams(params: any, data: any, currentPath: string) {\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] instanceof Object && !(data[key] instanceof Array)) {\r\n this.buildHttpParams(params, data[key], `${currentPath}${key}.`);\r\n } else {\r\n params[`${currentPath}${key}`] = data[key];\r\n }\r\n });\r\n }\r\n\r\n post(url: string, param?: object, showLoader = false): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n return this.http.post(`${this.apiUrl}${url}`, param as HttpParams).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response: any) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private returnResponse(value: any, showLoader: boolean = true): any {\r\n // if (showLoader && this.blockUI.isActive) {\r\n\r\n // this.blockUI.reset();\r\n\r\n // }\r\n\r\n return value;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport { ApiResponse } from '../models/api-response.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AccountService {\r\n constructor(private http: HttpService) {}\r\n\r\n login(param?: LoginRequest, showLoader = false): Observable<ApiResponse<AuthResult>> {\r\n return this.http.post('Account/Login', param, showLoader);\r\n }\r\n\r\n // refreshLogin(param?: object, showLoader = false): Observable<MvResponse<MvLoginResult>> {\r\n\r\n // return this.http.post('Account/RefreshToken', param, showLoader);\r\n\r\n // }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CryptoHelperService {\r\n private encoder = new TextEncoder();\r\n private decoder = new TextDecoder();\r\n private secretKey = ''; // Will be set by AuthService\r\n\r\n setSecretKey(key: string) {\r\n this.secretKey = key;\r\n }\r\n\r\n private async getKey() {\r\n const salt = this.encoder.encode('fixed_salt'); // Keep constant\r\n const baseKey = await crypto.subtle.importKey(\r\n 'raw',\r\n this.encoder.encode(this.secretKey),\r\n 'PBKDF2',\r\n false,\r\n ['deriveKey'],\r\n );\r\n\r\n return crypto.subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt,\r\n iterations: 100000,\r\n hash: 'SHA-256',\r\n },\r\n baseKey,\r\n { name: 'AES-GCM', length: 256 },\r\n false,\r\n ['encrypt', 'decrypt'],\r\n );\r\n }\r\n\r\n async encrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const key = await this.getKey();\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n\r\n const encrypted = await crypto.subtle.encrypt(\r\n { name: 'AES-GCM', iv },\r\n key,\r\n this.encoder.encode(value),\r\n );\r\n\r\n const merged = new Uint8Array(iv.length + encrypted.byteLength);\r\n merged.set(iv, 0);\r\n merged.set(new Uint8Array(encrypted), iv.length);\r\n\r\n return btoa(String.fromCharCode(...merged));\r\n }\r\n\r\n async decrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const raw = Uint8Array.from(atob(value), (c) => c.charCodeAt(0));\r\n\r\n const iv = raw.slice(0, 12);\r\n const data = raw.slice(12);\r\n\r\n const key = await this.getKey();\r\n\r\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);\r\n\r\n return this.decoder.decode(decrypted);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { AppConst } from '../app-const';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { Router } from '@angular/router';\r\nimport { CryptoHelperService } from '../helpers/crypto-helper.service';\r\n\r\n//!! inherit Window storageEventAdded for duplicate tab detection\r\ndeclare global {\r\n interface Window {\r\n storageEventAdded?: boolean;\r\n tabCLoseEventAdded?: boolean;\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n apiUrl: string;\r\n storageKey: string;\r\n secretKey: string;\r\n companyCode: string;\r\n jwtHelper: JwtHelperService = new JwtHelperService();\r\n\r\n constructor(\r\n private router: Router,\r\n private http: HttpClient,\r\n private cryptoHelper: CryptoHelperService,\r\n // private cacheService: NgxCacheService,\r\n // private snackBar: MatSnackBar,\r\n ) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n this.storageKey = AppConst?.data?.storageKey;\r\n this.secretKey = AppConst?.data?.secretKey;\r\n this.companyCode = AppConst?.data?.companyCode;\r\n this.cryptoHelper.setSecretKey(this.secretKey);\r\n }\r\n\r\n logout(): Observable<boolean> {\r\n const url = `${this.apiUrl}Account/Logout`;\r\n return this.http.post(url, {}).pipe(\r\n map((response: any) => {\r\n if (response && response.success) {\r\n this.clearAuth();\r\n // this.redirectOut();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n // redirectIn() {\r\n // let redirectUrl = this.getCurrentNavigationUrl();\r\n // redirectUrl = redirectUrl || AppConst?.data?.redirectUrl || '/login';\r\n // this.router.navigate([redirectUrl], { replaceUrl: true });\r\n // }\r\n\r\n // redirectOut() {\r\n // this.router.navigate(['/login'], { replaceUrl: true });\r\n // }\r\n\r\n // Utility\r\n setSession(session: AuthResult) {\r\n const user = this.jwtHelper.decodeToken(session.access_token);\r\n this.setLocalStorage('access_token', session.access_token);\r\n this.setLocalStorage('refresh_token', session.refresh_token);\r\n this.setLocalStorage('user_id', Number(user?.user_id));\r\n this.setLocalStorage('username', user?.username);\r\n this.setLocalStorage('roles', Number(user?.roles));\r\n this.setLocalStorage('permissions', Number(user?.permissions));\r\n this.setLocalStorage('company_id', user?.company_id);\r\n this.setLocalStorage('office_id', user?.office_id);\r\n }\r\n\r\n setLocalStorage(key: string, value: any) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n dataJson = Object.assign(dataJson, { [key]: value });\r\n localStorage.setItem(this.storageKey, this.encrypt(JSON.stringify(dataJson)));\r\n } else {\r\n let dataNew = Object.assign({}, { [key]: value });\r\n let dataEnc = this.encrypt(JSON.stringify(dataNew));\r\n localStorage.setItem(this.storageKey, dataEnc);\r\n }\r\n }\r\n\r\n getLocalStorage(key: string) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n return dataJson![key] || null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n let token = this.getLocalStorage('access_token');\r\n if (token && !this.isTokenExpired()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isTokenExpired(): boolean {\r\n let token = (this.getLocalStorage('access_token') ?? '') as string;\r\n if (token) {\r\n return this.jwtHelper.isTokenExpired(token);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n encrypt(value: string): any {\r\n if (value) {\r\n return CryptoJS.AES.encrypt(value, this.secretKey);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n decrypt(value: string) {\r\n if (value) {\r\n let bytes = CryptoJS.AES.decrypt(value, this.secretKey);\r\n let decryptedText = bytes.toString(CryptoJS.enc.Utf8);\r\n return decryptedText;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n clearAuth() {\r\n this.clearSession();\r\n this.clearStorage();\r\n this.clearCache();\r\n }\r\n\r\n clearSession() {\r\n sessionStorage.clear();\r\n }\r\n\r\n clearTabInfo() {\r\n localStorage.removeItem('tabs');\r\n }\r\n\r\n clearStorage() {\r\n localStorage.clear();\r\n }\r\n\r\n clearCache() {\r\n // this.cacheService.clearCache();\r\n }\r\n\r\n getUserId() {\r\n return this.getLocalStorage('user_id') || 0;\r\n }\r\n}\r\n","import {\r\n APP_INITIALIZER,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n signal,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageService } from './components/message-input/messaging.service';\r\nimport { ThemeService } from './core/services/theme.service';\r\nimport { DoohbotInput } from './inputs/doohbot-input';\r\nimport { PredefinedMessages } from './helpers/predefined_messages';\r\nimport { ChatButtonComponent } from './components/chat-button/chat-button.component';\r\nimport { ChatWindowComponent } from './components/chat-window/chat-window.component';\r\nimport { DoohbotApiConfig } from './model/api-config.model';\r\nimport { TenantContextService } from './core/services/tenant-context.service';\r\nimport { AccountService } from './core/services/account.service';\r\nimport { AuthService } from './core/services/auth.service';\r\nimport { LoginRequest } from './core/models/login-request.model';\r\nimport { AppConst } from './core/app-const';\r\nimport { UserContext } from './core/models/user-context.model';\r\n\r\n@Component({\r\n selector: 'app-doohbot',\r\n standalone: true,\r\n imports: [CommonModule, ChatButtonComponent, ChatWindowComponent],\r\n templateUrl: './doohbot.component.html',\r\n styleUrls: ['./doohbot.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n AppConst,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (appConst: AppConst) => () => appConst.load(),\r\n deps: [AppConst],\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class Doohbot extends DoohbotInput implements OnDestroy {\r\n @Input() config: DoohbotInput = new DoohbotInput();\r\n @Input() platformTenant!: string;\r\n @Input() subTenant!: string;\r\n @Input() agent!: string;\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() primaryColor: string | undefined;\r\n @Input() apiConfig?: DoohbotApiConfig;\r\n @Input() userContext?: UserContext; // User context for backend proxy mode\r\n\r\n // @Input() theme: 'light' | 'dark' = 'light';\r\n\r\n isFullScreen = false;\r\n public isChatOpen = signal(false);\r\n public isBotTyping = signal(false);\r\n public isAuthenticated = signal(false);\r\n private messageService = inject(MessageService);\r\n public messages = this.messageService.messages;\r\n private lastReadMessageId = signal<string | null>(null);\r\n public themeService = inject(ThemeService);\r\n private tenantContextService = inject(TenantContextService);\r\n private contextSubscription?: Subscription;\r\n\r\n maxMessageLength = 1000;\r\n messageError = signal<string | null>(null);\r\n dismissTimeout: number | null = null;\r\n\r\n // Predefined messages\r\n public predefinedMessages: string[] = PredefinedMessages;\r\n\r\n trackByMessageId(index: number, item: any): string {\r\n return item.id || index.toString();\r\n }\r\n\r\n @ViewChild(ChatWindowComponent, { read: ElementRef }) chatWindowRef!: ElementRef;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n private accountService: AccountService,\r\n private authService: AuthService,\r\n ) {\r\n super();\r\n effect(() => {\r\n const activeTheme = this.themeService.activeTheme();\r\n const host = this.elementRef.nativeElement;\r\n this.renderer.removeClass(host, 'light-theme');\r\n this.renderer.removeClass(host, 'dark-theme');\r\n this.renderer.addClass(host, activeTheme);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['primaryColor']) {\r\n this.updateCssVariables();\r\n }\r\n\r\n // Handle context changes (platformTenant, subTenant, agent)\r\n const contextChanged = changes['platformTenant'] || changes['subTenant'] || changes['agent'];\r\n\r\n if (contextChanged) {\r\n this.updateContext();\r\n }\r\n\r\n // Handle API config changes\r\n if (changes['apiConfig'] && this.apiConfig) {\r\n this.updateApiConfig();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.updateCssVariables();\r\n this.userAvatarUrl = this.config.userAvatarUrl || '';\r\n\r\n // Initialize context\r\n this.updateContext();\r\n\r\n // Initialize API config if provided\r\n if (this.apiConfig) {\r\n this.updateApiConfig();\r\n }\r\n\r\n // Initialize theme from input\r\n // this.themeService.setTheme(this.theme);\r\n\r\n // Subscribe to context changes\r\n this.contextSubscription = this.tenantContextService.contextChange$.subscribe((event) => {\r\n // Sync message service with new context\r\n this.messageService.switchContext(event.contextKey);\r\n\r\n // Reset last read message when context changes\r\n this.lastReadMessageId.set(null);\r\n\r\n // Optionally close chat on context switch (uncomment if desired)\r\n // this.isChatOpen.set(false);\r\n });\r\n\r\n // TODO: 'Remove later - for mock testing only';\r\n // Set initial authentication status\r\n this.isAuthenticated.set(this.authService.isAuthenticated());\r\n\r\n if (!this.authService.isAuthenticated()) {\r\n this.loginUser();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up subscription\r\n this.contextSubscription?.unsubscribe();\r\n }\r\n\r\n private loginUser() {\r\n // TODO: 'Remove later - for mock testing only';\r\n // Check if authentication should be skipped (for testing without backend)\r\n if (this.config.skipAuthentication) {\r\n console.log(' Authentication skipped - Mock mode enabled');\r\n this.isAuthenticated.set(true);\r\n return;\r\n }\r\n\r\n let param = {\r\n username: this.config.username || AppConst.data?.username,\r\n password: this.config.password || AppConst.data?.password,\r\n } as LoginRequest;\r\n this.accountService.login(param).subscribe({\r\n // TODO: 'Remove later - for mock testing only';\r\n\r\n next: (response) => {\r\n if (response && response.success) {\r\n this.isAuthenticated.set(true);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Login failed:', error);\r\n this.isAuthenticated.set(false);\r\n },\r\n });\r\n }\r\n\r\n private updateCssVariables() {\r\n const host = this.elementRef.nativeElement;\r\n if (this.primaryColor) {\r\n host.style.setProperty('--primary-color', this.primaryColor);\r\n } else {\r\n host.style.removeProperty('--primary-color');\r\n }\r\n }\r\n\r\n /**\r\n * Update context when tenant or agent inputs change\r\n */\r\n private updateContext() {\r\n this.tenantContextService.setContext({\r\n platformTenant: this.platformTenant || '',\r\n subTenant: this.subTenant || '',\r\n agent: this.agent || '',\r\n });\r\n }\r\n\r\n /**\r\n * Update API configuration\r\n */\r\n private updateApiConfig() {\r\n if (!this.apiConfig) return;\r\n\r\n // Merge with default config and update the injection token\r\n const config: DoohbotApiConfig = {\r\n ...this.apiConfig,\r\n };\r\n\r\n // Update the provider (this will be picked up by the API service)\r\n // Note: For dynamic config updates, you may need to use a service\r\n console.log('API Config updated:', config);\r\n }\r\n\r\n toggleChat() {\r\n const currentlyOpen = this.isChatOpen();\r\n this.isChatOpen.update((open) => !open);\r\n\r\n if (!currentlyOpen) {\r\n const messages = this.messages();\r\n if (messages.length > 0) {\r\n const lastMessage = messages[messages.length - 1];\r\n this.lastReadMessageId.set(lastMessage.id ?? null);\r\n }\r\n }\r\n }\r\n\r\n clearChat() {\r\n this.messageService.clearMessages();\r\n }\r\n\r\n public async sendMessage(text: string): Promise<void> {\r\n const trimmedText = text.trim();\r\n this.messageError.set(null);\r\n\r\n if (!trimmedText) return;\r\n\r\n if (trimmedText.length > this.maxMessageLength) {\r\n this.messageError.set(this.errorMessage ?? 'Message too long.');\r\n setTimeout(() => {\r\n this.messageError.set(null);\r\n }, 5000);\r\n return;\r\n }\r\n\r\n this.messageService.addMessage({\r\n sender: 'user',\r\n text: trimmedText,\r\n id: Date.now().toString(),\r\n timestamp: new Date(),\r\n });\r\n this.isBotTyping.set(true);\r\n\r\n // Small delay for better UX\r\n setTimeout(async () => {\r\n try {\r\n const botReply = await this.messageService.getBotReply(trimmedText);\r\n const isFallback = botReply === this.messageService.getFallbackReply();\r\n this.messageService.addMessage({\r\n sender: 'bot',\r\n text: botReply,\r\n id: Date.now().toString(),\r\n showSuggestions: isFallback,\r\n });\r\n } catch (error) {\r\n console.error('Error getting bot reply:', error);\r\n // Add fallback message on error\r\n this.messageService.addMessage({\r\n sender: 'bot',\r\n text: this.messageService.getFallbackReply(),\r\n id: Date.now().toString(),\r\n showSuggestions: true,\r\n });\r\n } finally {\r\n this.isBotTyping.set(false);\r\n }\r\n }, 1000);\r\n }\r\n\r\n public clearMessageError(): void {\r\n this.messageError.set(null);\r\n if (this.dismissTimeout) {\r\n clearTimeout(this.dismissTimeout);\r\n this.dismissTimeout = null;\r\n }\r\n }\r\n\r\n showSuggestionChips = computed(() => {\r\n const msgs = this.messages();\r\n if (msgs.length === 0) return false;\r\n const lastBotMsg = [...msgs].reverse().find((m) => m.sender === 'bot');\r\n return lastBotMsg?.showSuggestions === true;\r\n });\r\n\r\n public markAsReadEffect = effect(\r\n () => {\r\n const isOpen = this.isChatOpen();\r\n const msgs = this.messages();\r\n\r\n if (isOpen && msgs.length > 0) {\r\n const lastMessage = msgs[msgs.length - 1];\r\n if (lastMessage?.id) {\r\n const currentLastRead = this.lastReadMessageId();\r\n if (lastMessage.id !== currentLastRead) {\r\n this.lastReadMessageId.set(lastMessage.id);\r\n }\r\n }\r\n }\r\n },\r\n { allowSignalWrites: true },\r\n );\r\n\r\n unreadCount = computed(() => {\r\n if (this.isChatOpen()) {\r\n return 0;\r\n }\r\n const messages = this.messages();\r\n if (messages.length === 0) return 0;\r\n\r\n const lastReadId = this.lastReadMessageId();\r\n let lastReadIndex = -1;\r\n if (lastReadId !== null) {\r\n lastReadIndex = messages.findIndex((msg) => msg.id === lastReadId);\r\n }\r\n\r\n const unreadBotMessages = messages\r\n .slice(lastReadIndex + 1)\r\n .filter((msg) => msg.sender === 'bot');\r\n\r\n return unreadBotMessages.length;\r\n });\r\n\r\n public preFullscreenState: {\r\n width: string;\r\n height: string;\r\n left: string;\r\n top: string;\r\n } | null = null;\r\n\r\n toggleFullScreen() {\r\n const chatWindowEl = this.chatWindowRef?.nativeElement.querySelector('.chat-window');\r\n if (!chatWindowEl) return;\r\n\r\n if (!this.isFullScreen) {\r\n this.preFullscreenState = {\r\n width: chatWindowEl.style.width,\r\n height: chatWindowEl.style.height,\r\n left: chatWindowEl.style.left,\r\n top: chatWindowEl.style.top,\r\n };\r\n\r\n chatWindowEl.style.width = '';\r\n chatWindowEl.style.height = '';\r\n chatWindowEl.style.left = '';\r\n chatWindowEl.style.top = '';\r\n chatWindowEl.style.transform = '';\r\n\r\n this.isFullScreen = true;\r\n } else {\r\n this.isFullScreen = false;\r\n\r\n if (this.preFullscreenState) {\r\n chatWindowEl.style.width = this.preFullscreenState.width || '400px';\r\n chatWindowEl.style.height = this.preFullscreenState.height || '500px';\r\n chatWindowEl.style.left = this.preFullscreenState.left || 'auto';\r\n chatWindowEl.style.top = this.preFullscreenState.top || 'auto';\r\n chatWindowEl.style.transform = 'none';\r\n }\r\n }\r\n }\r\n}\r\n","<app-chat-button\r\n [buttonStyle]=\"buttonStyle\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [unreadCount]=\"unreadCount()\"\r\n [chatIcon]=\"chatIcon ?? ''\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n (toggle)=\"toggleChat()\"\r\n></app-chat-button>\r\n\r\n<app-chat-window\r\n *ngIf=\"isChatOpen()\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [enableDrag]=\"enableDrag\"\r\n [enableResize]=\"enableResize\"\r\n [isFullScreen]=\"isFullScreen\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [moreIcon]=\"moreIcon ?? ''\"\r\n [minimizeIcon]=\"minimizeIcon ?? ''\"\r\n [messages]=\"messages()\"\r\n [isBotTyping]=\"isBotTyping()\"\r\n [isAuthenticated]=\"isAuthenticated()\"\r\n [appSubtitle]=\"appSubtitle ?? ''\"\r\n [welcomeDesc]=\"welcomeDesc ?? ''\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl ?? ''\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [hintText]=\"hintText ?? ''\"\r\n [sendIcon]=\"sendIcon ?? ''\"\r\n [messageError]=\"messageError()\"\r\n [showSuggestionChips]=\"showSuggestionChips()\"\r\n (toggleChat)=\"toggleChat()\"\r\n (toggleFullScreen)=\"toggleFullScreen()\"\r\n (suggestionClick)=\"sendMessage($event)\"\r\n (send)=\"sendMessage($event)\"\r\n (clearMessageError)=\"clearMessageError()\"\r\n (clearChat)=\"clearChat()\"\r\n></app-chat-window>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const DOOHBOT_API_URL = new InjectionToken<string>('DOOHBOT_API_URL');\r\n","/*\r\n * Public API Surface of chatbot\r\n */\r\n\r\n// Main component\r\nexport * from './lib/doohbot.component';\r\n\r\nexport * from './lib/inputs/doohbot-input';\r\nexport * from './lib/model/api-config.model';\r\nexport * from './lib/core/models/user-context.model';\r\nexport * from './lib/core/services/doohbot-api.service';\r\nexport * from './lib/core/services/auth.service';\r\nexport * from './lib/core/services/account.service';\r\nexport * from './lib/constant/constant';\r\nexport * from './lib/model/token';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","environmentprod","retry","map","catchError","i1.HttpService","i3.CryptoHelperService","i1.AccountService","i2.AuthService","i3"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -27,7 +27,6 @@ declare class ThemeService implements OnDestroy {
27
27
  private _activeTheme;
28
28
  activeTheme: i0.Signal<"light-theme" | "dark-theme">;
29
29
  private observer;
30
- private mediaQueryListener;
31
30
  constructor(rendererFactory: RendererFactory2, overlay: OverlayContainer);
32
31
  setTheme(mode: ThemeMode): void;
33
32
  private updateActiveTheme;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aakash58/chatbot",
3
- "version": "1.0.76",
3
+ "version": "1.0.78",
4
4
  "description": "theme overide",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.3.0",