{"version":3,"file":"flow-connect-chat.mjs","sources":["../../../projects/flow-connect-chat/src/lib/services/websocket.service.ts","../../../projects/flow-connect-chat/src/lib/services/chat.service.ts","../../../projects/flow-connect-chat/src/lib/services/theme.service.ts","../../../projects/flow-connect-chat/src/lib/components/chat-bubble/chat-bubble.ts","../../../projects/flow-connect-chat/src/lib/components/chat-bubble/chat-bubble.html","../../../projects/flow-connect-chat/src/lib/components/chat-button/chat-button.ts","../../../projects/flow-connect-chat/src/lib/components/chat-button/chat-button.html","../../../projects/flow-connect-chat/src/lib/components/chat-header/chat-header.ts","../../../projects/flow-connect-chat/src/lib/components/chat-header/chat-header.html","../../../projects/flow-connect-chat/src/lib/components/message-bubble/message-bubble.ts","../../../projects/flow-connect-chat/src/lib/components/message-bubble/message-bubble.html","../../../projects/flow-connect-chat/src/lib/components/chat-messages/chat-messages.ts","../../../projects/flow-connect-chat/src/lib/components/chat-messages/chat-messages.html","../../../projects/flow-connect-chat/src/lib/components/chat-input/chat-input.ts","../../../projects/flow-connect-chat/src/lib/components/chat-input/chat-input.html","../../../projects/flow-connect-chat/src/lib/components/chat-window/chat-window.ts","../../../projects/flow-connect-chat/src/lib/components/chat-window/chat-window.html","../../../projects/flow-connect-chat/src/lib/components/chat-widget/chat-widget.ts","../../../projects/flow-connect-chat/src/lib/components/chat-widget/chat-widget.html","../../../projects/flow-connect-chat/src/custom-element.ts","../../../projects/flow-connect-chat/src/public-api.ts","../../../projects/flow-connect-chat/src/flow-connect-chat.ts"],"sourcesContent":["import { Injectable, inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { ChatConfig } from '../models/chat-config.model';\r\nimport { Message } from '../models/message.model';\r\n\r\nexport type WebSocketConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class WebSocketService {\r\n  private platformId = inject(PLATFORM_ID);\r\n  private socket: Socket | null = null;\r\n  private config: ChatConfig | null = null;\r\n\r\n  // Subjects for reactive streams\r\n  private connectionStatus$ = new BehaviorSubject<WebSocketConnectionStatus>('disconnected');\r\n  private messages$ = new Subject<Message>();\r\n  private errors$ = new Subject<string>();\r\n\r\n  // Reconnection state\r\n  private reconnectAttempts = 0;\r\n  private maxReconnectAttempts = 5;\r\n  private reconnectDelay = 3000;\r\n  private reconnectTimer: any = null;\r\n\r\n  /**\r\n   * Initialize WebSocket connection with configuration\r\n   */\r\n  initialize(config: ChatConfig): void {\r\n    if (!isPlatformBrowser(this.platformId)) {\r\n      console.warn('WebSocket service can only be used in browser environment');\r\n      return;\r\n    }\r\n\r\n    this.config = config;\r\n    this.maxReconnectAttempts = config.connectionOptions?.maxReconnectAttempts ?? 5;\r\n    this.reconnectDelay = config.connectionOptions?.reconnectDelay ?? 3000;\r\n\r\n    this.connect();\r\n  }\r\n\r\n  /**\r\n   * Connect to WebSocket server\r\n   */\r\n  private connect(): void {\r\n    if (!this.config || !isPlatformBrowser(this.platformId)) {\r\n      return;\r\n    }\r\n\r\n    this.connectionStatus$.next('connecting');\r\n\r\n    try {\r\n      // Socket.IO connection options\r\n      const socketOptions: any = {\r\n        transports: ['websocket', 'polling'],\r\n        autoConnect: false,\r\n        forceNew: true\r\n      };\r\n\r\n      // Add authentication if provided\r\n      if (this.config.authToken) {\r\n        socketOptions.auth = {\r\n          token: this.config.authToken\r\n        };\r\n      }\r\n\r\n\r\n\r\n      // Create socket connection\r\n      this.socket = io(this.config.websocketUrl, socketOptions);\r\n\r\n      // Setup event listeners\r\n      this.setupEventListeners();\r\n\r\n      // Connect\r\n      this.socket.connect();\r\n\r\n    } catch (error) {\r\n      console.error('Failed to initialize WebSocket connection:', error);\r\n      this.connectionStatus$.next('error');\r\n      this.errors$.next('Failed to initialize connection');\r\n      this.attemptReconnect();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Setup Socket.IO event listeners\r\n   */\r\n  private setupEventListeners(): void {\r\n    if (!this.socket) return;\r\n\r\n    // Connection events\r\n    this.socket.on('connect', () => {\r\n      console.log('WebSocket connected');\r\n      this.connectionStatus$.next('connected');\r\n      this.reconnectAttempts = 0;\r\n      this.clearReconnectTimer();\r\n    });\r\n\r\n    this.socket.on('disconnect', (reason: string) => {\r\n      console.log('WebSocket disconnected:', reason);\r\n      this.connectionStatus$.next('disconnected');\r\n\r\n      if (this.config?.connectionOptions?.autoReconnect !== false) {\r\n        this.attemptReconnect();\r\n      }\r\n    });\r\n\r\n    this.socket.on('connect_error', (error: Error) => {\r\n      console.error('WebSocket connection error:', error);\r\n      this.connectionStatus$.next('error');\r\n      this.errors$.next(error.message);\r\n      this.attemptReconnect();\r\n    });\r\n\r\n    // Message events\r\n    this.socket.on('message', (data: any) => {\r\n      this.handleIncomingMessage(data);\r\n    });\r\n\r\n\r\n  }\r\n\r\n  /**\r\n   * Handle incoming message from WebSocket\r\n   */\r\n  private handleIncomingMessage(data: any): void {\r\n    try {\r\n      const message: Message = {\r\n        id: data.id || Date.now().toString(),\r\n        content: data.content || data.message || '',\r\n        timestamp: new Date(data.timestamp || data.created_at || Date.now()),\r\n        sender: {\r\n          id: data.sender?.id || data.user_id || 'system',\r\n          name: data.sender?.name || data.sender_name || 'System',\r\n          avatar: data.sender?.avatar || '🤖',\r\n          isOnline: true\r\n        },\r\n        isOwn: false,\r\n        type: 'text'\r\n      };\r\n\r\n      this.messages$.next(message);\r\n    } catch (error) {\r\n      console.error('Error processing incoming message:', error);\r\n    }\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Send message through WebSocket\r\n   */\r\n  sendMessage(content: string, messageType: 'text' | 'file' = 'text'): void {\r\n    if (!this.socket || !this.socket.connected) {\r\n      this.errors$.next('Not connected to server');\r\n      return;\r\n    }\r\n\r\n    const messageData = {\r\n      content,\r\n      message_type: messageType,\r\n      timestamp: new Date().toISOString()\r\n    };\r\n\r\n    this.socket.emit('message', messageData);\r\n  }\r\n\r\n  /**\r\n   * Attempt to reconnect to WebSocket\r\n   */\r\n  private attemptReconnect(): void {\r\n    if (this.reconnectAttempts >= this.maxReconnectAttempts) {\r\n      console.error('Max reconnection attempts reached');\r\n      this.connectionStatus$.next('error');\r\n      return;\r\n    }\r\n\r\n    this.reconnectAttempts++;\r\n    console.log(`Attempting to reconnect (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);\r\n\r\n    this.reconnectTimer = setTimeout(() => {\r\n      this.connect();\r\n    }, this.reconnectDelay);\r\n  }\r\n\r\n  /**\r\n   * Clear reconnection timer\r\n   */\r\n  private clearReconnectTimer(): void {\r\n    if (this.reconnectTimer) {\r\n      clearTimeout(this.reconnectTimer);\r\n      this.reconnectTimer = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Manually trigger reconnection\r\n   */\r\n  reconnect(): void {\r\n    this.reconnectAttempts = 0;\r\n    this.clearReconnectTimer();\r\n    this.disconnect();\r\n\r\n    setTimeout(() => {\r\n      this.connect();\r\n    }, 1000);\r\n  }\r\n\r\n  /**\r\n   * Disconnect from WebSocket\r\n   */\r\n  disconnect(): void {\r\n    this.clearReconnectTimer();\r\n\r\n    if (this.socket) {\r\n      this.socket.disconnect();\r\n      this.socket = null;\r\n    }\r\n\r\n    this.connectionStatus$.next('disconnected');\r\n  }\r\n\r\n  /**\r\n   * Get connection status observable\r\n   */\r\n  getConnectionStatus(): Observable<WebSocketConnectionStatus> {\r\n    return this.connectionStatus$.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Get messages observable\r\n   */\r\n  getMessages(): Observable<Message> {\r\n    return this.messages$.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Get errors observable\r\n   */\r\n  getErrors(): Observable<string> {\r\n    return this.errors$.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Get current connection status\r\n   */\r\n  getCurrentStatus(): WebSocketConnectionStatus {\r\n    return this.connectionStatus$.value;\r\n  }\r\n\r\n  /**\r\n   * Check if connected\r\n   */\r\n  isConnected(): boolean {\r\n    return this.socket?.connected || false;\r\n  }\r\n}\r\n","import { Injectable, signal, computed, inject, OnDestroy } from '@angular/core';\r\nimport { Message, User, ChatConfig } from '../models';\r\nimport { WebSocketService } from './websocket.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nexport type ConnectionStatus = 'online' | 'offline' | 'connecting';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ChatService implements OnDestroy {\r\n  private webSocketService = inject(WebSocketService);\r\n\r\n  private _messages = signal<Message[]>([]);\r\n  private _connectionStatus = signal<ConnectionStatus>('offline');\r\n  private _currentUser = signal<User | null>(null);\r\n  private _isTyping = signal<boolean>(false);\r\n  private _config = signal<ChatConfig | null>(null);\r\n  private _serviceType = signal<'websocket' | 'demo'>('demo');\r\n\r\n  // Subscriptions\r\n  private subscriptions: Subscription[] = [];\r\n\r\n  // Computed signals\r\n  messages = this._messages.asReadonly();\r\n  connectionStatus = this._connectionStatus.asReadonly();\r\n  currentUser = this._currentUser.asReadonly();\r\n  isTyping = this._isTyping.asReadonly();\r\n  config = this._config.asReadonly();\r\n  serviceType = this._serviceType.asReadonly();\r\n\r\n  isConnected = computed(() => this.connectionStatus() === 'online');\r\n  messageCount = computed(() => this.messages().length);\r\n  lastMessage = computed(() => {\r\n    const msgs = this.messages();\r\n    return msgs.length > 0 ? msgs[msgs.length - 1] : null;\r\n  });\r\n\r\n  constructor() {\r\n    this.setupWebSocketSubscriptions();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.forEach(sub => sub.unsubscribe());\r\n  }\r\n\r\n  /**\r\n   * Setup WebSocket subscriptions\r\n   */\r\n  private setupWebSocketSubscriptions(): void {\r\n    // Subscribe to connection status changes\r\n    const statusSub = this.webSocketService.getConnectionStatus().subscribe(status => {\r\n      switch (status) {\r\n        case 'connected':\r\n          this._connectionStatus.set('online');\r\n          break;\r\n        case 'connecting':\r\n          this._connectionStatus.set('connecting');\r\n          break;\r\n        case 'disconnected':\r\n        case 'error':\r\n          this._connectionStatus.set('offline');\r\n          break;\r\n      }\r\n    });\r\n\r\n    // Subscribe to incoming messages\r\n    const messagesSub = this.webSocketService.getMessages().subscribe(message => {\r\n      this._messages.update(messages => [...messages, message]);\r\n    });\r\n\r\n    // Subscribe to errors\r\n    const errorsSub = this.webSocketService.getErrors().subscribe(error => {\r\n      console.error('WebSocket error:', error);\r\n      this.addSystemMessage(`Error de conexión: ${error}`);\r\n    });\r\n\r\n    this.subscriptions.push(statusSub, messagesSub, errorsSub);\r\n  }\r\n\r\n  /**\r\n   * Initialize chat with WebSocket configuration\r\n   */\r\n  initialize(config: ChatConfig): void {\r\n    this._config.set(config);\r\n    this._serviceType.set('websocket');\r\n    this._connectionStatus.set('connecting');\r\n\r\n    // Initialize WebSocket connection\r\n    this.webSocketService.initialize(config);\r\n\r\n    // Add welcome message after a short delay\r\n    setTimeout(() => {\r\n      if (this.connectionStatus() === 'online') {\r\n        this.addSystemMessage('¡Bienvenido al chat! ¿En qué puedo ayudarte?');\r\n      }\r\n    }, 1500);\r\n  }\r\n\r\n  /**\r\n   * Initialize with demo/mock mode (for testing without WebSocket)\r\n   */\r\n  initializeDemo(): void {\r\n    this._serviceType.set('demo');\r\n    this._connectionStatus.set('connecting');\r\n\r\n    // Simulate connection after 1 second\r\n    setTimeout(() => {\r\n      this._connectionStatus.set('online');\r\n      this.addSystemMessage('¡Bienvenido al chat demo! ¿En qué puedo ayudarte?');\r\n    }, 1000);\r\n  }\r\n\r\n  /**\r\n   * Set the current user\r\n   */\r\n  setCurrentUser(user: User): void {\r\n    this._currentUser.set(user);\r\n  }\r\n\r\n  /**\r\n   * Send a new message\r\n   */\r\n  sendMessage(content: string): void {\r\n    if (!content.trim() || !this.currentUser()) return;\r\n\r\n    const newMessage: Message = {\r\n      id: this.generateId(),\r\n      content: content.trim(),\r\n      timestamp: new Date(),\r\n      sender: this.currentUser()!,\r\n      type: 'text',\r\n      isOwn: true,\r\n      status: 'sending'\r\n    };\r\n\r\n    // Add message to local state immediately\r\n    this._messages.update(messages => [...messages, newMessage]);\r\n\r\n    // Send through appropriate service based on configuration\r\n    const serviceType = this._serviceType();\r\n\r\n    if (serviceType === 'websocket' && this.webSocketService.isConnected()) {\r\n      // Send through WebSocket\r\n      this.webSocketService.sendMessage(content);\r\n      setTimeout(() => {\r\n        this.updateMessageStatus(newMessage.id, 'sent');\r\n      }, 500);\r\n    } else {\r\n      // Simulate bot response in demo mode\r\n      this.simulateBotResponse(content);\r\n      this.updateMessageStatus(newMessage.id, 'sent');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add a system message\r\n   */\r\n  private addSystemMessage(content: string): void {\r\n    const systemUser: User = {\r\n      id: 'system',\r\n      name: 'Sistema',\r\n      avatar: '🤖'\r\n    };\r\n\r\n    const systemMessage: Message = {\r\n      id: this.generateId(),\r\n      content,\r\n      timestamp: new Date(),\r\n      sender: systemUser,\r\n      type: 'text',\r\n      isOwn: false\r\n    };\r\n\r\n    this._messages.update(messages => [...messages, systemMessage]);\r\n  }\r\n\r\n  /**\r\n   * Update message status\r\n   */\r\n  private updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'error'): void {\r\n    this._messages.update(messages =>\r\n      messages.map(msg =>\r\n        msg.id === messageId ? { ...msg, status } : msg\r\n      )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Simulate bot response\r\n   */\r\n  private simulateBotResponse(userMessage: string): void {\r\n    this._isTyping.set(true);\r\n\r\n    const botUser: User = {\r\n      id: 'bot',\r\n      name: 'Asistente',\r\n      avatar: '🤖',\r\n      isOnline: true\r\n    };\r\n\r\n    // Simulate typing delay\r\n    setTimeout(() => {\r\n      this._isTyping.set(false);\r\n\r\n      const responses = [\r\n        `Gracias por tu mensaje: \"${userMessage}\". ¿Hay algo más en lo que pueda ayudarte?`,\r\n        '¡Entendido! Te ayudaré con eso inmediatamente.',\r\n        'Perfecto, estoy procesando tu solicitud...',\r\n        '¡Excelente pregunta! Déjame buscar esa información para ti.',\r\n        'Me complace ayudarte con eso. ¿Necesitas algo más específico?'\r\n      ];\r\n\r\n      const randomResponse = responses[Math.floor(Math.random() * responses.length)];\r\n\r\n      const botMessage: Message = {\r\n        id: this.generateId(),\r\n        content: randomResponse,\r\n        timestamp: new Date(),\r\n        sender: botUser,\r\n        type: 'text',\r\n        isOwn: false\r\n      };\r\n\r\n      this._messages.update(messages => [...messages, botMessage]);\r\n    }, 1500 + Math.random() * 1000); // Random delay between 1.5-2.5 seconds\r\n  }\r\n\r\n  /**\r\n   * Clear all messages\r\n   */\r\n  clearMessages(): void {\r\n    this._messages.set([]);\r\n  }\r\n\r\n  /**\r\n   * Disconnect from chat\r\n   */\r\n  disconnect(): void {\r\n    const serviceType = this._serviceType();\r\n\r\n    if (serviceType === 'websocket') {\r\n      this.webSocketService.disconnect();\r\n    }\r\n\r\n    this._connectionStatus.set('offline');\r\n  }\r\n\r\n  /**\r\n   * Reconnect to chat\r\n   */\r\n  reconnect(): void {\r\n    const serviceType = this._serviceType();\r\n\r\n    if (serviceType === 'websocket' && this.config()) {\r\n      this.webSocketService.reconnect();\r\n    } else {\r\n      // Demo mode reconnection\r\n      this.initializeDemo();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate unique ID\r\n   */\r\n  private generateId(): string {\r\n    return Date.now().toString(36) + Math.random().toString(36).substr(2, 5);\r\n  }\r\n}\r\n","import { Injectable, signal, computed, inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto';\r\nexport type ResolvedTheme = 'light' | 'dark';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n  private platformId = inject(PLATFORM_ID);\r\n\r\n  // Signals para el estado del tema\r\n  private _themeMode = signal<ThemeMode>('auto');\r\n  private _resolvedTheme = signal<ResolvedTheme>('light');\r\n  private _systemPrefersDark = signal<boolean>(false);\r\n\r\n  // Computed properties públicas (exponemos los signals directamente para mejor reactividad)\r\n  themeMode = this._themeMode;\r\n  resolvedTheme = this._resolvedTheme;\r\n  systemPrefersDark = this._systemPrefersDark;\r\n\r\n  // Computed para las clases CSS\r\n  themeClass = computed(() => {\r\n    return this._resolvedTheme() === 'dark' ? 'dark' : '';\r\n  });\r\n\r\n  // Computed para determinar si el toggle está habilitado\r\n  isToggleEnabled = computed(() => {\r\n    return this._themeMode() === 'auto';\r\n  });\r\n\r\n  constructor() {\r\n    this.initializeTheme();\r\n  }\r\n\r\n  /**\r\n   * Inicializar el tema desde localStorage y detectar preferencias del sistema\r\n   */\r\n  private initializeTheme(): void {\r\n    if (!isPlatformBrowser(this.platformId)) {\r\n      return;\r\n    }\r\n\r\n    // Detectar preferencia del sistema\r\n    this.detectSystemTheme();\r\n\r\n    // Escuchar cambios en la preferencia del sistema\r\n    this.watchSystemTheme();\r\n\r\n    // Cargar tema guardado o usar la preferencia del sistema\r\n    this.loadSavedTheme();\r\n  }\r\n\r\n  /**\r\n   * Detectar la preferencia de tema del sistema\r\n   */\r\n  private detectSystemTheme(): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n      this._systemPrefersDark.set(prefersDark);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Escuchar cambios en la preferencia del sistema\r\n   */\r\n  private watchSystemTheme(): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n      mediaQuery.addEventListener('change', (e) => {\r\n        this._systemPrefersDark.set(e.matches);\r\n        this.updateResolvedTheme();\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Cargar el tema guardado desde localStorage\r\n   */\r\n  private loadSavedTheme(): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      const savedTheme = localStorage.getItem('flow-chat-theme') as ResolvedTheme | null;\r\n      if (savedTheme && (savedTheme === 'light' || savedTheme === 'dark')) {\r\n        this._resolvedTheme.set(savedTheme);\r\n      } else {\r\n        this.updateResolvedTheme();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Actualizar el tema resuelto basado en el modo actual\r\n   */\r\n  private updateResolvedTheme(): void {\r\n    const mode = this._themeMode();\r\n\r\n    switch (mode) {\r\n      case 'light':\r\n        this._resolvedTheme.set('light');\r\n        break;\r\n      case 'dark':\r\n        this._resolvedTheme.set('dark');\r\n        break;\r\n      case 'auto':\r\n        const systemTheme = this._systemPrefersDark() ? 'dark' : 'light';\r\n        this._resolvedTheme.set(systemTheme);\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Establecer el modo de tema\r\n   */\r\n  setThemeMode(mode: ThemeMode): void {\r\n    console.log('ThemeService: Setting theme mode to', mode);\r\n    this._themeMode.set(mode);\r\n    this.updateResolvedTheme();\r\n  }\r\n\r\n  /**\r\n   * Establecer directamente el tema resuelto (solo cuando el modo es 'auto')\r\n   */\r\n  setResolvedTheme(theme: ResolvedTheme): void {\r\n    if (this._themeMode() === 'auto') {\r\n      console.log('ThemeService: Setting resolved theme to', theme);\r\n      this._resolvedTheme.set(theme);\r\n      this.saveTheme(theme);\r\n    } else {\r\n      console.warn('ThemeService: Cannot set resolved theme when mode is not auto');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Alternar entre light y dark (solo cuando el modo es 'auto')\r\n   */\r\n  toggleTheme(): void {\r\n    if (this._themeMode() !== 'auto') {\r\n      console.warn('ThemeService: Theme toggle is disabled when mode is not auto');\r\n      return;\r\n    }\r\n\r\n    const newTheme: ResolvedTheme = this._resolvedTheme() === 'light' ? 'dark' : 'light';\r\n    console.log('ThemeService: Toggling theme from', this._resolvedTheme(), 'to', newTheme);\r\n\r\n    this.setResolvedTheme(newTheme);\r\n  }\r\n\r\n  /**\r\n   * Guardar el tema en localStorage\r\n   */\r\n  private saveTheme(theme: ResolvedTheme): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      localStorage.setItem('flow-chat-theme', theme);\r\n      console.log('ThemeService: Saved theme to localStorage:', theme);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resetear al tema del sistema\r\n   */\r\n  resetToSystem(): void {\r\n    if (this._themeMode() === 'auto') {\r\n      this.updateResolvedTheme();\r\n      if (isPlatformBrowser(this.platformId)) {\r\n        localStorage.removeItem('flow-chat-theme');\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Obtener información de debug del servicio\r\n   */\r\n  getDebugInfo() {\r\n    return {\r\n      themeMode: this._themeMode(),\r\n      resolvedTheme: this._resolvedTheme(),\r\n      systemPrefersDark: this._systemPrefersDark(),\r\n      themeClass: this.themeClass(),\r\n      isToggleEnabled: this.isToggleEnabled()\r\n    };\r\n  }\r\n}\r\n","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'lib-chat-bubble',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './chat-bubble.html',\r\n  styles: []\r\n})\r\nexport class ChatBubble {\r\n  title = input<string>('Chat');\r\n  messageCount = input<number>(0);\r\n\r\n  toggle = output<void>();\r\n\r\n  onToggle() {\r\n    this.toggle.emit();\r\n  }\r\n}\r\n","<button\r\n  (click)=\"onToggle()\"\r\n  [attr.aria-label]=\"'Abrir ' + title()\"\r\n  class=\"group relative w-14 h-14 bg-blue-500 hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-700\r\n         text-white rounded-full shadow-lg hover:shadow-xl transform hover:scale-110\r\n         transition-all duration-300 ease-in-out flex items-center justify-center\r\n         focus:outline-none focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800\">\r\n\r\n  <!-- Chat Icon -->\r\n  <svg class=\"w-6 h-6 transition-transform group-hover:scale-110\"\r\n       fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n          d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\r\n  </svg>\r\n\r\n  <!-- Message Count Badge -->\r\n  @if (messageCount() > 0) {\r\n    <span class=\"absolute -top-2 -right-2 bg-red-500 text-white text-xs font-bold\r\n                 rounded-full h-6 w-6 flex items-center justify-center animate-pulse\">\r\n      {{ messageCount() }}\r\n    </span>\r\n  }\r\n</button>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'lib-chat-button',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './chat-button.html',\r\n  styles: []\r\n})\r\nexport class ChatButton {\r\n  variant = input<'theme' | 'reconnect' | 'clear' | 'close' | 'send'>('theme');\r\n  disabled = input<boolean>(false);\r\n  tooltip = input<string>('');\r\n\r\n  click = output<void>();\r\n\r\n  buttonClass = () => {\r\n    const baseClasses = 'transition-colors focus:outline-none';\r\n\r\n    switch (this.variant()) {\r\n      case 'theme':\r\n      case 'reconnect':\r\n      case 'clear':\r\n        return `${baseClasses} p-2 hover:bg-black hover:bg-opacity-10 rounded-lg`;\r\n      case 'close':\r\n        return `${baseClasses} p-2 hover:bg-red-500 hover:bg-opacity-80 rounded-lg`;\r\n      case 'send':\r\n        return `${baseClasses} w-12 h-12 bg-blue-500 hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-700\r\n               disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-blue-500\r\n               text-white rounded-full flex items-center justify-center\r\n               transform hover:scale-105 active:scale-95 transition-all duration-150\r\n               focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400`;\r\n      default:\r\n        return baseClasses;\r\n    }\r\n  };\r\n\r\n  onClick() {\r\n    if (!this.disabled()) {\r\n      this.click.emit();\r\n    }\r\n  }\r\n}\r\n","<button\r\n  (click)=\"onClick()\"\r\n  [class]=\"buttonClass()\"\r\n  [title]=\"tooltip()\"\r\n  [disabled]=\"disabled()\">\r\n  <ng-content></ng-content>\r\n</button>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChatButton } from '../chat-button/chat-button';\r\n\r\n@Component({\r\n  selector: 'lib-chat-header',\r\n  standalone: true,\r\n  imports: [CommonModule, ChatButton],\r\n  templateUrl: './chat-header.html',\r\n  styles: []\r\n})\r\nexport class ChatHeader {\r\n  title = input<string>('Chat');\r\n  statusText = input<string>('');\r\n  statusIndicatorClass = input<string>('');\r\n  currentTheme = input<'light' | 'dark'>('light');\r\n  showThemeToggle = input<boolean>(false);\r\n  showReconnect = input<boolean>(false);\r\n  showCloseButton = input<boolean>(false);\r\n\r\n  themeToggle = output<void>();\r\n  reconnect = output<void>();\r\n  clearMessages = output<void>();\r\n  close = output<void>();\r\n\r\n  onThemeToggle() {\r\n    this.themeToggle.emit();\r\n  }\r\n\r\n  onReconnect() {\r\n    this.reconnect.emit();\r\n  }\r\n\r\n  onClearMessages() {\r\n    this.clearMessages.emit();\r\n  }\r\n\r\n  onClose() {\r\n    this.close.emit();\r\n  }\r\n}\r\n","<div class=\"bg-gradient-to-r from-blue-500 to-blue-600 dark:from-blue-600 dark:to-blue-700\r\n            text-white p-4 flex items-center justify-between\">\r\n  <div class=\"flex items-center space-x-3\">\r\n    <!-- Avatar del Sistema -->\r\n    <div class=\"w-10 h-10 bg-white bg-opacity-20 rounded-full flex items-center justify-center\">\r\n      <svg class=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n              d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\r\n      </svg>\r\n    </div>\r\n\r\n    <div>\r\n      <h3 class=\"font-semibold text-lg\">{{ title() }}</h3>\r\n      <div class=\"flex items-center space-x-2 text-sm opacity-90\">\r\n        <div [class]=\"statusIndicatorClass()\"></div>\r\n        <span>{{ statusText() }}</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"flex items-center space-x-2\">\r\n    <!-- Theme Toggle Button -->\r\n    @if (showThemeToggle()) {\r\n      <lib-chat-button\r\n        variant=\"theme\"\r\n        tooltip=\"Cambiar tema\"\r\n        (click)=\"onThemeToggle()\">\r\n        @if (currentTheme() === 'light') {\r\n          <!-- Moon Icon for Dark Mode -->\r\n          <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n                  d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\r\n          </svg>\r\n        } @else {\r\n          <!-- Sun Icon for Light Mode -->\r\n          <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n                  d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\" />\r\n          </svg>\r\n        }\r\n      </lib-chat-button>\r\n    }\r\n\r\n    <!-- Reconnect Button -->\r\n    @if (showReconnect()) {\r\n      <lib-chat-button\r\n        variant=\"reconnect\"\r\n        tooltip=\"Reconectar\"\r\n        (click)=\"onReconnect()\">\r\n        <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n                d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n        </svg>\r\n      </lib-chat-button>\r\n    }\r\n\r\n    <!-- Clear Messages Button -->\r\n    <lib-chat-button\r\n      variant=\"clear\"\r\n      tooltip=\"Limpiar chat\"\r\n      (click)=\"onClearMessages()\">\r\n      <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n              d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\r\n      </svg>\r\n    </lib-chat-button>\r\n\r\n    <!-- Close Button -->\r\n    @if (showCloseButton()) {\r\n      <lib-chat-button\r\n        variant=\"close\"\r\n        tooltip=\"Cerrar chat\"\r\n        (click)=\"onClose()\">\r\n        <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\r\n        </svg>\r\n      </lib-chat-button>\r\n    }\r\n  </div>\r\n</div>\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Message } from '../../models';\r\n\r\n@Component({\r\n  selector: 'lib-message-bubble',\r\n  imports: [CommonModule],\r\n  templateUrl: './message-bubble.html',\r\n  styleUrls: ['./message-bubble.scss']\r\n})\r\nexport class MessageBubble {\r\n\r\n  message = input.required<Message>();\r\n  theme = input<'light' | 'dark' | 'auto' >('light');\r\n\r\n  // Computed signals for formatting\r\n  formattedTime = computed(() => {\r\n    const msg = this.message();\r\n    if (!msg?.timestamp) return '';\r\n    return new Intl.DateTimeFormat('es-ES', {\r\n      hour: '2-digit',\r\n      minute: '2-digit'\r\n    }).format(msg.timestamp);\r\n  });\r\n\r\n  bubbleClass = computed(() => {\r\n    const baseClasses = ['mb-4', 'animate-fade-in'];\r\n    \r\n    // Apply theme class\r\n    const theme = this.theme();\r\n    if (theme === 'dark') {\r\n      baseClasses.push('dark');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  // Computed classes for message content (bot/other messages)\r\n  otherMessageClass = computed(() => {\r\n    const theme = this.theme();\r\n    const baseClasses = [\r\n      'rounded-2xl', 'rounded-tl-sm', 'px-4', 'py-3', 'shadow-sm', 'border'\r\n    ];\r\n    \r\n    if (theme === 'dark') {\r\n      baseClasses.push('bg-gray-700', 'text-gray-100', 'border-gray-600');\r\n    } else {\r\n      baseClasses.push('bg-white', 'text-gray-900', 'border-gray-200');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  // Computed classes for own messages\r\n  ownMessageClass = computed(() => {\r\n    const theme = this.theme();\r\n    const baseClasses = [\r\n      'rounded-2xl', 'rounded-br-sm', 'px-4', 'py-3', 'shadow-sm', 'text-white'\r\n    ];\r\n    \r\n    if (theme === 'dark') {\r\n      baseClasses.push('bg-blue-600');\r\n    } else {\r\n      baseClasses.push('bg-blue-500');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  // Computed classes for text elements\r\n  timeTextClass = computed(() => {\r\n    const theme = this.theme();\r\n    const baseClasses = ['text-xs'];\r\n    \r\n    if (theme === 'dark') {\r\n      baseClasses.push('text-gray-400');\r\n    } else {\r\n      baseClasses.push('text-gray-500');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  senderNameClass = computed(() => {\r\n    const theme = this.theme();\r\n    const baseClasses = ['text-xs'];\r\n    \r\n    if (theme === 'dark') {\r\n      baseClasses.push('text-gray-400');\r\n    } else {\r\n      baseClasses.push('text-gray-500');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  separatorClass = computed(() => {\r\n    const theme = this.theme();\r\n    const baseClasses = ['text-xs'];\r\n    \r\n    if (theme === 'dark') {\r\n      baseClasses.push('text-gray-500');\r\n    } else {\r\n      baseClasses.push('text-gray-400');\r\n    }\r\n    \r\n    return baseClasses.join(' ');\r\n  });\r\n  \r\n  getInitials(name: string): string {\r\n    return name\r\n      .split(' ')\r\n      .map(word => word[0])\r\n      .join('')\r\n      .toUpperCase()\r\n      .substring(0, 2);\r\n  }\r\n}\r\n","<div [class]=\"bubbleClass()\">\r\n  <!-- Bot/Other User Message -->\r\n  @if (message() && !message().isOwn) {\r\n    <div class=\"flex items-start space-x-3 max-w-xs lg:max-w-sm\">\r\n      <!-- Avatar -->\r\n      <div class=\"flex-shrink-0\">\r\n        @if (message().sender.avatar) {\r\n          <img [src]=\"message().sender.avatar\" \r\n               [alt]=\"message().sender.name\" \r\n               class=\"w-8 h-8 rounded-full object-cover border-2 border-white shadow-sm\">\r\n        } @else {\r\n          <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-full \r\n                      flex items-center justify-center text-white text-sm font-semibold shadow-sm\">\r\n            {{ getInitials(message().sender.name) }}\r\n          </div>\r\n        }\r\n      </div>\r\n      \r\n      <!-- Message Content -->\r\n      <div class=\"flex flex-col\">\r\n        <div [class]=\"otherMessageClass()\">\r\n          <p class=\"text-sm leading-relaxed\">{{ message().content }}</p>\r\n        </div>\r\n        <div class=\"flex items-center space-x-1 mt-1 px-2\">\r\n          <span [class]=\"senderNameClass()\">{{ message().sender.name }}</span>\r\n          <span [class]=\"separatorClass()\">•</span>\r\n          <span [class]=\"timeTextClass()\">{{ formattedTime() }}</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  }\r\n  \r\n  <!-- Own User Message -->\r\n  @if (message() && message().isOwn) {\r\n    <div class=\"flex items-end justify-end space-x-2 max-w-xs lg:max-w-sm ml-auto\">\r\n      <!-- Message Content -->\r\n      <div class=\"flex flex-col items-end\">\r\n        <div [class]=\"ownMessageClass()\">\r\n          <p class=\"text-sm leading-relaxed\">{{ message().content }}</p>\r\n        </div>\r\n        <div class=\"flex items-center space-x-1 mt-1 px-2\">\r\n          <span class=\"text-xs text-gray-500 dark:text-gray-400\">{{ formattedTime() }}</span>\r\n          @if (message().status) {\r\n            <div class=\"flex items-center\">\r\n              <!-- Message Status Icons -->\r\n              @if (message().status === 'sending') {\r\n                <svg class=\"w-3 h-3 text-gray-400 animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n                  <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n                  <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n                </svg>\r\n              } @else if (message().status === 'sent') {\r\n                <svg class=\"w-3 h-3 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n                </svg>\r\n              } @else if (message().status === 'delivered') {\r\n                <svg class=\"w-3 h-3 text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n                </svg>\r\n              } @else if (message().status === 'read') {\r\n                <div class=\"flex\">\r\n                  <svg class=\"w-3 h-3 text-blue-400 -mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n                  </svg>\r\n                  <svg class=\"w-3 h-3 text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n                  </svg>\r\n                </div>\r\n              } @else if (message().status === 'error') {\r\n                <svg class=\"w-3 h-3 text-red-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\r\n                </svg>\r\n              }\r\n            </div>\r\n          }\r\n        </div>\r\n      </div>\r\n      \r\n      <!-- User Avatar -->\r\n      @if (message().sender.avatar) {\r\n        <img [src]=\"message().sender.avatar\" \r\n             [alt]=\"message().sender.name\" \r\n             class=\"w-8 h-8 rounded-full object-cover border-2 border-blue-200 shadow-sm flex-shrink-0\">\r\n      } @else {\r\n        <div class=\"w-8 h-8 bg-gradient-to-br from-green-500 to-teal-600 rounded-full \r\n                    flex items-center justify-center text-white text-sm font-semibold shadow-sm flex-shrink-0\">\r\n          {{ getInitials(message().sender.name) }}\r\n        </div>\r\n      }\r\n    </div>\r\n  }\r\n</div>","import { Component, input, ElementRef, viewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MessageBubble } from '../message-bubble/message-bubble';\r\nimport { Message } from '../../models';\r\n\r\n@Component({\r\n  selector: 'lib-chat-messages',\r\n  standalone: true,\r\n  imports: [CommonModule, MessageBubble],\r\n  templateUrl: './chat-messages.html',\r\n  styles: [`\r\n    :host {\r\n      display: flex;\r\n      flex-direction: column;\r\n      height: 100%;\r\n      width: 100%;\r\n      min-height: 0;\r\n    }\r\n  `]\r\n})\r\nexport class ChatMessages {\r\n  messages = input<Message[]>([]);\r\n  isTyping = input<boolean>(false);\r\n  theme = input<'light' | 'dark'>('light');\r\n  containerClass = input<string>('');\r\n  emptyStateClass = input<string>('');\r\n  typingIndicatorClass = input<string>('');\r\n\r\n  messagesContainer = viewChild<ElementRef>('messagesContainer');\r\n\r\n  getMessagesContainer() {\r\n    return this.messagesContainer();\r\n  }\r\n}\r\n","<div [class]=\"containerClass()\" class=\"flex-1 w-full h-full\" #messagesContainer>\r\n\r\n  @if (messages().length === 0) {\r\n    <!-- Empty State -->\r\n    <div class=\"flex flex-col items-center justify-center flex-1 text-center py-8\">\r\n      <div class=\"w-16 h-16 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mb-4\">\r\n        <svg class=\"w-8 h-8 text-blue-500 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n                d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\r\n        </svg>\r\n      </div>\r\n      <p [class]=\"emptyStateClass()\">\r\n        ¡Hola! Escribe un mensaje para comenzar la conversación.\r\n      </p>\r\n    </div>\r\n  } @else {\r\n    <!-- Messages List -->\r\n    @for (message of messages(); track message.id) {\r\n      <lib-message-bubble [message]=\"message\" [theme]=\"theme()\" />\r\n    }\r\n  }\r\n\r\n  <!-- Typing Indicator -->\r\n  @if (isTyping()) {\r\n    <div [class]=\"typingIndicatorClass()\">\r\n      <div class=\"flex space-x-1\">\r\n        <div class=\"w-2 h-2 bg-current rounded-full animate-bounce\"></div>\r\n        <div class=\"w-2 h-2 bg-current rounded-full animate-bounce\" style=\"animation-delay: 0.2s\"></div>\r\n        <div class=\"w-2 h-2 bg-current rounded-full animate-bounce\" style=\"animation-delay: 0.4s\"></div>\r\n      </div>\r\n      <span class=\"text-sm italic\">Escribiendo...</span>\r\n    </div>\r\n  }\r\n</div>\r\n","import { Component, input, output, ElementRef, viewChild, computed, signal, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'lib-chat-input',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './chat-input.html',\r\n  styles: []\r\n})\r\nexport class ChatInput {\r\n  message = input<string>('');\r\n  disabled = input<boolean>(false);\r\n  isConnected = input<boolean>(true);\r\n  containerClass = input<string>('');\r\n  inputClass = input<string>('');\r\n\r\n  messageChange = output<string>();\r\n  send = output<string>();\r\n  keyPress = output<KeyboardEvent>();\r\n\r\n  messageInput = viewChild<ElementRef>('messageInput');\r\n\r\n  // Estado interno para el texto del input\r\n  currentMessage = signal<string>('');\r\n\r\n  canSend = computed(() =>\r\n    this.currentMessage().trim().length > 0 && this.isConnected()\r\n  );\r\n\r\n  constructor() {\r\n    // Efecto para sincronizar el mensaje externo con el interno\r\n    effect(() => {\r\n      const externalMessage = this.message();\r\n      this.currentMessage.set(externalMessage);\r\n    });\r\n  }\r\n\r\n  onMessageChange() {\r\n    this.messageChange.emit(this.currentMessage());\r\n  }\r\n\r\n  onKeyPress(event: KeyboardEvent) {\r\n    if (event.key === 'Enter' && !event.shiftKey) {\r\n      event.preventDefault();\r\n      this.onSend();\r\n    }\r\n    this.keyPress.emit(event);\r\n  }\r\n\r\n  onSend() {\r\n    const messageToSend = this.currentMessage().trim();\r\n    if (messageToSend && this.isConnected()) {\r\n      this.send.emit(messageToSend);\r\n    }\r\n  }\r\n\r\n  focusInput() {\r\n    this.messageInput()?.nativeElement?.focus();\r\n  }\r\n}\r\n","<div [class]=\"containerClass()\">\r\n  <div class=\"flex items-center space-x-2\">\r\n    <!-- Message Input -->\r\n    <div class=\"flex-1\">\r\n      <input\r\n        #messageInput\r\n        type=\"text\"\r\n        [(ngModel)]=\"currentMessage\"\r\n        (ngModelChange)=\"onMessageChange()\"\r\n        (keypress)=\"onKeyPress($event)\"\r\n        placeholder=\"Escribe tu mensaje...\"\r\n        [class]=\"inputClass()\"\r\n        autocomplete=\"off\">\r\n    </div>\r\n\r\n    <!-- Send Button -->\r\n    <button\r\n      (click)=\"onSend()\"\r\n      class=\"w-10 h-10 bg-blue-500 hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-700\r\n             text-white rounded-full flex items-center justify-center flex-shrink-0\r\n             transform hover:scale-105 active:scale-95 transition-all duration-150\r\n             focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400\">\r\n\r\n      <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n              d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\r\n      </svg>\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Component, input, output, viewChild, computed } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChatHeader } from '../chat-header/chat-header';\r\nimport { ChatMessages } from '../chat-messages/chat-messages';\r\nimport { ChatInput } from '../chat-input/chat-input';\r\nimport { Message } from '../../models';\r\n\r\n@Component({\r\n  selector: 'lib-chat-window',\r\n  standalone: true,\r\n  imports: [CommonModule, ChatHeader, ChatMessages, ChatInput],\r\n  templateUrl: './chat-window.html',\r\n  styles: [`\r\n    :host {\r\n      display: flex;\r\n      flex-direction: column;\r\n      height: 100%;\r\n      width: 100%;\r\n    }\r\n  `]\r\n})\r\nexport class ChatWindow {\r\n  // Display properties\r\n  title = input<string>('Chat');\r\n  windowClass = input<string>('');\r\n  windowStyle = input<{ [key: string]: string }>({});\r\n\r\n  // Header properties\r\n  statusText = input<string>('');\r\n  statusIndicatorClass = input<string>('');\r\n  currentTheme = input<'light' | 'dark'>('light');\r\n  showThemeToggle = input<boolean>(false);\r\n  showReconnect = input<boolean>(false);\r\n  showCloseButton = input<boolean>(false);\r\n\r\n  // Messages properties\r\n  messages = input<Message[]>([]);\r\n  isTyping = input<boolean>(false);\r\n  messagesContainerClass = input<string>('');\r\n  emptyStateClass = input<string>('');\r\n  typingIndicatorClass = input<string>('');\r\n\r\n  // Input properties\r\n  currentMessage = input<string>('');\r\n  isConnected = input<boolean>(true);\r\n  footerClass = input<string>('');\r\n  inputClass = input<string>('');\r\n  showAsBubble = input<boolean>(true);\r\n\r\n  // Events\r\n  themeToggle = output<void>();\r\n  reconnect = output<void>();\r\n  clearMessages = output<void>();\r\n  close = output<void>();\r\n  messageChange = output<string>();\r\n  send = output<string>();\r\n  keyPress = output<KeyboardEvent>();\r\n\r\n  chatMessages = viewChild(ChatMessages);\r\n  chatInput = viewChild(ChatInput);\r\n\r\n  // Computed property for messages component classes\r\n  messagesComponentClass = computed(() => {\r\n    if (this.showAsBubble()) {\r\n      // En modo burbuja\r\n      return 'flex-1 min-h-0';\r\n    } else {\r\n      // En modo fijo, forzar que ocupe todo el espacio\r\n      return 'flex-1 min-h-0 h-0';\r\n    }\r\n  });\r\n\r\n  onThemeToggle() {\r\n    this.themeToggle.emit();\r\n  }\r\n\r\n  onReconnect() {\r\n    this.reconnect.emit();\r\n  }\r\n\r\n  onClearMessages() {\r\n    this.clearMessages.emit();\r\n  }\r\n\r\n  onClose() {\r\n    this.close.emit();\r\n  }\r\n\r\n  onMessageChange(message: string) {\r\n    this.messageChange.emit(message);\r\n  }\r\n\r\n  onSend(message: string) {\r\n    this.send.emit(message);\r\n  }\r\n\r\n  onKeyPress(event: KeyboardEvent) {\r\n    this.keyPress.emit(event);\r\n  }\r\n\r\n  getMessagesContainer() {\r\n    return this.chatMessages()?.getMessagesContainer();\r\n  }\r\n\r\n  focusInput() {\r\n    this.chatInput()?.focusInput();\r\n  }\r\n}\r\n","<div [class]=\"windowClass()\" [ngStyle]=\"windowStyle()\" class=\"flex flex-col h-full\">\r\n\r\n  <!-- Header -->\r\n  <lib-chat-header\r\n    [title]=\"title()\"\r\n    [statusText]=\"statusText()\"\r\n    [statusIndicatorClass]=\"statusIndicatorClass()\"\r\n    [currentTheme]=\"currentTheme()\"\r\n    [showThemeToggle]=\"showThemeToggle()\"\r\n    [showReconnect]=\"showReconnect()\"\r\n    [showCloseButton]=\"showCloseButton()\"\r\n    (themeToggle)=\"onThemeToggle()\"\r\n    (reconnect)=\"onReconnect()\"\r\n    (clearMessages)=\"onClearMessages()\"\r\n    (close)=\"onClose()\">\r\n  </lib-chat-header>\r\n\r\n  <!-- Messages Area -->\r\n  <lib-chat-messages\r\n    #chatMessages\r\n    [class]=\"messagesComponentClass()\"\r\n    [messages]=\"messages()\"\r\n    [isTyping]=\"isTyping()\"\r\n    [theme]=\"currentTheme()\"\r\n    [containerClass]=\"messagesContainerClass()\"\r\n    [emptyStateClass]=\"emptyStateClass()\"\r\n    [typingIndicatorClass]=\"typingIndicatorClass()\">\r\n  </lib-chat-messages>\r\n\r\n  <!-- Input Area -->\r\n  <lib-chat-input\r\n    #chatInput\r\n    [message]=\"currentMessage()\"\r\n    [isConnected]=\"isConnected()\"\r\n    [containerClass]=\"footerClass()\"\r\n    [inputClass]=\"inputClass()\"\r\n    (messageChange)=\"onMessageChange($event)\"\r\n    (send)=\"onSend($event)\"\r\n    (keyPress)=\"onKeyPress($event)\">\r\n  </lib-chat-input>\r\n</div>\r\n","import { Component, OnInit, signal, computed, ElementRef, AfterViewChecked, inject, effect, PLATFORM_ID, input, viewChild } from '@angular/core';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ChatService, ThemeService } from '../../services';\r\nimport { MessageBubble } from '../message-bubble/message-bubble';\r\nimport { ChatBubble } from '../chat-bubble/chat-bubble';\r\nimport { ChatButton } from '../chat-button/chat-button';\r\nimport { ChatHeader } from '../chat-header/chat-header';\r\nimport { ChatMessages } from '../chat-messages/chat-messages';\r\nimport { ChatInput } from '../chat-input/chat-input';\r\nimport { ChatWindow } from '../chat-window/chat-window';\r\nimport { User, ChatConfig } from '../../models';\r\n\r\n/**\r\n * Flow Connect Chat Widget\r\n *\r\n * A modern, responsive chat widget for Angular applications with multiple integration modes:\r\n * - Demo Mode: Works out of the box without configuration\r\n * - WebSocket Mode: Custom real-time server integration\r\n *\r\n * @example Basic Usage (Demo Mode)\r\n * ```html\r\n * <ng-chat-widget title=\"Support Chat\"></ng-chat-widget>\r\n * ```\r\n *\r\n * @example WebSocket Mode\r\n * ```html\r\n * <ng-chat-widget\r\n *   title=\"Real-time Chat\"\r\n *   [websocketConfig]=\"websocketConfig\">\r\n * </ng-chat-widget>\r\n * ```\r\n *\r\n * @example Embedded Mode\r\n * ```html\r\n * <ng-chat-widget\r\n *   title=\"Customer Service\"\r\n *   [showAsBubble]=\"false\"\r\n *   width=\"400px\"\r\n *   height=\"600px\">\r\n * </ng-chat-widget>\r\n * ```\r\n */\r\n@Component({\r\n  selector: 'ng-chat-widget',\r\n  imports: [CommonModule, FormsModule, ChatBubble, ChatWindow],\r\n  templateUrl: './chat-widget.html',\r\n  styleUrls: ['./chat-widget.scss']\r\n})\r\nexport class ChatWidget implements OnInit, AfterViewChecked {\r\n\r\n  /**\r\n   * Widget title displayed in the header\r\n   * @default 'Asistente Virtual'\r\n   */\r\n  title = input<string>('Asistente Virtual');\r\n\r\n  /**\r\n   * Widget position (only applies when showAsBubble is true)\r\n   * @default 'right'\r\n   */\r\n  position = input<'left' | 'right'>('right');\r\n\r\n  /**\r\n   * Current user information\r\n   * @default null\r\n   */\r\n  currentUser = input<User | null>(null);\r\n\r\n  /**\r\n   * Color theme preference\r\n   * - 'light': Force light theme\r\n   * - 'dark': Force dark theme\r\n   * - 'auto': Follow system preference\r\n   * @default 'auto'\r\n   */\r\n  theme = input<'light' | 'dark' | 'auto'>('auto');\r\n\r\n  /**\r\n   * Enable automatic theme switching based on system preference\r\n   * @default true\r\n   */\r\n  autoTheme = input<boolean>(true);\r\n\r\n  /**\r\n   * Display mode: floating bubble or embedded widget\r\n   * - true: Floating chat bubble (bottom corner)\r\n   * - false: Embedded widget (inline with content)\r\n   * @default true\r\n   */\r\n  showAsBubble = input<boolean>(true);\r\n\r\n  /**\r\n   * Custom widget width (CSS value)\r\n   * @example '400px', '50%', '90vw', 'min(400px, 90vw)'\r\n   */\r\n  width = input<string>(''); // Ej: '400px', '25rem', '50%'\r\n  height = input<string>(''); // Ej: '600px', '80vh', '500px'  // Configuration inputs\r\n  websocketConfig = input<ChatConfig | null>(null);\r\n  config = input<ChatConfig | null>(null);\r\n\r\n  messagesContainer = viewChild<ElementRef>('messagesContainer');\r\n  messageInput = viewChild<ElementRef>('messageInput');\r\n\r\n  chatService = inject(ChatService);\r\n  themeService = inject(ThemeService);\r\n  platformId = inject(PLATFORM_ID);\r\n  private shouldScrollToBottom = false;\r\n\r\n  // Local state\r\n  isOpen = signal(false);\r\n  isInitiallyOpen = signal(false);\r\n  newMessage = signal('');\r\n  isMobile = signal(false);\r\n\r\n  // Signal para forzar re-renderizado cuando cambia el tema\r\n  private forceUpdate = signal(0);\r\n  private lastToggleTime = 0;\r\n  private lastCloseTime = 0;\r\n\r\n  // Computed properties\r\n  messages = this.chatService.messages;\r\n  connectionStatus = this.chatService.connectionStatus;\r\n  isTyping = this.chatService.isTyping;\r\n  messageCount = this.chatService.messageCount;\r\n\r\n  containerClass = computed(() => {\r\n    // Forzar reactividad\r\n    this.forceUpdate();\r\n\r\n    const baseClasses: string[] = [];\r\n\r\n    // Aplicar tema al contenedor usando ThemeService\r\n    const themeClass = this.themeService.themeClass();\r\n    if (themeClass) {\r\n      baseClasses.push(themeClass);\r\n    }\r\n\r\n    // Agregar clase para identificar cuando está abierto\r\n    if (this.isOpen()) {\r\n      baseClasses.push('chat-open');\r\n    }\r\n\r\n    // Comportamiento diferente según showAsBubble\r\n    if (!this.showAsBubble()) {\r\n      // Modo integrado: el componente se adapta completamente al contenedor padre\r\n      baseClasses.push('relative', 'w-full', 'h-full');\r\n    } else {\r\n      // Modo burbuja: posicionamiento fixed como antes\r\n      baseClasses.push('fixed', 'z-50');\r\n\r\n      // Solo aplicar inset-0 en móviles cuando el chat esté ABIERTO y se muestre como burbuja\r\n      if (this.isMobile() && this.isOpen()) {\r\n        baseClasses.push('inset-0'); // Pantalla completa cuando está abierto\r\n      } else {\r\n        // Posicionamiento normal para desktop o cuando está cerrado en móviles\r\n        baseClasses.push(this.position() === 'right' ? 'bottom-6 right-6' : 'bottom-6 left-6');\r\n      }\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });  statusText = computed(() => {\r\n    switch (this.connectionStatus()) {\r\n      case 'online': return 'En línea';\r\n      case 'offline': return 'Desconectado';\r\n      case 'connecting': return 'Conectando...';\r\n      default: return 'Desconectado';\r\n    }\r\n  });\r\n\r\n  statusIndicatorClass = computed(() => {\r\n    const baseClasses = 'w-2 h-2 rounded-full';\r\n    const statusClasses = {\r\n      'online': 'bg-green-400 animate-pulse',\r\n      'offline': 'bg-red-400',\r\n      'connecting': 'bg-yellow-400 animate-pulse'\r\n    };\r\n    return `${baseClasses} ${statusClasses[this.connectionStatus()]}`;\r\n  });\r\n\r\n  chatWindowClass = computed(() => {\r\n    // Forzar reactividad\r\n    this.forceUpdate();\r\n\r\n    const baseClasses = [\r\n      'chat-window',\r\n      'flex',\r\n      'flex-col',\r\n      'overflow-hidden'\r\n    ];\r\n\r\n    // Solo agregar animación de slide-up cuando se muestra como burbuja\r\n    if (this.showAsBubble()) {\r\n      baseClasses.push('animate-slide-up');\r\n    }\r\n\r\n    // Apply theme classes (inherit dark class from parent container)\r\n    const theme = this.themeService.resolvedTheme();\r\n    if (theme === 'dark') {\r\n      baseClasses.push('bg-gray-800', 'text-white');\r\n    } else {\r\n      baseClasses.push('bg-white', 'text-gray-900');\r\n    }\r\n\r\n    // Ajustar el tamaño y estilo según el modo de visualización\r\n    if (!this.showAsBubble()) {\r\n      // Modo integrado: ocupa todo el espacio del contenedor padre o usa dimensiones personalizadas\r\n      baseClasses.push('rounded-lg', 'shadow-lg', 'border');\r\n\r\n      // Aplicar dimensiones personalizadas o por defecto\r\n      if (this.width()) {\r\n        // Si se especifica width personalizado, no usar w-full\r\n        baseClasses.push('h-full');\r\n        if (!this.height()) {\r\n          baseClasses.push('min-h-[500px]');\r\n        }\r\n      } else if (this.height()) {\r\n        // Solo height personalizado\r\n        baseClasses.push('w-full');\r\n      } else {\r\n        // Dimensiones por defecto\r\n        baseClasses.push('w-full', 'h-full', 'min-h-[500px]');\r\n      }\r\n\r\n      if (theme === 'dark') {\r\n        baseClasses.push('border-gray-700');\r\n      } else {\r\n        baseClasses.push('border-gray-200');\r\n      }\r\n    } else {\r\n      // Modo burbuja original\r\n      if (this.isMobile()) {\r\n        baseClasses.push('border-none', 'shadow-none', 'h-full', 'w-full');\r\n      } else {\r\n        baseClasses.push('rounded-2xl', 'shadow-2xl', 'border');\r\n\r\n        // Aplicar dimensiones por defecto para burbuja cuando no se especifican\r\n        if (!this.width()) {\r\n          baseClasses.push('w-96');\r\n        }\r\n\r\n        if (theme === 'dark') {\r\n          baseClasses.push('border-gray-700');\r\n        } else {\r\n          baseClasses.push('border-gray-200');\r\n        }\r\n      }\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  chatWindowStyle = computed(() => {\r\n    const style: { [key: string]: string } = {};\r\n\r\n    // Aplicar dimensiones personalizadas\r\n    if (this.width()) {\r\n      style['width'] = this.width();\r\n    }\r\n\r\n    if (this.height()) {\r\n      style['height'] = this.height();\r\n    } else if (this.showAsBubble() && !this.isMobile()) {\r\n      // Aplicar altura por defecto de 90vh cuando está en modo burbuja y no es móvil\r\n      style['height'] = '90vh';\r\n      style['maxHeight'] = '90vh';\r\n      style['minHeight'] = '400px';\r\n    }\r\n\r\n    return style;\r\n  });\r\n\r\n  // finalTheme ahora se maneja a través del ThemeService\r\n\r\n  messagesContainerClass = computed(() => {\r\n    const baseClasses = [\r\n      'messages-container',\r\n      'flex-1',\r\n      'w-full',\r\n      'h-full',\r\n      'overflow-y-auto',\r\n      'space-y-4',\r\n      'scrollbar-thin',\r\n      'min-h-0',\r\n      'p-4'\r\n    ];\r\n\r\n    const theme = this.themeService.resolvedTheme();\r\n    if (theme === 'dark') {\r\n      baseClasses.push('bg-gray-900');\r\n    } else {\r\n      baseClasses.push('bg-gray-50');\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  footerClass = computed(() => {\r\n    const baseClasses = [\r\n      'px-4',\r\n      'py-3',\r\n      'border-t',\r\n      'flex-shrink-0'\r\n    ];\r\n\r\n    const theme = this.themeService.resolvedTheme();\r\n    if (theme === 'dark') {\r\n      baseClasses.push('bg-gray-800', 'border-gray-700');\r\n    } else {\r\n      baseClasses.push('bg-white', 'border-gray-200');\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  inputClass = computed(() => {\r\n    const baseClasses = [\r\n      'w-full', 'px-3', 'py-1.5',\r\n      'border', 'rounded-lg',\r\n      'focus:outline-none', 'focus:ring-2', 'focus:border-transparent',\r\n      'transition-all', 'duration-200',\r\n      'text-sm'\r\n    ];\r\n\r\n    const theme = this.themeService.resolvedTheme();\r\n    if (theme === 'dark') {\r\n      baseClasses.push(\r\n        'bg-gray-700', 'text-gray-100',\r\n        'border-gray-600', 'placeholder-gray-400',\r\n        'focus:ring-blue-400'\r\n      );\r\n    } else {\r\n      baseClasses.push(\r\n        'bg-gray-100', 'text-gray-900',\r\n        'border-gray-300', 'placeholder-gray-500',\r\n        'focus:ring-blue-500'\r\n      );\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  // Computed classes for text elements\r\n  emptyStateTextClass = computed(() => {\r\n    const theme = this.themeService.resolvedTheme();\r\n    const baseClasses = ['text-sm'];\r\n\r\n    if (theme === 'dark') {\r\n      baseClasses.push('text-gray-400');\r\n    } else {\r\n      baseClasses.push('text-gray-500');\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  typingIndicatorClass = computed(() => {\r\n    const theme = this.themeService.resolvedTheme();\r\n    const baseClasses = ['flex', 'items-center', 'space-x-2', 'animate-fade-in'];\r\n\r\n    if (theme === 'dark') {\r\n      baseClasses.push('text-gray-400');\r\n    } else {\r\n      baseClasses.push('text-gray-500');\r\n    }\r\n\r\n    return baseClasses.join(' ');\r\n  });\r\n\r\n  constructor() {\r\n    // Set initial theme mode (only once)\r\n    const initialTheme = this.theme();\r\n    this.themeService.setThemeMode(initialTheme);\r\n\r\n    // Effect to force update when theme changes\r\n    effect(() => {\r\n      this.themeService.resolvedTheme(); // Trigger reactivity\r\n      this.forceUpdate.update(v => v + 1);\r\n    });\r\n\r\n    // Effect to handle initial open state based on showAsBubble\r\n    effect(() => {\r\n      const showBubble = this.showAsBubble();\r\n      if (!showBubble && !this.isInitiallyOpen()) {\r\n        this.isOpen.set(true);\r\n        this.isInitiallyOpen.set(true);\r\n      } else if (showBubble && this.isInitiallyOpen()) {\r\n        this.isOpen.set(false);\r\n        this.isInitiallyOpen.set(false);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    // Set default user if none provided\r\n    const user = this.currentUser();\r\n    let activeUser: User;\r\n\r\n    if (!user) {\r\n      activeUser = {\r\n        id: 'user-' + Date.now(),\r\n        name: 'Usuario',\r\n        isOnline: true\r\n      };\r\n    } else {\r\n      activeUser = user;\r\n    }\r\n\r\n    this.chatService.setCurrentUser(activeUser);\r\n\r\n    // Initialize chat service with configuration\r\n    this.initializeChatService();\r\n\r\n    // Debug: Check chat service state after initialization\r\n    setTimeout(() => {\r\n      console.log('Chat service connection status:', this.connectionStatus());\r\n      console.log('Chat service isConnected:', this.chatService.isConnected());\r\n    }, 100);\r\n\r\n    // El tema se inicializa automáticamente en el ThemeService\r\n\r\n    // Initialize mobile detection\r\n    this.initializeMobileDetection();\r\n  }\r\n\r\n  private initializeChatService(): void {\r\n    const websocketConfig = this.websocketConfig();\r\n\r\n    console.log('initializeChatService - websocketConfig:', websocketConfig);\r\n\r\n    // Verificar si WebSocket tiene configuración válida (URL)\r\n    const hasValidWebSocket = websocketConfig &&\r\n                             websocketConfig.websocketUrl &&\r\n                             websocketConfig.websocketUrl.trim() !== '';\r\n\r\n    console.log('hasValidWebSocket:', hasValidWebSocket);\r\n\r\n    if (hasValidWebSocket) {\r\n      // Initialize with WebSocket configuration\r\n      console.log('Initializing WebSocket mode - Valid config found');\r\n      this.chatService.initialize(websocketConfig);\r\n    } else {\r\n      // Initialize in demo mode\r\n      console.log('Initializing Demo mode - No valid config found');\r\n      this.chatService.initializeDemo();\r\n    }\r\n  }\r\n\r\n  // El tema ahora se inicializa automáticamente en el ThemeService\r\n\r\n  private initializeMobileDetection(): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      // Detectar tamaño inicial\r\n      this.checkMobileSize();\r\n\r\n      // Escuchar cambios de tamaño\r\n      window.addEventListener('resize', () => {\r\n        this.checkMobileSize();\r\n      });\r\n    }\r\n  }\r\n\r\n  private checkMobileSize(): void {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      this.isMobile.set(window.innerWidth <= 640);\r\n    }\r\n  }\r\n\r\n  ngAfterViewChecked(): void {\r\n    if (this.shouldScrollToBottom) {\r\n      this.scrollToBottom();\r\n      this.shouldScrollToBottom = false;\r\n    }\r\n  }\r\n\r\n  toggleChat(): void {\r\n    this.isOpen.update(open => !open);\r\n\r\n    if (this.isOpen()) {\r\n      setTimeout(() => {\r\n        this.messageInput()?.nativeElement?.focus();\r\n        this.scrollToBottom();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n  sendMessage(): void {\r\n    const message = this.newMessage().trim();\r\n    if (message && this.chatService.isConnected()) {\r\n      this.chatService.sendMessage(message);\r\n      this.newMessage.set('');\r\n      this.shouldScrollToBottom = true;\r\n    }\r\n  }\r\n\r\n  onKeyPress(event: KeyboardEvent): void {\r\n    if (event.key === 'Enter' && !event.shiftKey) {\r\n      event.preventDefault();\r\n      this.sendMessage();\r\n    }\r\n  }\r\n\r\n  onEnterPress(event: KeyboardEvent): void {\r\n    if (event.key === 'Enter' && !event.shiftKey) {\r\n      event.preventDefault();\r\n      this.sendMessage();\r\n    }\r\n  }\r\n\r\n  private scrollToBottom(): void {\r\n    const messagesContainer = this.messagesContainer();\r\n    if (messagesContainer?.nativeElement) {\r\n      const container = messagesContainer.nativeElement;\r\n      container.scrollTop = container.scrollHeight;\r\n    }\r\n  }\r\n\r\n  clearMessages(): void {\r\n    this.chatService.clearMessages();\r\n  }\r\n\r\n  closeChat(): void {\r\n    const now = Date.now();\r\n    if (now - this.lastCloseTime < 100) {\r\n      return;\r\n    }\r\n    this.lastCloseTime = now;\r\n\r\n    this.isOpen.set(false);\r\n  }\r\n\r\n  reconnect(): void {\r\n    this.chatService.reconnect();\r\n  }\r\n\r\n  toggleTheme(): void {\r\n    const now = Date.now();\r\n    if (now - this.lastToggleTime < 100) {\r\n      return;\r\n    }\r\n    this.lastToggleTime = now;\r\n\r\n    this.themeService.toggleTheme();\r\n  }  onSendMessage(message: string): void {\r\n    if (message.trim() && this.chatService.isConnected()) {\r\n      this.chatService.sendMessage(message);\r\n      this.newMessage.set(''); // Limpiar el mensaje después de enviarlo\r\n      this.shouldScrollToBottom = true;\r\n    }\r\n  }\r\n\r\n}\r\n","<div [class]=\"containerClass()\" [attr.data-theme]=\"themeService.resolvedTheme()\">\r\n  <!-- Chat Toggle Button (Floating Action Button) -->\r\n  @if (showAsBubble() && !isOpen()) {\r\n    <lib-chat-bubble\r\n      (toggle)=\"toggleChat()\"\r\n      [title]=\"title()\"\r\n      [messageCount]=\"messageCount()\">\r\n    </lib-chat-bubble>\r\n  }\r\n\r\n  <!-- Chat Window -->\r\n  @if (isOpen() || !showAsBubble()) {\r\n    <lib-chat-window\r\n      #chatWindow\r\n      [title]=\"title()\"\r\n      [windowClass]=\"chatWindowClass()\"\r\n      [windowStyle]=\"chatWindowStyle()\"\r\n      [statusText]=\"statusText()\"\r\n      [statusIndicatorClass]=\"statusIndicatorClass()\"\r\n      [currentTheme]=\"themeService.resolvedTheme()\"\r\n      [showThemeToggle]=\"themeService.isToggleEnabled()\"\r\n      [showReconnect]=\"connectionStatus() === 'offline'\"\r\n      [showCloseButton]=\"showAsBubble()\"\r\n      [showAsBubble]=\"showAsBubble()\"\r\n      [messages]=\"messages()\"\r\n      [isTyping]=\"isTyping()\"\r\n      [messagesContainerClass]=\"messagesContainerClass()\"\r\n      [emptyStateClass]=\"emptyStateTextClass()\"\r\n      [typingIndicatorClass]=\"typingIndicatorClass()\"\r\n      [currentMessage]=\"newMessage()\"\r\n      [isConnected]=\"chatService.isConnected()\"\r\n      [footerClass]=\"footerClass()\"\r\n      [inputClass]=\"inputClass()\"\r\n      (themeToggle)=\"toggleTheme()\"\r\n      (reconnect)=\"reconnect()\"\r\n      (clearMessages)=\"clearMessages()\"\r\n      (close)=\"closeChat()\"\r\n      (messageChange)=\"newMessage.set($event)\"\r\n      (send)=\"onSendMessage($event)\"\r\n      (keyPress)=\"onKeyPress($event)\">\r\n    </lib-chat-window>\r\n  }\r\n</div>\r\n","/**\r\n * @fileoverview Custom Element Bootstrap for Flow Connect Chat\r\n * @description Web Component implementation using Angular Elements\r\n * @version 1.4.0\r\n * @author FlowConnect IA\r\n */\r\n\r\nimport { Injector } from '@angular/core';\r\nimport { createCustomElement } from '@angular/elements';\r\nimport { ChatWidget } from './lib/components/chat-widget/chat-widget';\r\n\r\n/**\r\n * Bootstrap function to initialize the Web Component\r\n */\r\nfunction bootstrap(): void {\r\n  try {\r\n    // Create a minimal injector for the custom element\r\n    const injector = Injector.create({\r\n      providers: []\r\n    });\r\n\r\n    // Create the custom element\r\n    const chatElement = createCustomElement(ChatWidget, { injector });\r\n\r\n    // Define the custom element in the browser\r\n    if (!customElements.get('flow-connect-chat')) {\r\n      customElements.define('flow-connect-chat', chatElement);\r\n      console.log('✅ Flow Connect Chat Web Component registered successfully');\r\n    }\r\n\r\n    // Notify that the component is ready\r\n    window.dispatchEvent(new CustomEvent('flow-connect-chat-ready', {\r\n      detail: {\r\n        version: '1.4.0',\r\n        timestamp: new Date().toISOString()\r\n      }\r\n    }));\r\n\r\n  } catch (error) {\r\n    console.error('❌ Error bootstrapping Flow Connect Chat Web Component:', error);\r\n    throw error;\r\n  }\r\n}\r\n\r\n// Auto-bootstrap when script loads\r\nif (typeof window !== 'undefined') {\r\n  // Check if DOM is ready\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', bootstrap);\r\n  } else {\r\n    bootstrap();\r\n  }\r\n}\r\n\r\n// Export bootstrap function for manual initialization if needed\r\nexport { bootstrap };\r\n\r\n// Re-export the main component and types for TypeScript consumers\r\nexport { ChatWidget } from './lib/components/chat-widget/chat-widget';\r\nexport type {\r\n  ChatConfig,\r\n  ConnectionOptions,\r\n  ChatMessage as WebSocketMessage\r\n} from './lib/models/chat-config.model';\r\nexport type {\r\n  User,\r\n  UserRole,\r\n  UserStatus\r\n} from './lib/models/user.model';\r\nexport type {\r\n  Message,\r\n  MessageType,\r\n  MessageStatus,\r\n  MessageAttachment\r\n} from './lib/models/message.model';\r\nexport type {\r\n  ChatWidgetConfig,\r\n  ChatWidgetEvents,\r\n  ChatPosition,\r\n  ChatTheme,\r\n  ChatDisplayMode,\r\n  ChatSize,\r\n  ChatColorScheme,\r\n  ChatAnimationConfig,\r\n  CompletechatConfig\r\n} from './lib/models/widget-types';\r\n\r\n/**\r\n * Global type declarations for better TypeScript support\r\n */\r\ndeclare global {\r\n  interface HTMLElementTagNameMap {\r\n    'flow-connect-chat': HTMLElement & {\r\n      title?: string;\r\n      position?: 'left' | 'right';\r\n      theme?: 'light' | 'dark' | 'auto';\r\n      autoTheme?: boolean;\r\n      showAsBubble?: boolean;\r\n      width?: string;\r\n      height?: string;\r\n      websocketConfig?: any;\r\n      config?: any;\r\n      currentUser?: any;\r\n    };\r\n  }\r\n\r\n  interface WindowEventMap {\r\n    'flow-connect-chat-ready': CustomEvent<{\r\n      version: string;\r\n      timestamp: string;\r\n    }>;\r\n  }\r\n\r\n  namespace JSX {\r\n    interface IntrinsicElements {\r\n      'flow-connect-chat': {\r\n        title?: string;\r\n        theme?: 'light' | 'dark' | 'auto';\r\n        position?: 'left' | 'right';\r\n        'show-as-bubble'?: string | boolean;\r\n        'auto-theme'?: string | boolean;\r\n        width?: string;\r\n        height?: string;\r\n        'websocket-config'?: string;\r\n        config?: string;\r\n        'current-user'?: string;\r\n        style?: any;\r\n        className?: string;\r\n        ref?: any;\r\n        [key: string]: any;\r\n      };\r\n    }\r\n  }\r\n}\r\n","/**\r\n * @fileoverview Public API Surface of Flow Connect Chat\r\n * @version 1.2.0\r\n * @author FlowConnect IA\r\n */\r\n\r\n// =====================================================\r\n// MAIN COMPONENT - Primary export for the chat widget\r\n// =====================================================\r\n\r\n/**\r\n * Main Chat Widget Component\r\n *\r\n * @example\r\n * ```typescript\r\n * import { ChatWidget } from '@flowconnect-ia/flow-connect-chat';\r\n *\r\n * @Component({\r\n *   imports: [ChatWidget],\r\n *   template: `<ng-chat-widget title=\"Support\"></ng-chat-widget>`\r\n * })\r\n * ```\r\n */\r\nexport { ChatWidget } from './lib/components/chat-widget/chat-widget';\r\n\r\n// =====================================================\r\n// CONFIGURATION INTERFACES - For TypeScript IntelliSense\r\n// =====================================================\r\n\r\n/**\r\n * Configuration interfaces for chat widget setup\r\n */\r\nexport type {\r\n  ChatConfig,\r\n  ConnectionOptions,\r\n  ChatMessage as WebSocketMessage\r\n} from './lib/models/chat-config.model';\r\n\r\nexport type {\r\n  User,\r\n  UserRole,\r\n  UserStatus\r\n} from './lib/models/user.model';\r\n\r\nexport type {\r\n  Message,\r\n  MessageType,\r\n  MessageStatus,\r\n  MessageAttachment\r\n} from './lib/models/message.model';\r\n\r\nexport type {\r\n  ChatWidgetConfig,\r\n  ChatWidgetEvents,\r\n  ChatPosition,\r\n  ChatTheme,\r\n  ChatDisplayMode,\r\n  ChatSize,\r\n  ChatColorScheme,\r\n  ChatAnimationConfig,\r\n  CompletechatConfig\r\n} from './lib/models/widget-types';\r\n\r\n// =====================================================\r\n// ADDITIONAL COMPONENTS - For advanced usage\r\n// =====================================================\r\n\r\n/**\r\n * Individual components for custom implementations\r\n */\r\nexport { ChatBubble } from './lib/components/chat-bubble/chat-bubble';\r\nexport { ChatButton } from './lib/components/chat-button/chat-button';\r\nexport { ChatWindow } from './lib/components/chat-window/chat-window';\r\nexport { ChatHeader } from './lib/components/chat-header/chat-header';\r\nexport { ChatMessages } from './lib/components/chat-messages/chat-messages';\r\nexport { ChatInput } from './lib/components/chat-input/chat-input';\r\nexport { MessageBubble } from './lib/components/message-bubble/message-bubble';\r\n\r\n// =====================================================\r\n// SERVICES - For advanced integrations\r\n// =====================================================\r\n\r\n/**\r\n * Services for custom chat implementations\r\n */\r\nexport { ChatService } from './lib/services/chat.service';\r\nexport { WebSocketService } from './lib/services/websocket.service';\r\nexport { ThemeService } from './lib/services/theme.service';\r\n\r\n// =====================================================\r\n// VERSION INFORMATION\r\n// =====================================================\r\n\r\n/**\r\n * Library version information\r\n */\r\nexport const VERSION = '1.2.0';\r\n\r\n// =====================================================\r\n// WEB COMPONENT BOOTSTRAP - For standalone usage\r\n// =====================================================\r\n\r\n/**\r\n * Custom Element bootstrap function\r\n * Import this to use the chat widget as a Web Component in any framework\r\n *\r\n * @example\r\n * ```javascript\r\n * import 'flow-connect-chat/custom-element';\r\n * // Now you can use <flow-connect-chat> in your HTML\r\n * ```\r\n */\r\nexport { bootstrap } from './custom-element';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}